-
Notifications
You must be signed in to change notification settings - Fork 0
/
pipe.ml
74 lines (58 loc) · 2.39 KB
/
pipe.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
module Api = Pipe_api.MakeRPC(Capnp_rpc_lwt)
open Capnp_rpc_lwt
module Stream = struct
let local =
let module Stream = Api.Service.Connection.Stream in
Stream.local @@ object
inherit Stream.service
method read_impl _params release_param_caps =
let open Stream.Read in
release_param_caps ();
let response, results = Service.Response.create Results.init_pointer in
Results.data_set results "-> ...";
Service.return response
method write_impl params release_param_caps =
let open Stream.Write in
let data = Params.data_get params in
Eio.traceln "<- %s" data;
release_param_caps ();
let response, _results = Service.Response.create Results.init_pointer in
Service.return response
method close_impl _params release_param_caps =
let open Stream.Close in
release_param_caps ();
let response, _results = Service.Response.create Results.init_pointer in
Service.return response
end
let read t =
let open Api.Client.Connection.Stream.Read in
let request, _params = Capability.Request.create Params.init_pointer in
match Capability.call_for_value t method_id request with
| Ok results -> Ok (Results.data_get results)
| Error e -> Error e
let write t data =
let open Api.Client.Connection.Stream.Write in
let request, params = Capability.Request.create Params.init_pointer in
Params.data_set params data;
Capability.call_for_unit t method_id request
end
module Connection = struct
let local =
let module Connection = Api.Service.Connection in
Connection.local @@ object
inherit Connection.service
method create_impl _params release_param_caps =
let open Connection.Create in
release_param_caps ();
let stream = Stream.local in
Capnp_rpc_lwt.Capability.pp Format.std_formatter stream; Format.print_newline ();
let response, results = Service.Response.create Results.init_pointer in
Results.stream_set results (Some stream);
Capnp_rpc_lwt.Capability.pp Format.std_formatter stream; Format.print_newline ();
Service.return response
end
let create t =
let open Api.Client.Connection.Create in
let request, _params = Capability.Request.create Params.init_pointer in
Capability.call_for_value_exn t method_id request |> Results.stream_get
end