use serde::Deserialize;
use chrono::{DateTime, Utc};
#[derive(Clone, Default, Debug, PartialEq, Deserialize)]
pub struct Channel {
#[serde(rename = "id")]
pub id: String,
#[serde(rename = "protocol_id")]
pub protocol_id: Option<String>,
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "state")]
pub state: ChannelState,
#[serde(rename = "caller")]
pub caller: CallerId,
#[serde(rename = "connected")]
pub connected: CallerId,
#[serde(rename = "accountcode")]
pub account_code: String,
#[serde(rename = "dialplan")]
pub dialplan: DialplanCep,
#[serde(rename = "creationtime")]
pub creation_time: DateTime<Utc>,
#[serde(rename = "language")]
pub language: String,
#[serde(rename = "channelvars")]
pub channel_vars: Option<serde_json::Value>,
#[serde(rename = "caller_rdnis")]
pub caller_rdnis: Option<String>,
#[serde(rename = "tenantid")]
pub tenant_id: Option<String>,
}
#[derive(Clone, Default, Debug, PartialEq, Deserialize)]
pub struct CallerId {
pub name: String,
pub number: String,
}
#[derive(Clone, Default, Debug, PartialEq, Deserialize)]
pub struct DialplanCep {
pub context: String,
#[serde(rename = "exten")]
pub extension: String,
pub priority: f32,
#[serde(flatten)]
pub app_name: App,
}
#[derive(Clone, Debug, Default, PartialEq, Deserialize)]
pub struct App {
#[serde(rename = "app_name")]
name: String,
#[serde(rename = "app_data")]
data: Option<String>,
}
#[derive(Clone, Default, Debug, PartialEq, Deserialize)]
pub struct RTPStatistics {
pub txcount: u64,
pub rxcount: u64,
pub txjitter: Option<f64>,
pub rxjitter: Option<f64>,
pub remote_maxjitter: Option<f64>,
pub remote_minjitter: Option<f64>,
pub remote_normdevjitter: Option<f64>,
pub remote_stdevjitter: Option<f64>,
pub local_maxjitter: Option<f64>,
pub local_minjitter: Option<f64>,
pub local_normdevjitter: Option<f64>,
pub local_stdevjitter: Option<f64>,
pub txploss: u64,
pub rxploss: u64,
pub remote_maxrxploss: Option<f64>,
pub remote_minrxploss: Option<f64>,
pub remote_normdevrxploss: Option<f64>,
pub remote_stdevrxploss: Option<f64>,
pub local_maxrxploss: Option<f64>,
pub local_minrxploss: Option<f64>,
pub local_normdevrxploss: Option<f64>,
pub local_stdevrxploss: Option<f64>,
pub rtt: Option<f64>,
pub maxrtt: Option<f64>,
pub minrtt: Option<f64>,
pub normdevrtt: Option<f64>,
pub stdevrtt: Option<f64>,
pub local_ssrc: u64,
pub remote_ssrc: u64,
pub txoctetcount: u64,
pub rxoctetcount: u64,
pub channel_uniqueid: String,
}
#[derive(Clone, Debug, Default, PartialEq, Deserialize)]
pub enum ChannelState {
Down,
Rsrved,
Reserved,
OffHook,
Dialing,
Ring,
Ringing,
Up,
Busy,
#[serde(rename = "Dialing Offhook")]
DialingOffhook,
#[serde(rename = "Pre-ring")]
PreRing,
#[default]
Unknown,
}