use std::sync::{Arc, Weak};
use std::time::Instant;
use str0m::media::{MediaKind, Mid};
use crate::propagate::ClientId;
#[derive(Debug)]
pub struct TrackIn {
pub origin: ClientId,
pub mid: Mid,
pub kind: MediaKind,
pub relay_source: bool,
}
#[derive(Debug)]
pub(crate) struct TrackInEntry {
pub id: Arc<TrackIn>,
pub last_keyframe_request: Option<Instant>,
}
#[allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum TrackOutState {
ToOpen,
Negotiating(Mid),
Open(Mid),
}
#[derive(Debug)]
pub(crate) struct TrackOut {
pub track_in: Weak<TrackIn>,
pub state: TrackOutState,
}
impl TrackOut {
pub(crate) fn mid(&self) -> Option<Mid> {
match self.state {
TrackOutState::ToOpen => None,
TrackOutState::Negotiating(m) | TrackOutState::Open(m) => Some(m),
}
}
}