use serde::{Deserialize, Serialize};
use crate::common::{PhantomId, SerializableId, SocketInfo};
use crate::prelude::{PeerId, Token};
#[derive(Serialize, Deserialize, Debug, Clone, PartialOrd, PartialEq, Eq, Ord, Hash)]
pub struct MediaId(pub String);
impl MediaId {
pub fn as_str(&self) -> &str {
self.0.as_str()
}
pub fn new(media_id: impl Into<String>) -> Self {
MediaId(media_id.into())
}
}
impl SerializableId for MediaId {
fn try_create(id: Option<String>) -> Option<Self>
where
Self: Sized,
{
id.map(|id| MediaId(id))
}
fn as_str(&self) -> &str {
self.0.as_str()
}
fn id(&self) -> String {
self.0.clone()
}
fn key(&self) -> &'static str {
"media_id"
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialOrd, PartialEq, Eq, Ord, Hash)]
pub struct RtcpId(pub String);
impl RtcpId {
pub fn as_str(&self) -> &str {
self.0.as_str()
}
pub fn new(rtcp_id: impl Into<String>) -> Self {
RtcpId(rtcp_id.into())
}
}
impl SerializableId for RtcpId {
fn try_create(id: Option<String>) -> Option<Self>
where
Self: Sized,
{
id.map(|id| RtcpId(id))
}
fn as_str(&self) -> &str {
self.0.as_str()
}
fn id(&self) -> String {
self.0.clone()
}
fn key(&self) -> &'static str {
"rtcp_id"
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialOrd, PartialEq, Eq, Ord, Hash)]
pub struct MediaConnectionId(pub String);
impl MediaConnectionId {
pub fn as_str(&self) -> &str {
self.0.as_str()
}
pub fn new(media_connection_id: impl Into<String>) -> Self {
MediaConnectionId(media_connection_id.into())
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub(crate) struct CreateMediaOptions {
pub is_video: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct CallQuery {
pub peer_id: PeerId,
pub token: Token,
pub target_id: PeerId,
pub constraints: Option<Constraints>,
pub redirect_params: Option<RedirectParameters>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[allow(non_snake_case)]
pub struct Constraints {
pub video: bool,
pub videoReceiveEnabled: Option<bool>,
pub audio: bool,
pub audioReceiveEnabled: Option<bool>,
pub video_params: Option<MediaParams>,
pub audio_params: Option<MediaParams>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct MediaParams {
pub band_width: usize,
pub codec: String,
pub media_id: MediaId,
pub rtcp_id: Option<RtcpId>,
pub payload_type: Option<u16>,
pub sampling_rate: Option<usize>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct RedirectParameters {
pub video: Option<SocketInfo<PhantomId>>,
pub video_rtcp: Option<SocketInfo<PhantomId>>,
pub audio: Option<SocketInfo<PhantomId>>,
pub audio_rtcp: Option<SocketInfo<PhantomId>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct CallResponse {
pub command_type: String,
pub params: MediaConnectionIdWrapper,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, PartialOrd)]
pub struct MediaConnectionIdWrapper {
pub media_connection_id: MediaConnectionId,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct AnswerQuery {
pub constraints: Constraints,
pub redirect_params: Option<RedirectParameters>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct AnswerResponse {
pub command_type: String,
pub params: AnswerResponseParams,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct AnswerResponseParams {
pub video_id: Option<MediaId>,
pub audio_id: Option<MediaId>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(tag = "event")]
pub(crate) enum EventEnum {
READY,
STREAM,
CLOSE,
ERROR { error_message: String },
TIMEOUT,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct MediaConnectionStatus {
pub metadata: String,
pub open: bool,
pub remote_id: PeerId,
pub ssrc: Vec<SsrcPair>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SsrcPair {
pub media_id: MediaId,
pub ssrc: usize,
}