Skip to main content

rvoip_core/
session.rs

1use crate::adapter::EndReason;
2use crate::capability::CapabilityIntersection;
3use crate::ids::{ConnectionId, ConversationId, ParticipantId, SessionId};
4use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6use std::collections::{HashMap, HashSet};
7use std::fmt;
8
9#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
10pub enum SessionState {
11    Initiating,
12    Active,
13    Ending,
14    Ended,
15    Failed,
16}
17
18#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
19pub enum SessionMedium {
20    Voice,
21    Video,
22    VoiceVideo,
23    ScreenShare,
24    TextChat,
25    Mixed,
26}
27
28#[derive(Clone)]
29pub struct ConnectionRef {
30    pub id: ConnectionId,
31    pub participant_id: ParticipantId,
32}
33
34impl fmt::Debug for ConnectionRef {
35    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
36        formatter.write_str("ConnectionRef")
37    }
38}
39
40#[derive(Clone)]
41pub struct Session {
42    pub id: SessionId,
43    pub conversation_id: ConversationId,
44    pub state: SessionState,
45    pub medium: SessionMedium,
46    pub participants: HashSet<ParticipantId>,
47    pub connections: HashMap<ConnectionId, ConnectionRef>,
48    pub negotiated_capabilities: CapabilityIntersection,
49    pub started_at: DateTime<Utc>,
50    pub ended_at: Option<DateTime<Utc>>,
51    pub end_reason: Option<EndReason>,
52}
53
54impl fmt::Debug for Session {
55    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
56        formatter
57            .debug_struct("Session")
58            .field("state", &self.state)
59            .field("medium", &self.medium)
60            .field("participant_count", &self.participants.len())
61            .field("connection_count", &self.connections.len())
62            .field("started_at", &self.started_at)
63            .field("ended_at", &self.ended_at)
64            .field("end_reason_present", &self.end_reason.is_some())
65            .finish()
66    }
67}