Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/minghuaw/toy-rpc
An async RPC in rust-lang that mimics golang's net/rpc
https://github.com/minghuaw/toy-rpc
async async-std rpc rpc-framework rust tokio
Last synced: 2 months ago
JSON representation
An async RPC in rust-lang that mimics golang's net/rpc
- Host: GitHub
- URL: https://github.com/minghuaw/toy-rpc
- Owner: minghuaw
- Created: 2020-11-24T00:58:56.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-08-18T02:13:50.000Z (over 2 years ago)
- Last Synced: 2024-03-31T13:31:09.073Z (9 months ago)
- Topics: async, async-std, rpc, rpc-framework, rust, tokio
- Language: Rust
- Homepage:
- Size: 3.37 MB
- Stars: 25
- Watchers: 3
- Forks: 2
- Open Issues: 14
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# toy-rpc
## An async RPC crate that mimics the `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`:
- Cascading cancellation: whenever an unfinished `Call` 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.
- [Book](https://minghuaw.github.io/toy-rpc/01_introduction.html)
- [Quickstart](https://minghuaw.github.io/toy-rpc/02_quickstart.html)
- [Documentation](https://docs.rs/toy-rpc/0.7.0-alpha.0/toy_rpc/)
- [Change Log](https://minghuaw.github.io/toy-rpc/10_change_log.html)
- [GitHub repository](https://github.com/minghuaw/toy-rpc)
- [crate.io](https://crates.io/crates/toy-rpc)
- Minimum supported Rust version: 1.53 or laterThis crate uses `#![forbid(unsafe_code)]` to ensure no usage of `unsafe` in the crate.
## Feature flags
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 server
- `client`: 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/deserialization
- `serde_json`: the default codec will use `serde_json`
for `json` serialization/deserialization
- `serde_cbor`: the default codec will use `serde_cbor`
for serialization/deserialization
- `serde_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 support
Other 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 features
```toml
default = ["serde_bincode"]
```## Integration
HTTP integration is provided for `actix-web`, `tide`, and `warp`. More details can be found
in the [Book/Integrations](https://minghuaw.github.io/toy-rpc/05_integration.html) and in
[examples](https://github.com/minghuaw/toy-rpc/tree/main/examples).## Quickstart Example
A quickstart example with `tokio` runtime is provided in the [Book/Quickstart](https://minghuaw.github.io/toy-rpc/02_quickstart.html).
License: MIT/Apache-2.0