pub mod webrtc;
use derive_more::From;
use medea_control_api_proto::grpc::api as proto;
use medea_macro::enum_delegate;
use crate::signalling::elements::endpoints::webrtc::{
play_endpoint::WeakWebRtcPlayEndpoint,
publish_endpoint::WeakWebRtcPublishEndpoint,
};
#[enum_delegate(pub fn is_force_relayed(&self) -> bool)]
#[enum_delegate(pub fn has_traffic_callback(&self) -> bool)]
#[derive(Clone, Debug, From)]
pub enum Endpoint {
WebRtcPublishEndpoint(webrtc::WebRtcPublishEndpoint),
WebRtcPlayEndpoint(webrtc::WebRtcPlayEndpoint),
}
impl Endpoint {
#[inline]
#[must_use]
pub fn downgrade(&self) -> WeakEndpoint {
match self {
Self::WebRtcPublishEndpoint(publish) => publish.downgrade().into(),
Self::WebRtcPlayEndpoint(play) => play.downgrade().into(),
}
}
}
impl From<Endpoint> for proto::Element {
#[inline]
fn from(endpoint: Endpoint) -> Self {
match endpoint {
Endpoint::WebRtcPublishEndpoint(play) => play.into(),
Endpoint::WebRtcPlayEndpoint(publish) => publish.into(),
}
}
}
#[derive(Clone, Debug, From)]
pub enum WeakEndpoint {
WebRtcPublishEndpoint(WeakWebRtcPublishEndpoint),
WebRtcPlayEndpoint(WeakWebRtcPlayEndpoint),
}
impl WeakEndpoint {
#[must_use]
pub fn upgrade(&self) -> Option<Endpoint> {
match self {
WeakEndpoint::WebRtcPublishEndpoint(ep) => {
ep.safe_upgrade().map(Into::into)
}
WeakEndpoint::WebRtcPlayEndpoint(ep) => {
ep.safe_upgrade().map(Into::into)
}
}
}
}