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
2,032 每月下载量
用于 yerpc-tide
40KB
925 行
yerpc
为 Rust 设计的 JSON-RPC 2.0 服务器处理器,可自动生成 TypeScript 客户端。
yerpc 包含(可选)与 axum
和 tokio-tungstenite
的集成,以简化设置和使用。启用 support-axum
和 support-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
并调用 shout
和 add
方法。
运行 cargo test
后,您将在 typescript/generated
文件夹中找到一个自动生成的 TypeScript 客户端,并在项目根目录中找到一个 openrpc.json
文件。有关使用 Rust 服务器和 TypeScript 客户端的完整使用示例,请参阅 examples/axum
。
依赖关系
~2.3–5.5MB
~102K SLoC