tarpc: Tim & Adam's RPC lib
Disclaimer: This is not an official Google product.
tarpc is an RPC framework for rust with a focus on ease of use. Defining a service can be done in just a few lines of code, and most of the boilerplate of writing a server is taken care of for you.
What is an RPC framework?
"RPC" stands for "Remote Procedure Call," a function call where the work of producing the return value is being done somewhere else. When an rpc function is invoked, behind the scenes the function contacts some other process somewhere and asks them to evaluate the function instead. The original function then returns the value produced by the other process.
RPC frameworks are a fundamental building block of most microservices-oriented architectures. Two well-known ones are gRPC and Cap'n Proto.
tarpc differentiates itself from other RPC frameworks by defining the schema in code, rather than in a separate language such as .proto. This means there's no separate compilation process, and no cognitive context switching between different languages. Additionally, it works with the community-backed library serde: any serde-serializable type can be used as arguments to tarpc fns.
Usage
Add to your Cargo.toml
dependencies:
= "0.14.0"
The service!
macro expands to a collection of items that form an
rpc service. In the above example, the macro is called within the
hello_service
module. This module will contain a Client
stub and Service
trait. There is
These generated types make it easy and ergonomic to write servers without dealing with serialization
directly. Simply implement one of the generated traits, and you're off to the
races!
Example
Here's a small service.
use ;
use ;
use io;
// This is the service definition. It looks a lot like a trait definition.
// It defines one RPC, hello, which takes one arg, name, and returns a String.
service!
// This is the type that implements the generated Service trait. It is the business logic
// and is used to start the server.
;
async
Service Documentation
Use cargo doc
as you normally would to see the documentation created for all
items expanded by a service!
invocation.