use crate::mq::mqtt::qos_serde;
use rumqttc::QoS;
use serde::Deserialize;
use std::time::Duration;
use wheel_rs::serde::{duration_serde, vec_serde};
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "kebab-case")]
pub struct MqttConfig {
#[serde()]
pub client_id: String,
#[serde()]
pub host: String,
#[serde()]
pub port: u16,
#[serde(with = "duration_serde", default = "default_keep_alive")]
pub keep_alive: Duration,
#[serde(default = "default_clean_session")]
pub clean_session: bool,
#[serde()]
pub username: String,
#[serde()]
pub password: String,
#[serde(default = "default_cap")]
pub cap: usize,
#[serde(with = "vec_serde")]
pub topic: Vec<String>,
#[serde(with = "qos_serde", default = "default_qos")]
pub qos: QoS,
#[serde(with = "duration_serde", default = "default_reconnect_interval")]
pub reconnect_interval: Duration,
}
fn default_keep_alive() -> Duration {
Duration::from_secs(60)
}
fn default_clean_session() -> bool {
false
}
fn default_cap() -> usize {
1024
}
fn default_qos() -> QoS {
QoS::AtLeastOnce
}
fn default_reconnect_interval() -> Duration {
Duration::from_secs(30)
}