web-rpc 0.0.8

Bi-directional RPC for the Web
Documentation
mod common;

use wasm_bindgen_test::*;

#[web_rpc::service]
pub trait Greeter {
    fn greet(&self, name: &str, greeting: &str) -> String;
    fn count_bytes(&self, data: &[u8]) -> u32;
    fn mixed(&self, name: &str, id: u32) -> String;
    fn notify(&self, message: &str);
}

struct GreeterImpl;
impl Greeter for GreeterImpl {
    fn greet(&self, name: &str, greeting: &str) -> String {
        format!("{greeting}, {name}!")
    }
    fn count_bytes(&self, data: &[u8]) -> u32 {
        data.len() as u32
    }
    fn mixed(&self, name: &str, id: u32) -> String {
        format!("{name}#{id}")
    }
    fn notify(&self, _message: &str) {}
}

#[wasm_bindgen_test]
async fn borrowing() {
    let (client, _server) = common::connect::<GreeterService<_>, GreeterClient>(GreeterImpl).await;
    assert_eq!(client.greet("World", "Hello").await, "Hello, World!");
    assert_eq!(client.count_bytes(&[1, 2, 3, 4, 5]).await, 5);
    assert_eq!(client.mixed("Alice", 42).await, "Alice#42");
    client.notify("test");
}