package caldav

  1. Overview
  2. Docs

Module type Webmachine.SSource

Sourcetype +'a io
Sourcetype 'a result =
  1. | Ok of 'a
  2. | Error of int
Sourcetype ('a, 'body) op = 'body Rd.t -> ('a result * 'body Rd.t) io
Sourcetype 'body provider = ('body, 'body) op
Sourcetype 'body acceptor = (bool, 'body) op
Sourcetype www_authenticate = {
  1. scheme : string;
  2. realm : string;
  3. params : (string * string) list;
}
Sourcetype auth = [
  1. | `Authorized
  2. | `Basic of string
  3. | `Challenge of www_authenticate
  4. | `Redirect of Uri.t
]
Sourcetype property_response = [
  1. | `Ok
  2. | `Infinite_not_allowed
  3. | `Property_forbidden
  4. | `Property_unauthorized
  5. | `Property_not_found
  6. | `Multistatus
]
Sourcetype report_response = [
  1. | `Multistatus
  2. | `Property_not_found
]
Sourcetype collection_created_response = [
  1. | `Created
  2. | `Forbidden
  3. | `Method_not_allowed
  4. | `Conflict
  5. | `Unsupported_media_type
  6. | `Insufficient_storage
]
Sourceval continue : 'a -> ('a, 'body) op

continue a rd is equivalent to IO.return (Ok x, rd)

Sourceval respond : ?body:'body -> int -> ('a, 'body) op

respond ?body n rd is equivalent to IO.return (Error n, { rd with resp_body = body }

Sourceclass virtual 'body resource : object ... end

The resource parent class.

Sourceval to_handler : ?dispatch_path:string -> ?path_info:(string * string) list -> resource:'body resource -> body:'body -> request:Cohttp.Request.t -> unit -> (Cohttp.Code.status_code * Cohttp.Header.t * 'body * string list) io

to_handler ~resource ~body ~request () runs the resource through the HTTP decision diagram given body and request. The result is a tuple that contains the status code, headers and body of the response. The final element of the tuple is a list of decision diagram node names that is useful for debugging.

Sourceval dispatch : ((Dispatch.tag * string) list * Dispatch.typ * (unit -> 'body resource)) list -> body:'body -> request:Cohttp.Request.t -> (Cohttp.Code.status_code * Cohttp.Header.t * 'body * string list) option io

dispatch routes returns a request handler that will iterate through routes and dispatch the request to the first resources that matches the URI path. The form that the individal route entries takes this the following:

(pattern, exact, resource_constructor)

The pattern itself is a list of literal (`Lit) or variable matches (`Var) that the URI path should satify. For example, a route entry that will be associated with a particular user in the system would look like this:

([`Lit, "user"; `Var, "id"], `Exact, user_resource)

This would match a URI path such as "/user/10" but would not match a URI such as "/usr/10/preferences", since the exact component of the route tuple is `Exact.

Sourceval dispatch' : (string * (unit -> 'body resource)) list -> body:'body -> request:Cohttp.Request.t -> (Cohttp.Code.status_code * Cohttp.Header.t * 'body * string list) option io

dispatch' routes ~body ~request works in the same way as dispatch except the user can specify path patterns using a string shorthand. For example, the following route entry:

("/user/:id/*", user_resource)

translates to:

([`Lit, "user"; `Var "id"], `Prefix, user_resource)
OCaml

Innovation. Community. Security.