Crates.io | toy-rpc-ha421 |
lib.rs | toy-rpc-ha421 |
version | 0.9.0-beta.1 |
source | src |
created_at | 2024-03-22 09:59:18.935293 |
updated_at | 2024-03-22 09:59:18.935293 |
description | An async RPC that mimics golang net/rpc's usage and supports both async-std and tokio |
homepage | https://github.com/minghuaw/toy-rpc |
repository | https://github.com/minghuaw/toy-rpc |
max_upload_size | |
id | 1182460 |
size | 325,789 |
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.
Some early documentation and examples for the preview releases can be found here
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