#json-rpc #rpc #jsonrpc2 #proc-macro

jsonrpc-v2-macros

jsonrpc-v2的过程宏

1 个不稳定版本

0.1.0 2019年12月10日

#223#json-rpc

Download history 48/week @ 2024-04-01 3/week @ 2024-04-08 10/week @ 2024-04-15 7/week @ 2024-04-22 4/week @ 2024-04-29 8/week @ 2024-05-06 2/week @ 2024-05-13 6/week @ 2024-05-20 5/week @ 2024-06-03 2/week @ 2024-06-10 7/week @ 2024-06-17 2/week @ 2024-06-24 38/week @ 2024-07-08 17/week @ 2024-07-15

58 每月下载量
用于 jsonrpc-v2

MIT 协议

10KB
213

jsonrpc-v2

Docs Crates.io

一个非常小且非常快的以JSON-RPC 2.0服务器为核心的框架。

提供对 hyperactix-web 的集成。根据需要启用 actix-integrationhyper-integration 功能。

actix 默认启用。如果您使用 hyper,请确保添加 default-features = false

还可以查看 easy-errors 功能标志(默认不启用)。启用此标志将为实现 Display 的任何内容实现 ErrorLike,并将显示值提供在JSON-RPC 2.0 Error 响应的 message 字段中。

否则,自定义错误应实现 ErrorLike 以将错误映射到JSON-RPC 2.0 Error 响应。

单独的方法处理程序是可接受各种类型参数的 async 函数(可以从请求中提取的事物,如 ParamsData),应返回一个 Result<Item, Error>,其中 Item 是可序列化的。请参阅以下示例。

用法

use jsonrpc_v2::*;

#[derive(serde::Deserialize)]
struct TwoNums {
    a: usize,
    b: usize,
}

async fn add(Params(params): Params<TwoNums>) -> Result<usize, Error> {
    Ok(params.a + params.b)
}

async fn sub(Params(params): Params<(usize, usize)>) -> Result<usize, Error> {
    Ok(params.0 - params.1)
}

async fn message(data: Data<String>) -> Result<String, Error> {
    Ok(String::from(&*data))
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let rpc = Server::new()
        .with_data(Data::new(String::from("Hello!")))
        .with_method("sub", sub)
        .with_method("message", message)
        .finish();

    actix_web::HttpServer::new(move || {
        let rpc = rpc.clone();
        actix_web::App::new().service(
            actix_web::web::service("/api")
                .guard(actix_web::guard::Post())
                .finish(rpc.into_web_service()),
        )
    })
    .bind("0.0.0.0:3000")?
    .run()?;

    Ok(())
}

当前版本:0.4.1

许可证:MIT

依赖项

~1.5MB
~36K SLoC