Source file mirage_impl_git.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
open Functoria
open Mirage_impl_time
open Mirage_impl_mclock
open Mirage_impl_pclock
open Mirage_impl_stack
open Mirage_impl_tcp
open Mirage_impl_dns
open Mirage_impl_happy_eyeballs
type git_client = Git_client
let git_client = Type.v Git_client
let git_merge_clients =
let packages = [ package "mimic" ] in
let connect _ _modname = function
| [ a; b ] -> Fmt.str "Lwt.return (Mimic.merge %s %s)" a b
| [ x ] -> Fmt.str "%s.ctx" x
| _ -> Fmt.str "Lwt.return Mimic.empty"
in
impl ~packages ~connect "Mimic.Merge"
(git_client @-> git_client @-> git_client)
let git_happy_eyeballs =
let packages = [ package "mimic-happy-eyeballs" ~min:"0.0.5" ] in
let connect _ modname = function
| [ _stackv4v6; _dns_client; happy_eyeballs ] ->
Fmt.str {ocaml|%s.connect %s|ocaml} modname happy_eyeballs
| _ -> assert false
in
impl ~packages ~connect "Mimic_happy_eyeballs.Make"
(stackv4v6 @-> dns_client @-> happy_eyeballs @-> git_client)
let git_tcp =
let packages =
[ package "git-mirage" ~sublibs:[ "tcp" ] ~min:"3.9.0" ~max:"3.10.0" ]
in
let connect _ modname = function
| [ _tcpv4v6; ctx ] -> Fmt.str {ocaml|%s.connect %s|ocaml} modname ctx
| _ -> assert false
in
impl ~packages ~connect "Git_mirage_tcp.Make"
(tcpv4v6 @-> git_client @-> git_client)
let git_ssh ?authenticator key =
let packages =
[ package "git-mirage" ~sublibs:[ "ssh" ] ~min:"3.9.0" ~max:"3.10.0" ]
in
let connect _ modname = function
| [ _mclock; _tcpv4v6; _time; ctx ] -> (
match authenticator with
| None ->
Fmt.str
{ocaml|%s.connect %s >>= %s.with_optionnal_key ~key:%a|ocaml}
modname ctx modname Key.serialize_call (Key.v key)
| Some authenticator ->
Fmt.str
{ocaml|%s.connect %s >>= %s.with_optionnal_key ?authenticator:%a ~key:%a|ocaml}
modname ctx modname Key.serialize_call (Key.v authenticator)
Key.serialize_call (Key.v key))
| _ -> assert false
in
let keys =
match authenticator with
| Some authenticator -> [ Key.v key; Key.v authenticator ]
| None -> [ Key.v key ]
in
impl ~packages ~connect ~keys "Git_mirage_ssh.Make"
(mclock @-> tcpv4v6 @-> time @-> git_client @-> git_client)
let git_http ?authenticator =
let packages =
[ package "git-mirage" ~sublibs:[ "http" ] ~min:"3.9.0" ~max:"3.10.0" ]
in
let keys =
let keys = [] in
let keys =
match headers with Some -> Key.v headers :: keys | None -> keys
in
let keys =
match authenticator with
| Some authenticator -> Key.v authenticator :: keys
| None -> []
in
keys
in
let connect _ modname = function
| [ _time; _pclock; _tcpv4v6; ctx ] ->
let ppf = function
| None -> ()
| Some ->
Fmt.pf ppf " ?headers:%a" Key.serialize_call (Key.v headers)
in
let serialize_authenticator ppf = function
| None -> ()
| Some authenticator ->
Fmt.pf ppf " ?authenticator:%a" Key.serialize_call
(Key.v authenticator)
in
Fmt.str
{ocaml|%s.connect %s >>= fun ctx -> %s.with_optional_tls_config_and_headers%a%a ctx|ocaml}
modname ctx modname serialize_authenticator authenticator
serialize_headers headers
| _ -> assert false
in
impl ~packages ~connect ~keys "Git_mirage_http.Make"
(time @-> pclock @-> tcpv4v6 @-> git_client @-> git_client)