use crate::room::track::local_video_track::LocalVideoTrack; use crate::room::track::remote_video_track::RemoteVideoTrack; use crate::room::track::TrackHandle; use std::sync::Arc; #[derive(Clone)] pub enum VideoTrackHandle { Local(Arc), Remote(Arc), } impl From for TrackHandle { fn from(video_track: VideoTrackHandle) -> Self { match video_track { VideoTrackHandle::Local(local_video) => Self::LocalVideo(local_video), VideoTrackHandle::Remote(remote_video) => Self::RemoteVideo(remote_video), } } } impl TryFrom for VideoTrackHandle { type Error = &'static str; fn try_from(track: TrackHandle) -> Result { match track { TrackHandle::LocalVideo(local_video) => Ok(Self::Local(local_video)), TrackHandle::RemoteVideo(remote_video) => Ok(Self::Remote(remote_video)), _ => Err("not a video track"), } } }