Crate toy_rpc[][src]

Expand description

An async RPC crate that mimics the golang’s net/rpc package and supports both async-std and tokio.

Crates.io version docs.rs docs Download Unsafe Rust forbidden

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 and provides integration with actix_web, warp and tide HTTP server frameworks.

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.

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.

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
  • http_actix_web: enables actix-web integration on the server side. This also enables tokio_runtime
  • http_warp: enables integration with warp on the server side. This also enables tokio_runtime

Choice of RPC server or client (both can be enabled at the same time)

  • server: enables RPC server
  • client: enables RPC client

Choice 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/deserialization

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

default = ["serde_bincode"]

Integration

HTTP integration is provided for actix-web, tide, and warp. More details can be found in the Book/Integrations and in examples.

Quickstart Example

A quickstart example with tokio runtime is provided in the Book/Quickstart.

Re-exports

pub use client::Client;
pub use server::Server;
pub use server::ServerBuilder;
pub use error::Error;
pub use erased_serde;
pub use serde;

Modules

client

RPC Client impementation

codec

SplittibleServerCodec and SplittableClientCodec are defined in this module, and they are implemented for the DefaultCodec Default codec implementations are feature gated behind the following features serde_bincode, serde_json, serde_cbor, serde_rmp.

error

Custom errors

macros

Re-export of proc_macros defined in toy_rpc_macros

message

Custom definition of rpc request and response headers

server

RPC server. There is only one Server defined, but some methods have different implementations depending on the runtime feature flag

service

Service builder and registration

transport

Custom binary transport and WebSocket integration

util

Utility traits and functions.

Constants

DEFAULT_RPC_PATH

The default path added to the HTTP url