Define your RPC function signatures and use them with various client/server implementations.
Currently there are client implmentations for [Reqwest] and [Reqwasm]. There are server implementations for [Axum] and [Actix].
Define your RPC signatures, implement them on the server and call them on the client. These can be in separate crates, or all lumped into one depending on your workflow.
```rust
pub struct Add(pub i32, pub i32);
impl FnRemote for Add { type Output = i32; }
pub struct TryMultiply(pub i32, pub i32);
impl FnRemote for TryMultiply {
type Output = Result We use [Axum] for this example. ```rust
async fn add(args: &Add) -> i32 {
args.0 + args.1
} async fn try_multiply(args: &TryMultiply) -> Result let app = Router::new()
.httprpcroute("/http", add)
.httprpcroute("/http", try_multiply); Server::bind(&SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 9090))
.serve(app.intomakeservice())
.await
.unwrap();
``` We use [Reqwasm] for this example: ```rust
let mut connection = http::Connection::new(&format!("http://127.0.0.1:9090/api"));
let result = Add(1, 2).call(&connection).await?; assert_eq!(3, result);
```Implementing a Server
Calling Remote Procedures