use crate::ids::{SfuMid, SfuRid};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum SfuKeyframeKind {
Pli,
Fir,
}
impl SfuKeyframeKind {
#[allow(dead_code)]
pub(crate) fn from_str0m(k: str0m::media::KeyframeRequestKind) -> Self {
match k {
str0m::media::KeyframeRequestKind::Pli => Self::Pli,
str0m::media::KeyframeRequestKind::Fir => Self::Fir,
}
}
#[allow(dead_code)]
pub(crate) fn to_str0m(self) -> str0m::media::KeyframeRequestKind {
match self {
Self::Pli => str0m::media::KeyframeRequestKind::Pli,
Self::Fir => str0m::media::KeyframeRequestKind::Fir,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct SfuKeyframeRequest {
mid: SfuMid,
rid: Option<SfuRid>,
kind: SfuKeyframeKind,
}
impl SfuKeyframeRequest {
pub fn mid(&self) -> SfuMid {
self.mid
}
pub fn rid(&self) -> Option<SfuRid> {
self.rid
}
pub fn kind(&self) -> SfuKeyframeKind {
self.kind
}
#[allow(dead_code)]
pub(crate) fn from_str0m(r: str0m::media::KeyframeRequest) -> Self {
Self {
mid: SfuMid::from_str0m(r.mid),
rid: r.rid.map(SfuRid::from_str0m),
kind: SfuKeyframeKind::from_str0m(r.kind),
}
}
}
#[cfg(any(test, feature = "test-utils"))]
impl SfuKeyframeRequest {
pub fn new_for_tests(mid: SfuMid, rid: Option<SfuRid>, kind: SfuKeyframeKind) -> Self {
Self { mid, rid, kind }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn kind_roundtrip() {
for k in [
str0m::media::KeyframeRequestKind::Pli,
str0m::media::KeyframeRequestKind::Fir,
] {
let wrapped = SfuKeyframeKind::from_str0m(k);
assert_eq!(wrapped.to_str0m(), k);
}
}
}