23 个版本 (12 个重大更改)

0.13.0 2023年9月2日
0.12.0 2023年7月29日
0.11.0 2022年3月22日
0.10.1 2021年5月14日
0.2.1 2019年2月7日

206HTTP 服务器

Download history 1646/week @ 2024-03-14 645/week @ 2024-03-21 881/week @ 2024-03-28 700/week @ 2024-04-04 494/week @ 2024-04-11 385/week @ 2024-04-18 157/week @ 2024-04-25 426/week @ 2024-05-02 471/week @ 2024-05-09 438/week @ 2024-05-16 484/week @ 2024-05-23 334/week @ 2024-05-30 799/week @ 2024-06-06 432/week @ 2024-06-13 338/week @ 2024-06-20 216/week @ 2024-06-27

1,851 每月下载量
2 crates 中使用

MIT 许可证

57KB
1.5K SLoC

jsonrpc-v2

Docs Crates.io

一个非常小且非常快的专注于 JSON-RPC 2.0 服务器的框架。

hyperactix-web (1.x, 2.x, 3.x, 4.x) 提供集成。根据需要启用功能 actix-web-v3-integrationhyper-integration 等。

actix-web-v4-integration 默认启用。如果使用 hyper 或其他 actix-web 版本,请确保添加 default-features = false

另外,请参阅 easy-errors 功能标志(默认未启用)。启用此标志将实现 ErrorLike,任何实现 Display 的内容都将实现该特性,并且显示值将提供在 JSON-RPC 2.0 Error 响应的 message 字段中。

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

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

用法

use jsonrpc_v2::{Data, Error, Params, Server};

#[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))
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    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()
    .await
}

当前版本:0.11.0

许可证:MIT

依赖关系

~2–18MB
~219K SLoC