1 个不稳定版本
0.1.0 | 2024年6月25日 |
---|
#1019 在 网页编程
100KB
2K SLoC
snapcast-control
snapcast-control
是一个基于 Rust 的 Snapcast API 客户端。它支持截至版本 0.28.0(2024/6/25)的 Snapcast JSON-RPC API 的所有功能。
文档可在 docs.rs 上找到。
功能
- 所有 API 请求和响应都使用原生 Rust 类型
- 基于 tokio 的异步客户端
- 具有所有 API 请求的辅助方法的客户端
- 通过 stubborn-io 自动重连套接字
安装
cargo add snapcast-control
使用方法
此 crate 使用的最佳示例是 snapcast-multiroom,这是我为其设计的项目。
使用示例
use snapcast_control::{SnapcastConnection, ValidMessage};
#[tokio::main]
async fn main() {
let mut client = SnapcastConnection::open("127.0.0.1:1705".parse().expect("could not parse socket address")).await;
// client state is updated with each message received
let state = client.state.clone();
// state is empty initially, sending the server_get_status request will populate it
client.server_get_status().await.expect("could not send request");
loop {
tokio::select! {
// as messages are received, they are stored in the client's recv buffer
Some(message) = client.recv() => {
if let Ok(response) = message {
// handle response
match response {
ValidMessage::Result { id, jsonrpc, result } => {},
ValidMessage::Notification { method, jsonrpc } => {},
}
} else if let Err(err) = message {
// handle error
}
},
_ = tokio::signal::ctrl_c() => {
break;
}
}
}
}
依赖关系
~6–16MB
~192K SLoC