this repo has no description
1open Capnp_rpc
2
3let or_fail = function
4 | Ok v -> v
5 | Error (`Capnp e) -> Fmt.failwith "%a" Capnp_rpc.Error.pp e
6
7let local ~stdin ~stdout ~stderr =
8 let module X = Raw.Service.Session in
9 X.local
10 @@ object
11 inherit X.service
12
13 method stdout_impl _ release_param_caps =
14 let open X.Stdout in
15 release_param_caps ();
16 let s = stdout () in
17 let response, results = Service.Response.create Results.init_pointer in
18 Results.output_set results s;
19 Service.return response
20
21 method stderr_impl _ release_param_caps =
22 let open X.Stderr in
23 release_param_caps ();
24 let s = stderr () in
25 let response, results = Service.Response.create Results.init_pointer in
26 Results.output_set results s;
27 Service.return response
28
29 method stdin_impl params release_param_caps =
30 let open X.Stdin in
31 let data = Params.input_get params in
32 release_param_caps ();
33 stdin data;
34 Service.return_empty ()
35 end
36
37module X = Raw.Client.Session
38
39type t = X.t Capability.t
40
41let stdout t () =
42 let open X.Stdout in
43 let request = Capability.Request.create_no_args () in
44 let result = Capability.call_for_value t method_id request |> or_fail in
45 Results.output_get result
46
47let stderr t () =
48 let open X.Stderr in
49 let request = Capability.Request.create_no_args () in
50 let result = Capability.call_for_value t method_id request |> or_fail in
51 Results.output_get result
52
53let stdin t input =
54 let open X.Stdin in
55 let request, params = Capability.Request.create Params.init_pointer in
56 Params.input_set params input;
57 Capability.call_for_unit t method_id request |> or_fail