Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mirage/irmin-rpc
RPC client/server for Irmin
https://github.com/mirage/irmin-rpc
capnproto irmin rpc
Last synced: 2 months ago
JSON representation
RPC client/server for Irmin
- Host: GitHub
- URL: https://github.com/mirage/irmin-rpc
- Owner: mirage
- License: isc
- Created: 2018-08-01T23:03:53.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-08-05T00:31:53.000Z (over 3 years ago)
- Last Synced: 2024-05-09T23:25:57.128Z (9 months ago)
- Topics: capnproto, irmin, rpc
- Language: OCaml
- Homepage:
- Size: 223 KB
- Stars: 20
- Watchers: 23
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE.md
Awesome Lists containing this project
README
## irmin-rpc — Cap'N'Proto RPC server for Irmin
[![OCaml-CI Build Status](https://img.shields.io/endpoint?url=https%3A%2F%2Fci.ocamllabs.io%2Fbadge%2Fmirage%2Firmin-rpc%2Fmaster&logo=ocaml)](https://ci.ocamllabs.io/github/mirage/irmin-rpc)
%%VERSION%%
`irmin-rpc` is a Cap'N'Proto RPC server and client for Irmin. It allows for
remote Irmin stores to be easily queried and modified using an API that is very
similar to the native Irmin API.`irmin-rpc` is distributed under the ISC license.
Homepage: https://github.com/mirage/irmin-rpc
## Installation
`irmin-rpc` can be installed with `opam`:
```shell
$ opam pin add irmin-rpc https://github.com/mirage/irmin-rpc.git
$ opam install irmin-rpc
```After that, you will most likely want to install `irmin-rpc-unix` (or
`irmin-rpc-mirage`):```shell
$ opam pin add irmin-rpc-unix https://github.com/mirage/irmin-rpc.git
$ opam install irmin-rpc-unix
```This will also install a tool named `irmin-rpc` which can be used to run an RPC
server from the command line! All that's needed to get an RPC server running is:```shell
$ irmin-rpc --root /path/to/irmin/store
```## Example server
The example below will start a server on `127.0.0.1:9999` and run it until the
process is killed. To run this example execute:```shell
$ dune exec examples/server.exe --secret-key ./key.pem
``````ocaml
open Lwt.Infixmodule Store = Irmin_mem.KV(Irmin.Contents.String)
module Rpc = Irmin_rpc_unix.Make(Store)let main =
Store.Repo.v (Irmin_mem.config ()) >>= fun repo ->
Rpc.Server.create ~secret_key:`Ephemeral (`TCP ("127.0.0.1", 9999)) repo >>= fun server ->
Printf.printf "Serving on: %s\n" (Uri.to_string (Rpc.Server.uri server));
Rpc.Server.run serverlet () = Lwt_main.run main
```## Example client
This example shows how to connect to the server using the provided client. To
run this example execute:```shell
$ dune exec examples/client.exe
``````ocaml
open Lwt.Infixmodule Store = Irmin_mem.KV(Irmin.Contents.String)
module Rpc = Irmin_rpc_unix.Make(Store)(* This was printed when running the server example above *)
let uri = "capnp://sha-256:[email protected]:9999/WUNVqiE4hrUdV6GvTvnKq6yg-8xVvJmILcLlwPUVldo"let main =
Rpc.Client.connect (Uri.of_string uri) >>= fun client ->
Rpc.Client.set client ["abc"] "123" >>= fun _ ->
Rpc.Client.get client ["abc"] >|= function
| Ok res -> assert (res = "123"); print_endline res
| Error _ -> print_endline "Error encountered"let () = Lwt_main.run main
```## Documentation
The documentation and API reference is generated from the source interfaces. It
can be consulted [online][doc] or via `odig doc irmin-rpc`.[doc]: https://mirage.github.io/irmin-rpc/doc
## Tests
In the distribution, sample programs and tests are located in the [`test`](test)
directory. They can be built and run with:dune runtest