#api-client #json-rpc #控制 #tokio #异步客户端 #控制API #snapcast

snapcast-control

基于 tokio 的 Snapcast JSON-RPC 控制API的包装器

1 个不稳定版本

0.1.0 2024年6月25日

#1019网页编程

MIT 许可证

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