use std::collections::{HashMap, HashSet};
use serde::{Deserialize, Serialize};
use crate::{
ConnectionMode, IceCandidate, IceServer, MediaDirection, MediaType,
MemberId, NegotiationRole, PeerId, TrackId,
};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Room {
pub peers: HashMap<PeerId, Peer>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Peer {
pub id: PeerId,
pub connection_mode: ConnectionMode,
pub senders: HashMap<TrackId, Sender>,
pub receivers: HashMap<TrackId, Receiver>,
pub force_relay: bool,
pub ice_servers: Vec<IceServer>,
pub negotiation_role: Option<NegotiationRole>,
pub local_sdp: Option<String>,
pub remote_sdp: Option<String>,
pub restart_ice: bool,
pub ice_candidates: HashSet<IceCandidate>,
pub stats_scrape_interval_ms: u32,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Sender {
pub id: TrackId,
pub connection_mode: ConnectionMode,
pub mid: Option<String>,
pub media_type: MediaType,
pub receivers: Vec<MemberId>,
pub muted: bool,
pub media_direction: MediaDirection,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Receiver {
pub id: TrackId,
pub connection_mode: ConnectionMode,
pub mid: Option<String>,
pub media_type: MediaType,
pub sender_id: MemberId,
pub muted: bool,
pub media_direction: MediaDirection,
}