Skip to main content

opentalk_roomserver_types_e2ee/
event.rs

1// SPDX-License-Identifier: EUPL-1.2
2// SPDX-FileCopyrightText: OpenTalk Team <mail@opentalk.eu>
3
4use serde::{Deserialize, Serialize};
5
6use crate::{E2eeError, MlsMessages, WelcomeMessage};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(tag = "message", rename_all = "snake_case")]
10pub enum E2eeEvent {
11    Welcome(WelcomeMessage),
12    MlsMessages(MlsMessages),
13    Error(E2eeError),
14}
15
16impl From<E2eeError> for E2eeEvent {
17    fn from(err: E2eeError) -> Self {
18        Self::Error(err)
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use bytes::Bytes;
25    use pretty_assertions::assert_eq;
26    use serde_json::json;
27
28    use super::*;
29    use crate::{E2eeError, MlsMessages, WelcomeMessage};
30
31    fn sample_welcome_message() -> WelcomeMessage {
32        WelcomeMessage {
33            welcome: Bytes::from_static(b"welcome-bytes"),
34            ratchet_tree: Bytes::from_static(b"ratchet-tree-bytes"),
35        }
36    }
37
38    fn sample_mls_messages() -> MlsMessages {
39        MlsMessages {
40            payload: vec![Bytes::from_static(b"mls1"), Bytes::from_static(b"mls2")],
41        }
42    }
43
44    #[test]
45    fn welcome() {
46        let event = E2eeEvent::Welcome(sample_welcome_message());
47        let json_value = json!({
48            "message": "welcome",
49            "welcome": b"welcome-bytes",
50            "ratchet_tree": b"ratchet-tree-bytes",
51        });
52        assert_eq!(serde_json::to_value(&event).unwrap(), json_value);
53        assert_eq!(
54            serde_json::from_value::<E2eeEvent>(json_value).unwrap(),
55            event
56        );
57    }
58
59    #[test]
60    fn mls_messages() {
61        let event = E2eeEvent::MlsMessages(sample_mls_messages());
62        let json_value = json!({
63            "message": "mls_messages",
64            "payload": [
65                b"mls1",
66                b"mls2",
67            ]
68        });
69        assert_eq!(serde_json::to_value(&event).unwrap(), json_value);
70        assert_eq!(
71            serde_json::from_value::<E2eeEvent>(json_value).unwrap(),
72            event
73        );
74    }
75
76    #[test]
77    fn error() {
78        let event = E2eeEvent::Error(E2eeError::InvalidInvite);
79        let json_value = json!({
80            "message": "error",
81            "error": "invalid_invite"
82        });
83        assert_eq!(serde_json::to_value(&event).unwrap(), json_value);
84        assert_eq!(
85            serde_json::from_value::<E2eeEvent>(json_value).unwrap(),
86            event
87        );
88    }
89}