7 releases

0.3.2 Jan 4, 2024
0.3.1 Jan 4, 2024
0.2.2 Dec 16, 2023
0.1.0 Nov 28, 2023

#905 in Network programming

40 downloads per month
Used in rpc-core-net

MIT license

81KB
2K SLoC

rpc-core

Build Status Latest version Documentation License

Usage

Run the following Cargo command in your project directory:

cargo add rpc-core

Or add the following line to your Cargo.toml:

[dependencies]
rpc-core = { version = "0.3.2", features = ["net"] }

Example

See src/tests for details:

  • receiver

    fn subscribe() {
        rpc_s.subscribe("cmd", |msg: String| -> String {
            assert_eq!(msg, "hello");
            "world".to_string()
        });
    }
    
    
  • sender (callback)

    fn call() {
        rpc_c.cmd("cmd")
            .msg("hello")
            .rsp(|msg: String| {
                assert_eq!(msg, "world");
            })
            .call();
    }
    
  • sender (future)

    async fn call() {
        let result = rpc_c.cmd("cmd").msg("hello").future::<String>().await;
        assert_eq!(result.result.unwrap(), "world");
    }
    

Features

net

See examples for details: src/examples

  • server

    fn server() {
        let rpc = Rpc::new(None);
        rpc.subscribe("cmd", |msg: String| -> String {
            assert_eq!(msg, "hello");
            "world".to_string()
        });
      
        let server = rpc_server::RpcServer::new(6666, RpcConfigBuilder::new().rpc(Some(rpc.clone())).build());
        server.start();
    }
    
  • client

    async fn client() {
        let rpc = Rpc::new(None);
        let client = rpc_client::RpcClient::new(RpcConfigBuilder::new().rpc(Some(rpc.clone())).build());
        client.set_reconnect(1000);
        client.open("localhost", 6666);
    
        let result = rpc.cmd("cmd").msg("hello").future::<String>().await;
        assert_eq!(result.result.unwrap(), "world");
    }
    

License

This project is licensed under the MIT license.

Dependencies

~0.5–11MB
~90K SLoC