use chrono::Utc;
use uuid::Uuid;
#[derive(Clone, PartialEq, Debug)]
pub enum Metadata {
BaseTime(BaseTime),
UpstreamOpen(UpstreamOpen),
UpstreamAbnormalClose(UpstreamAbnormalClose),
UpstreamResume(UpstreamResume),
UpstreamNormalClose(UpstreamNormalClose),
DownstreamOpen(DownstreamOpen),
DownstreamAbnormalClose(DownstreamAbnormalClose),
DownstreamResume(DownstreamResume),
DownstreamNormalClose(DownstreamNormalClose),
}
#[derive(Clone, PartialEq, Debug)]
pub enum SendableMetadata {
BaseTime(BaseTime),
}
#[derive(Clone, PartialEq, Debug)]
pub enum ReceivableMetadata {
BaseTime(BaseTime),
UpstreamOpen(UpstreamOpen),
UpstreamAbnormalClose(UpstreamAbnormalClose),
UpstreamResume(UpstreamResume),
UpstreamNormalClose(UpstreamNormalClose),
DownstreamOpen(DownstreamOpen),
DownstreamAbnormalClose(DownstreamAbnormalClose),
DownstreamResume(DownstreamResume),
DownstreamNormalClose(DownstreamNormalClose),
}
impl Default for Metadata {
fn default() -> Self {
Self::BaseTime(BaseTime::default())
}
}
#[derive(Clone, PartialEq, Debug)]
pub struct BaseTime {
pub session_id: String,
pub name: String,
pub priority: u32,
pub elapsed_time: chrono::Duration,
pub base_time: chrono::DateTime<Utc>,
}
impl Default for BaseTime {
fn default() -> Self {
Self {
session_id: String::new(),
name: String::new(),
priority: 0,
elapsed_time: chrono::Duration::zero(),
base_time: chrono::DateTime::<Utc>::MIN_UTC,
}
}
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct UpstreamOpen {
pub stream_id: Uuid,
pub session_id: String,
pub qos: super::QoS,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct UpstreamAbnormalClose {
pub stream_id: Uuid,
pub session_id: String,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct UpstreamResume {
pub stream_id: Uuid,
pub session_id: String,
pub qos: super::QoS,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct UpstreamNormalClose {
pub stream_id: Uuid,
pub session_id: Uuid,
pub total_data_points: u64,
pub final_sequence_number: u32,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct DownstreamOpen {
pub stream_id: Uuid,
pub downstream_filters: Vec<super::DownstreamFilter>,
pub qos: super::QoS,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct DownstreamAbnormalClose {
pub stream_id: Uuid,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct DownstreamResume {
pub stream_id: Uuid,
pub downstream_filters: Vec<super::DownstreamFilter>,
pub qos: super::QoS,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct DownstreamNormalClose {
pub stream_id: Uuid,
}
#[derive(Clone, PartialEq, Debug)]
pub struct UpstreamMetadata {
pub request_id: super::RequestId,
pub metadata: SendableMetadata,
pub persist: Option<bool>,
}
impl Default for UpstreamMetadata {
fn default() -> Self {
Self {
request_id: 0.into(),
metadata: SendableMetadata::BaseTime(BaseTime::default()),
persist: None,
}
}
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct UpstreamMetadataAck {
pub request_id: super::RequestId,
pub result_code: super::ResultCode,
pub result_string: String,
}
#[derive(Clone, PartialEq, Debug)]
pub struct DownstreamMetadata {
pub request_id: super::RequestId,
pub stream_id_alias: u32,
pub source_node_id: String,
pub metadata: ReceivableMetadata,
}
impl Default for DownstreamMetadata {
fn default() -> Self {
Self {
request_id: 0.into(),
stream_id_alias: 0,
source_node_id: "".to_string(),
metadata: ReceivableMetadata::BaseTime(BaseTime::default()),
}
}
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct DownstreamMetadataAck {
pub request_id: super::RequestId,
pub result_code: super::ResultCode,
pub result_string: String,
}