···11include Bellairs_intf.Sigs
22+module API = API
-84
mvp/ocaml/client/client.ml
···11open Capnp_rpc.Std
22open Eio.Std
33-module API = Schema.Storage.MakeRPC (Capnp_rpc)
44-55-module Storage :
66- Bellairs.Storage
77- with type file = API.Client.File.t Capability.t
88- and type dir = API.Client.Directory.t Capability.t = struct
99- type file = API.Client.File.t Capability.t
1010- type dir = API.Client.Directory.t Capability.t
1111- type entry = { name : string; file : file }
1212-1313- let entry r =
1414- let name = API.Reader.Directory.Entry.name_get r in
1515- let file = API.Reader.Directory.Entry.file_get r in
1616- match file with
1717- | Some file -> { name; file }
1818- | None -> failwith "missing entry.file"
1919-2020- let list t =
2121- let open API.Client.Directory.List in
2222- let request = Capability.Request.create_no_args () in
2323- let results = Capability.call_for_value_exn t method_id request in
2424- let entries = Results.entries_get_list results in
2525- List.map entry entries
2626-2727- let create t name =
2828- let open API.Client.Directory.Create in
2929- let request, params = Capability.Request.create Params.init_pointer in
3030- Params.name_set params name;
3131- let results = Capability.call_for_value_exn t method_id request in
3232- match Results.file_get results with
3333- | Some file -> file
3434- | None -> failwith "Storage.create: no file returned"
3535-3636- let open_ t name =
3737- let open API.Client.Directory.Open in
3838- let request, params = Capability.Request.create Params.init_pointer in
3939- Params.name_set params name;
4040- Capability.call_for_caps t method_id request Results.file_get_pipelined
4141-4242- let delete t name =
4343- let open API.Client.Directory.Delete in
4444- let request, params = Capability.Request.create Params.init_pointer in
4545- Params.name_set params name;
4646- let _ = Capability.call_for_value_exn t method_id request in
4747- ()
4848-4949- let size t =
5050- let open API.Client.File.Size in
5151- let request = Capability.Request.create_no_args () in
5252- let results = Capability.call_for_value_exn t method_id request in
5353- Stdint.Int64.of_uint64 (Results.size_get results)
5454-5555- let read ?off ?len t =
5656- let open API.Client.File.Read in
5757- let request, params = Capability.Request.create Params.init_pointer in
5858- let () =
5959- match off with
6060- | None -> ()
6161- | Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
6262- in
6363- let () =
6464- match len with
6565- | None -> ()
6666- | Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
6767- in
6868- let results = Capability.call_for_value_exn t method_id request in
6969- Results.data_get results
7070-7171- let write ?off ?len t d =
7272- let open API.Client.File.Write in
7373- let request, params = Capability.Request.create Params.init_pointer in
7474- let () =
7575- match off with
7676- | None -> ()
7777- | Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
7878- in
7979- let () =
8080- match len with
8181- | None -> ()
8282- | Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
8383- in
8484- Params.data_set params d;
8585- Capability.call_for_unit_exn t method_id request
8686-end
873884let connect net uri f =
895 Switch.run @@ fun sw ->
+80
mvp/ocaml/client/storage.ml
···11+open Capnp_rpc
22+open Bellairs
33+44+type file = API.Client.File.t Capability.t
55+type dir = API.Client.Directory.t Capability.t
66+type entry = { name : string; file : file }
77+88+let entry r =
99+ let name = API.Reader.Directory.Entry.name_get r in
1010+ let file = API.Reader.Directory.Entry.file_get r in
1111+ match file with
1212+ | Some file -> { name; file }
1313+ | None -> failwith "missing entry.file"
1414+1515+let list t =
1616+ let open API.Client.Directory.List in
1717+ let request = Capability.Request.create_no_args () in
1818+ let results = Capability.call_for_value_exn t method_id request in
1919+ let entries = Results.entries_get_list results in
2020+ List.map entry entries
2121+2222+let create t name =
2323+ let open API.Client.Directory.Create in
2424+ let request, params = Capability.Request.create Params.init_pointer in
2525+ Params.name_set params name;
2626+ let results = Capability.call_for_value_exn t method_id request in
2727+ match Results.file_get results with
2828+ | Some file -> file
2929+ | None -> failwith "Storage.create: no file returned"
3030+3131+let open_ t name =
3232+ let open API.Client.Directory.Open in
3333+ let request, params = Capability.Request.create Params.init_pointer in
3434+ Params.name_set params name;
3535+ Capability.call_for_caps t method_id request Results.file_get_pipelined
3636+3737+let delete t name =
3838+ let open API.Client.Directory.Delete in
3939+ let request, params = Capability.Request.create Params.init_pointer in
4040+ Params.name_set params name;
4141+ let _ = Capability.call_for_value_exn t method_id request in
4242+ ()
4343+4444+let size t =
4545+ let open API.Client.File.Size in
4646+ let request = Capability.Request.create_no_args () in
4747+ let results = Capability.call_for_value_exn t method_id request in
4848+ Stdint.Int64.of_uint64 (Results.size_get results)
4949+5050+let read ?off ?len t =
5151+ let open API.Client.File.Read in
5252+ let request, params = Capability.Request.create Params.init_pointer in
5353+ let () =
5454+ match off with
5555+ | None -> ()
5656+ | Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
5757+ in
5858+ let () =
5959+ match len with
6060+ | None -> ()
6161+ | Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
6262+ in
6363+ let results = Capability.call_for_value_exn t method_id request in
6464+ Results.data_get results
6565+6666+let write ?off ?len t d =
6767+ let open API.Client.File.Write in
6868+ let request, params = Capability.Request.create Params.init_pointer in
6969+ let () =
7070+ match off with
7171+ | None -> ()
7272+ | Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
7373+ in
7474+ let () =
7575+ match len with
7676+ | None -> ()
7777+ | Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
7878+ in
7979+ Params.data_set params d;
8080+ Capability.call_for_unit_exn t method_id request
+7
mvp/ocaml/client/storage.mli
···11+open Capnp_rpc
22+open Bellairs.API.Client
33+44+include
55+ Bellairs.Storage
66+ with type file = File.t Capability.t
77+ and type dir = Directory.t Capability.t