use serde::{Deserialize, Serialize};
use std::ops::Deref;
use std::time::Duration;
mod stream_;
pub use stream_::*;
use crate::frames::down_message::MessageTopic;
#[derive(Debug, Clone)]
pub struct ClientConfig {
pub auto_reconnect: bool,
pub ua: String,
pub reconnect_interval: Duration,
pub keep_alive_interval: Duration,
}
impl Default for ClientConfig {
fn default() -> Self {
Self {
auto_reconnect: true,
ua: format!("dingtalk-sdk-rust/{}", crate::VERSION),
reconnect_interval: Duration::from_secs(10),
keep_alive_interval: Duration::from_secs(60),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subscription {
pub topic: MessageTopic,
#[serde(rename = "type")]
pub sub_type: String,
}
#[derive(Debug, Deserialize)]
pub struct ConnectionResponse {
pub endpoint: String,
pub ticket: String,
}
#[derive(Debug, Deserialize)]
pub struct AccessTokenResponse {
#[serde(rename = "accessToken")]
pub access_token: String,
#[serde(rename = "expireIn")]
pub expire_in: i64,
}
#[derive(Clone)]
struct AccessTokenCache {
token: AccessToken,
expire_time: i64,
}
#[derive(Clone)]
pub struct AccessToken(String);
impl Deref for AccessToken {
type Target = str;
fn deref(&self) -> &Self::Target {
&self.0
}
}