Skip to content

inhabitedtype/ocaml-dispatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

388dfd1 · Apr 2, 2022

History

69 Commits
Apr 28, 2020
Apr 29, 2020
Apr 28, 2020
Jul 1, 2017
Jul 9, 2019
Jul 8, 2017
Feb 6, 2019
Feb 27, 2022
Apr 29, 2020
Apr 29, 2020
Feb 6, 2019

Repository files navigation

ocaml-dispatch

ocaml-dispatch provides a basic mechanism for dispatching a request to a handler based on hierarchical path names conventionally found in URIs. It can be used both for dispatching requests in a server, as well as handing changes to hierarchical fragments in a client-side application.

Build Status

Installation

Install the library and its depenencies via OPAM:

opam install dispatch

Development

To install development versions of the library, pin the package from the root of the repository:

opam pin add .

You can install the latest changes by commiting them to the local git repository and running:

opam upgrade dispatch

For building and running the tests during development, you will need to install the alcotest package and reconfigure the build process to enable tests:

opam install alcotest
dune runtest

Usage

Dispatch is designed to work with whatever sort of handler you care to use, whether it's synchronous, Lwt-based, or Async-based. Here's a simple example of using the Dispatch.DSL module to setup routing for a "Hello, World!" server. The example assumes a Server module and request type, and that handlers should return strings that will be interpreted as the body of the response.

open Dispatch

let hello_handler keys rest request =
  let who = try List.assoc "who" keys with Not_found -> "World" in
  Printf.sprintf "Hello, %s!" who
;;

let handler request =
  let routes = 
    DSL.create 
      [ "/"           , hello_handler
      ; "/hello/:who/", hello_handler
      ] 
  in
  match dispatch routes request.path with
  | Some handler -> handler request
  | None         -> "Not found!"
;;

let _ =
  Server.start handler

License

BSD3, see LICENSE file for its text.