package vif

  1. Overview
  2. Docs
A simple web framework for OCaml 5

Install

dune-project
 Dependency

Authors

Maintainers

Sources

vif-0.0.1.beta2.tbz
sha256=a16ff3dba7675d237d59188b032052b383ad9e367eb7c570c4e6e78b978b98e5
sha512=ad553f15f33f9f2427b691713f630476fd1f15b4cb61944a401cfb35c29dd3d1d3760b02dd211bddd39b6cf6ccc8ea5d9f88eefc3776611e2a7020242a16b9a9

doc/src/vif.core/vif_middleware.ml.html

Source file vif_middleware.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
module Key = struct
  type 'a t = { name: string }

  let make ~name = { name }
end

module Hmap = Hmap.Make (Key)

type ('socket, 'cfg, 'v) fn =
  'socket Vif_request0.t -> string -> Vif_server.t -> 'cfg -> 'v option

type ('socket, 'cfg, 'v) t =
  | Middleware : ('socket, 'cfg, 'v) fn * 'v Hmap.key -> ('socket, 'cfg, 'v) t

type ('socket, 'cfg) m =
  | [] : ('socket, 'cfg) m
  | ( :: ) : ('socket, 'cfg, 'a) t * ('socket, 'cfg) m -> ('socket, 'cfg) m

type ('socket, 'value, 'a, 'c) ctx = {
    server: Vif_server.t
  ; req0: 'socket Vif_request0.t
  ; target: string
  ; user's_value: 'value
}

let v : type v. name:string -> ('socket, 'cfg, v) fn -> ('socket, 'cfg, v) t =
 fun ~name fn ->
  let key = Hmap.Key.create (Key.make ~name) in
  Middleware (fn, key)

let rec run : type v.
    ('socket, v) m -> ('socket, v, 'a, 'c) ctx -> Hmap.t -> Hmap.t =
 fun lst ctx env ->
  match lst with
  | [] -> env
  | Middleware (fn, key) :: r -> begin
      match fn ctx.req0 ctx.target ctx.server ctx.user's_value with
      | Some value -> run r ctx (Hmap.add key value env)
      | None -> run r ctx env
      | exception _exn -> run r ctx env
    end