servo_media_streams/
registry.rs1use super::MediaStream;
2use std::collections::HashMap;
3use std::sync::{Arc, LazyLock, Mutex};
4use uuid::Uuid;
5
6type RegisteredMediaStream = Arc<Mutex<dyn MediaStream>>;
7
8static MEDIA_STREAMS_REGISTRY: LazyLock<Mutex<HashMap<MediaStreamId, RegisteredMediaStream>>> =
9 LazyLock::new(|| Mutex::new(HashMap::new()));
10
11#[derive(Clone, Copy, Hash, Eq, PartialEq)]
12pub struct MediaStreamId(Uuid);
13impl MediaStreamId {
14 pub fn new() -> MediaStreamId {
15 Self { 0: Uuid::new_v4() }
16 }
17
18 pub fn id(self) -> Uuid {
19 self.0
20 }
21}
22
23pub fn register_stream(stream: Arc<Mutex<dyn MediaStream>>) -> MediaStreamId {
24 let id = MediaStreamId::new();
25 stream.lock().unwrap().set_id(id.clone());
26 MEDIA_STREAMS_REGISTRY
27 .lock()
28 .unwrap()
29 .insert(id.clone(), stream);
30 id
31}
32
33pub fn unregister_stream(stream: &MediaStreamId) {
34 MEDIA_STREAMS_REGISTRY.lock().unwrap().remove(stream);
35}
36
37pub fn get_stream(stream: &MediaStreamId) -> Option<Arc<Mutex<dyn MediaStream>>> {
38 MEDIA_STREAMS_REGISTRY.lock().unwrap().get(stream).cloned()
39}