Module Madge_client

Madge — client-side

include module type of Madge
module Request = Madge.Request
module Response = Madge.Response
module Route = Madge.Route
type ('a, 'w, 'r) route = ('a, 'w, 'r) Route.t

Engine

The heart of Madge, where we link routes and requests.

from route to request

val uri : ('a, Uri.t, 'r) Madge.Route.t -> 'a

Easiest way to use a route: transform it into a URI. The 'a parameter corresponds to the function of that route, with Uri.t as return type. For instance, if r has type (int -> float -> 'w, 'w, 'r) route, then uri r will have type int -> float -> Uri.t.

val with_request : ('a, 'w, 'r) Madge.Route.t -> ((module Madge__.Serialisation.JSONABLE with type t = 'r) -> Madge.Request.t -> 'w) -> 'a

Generic way to use a route. Given a route and a continuation, create a request from the route, pass that request to the continuation, and return the resulting value. For instance, uri is simply process route (fun (module _) {uri; _} -> uri).

from request to route

val apply' : ('a, 'w, 'r) Madge.Route.t -> (unit -> 'a) -> Madge.Request.t -> (unit -> 'w) option

Given a route, a controller, and a request, check whether the route matches the request. If so, construct a thunk that calls the controller with the correct arguments. Otherwise, return None.

val apply : ('a, 'w, 'r) Madge.Route.t -> (unit -> 'a) -> Madge.Request.t -> ((module Madge__.Serialisation.JSONABLE with type t = 'r) -> (unit -> 'w) -> 'z) -> (unit -> 'z) option

Given a route, a controller, a request, and a continuation, check whether the route matches. If so, construct a thunk that calls the controller with the correct arguments and passes it to the continuation. Otherwise, return None. For instance, apply' is simply apply route controller request (fun _ f -> f ()).

module type STRINGABLE = sig ... end
module type JSONABLE = sig ... end
module SString : sig ... end
module SUnit : sig ... end
module SStatusCode : sig ... end
module SSlug : sig ... end
module JString : sig ... end
module JUri : sig ... end
module JUnit : sig ... end
module JVoid : sig ... end
module JBool : sig ... end
module JInt : sig ... end
module JFloat : sig ... end
module JOption (A : sig ... end) : sig ... end
module JList (A : sig ... end) : sig ... end
module JPair (A : sig ... end) (B : sig ... end) : sig ... end
module JTriple (A : sig ... end) (B : sig ... end) (C : sig ... end) : sig ... end
module JQuad (A : sig ... end) (B : sig ... end) (C : sig ... end) (D : sig ... end) : sig ... end
module type Internal_endpoints = sig ... end
module type Endpoints = sig ... end
module Make_endpoints (Internal : sig ... end) : sig ... end

Errors

type error =
  1. | Http of {
    1. request : Request.t;
    2. status : Cohttp.Code.status_code;
    3. message : string;
    }
  2. | Server_unreachable of {
    1. request : Request.t;
    2. status : Cohttp.Code.status_code;
    }
  3. | Body_unserialisation of {
    1. body : string;
    2. message : string;
    }
exception Error of error

Endpoints

val call : ?retry:bool -> ('a, ('r, error) Stdlib.result Nes.Lwt.t, 'r) Route.t -> 'a

Follow the route, call the endpoint, get the result and unserialise it, or returns an error.

val call_exn : ?retry:bool -> ('a, 'r Nes.Lwt.t, 'r) Route.t -> 'a

Variant of call that raises Error instead of returning it.

val call_gen : ?retry:bool -> ('a, 'z, 'r) Route.t -> (('r, error) Stdlib.result Nes.Lwt.t -> 'z) -> 'a

Variant of call that immediately receives a continuation taking the promise of a result.

Other

val initialise_batch_route : (Request.t list -> unit Nes.Lwt.t, unit Nes.Lwt.t, Response.t list) route -> unit