ruma_events/call/
answer.rs1use std::collections::BTreeMap;
6
7use ruma_common::{OwnedVoipId, VoipVersionId};
8use ruma_macros::EventContent;
9use serde::{Deserialize, Serialize};
10
11#[cfg(feature = "unstable-msc2747")]
12use super::CallCapabilities;
13use super::{SessionDescription, StreamMetadata};
14
15#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
19#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
20#[ruma_event(type = "m.call.answer", kind = MessageLike)]
21pub struct CallAnswerEventContent {
22 pub answer: SessionDescription,
24
25 pub call_id: OwnedVoipId,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub party_id: Option<OwnedVoipId>,
31
32 pub version: VoipVersionId,
34
35 #[cfg(feature = "unstable-msc2747")]
36 #[serde(default, skip_serializing_if = "CallCapabilities::is_default")]
38 pub capabilities: CallCapabilities,
39
40 #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
44 pub sdp_stream_metadata: BTreeMap<String, StreamMetadata>,
45}
46
47impl CallAnswerEventContent {
48 pub fn new(answer: SessionDescription, call_id: OwnedVoipId, version: VoipVersionId) -> Self {
50 Self {
51 answer,
52 call_id,
53 party_id: None,
54 version,
55 #[cfg(feature = "unstable-msc2747")]
56 capabilities: Default::default(),
57 sdp_stream_metadata: Default::default(),
58 }
59 }
60
61 pub fn version_0(answer: SessionDescription, call_id: OwnedVoipId) -> Self {
64 Self::new(answer, call_id, VoipVersionId::V0)
65 }
66
67 pub fn version_1(
70 answer: SessionDescription,
71 call_id: OwnedVoipId,
72 party_id: OwnedVoipId,
73 ) -> Self {
74 Self {
75 answer,
76 call_id,
77 party_id: Some(party_id),
78 version: VoipVersionId::V1,
79 #[cfg(feature = "unstable-msc2747")]
80 capabilities: Default::default(),
81 sdp_stream_metadata: Default::default(),
82 }
83 }
84}