Skip to main content

Crate rustymilky

Crate rustymilky 

Source
Expand description

§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(())
}

Modules§

protocol
Milky 协议中的请求、响应、事件和消息结构定义。

Structs§

MilkyClient
Milky 异步客户端。
MilkyClientConfig
MilkyClient 客户度配置。
MilkyTransport
Milky 事件流。

Enums§

MilkyTransportEvent
事件流中产生的状态变化或事件。
MilkyTransportKind
事件流使用的底层传输协议。
RetryOptions
请求重试和事件流重连共用的重试策略。 描述一次重试流程应采用的策略。