package mirage

  1. Overview
  2. Docs
The MirageOS library operating system

Install

dune-project
 Dependency

Authors

Maintainers

Sources

mirage-4.0.0.tbz
sha256=f804161872de6cf20699364f09d03370ed06aafffb12f1d586190832c73a194d
sha512=75c1c1cac4c6f862c0055381c7ced123785193234b40da8a8e238cb289cba1a4494378587c4edf2ed872aee7fbfc756f84087941c1037ac19cbd1733ff6cca6a

doc/src/mirage.impl/mirage_impl_dns.ml.html

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)