On a quest for agency in Bellairs

Start to clean-up the client code a bit

+1
mvp/ocaml/bellairs.ml
···
include Bellairs_intf
···
include Bellairs_intf
+
module API = API
+1
mvp/ocaml/bellairs.mli
···
include Bellairs_intf.Sigs
···
include Bellairs_intf.Sigs
+
module API = API
-84
mvp/ocaml/client/client.ml
···
open Capnp_rpc.Std
open Eio.Std
-
module API = Schema.Storage.MakeRPC (Capnp_rpc)
-
-
module Storage :
-
Bellairs.Storage
-
with type file = API.Client.File.t Capability.t
-
and type dir = API.Client.Directory.t Capability.t = struct
-
type file = API.Client.File.t Capability.t
-
type dir = API.Client.Directory.t Capability.t
-
type entry = { name : string; file : file }
-
-
let entry r =
-
let name = API.Reader.Directory.Entry.name_get r in
-
let file = API.Reader.Directory.Entry.file_get r in
-
match file with
-
| Some file -> { name; file }
-
| None -> failwith "missing entry.file"
-
-
let list t =
-
let open API.Client.Directory.List in
-
let request = Capability.Request.create_no_args () in
-
let results = Capability.call_for_value_exn t method_id request in
-
let entries = Results.entries_get_list results in
-
List.map entry entries
-
-
let create t name =
-
let open API.Client.Directory.Create in
-
let request, params = Capability.Request.create Params.init_pointer in
-
Params.name_set params name;
-
let results = Capability.call_for_value_exn t method_id request in
-
match Results.file_get results with
-
| Some file -> file
-
| None -> failwith "Storage.create: no file returned"
-
-
let open_ t name =
-
let open API.Client.Directory.Open in
-
let request, params = Capability.Request.create Params.init_pointer in
-
Params.name_set params name;
-
Capability.call_for_caps t method_id request Results.file_get_pipelined
-
-
let delete t name =
-
let open API.Client.Directory.Delete in
-
let request, params = Capability.Request.create Params.init_pointer in
-
Params.name_set params name;
-
let _ = Capability.call_for_value_exn t method_id request in
-
()
-
-
let size t =
-
let open API.Client.File.Size in
-
let request = Capability.Request.create_no_args () in
-
let results = Capability.call_for_value_exn t method_id request in
-
Stdint.Int64.of_uint64 (Results.size_get results)
-
-
let read ?off ?len t =
-
let open API.Client.File.Read in
-
let request, params = Capability.Request.create Params.init_pointer in
-
let () =
-
match off with
-
| None -> ()
-
| Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
-
in
-
let () =
-
match len with
-
| None -> ()
-
| Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
-
in
-
let results = Capability.call_for_value_exn t method_id request in
-
Results.data_get results
-
-
let write ?off ?len t d =
-
let open API.Client.File.Write in
-
let request, params = Capability.Request.create Params.init_pointer in
-
let () =
-
match off with
-
| None -> ()
-
| Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
-
in
-
let () =
-
match len with
-
| None -> ()
-
| Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
-
in
-
Params.data_set params d;
-
Capability.call_for_unit_exn t method_id request
-
end
let connect net uri f =
Switch.run @@ fun sw ->
···
open Capnp_rpc.Std
open Eio.Std
let connect net uri f =
Switch.run @@ fun sw ->
+80
mvp/ocaml/client/storage.ml
···
···
+
open Capnp_rpc
+
open Bellairs
+
+
type file = API.Client.File.t Capability.t
+
type dir = API.Client.Directory.t Capability.t
+
type entry = { name : string; file : file }
+
+
let entry r =
+
let name = API.Reader.Directory.Entry.name_get r in
+
let file = API.Reader.Directory.Entry.file_get r in
+
match file with
+
| Some file -> { name; file }
+
| None -> failwith "missing entry.file"
+
+
let list t =
+
let open API.Client.Directory.List in
+
let request = Capability.Request.create_no_args () in
+
let results = Capability.call_for_value_exn t method_id request in
+
let entries = Results.entries_get_list results in
+
List.map entry entries
+
+
let create t name =
+
let open API.Client.Directory.Create in
+
let request, params = Capability.Request.create Params.init_pointer in
+
Params.name_set params name;
+
let results = Capability.call_for_value_exn t method_id request in
+
match Results.file_get results with
+
| Some file -> file
+
| None -> failwith "Storage.create: no file returned"
+
+
let open_ t name =
+
let open API.Client.Directory.Open in
+
let request, params = Capability.Request.create Params.init_pointer in
+
Params.name_set params name;
+
Capability.call_for_caps t method_id request Results.file_get_pipelined
+
+
let delete t name =
+
let open API.Client.Directory.Delete in
+
let request, params = Capability.Request.create Params.init_pointer in
+
Params.name_set params name;
+
let _ = Capability.call_for_value_exn t method_id request in
+
()
+
+
let size t =
+
let open API.Client.File.Size in
+
let request = Capability.Request.create_no_args () in
+
let results = Capability.call_for_value_exn t method_id request in
+
Stdint.Int64.of_uint64 (Results.size_get results)
+
+
let read ?off ?len t =
+
let open API.Client.File.Read in
+
let request, params = Capability.Request.create Params.init_pointer in
+
let () =
+
match off with
+
| None -> ()
+
| Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
+
in
+
let () =
+
match len with
+
| None -> ()
+
| Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
+
in
+
let results = Capability.call_for_value_exn t method_id request in
+
Results.data_get results
+
+
let write ?off ?len t d =
+
let open API.Client.File.Write in
+
let request, params = Capability.Request.create Params.init_pointer in
+
let () =
+
match off with
+
| None -> ()
+
| Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
+
in
+
let () =
+
match len with
+
| None -> ()
+
| Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
+
in
+
Params.data_set params d;
+
Capability.call_for_unit_exn t method_id request
+7
mvp/ocaml/client/storage.mli
···
···
+
open Capnp_rpc
+
open Bellairs.API.Client
+
+
include
+
Bellairs.Storage
+
with type file = File.t Capability.t
+
and type dir = Directory.t Capability.t
+1 -1
mvp/ocaml/dune
···
(library
(name bellairs)
-
(libraries schema))
···
(library
(name bellairs)
+
(libraries schema capnp-rpc))
mvp/ocaml/server/API.ml mvp/ocaml/API.ml
+2 -1
mvp/ocaml/server/directory.mli
···
-
open Capnp_rpc.Std
val local : Impl.dir -> API.Service.Directory.t Capability.t
···
+
open Capnp_rpc
+
open Bellairs
val local : Impl.dir -> API.Service.Directory.t Capability.t
+1
mvp/ocaml/server/file.ml
···
open Capnp_rpc.Std
let int64_of_uint64 n =
match Stdint.Int64.of_uint64 n with -1L -> None | i -> Some i
···
open Capnp_rpc.Std
+
open Bellairs
let int64_of_uint64 n =
match Stdint.Int64.of_uint64 n with -1L -> None | i -> Some i
+2 -1
mvp/ocaml/server/file.mli
···
-
open Capnp_rpc.Std
val local : Impl.file -> API.Service.File.t Capability.t
···
+
open Capnp_rpc
+
open Bellairs
val local : Impl.file -> API.Service.File.t Capability.t