use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
pub struct RecordResult {
pub path: String,
pub duration_secs: f64,
pub file_size: u64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum MediaEvent {
SessionCreated {
session_id: String,
},
SessionDestroyed {
session_id: String,
},
LegAdded {
session_id: String,
leg_id: String,
},
LegRemoved {
session_id: String,
leg_id: String,
},
BridgeEstablished {
session_id: String,
leg_a: String,
leg_b: String,
},
BridgeBroken {
session_id: String,
reason: String,
},
PlayStarted {
session_id: String,
leg_id: String,
play_id: String,
},
PlayFinished {
session_id: String,
leg_id: String,
play_id: String,
interrupted: bool,
},
RecordingStarted {
session_id: String,
},
RecordingStopped {
session_id: String,
result: RecordResult,
},
RecordingPaused {
session_id: String,
},
RecordingResumed {
session_id: String,
},
SipFlowStarted {
session_id: String,
},
SipFlowStopped {
session_id: String,
},
DtmfCollected {
session_id: String,
leg_id: String,
digits: String,
},
MixerJoined {
session_id: String,
mixer_id: String,
},
MixerLeft {
session_id: String,
mixer_id: String,
},
LegHeld {
session_id: String,
leg_id: String,
},
LegUnheld {
session_id: String,
leg_id: String,
},
Error {
session_id: String,
command: String,
error: String,
},
}
impl MediaEvent {
pub fn session_id(&self) -> Option<&str> {
match self {
Self::SessionCreated { session_id } | Self::SessionDestroyed { session_id } => {
Some(session_id)
}
Self::LegAdded { session_id, .. } | Self::LegRemoved { session_id, .. } => {
Some(session_id)
}
Self::BridgeEstablished { session_id, .. } | Self::BridgeBroken { session_id, .. } => {
Some(session_id)
}
Self::PlayStarted { session_id, .. } | Self::PlayFinished { session_id, .. } => {
Some(session_id)
}
Self::RecordingStarted { session_id }
| Self::RecordingStopped { session_id, .. }
| Self::RecordingPaused { session_id }
| Self::RecordingResumed { session_id }
| Self::SipFlowStarted { session_id }
| Self::SipFlowStopped { session_id } => Some(session_id),
Self::DtmfCollected { session_id, .. } => Some(session_id),
Self::MixerJoined { session_id, .. } | Self::MixerLeft { session_id, .. } => {
Some(session_id)
}
Self::LegHeld { session_id, .. } | Self::LegUnheld { session_id, .. } => {
Some(session_id)
}
Self::Error { session_id, .. } => Some(session_id),
}
}
}