mod event;
mod kwai;
mod stream;
pub use event::*;
use futures::Stream;
use serde::{Deserialize, Serialize};
use stream::EventStream;
#[derive(Serialize, Default, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ConnectParams {
pub host: String,
pub app_id: String,
pub code: String,
pub play_id: Option<u32>,
pub header: Option<String>,
pub role_name: Option<String>,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct ConnectResp {
pub ks_uid: u32,
pub user: User,
pub token: String,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DisconnectParams {
pub host: String,
pub token: String,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct User {
pub id: String,
pub user_name: Option<String>,
pub head_url: Option<String>,
pub gender: Option<String>,
}
pub async fn connect(
params: &ConnectParams,
) -> anyhow::Result<(ConnectResp, impl Stream<Item = Event>)> {
let connect_resp = kwai::connect(params).await?;
let stream = EventStream::new(¶ms.host, connect_resp.token.clone())?;
Ok((connect_resp, stream.into_stream()))
}
pub async fn disconnect(params: &DisconnectParams) -> anyhow::Result<()> {
kwai::disconnect(params).await
}