1 个不稳定版本
0.1.12 | 2024 年 8 月 8 日 |
---|
#76 在 WebSocket
每月 106 次下载
100KB
2K SLoC
tdx Volts 客户端库
此库通过 WebSocket 为 Volt API 提供了 Rust 客户端。
客户端使用 JSON 向 Volts 发送请求并接收响应。
构建
cargo build
用法
以下示例演示了创建和初始化一个 VoltClient
实例,并调用 get_resource
方法从 Volts 获取资源。
use serde_json::json;
use volt_client_rs::{
volt_client::VoltClient,
websocket_rpc::{Event, EventType},
};
#[tokio::main]
async fn main() {
// Load the Volt configuration JSON.
let config_json = match std::fs::read_to_string("volt.config.json") {
Ok(config_json) => config_json,
Err(e) => {
println!("failed to read config file: {:?}", e);
return;
}
};
// Create the Volt API client
let mut client = match VoltClient::create(&config_json).await {
Ok(client) => client,
Err(e) => {
println!("failed to create API client: {:?}", e);
return;
}
};
// Call methods on the client
let get_request = json!({
"resource_id": "did:volt:46c42b5f-22f1-4a7a-af76-c2eb78dbc8ca",
});
match client.get_resource(&get_request).await {
Ok(response) => println!("main: received response: {:?}", response),
Err(e) => println!("failed to get resource: {:?}", e),
}
// Keep the main thread alive to listen for incoming messages
tokio::signal::ctrl_c()
.await
.expect("Failed to listen for ctrl_c signal");
}
上面使用的 get_resource
方法是一个单元 RPC,即它发送单个请求并接收单个响应。 VoltClient
还支持服务器流和客户端流 RPC。
// Start a `connect` call to the Volt.
let connect_call = match client.connect(&serde_json::Value::Null).await {
Ok(connect1) => connect1,
Err(e) => {
println!("failed to connect: {:?}", e);
return;
}
};
{
// Register a callback for the `Data` event.
let connect_rpc = connect_call.lock().await;
connect_rpc.on(EventType::Data, |response| {
if let Event::Data(data) = response {
// Do something with the data
println!("main: received data response: {:?}", data);
}
});
// Send the initial connect request.
let connect_request = json!({
"hello": {
"subscribe_resource_events": true,
"accept_invocation": false,
"ping_interval": 10000,
},
});
let _ = connect_rpc.send(&connect_request).await;
}
依赖关系
~9–17MB
~219K SLoC