Source file mehari_mirage.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
open Mehari.Private
module type IO_RESPONSE = sig
val respond : 'a Mehari.status -> 'a -> Mehari.response Lwt.t
val respond_body : Mehari.body -> Mehari.mime -> Mehari.response Lwt.t
val respond_text : string -> Mehari.response Lwt.t
val respond_gemtext :
?charset:string ->
?lang:string list ->
Mehari.Gemtext.t ->
Mehari.response Lwt.t
val respond_raw :
[ `Body of string | `Full of int * string * string ] ->
Mehari.response Lwt.t
end
module type S = sig
module IO = Lwt
include Mehari.NET with module IO := IO and type addr = Ipaddr.t
include IO_RESPONSE
include Server_impl.S with module IO := IO
end
module Make
(PClock : Mirage_clock.PCLOCK)
(Stack : Tcpip.Stack.V4V6)
(Time : Mirage_time.S) : S with type stack = Stack.t = struct
module IO = Lwt
module Addr = Ipaddr
module RateLimiter = Rate_limiter_impl.Make (PClock) (IO) (Addr)
module Logger =
Logger_impl.Make
(PClock)
(struct
include Lwt
let finally = try_bind
end)
(Addr)
module Router = Router_impl.Make (RateLimiter) (Logger)
module Server = Server_impl.Make (Stack) (Time) (Logger)
type addr = Addr.t
type handler = Router.handler
type middleware = handler -> handler
type route = Router.route
type rate_limiter = RateLimiter.t
type stack = Stack.t
let respond s i = Mehari.response s i |> IO.return
let respond_body b m = Mehari.response_body b m |> IO.return
let respond_text t = Mehari.response_text t |> IO.return
let respond_gemtext ?charset ?lang g =
Mehari.response_gemtext ?charset ?lang g |> IO.return
let respond_raw g = Mehari.response_raw g |> IO.return
let set_log_lvl = Logger.set_level
let logger = Logger.logger
let debug = Logger.debug
let info = Logger.info
let warning = Logger.warning
let error = Logger.error
let no_middleware = Router.no_middleware
let pipeline = Router.pipeline
let router = Router.router
let route = Router.route
let scope = Router.scope
let no_route = Router.no_route
let virtual_hosts = Router.virtual_hosts
let make_rate_limit = RateLimiter.make
let run = Server.run
end