13 个版本

0.6.2 2024年7月6日
0.5.3 2023年12月2日
0.5.2 2023年8月1日
0.5.1 2023年5月21日
0.3.1 2022年6月29日

#25 in WebSocket

Download history • Rust 包仓库 1127/week @ 2024-04-26 • Rust 包仓库 645/week @ 2024-05-03 • Rust 包仓库 1067/week @ 2024-05-10 • Rust 包仓库 1042/week @ 2024-05-17 • Rust 包仓库 362/week @ 2024-05-24 • Rust 包仓库 658/week @ 2024-05-31 • Rust 包仓库 257/week @ 2024-06-07 • Rust 包仓库 286/week @ 2024-06-14 • Rust 包仓库 207/week @ 2024-06-21 • Rust 包仓库 336/week @ 2024-06-28 • Rust 包仓库 798/week @ 2024-07-05 • Rust 包仓库 196/week @ 2024-07-12 • Rust 包仓库 330/week @ 2024-07-19 • Rust 包仓库 473/week @ 2024-07-26 • Rust 包仓库 683/week @ 2024-08-02 • Rust 包仓库 531/week @ 2024-08-09 • Rust 包仓库

2,032 每月下载量
用于 yerpc-tide

Apache-2.0/MIT

40KB
925

yerpc

docs.rs Crates.io

为 Rust 设计的 JSON-RPC 2.0 服务器处理器,可自动生成 TypeScript 客户端。

yerpc 包含(可选)与 axumtokio-tungstenite 的集成,以简化设置和使用。启用 support-axumsupport-tungstenite 特性标志以使用这些集成。

示例

use axum::{
    extract::ws::WebSocketUpgrade, http::StatusCode, response::Response, routing::get, Router,
};
use std::net::SocketAddr;
use yerpc::{rpc, RpcClient, RpcSession};
use yerpc::axum::handle_ws_rpc;

struct Api;

#[rpc(all_positional, ts_outdir = "typescript/generated", openrpc_outdir = "./")]
impl Api {
    async fn shout(&self, msg: String) -> String {
        msg.to_uppercase()
    }
    async fn add(&self, a: f32, b: f32) -> f32 {
        a + b
    }
}

#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
    let api = Api {}
    let app = Router::new()
        .route("/rpc", get(handler))
        .layer(Extension(api));
    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
    eprintln!("listening on {}", addr);
    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();

    Ok(())
}

async fn handler(
    ws: WebSocketUpgrade,
    Extension(api): Extension<Api>,
) -> Response {
    let (client, out_channel) = RpcClient::new();
    let session = RpcSession::new(client, api);
    handle_ws_rpc(ws, out_channel, session).await
}

现在您可以将任何 JSON-RPC 客户端连接到 ws://localhost:3000/rpc 并调用 shoutadd 方法。

运行 cargo test 后,您将在 typescript/generated 文件夹中找到一个自动生成的 TypeScript 客户端,并在项目根目录中找到一个 openrpc.json 文件。有关使用 Rust 服务器和 TypeScript 客户端的完整使用示例,请参阅 examples/axum

依赖关系

~2.3–5.5MB
~102K SLoC