Source file mirage_impl_dns.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
open Functoria
open Mirage_impl_time
open Mirage_impl_mclock
open Mirage_impl_pclock
open Mirage_impl_stack
open Mirage_impl_random
type dns_client = Dns_client
let dns_client = Type.v Dns_client
let generic_dns_client timeout nameservers =
let packages =
[ package "dns-client" ~sublibs:[ "mirage" ] ~min:"6.2.0" ~max:"7.0.0" ]
in
let keys =
match (nameservers, timeout) with
| None, None -> []
| None, Some timeout -> [ Key.v timeout ]
| Some nameservers, None -> [ Key.v nameservers ]
| Some nameservers, Some timeout -> [ Key.v nameservers; Key.v timeout ]
in
let connect _info modname = function
| [ _random; _time; _mclock; _pclock; stackv4v6 ] ->
let pp_nameservers ppf = function
| None -> Fmt.string ppf "[]"
| Some nameservers -> Key.serialize_call ppf (Key.v nameservers)
in
let pp_timeout ppf = function
| None -> ()
| Some timeout ->
Fmt.pf ppf "?timeout:%a " Key.serialize_call (Key.v timeout)
in
Fmt.str {ocaml|%s.connect ~nameservers:%a %a%s|ocaml} modname
pp_nameservers nameservers pp_timeout timeout stackv4v6
| _ -> assert false
in
impl ~keys ~packages ~connect "Dns_client_mirage.Make"
(random @-> time @-> mclock @-> pclock @-> stackv4v6 @-> dns_client)