minirpc

MINI-RPC is a stateless, light-weight remote procedure call (RPC) protocol. Inspired by the JSON-RPC 2.0 Specification, this implementation written in Rust selected its essential parts in order to keep as minimal as possible the communication between processes.

Examples

Syntax:

--> data sent to Server <-- data sent to Client

Basic Usage

--> {"id":1,"method":"sum","params":[1,2,3]} <-- {"id":1,"result":6}

```rust use minirpc::; use serde_json::;

// --> Request. let input = r#"{"id":1,"method":"sum","params":[1,2,3]}"#; let expected = Request::Single(RequestPayload::Call(Call { id: Id::Number(1), method: Method::String("sum".to_owned()), params: Params::Array(vec![Value::from(1), Value::from(2), Value::from(3)]), }));

let result: Request = serdejson::fromstr(input).unwrap(); assert_eq!(result, expected);

// <-- Response. let input = r#"{"id":1,"result":6}"#; let expected = Response::Single(ResponsePayload::Success(Success { id: Id::Number(1), result: Value::Bool(true), }));

let result: Response = serdejson::fromstr(input).unwrap(); assert_eq!(result, expected); ```

Batch Notification

--> [{"method":"log","params":{"level":"info"}},{"method":"log","params":{"level":"warn"}}]

```rust // --> Batch Request. let input = r#"[{"method":"log","params":{"level":"info"}},{"method":"log","params":{"level":"warn"}}]"#;

let mut params1 = Map::new(); params1.insert("level".to_string(), "info".into());

let mut params2 = Map::new(); params2.insert("level".to_string(), "warn".into());

let expected = Request::Batch(vec![ RequestPayload::Notification(Notification { method: Method::String("log".toowned()), params: Params::Object(params1), }), RequestPayload::Notification(Notification { method: Method::String("log".toowned()), params: Params::Object(params2), }), ]);

let result: Request = serdejson::fromstr(input).unwrap(); assert_eq!(result, expected); ```