golang
's net/rpc
package and supports both async-std
and tokio
.This project is still being actively developed. I have kind of run out of ideas for features, so feel free to let me know if there is a feature that you want.
toy-rpc
aims to be an easy-to-use async RPC tool that is inspired by golang's net/rpc
's API.
It supports both async_std
and tokio
runtimes over either TCP or TLS. Integration with
common HTTP server frameworks such as actix_web
, warp
and tide
are provided.
The overall usage and API should feel similar to that of the golang's net/rpc
package. Some of the names are changed
to make them sound more "rusty". Because rust does not come with runtime reflection, attribute macros #[export_impl]
and #[export_trait]
/ #[export_trait_impl]
, and attribute #[export_method]
are used to mark functions "exported" in golang's
net/rpc
perspective.
Some other features of toy-rpc
:
Call<Res>
is dropped, a cancellation will be sent to the server
and thus propagating the cancellation.More detailed usage can be found in the book and documentation.
This crate uses #![forbid(unsafe_code)]
to ensure no usage of unsafe
in the crate.
The feature flags can be put into three categories.
Choice of runtime and HTTP framework integration
async_std_runtime
: supports usage with async-std
tokio_runtime
: supports usage with tokio
http_tide
: enables tide
integration on the server side. This also enables async_std_runtime
and ws_async_std
http_actix_web
: enables actix-web
integration on the server side. This also enables tokio_runtime
and ws_tokio
http_warp
: enables integration with warp
on the server side. This also enables tokio_runtime
and ws_tokio
http_axum
: enables integration with axum
on the server side. This also enables tokio_runtime
and ws_tokio
Choice of RPC server or client (both can be enabled at the same time)
server
: enables RPC serverclient
: enables RPC clientChoice of serialization/deserialzation (only one should be enabled at a time)
serde_bincode
: (default) the default codec will use bincode
for serialization/deserializationserde_json
: the default codec will use serde_json
for json
serialization/deserializationserde_cbor
: the default codec will use serde_cbor
for serialization/deserializationserde_rmp
: the default codec will use rmp-serde
for serialization/deserializationWebSocket support (HTTP integration is implementd with WebSocket)
ws_tokio
: enables WebSocket and HTTP integrations with tokio
.
This must be enabled for client to use dial_http(addr)
or dial_websocket(addr)
.ws_async_std
: enables WebSocket and HTTP integrations with async-std
.
This must be enabled for client to use dial_http(addr)
or dial_websocket(addr)
.TLS support
tls
: enables TLS supportOther trivial feature flags are listed below, and they are likely of no actual usage for you.
docs
std
: serde/std
. There is no actual usage right now.By default, only serde_bincode
feature is enabled.
You must enable at least one runtime feature flag and the server
and/or client
to have something usable.
default = ["serde_bincode"]
HTTP integration is provided for actix-web
, tide
, and warp
. More details can be found
in the Book/Integrations and in
examples.
A quickstart example with tokio
runtime is provided in the Book/Quickstart.
License: MIT/Apache-2.0