Source file mehari_eio.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
module Addr = Common.Addr
module Direct = Common.Direct
module IO = Common.Direct
module type S =
Mehari.NET
with module IO := Direct
and type addr = Eio.Net.Ipaddr.v4v6
and type clock := Eio.Time.clock
module Clock = struct
type t = Eio.Time.clock
let ps_count_in_s = 1_000_000_000_000L
let now_d_ps clock =
let ns, secs = clock#now |> Float.modf in
let ns = Int64.of_float (ns *. 1000.) in
let secs = Int64.of_float secs in
let days = Int64.div secs 86_400L in
let rem_s = Int64.rem secs 86_400L in
let frac_ps = Int64.mul ns 1000L in
let rem_ps = Int64.mul rem_s ps_count_in_s in
(Int64.to_int days, Int64.add rem_ps frac_ps)
end
module RateLimiter =
Mehari.Private.Rate_limiter_impl.Make (Clock) (Direct) (Addr)
module Logger =
Mehari.Private.Logger_impl.Make
(Clock)
(struct
include Direct
let finally t f r = try f (t ()) with exn -> r exn
end)
(Addr)
module Router = Mehari.Private.Router_impl.Make (RateLimiter) (Logger)
module Server = Server_impl.Make (Logger)
type addr = Addr.t
type handler = Router.handler
type middleware = handler -> handler
type route = Router.route
type rate_limiter = RateLimiter.t
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 response_document = File.response_document
let static = File.static
let run = Server.run