MARPC - macro-based, boilerplate-free rpc library
This is a simple rpc library inspired by server_fn from the leptos
ecosystem. It allows you to define functions the will be run on a server, but
called from client. The primary usecase is webapps with a rust frontend, but
the library is designed to be easily adapatable and places no restrictions on
transport protocol or serialization format.
[]
= "0.2.0"
Features
- Define functions one place, call them from the client and execute them on the server.
- No boilerplate. Rpc's are defined in one place and feature flags control if code is generated for the client, server, or both.
- "Bring your own transport". Use
ClientRpcService::handleon the client andhandle_rpcon the server to control how rpc calls reaches the server and responses back. - "Bring your own (de)serializer". You can use any kind of (de)serializer for
your rpc calls.
marpcalso defines a simplejsonformat that you can use.
Example
Start by defining a rpc service:
;
register_service!;
Define rpc functions with the following:
async
And call them on the client with:
add.await;
On the server you can handle rpc calls with:
.await
See examples/add.rs for a simple example of two threads
communicating over a global queue. Note that this must be compiled with
--all-features or --features client,server as both the client and server
code needs to be generated.
See examples/hello_net.rs for a more sophisticated
example with a client and server communicating over a tcp stream. Run
cargo run --features server --example hello_net -- server Hello in one window
and then open another window and run
cargo run --features client --example hello_net -- client world.
License
This library is dual-licensed under the MIT license and Apache License 2.0. Chose the license to use at your own discretion. See LICENSE-MIT and LICENSE-APACHE.