rustymilky
Milky 的 Rust SDK,提供类型安全的 API 调用和事件流支持。
安装
cargo add rustymilky
cargo add futures-util anyhow
cargo add tokio --features full
使用方法
下面是一个使用 MilkyClient 创建客户端并调用 API 的示例:
use anyhow::Result;
use rustymilky::{
MilkyClient,
protocol::GetLoginInfoInput,
};
#[tokio::main]
async fn main() -> Result<()> {
let client = MilkyClient::new("http://127.0.0.1:3100", Some("token"))?;
let login = client.request(GetLoginInfoInput {}).await?;
println!("{} ({})", login.nickname, login.uin);
Ok(())
}
监听事件
通过 client.event(...)、client.event_ws() 或 client.event_sse() 可以创建事件连接,支持 WebSocket 和 SSE 两种方式。
use anyhow::Result;
use futures_util::StreamExt;
use rustymilky::{
MilkyClient,
MilkyTransportEvent,
MilkyTransportKind,
protocol::Event,
};
#[tokio::main]
async fn main() -> Result<()> {
let client = MilkyClient::new("http://127.0.0.1:3100", None)?;
let mut source = client.event(MilkyTransportKind::WebSocket).await?;
while let Some(event) = source.next().await {
match event? {
MilkyTransportEvent::Open => {
println!("connected");
}
MilkyTransportEvent::Reconnecting {
attempt,
next_delay,
} => {
println!("reconnecting: attempt {}, waiting {:?}", attempt, next_delay);
}
MilkyTransportEvent::Reconnected => {
println!("reconnected");
}
MilkyTransportEvent::Push(Event::BotOffline { .. }) => {
println!("bot offline");
source.close();
}
MilkyTransportEvent::Push(event) => {
println!("{:?}", event);
}
}
}
Ok(())
}
重试配置
MilkyClientConfig 允许分别配置 API 请求和事件流重连的重试策略,策略类型由 RetryOptions 表示。
use std::time::Duration;
use anyhow::Result;
use rustymilky::{
MilkyClient,
MilkyClientConfig,
RetryOptions,
};
fn main() -> Result<()> {
let client = MilkyClient::with_config(
"http://127.0.0.1:3100",
None,
MilkyClientConfig {
event_reconnect: RetryOptions::Exponential {
initial_delay: Duration::from_millis(500),
factor: 2.0,
max_delay: Some(Duration::from_secs(10)),
max_retries: None,
},
request_retry: RetryOptions::Constant {
delay: Duration::from_millis(200),
max_retries: Some(3),
},
},
)?;
let _ = client;
Ok(())
}