gstreamer_rtsp/
flag_serde.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use glib::{
4    prelude::*,
5    translate::{from_glib, ToGlibPtr},
6    FlagsClass,
7};
8use gst::bitflags_serde_impl;
9
10bitflags_serde_impl!(crate::RTSPEvent);
11bitflags_serde_impl!(crate::RTSPLowerTrans);
12bitflags_serde_impl!(crate::RTSPMethod);
13bitflags_serde_impl!(crate::RTSPProfile);
14bitflags_serde_impl!(crate::RTSPTransMode);
15
16#[cfg(test)]
17mod tests {
18    macro_rules! check_serialize {
19        ($flags:expr, $expected:expr) => {
20            let actual = serde_json::to_string(&$flags).unwrap();
21            assert_eq!(actual, $expected);
22        };
23    }
24
25    macro_rules! check_deserialize {
26        ($ty:ty, $expected:expr, $json:expr) => {
27            let actual: $ty = serde_json::from_str(&$json).unwrap();
28            assert_eq!(actual, $expected);
29        };
30    }
31
32    macro_rules! check_roundtrip {
33        ($ty:ty, $flags:expr) => {
34            let json = serde_json::to_string(&$flags).unwrap();
35            let deserialized: $ty = serde_json::from_str(&json).unwrap();
36            assert_eq!(deserialized, $flags);
37        };
38    }
39
40    #[test]
41    fn test_serialize() {
42        gst::init().unwrap();
43
44        check_serialize!(crate::RTSPEvent::all(), "\"read+write\"");
45        check_serialize!(
46            crate::RTSPLowerTrans::all(),
47            "\"udp+udp-mcast+tcp+http+tls\""
48        );
49        check_serialize!(
50            crate::RTSPMethod::all(),
51            concat!(
52                "\"describe+announce+get-parameter+options+pause+play+record",
53                "+redirect+setup+set-parameter+teardown+get+post\""
54            )
55        );
56        check_serialize!(crate::RTSPProfile::all(), "\"avp+savp+avpf+savpf\"");
57        check_serialize!(crate::RTSPTransMode::all(), "\"rtp+rdt\"");
58    }
59
60    #[test]
61    fn test_deserialize() {
62        gst::init().unwrap();
63
64        check_deserialize!(crate::RTSPEvent, crate::RTSPEvent::all(), "\"read+write\"");
65        check_deserialize!(
66            crate::RTSPLowerTrans,
67            crate::RTSPLowerTrans::all(),
68            "\"udp+udp-mcast+tcp+http+tls\""
69        );
70        check_deserialize!(
71            crate::RTSPMethod,
72            crate::RTSPMethod::all(),
73            concat!(
74                "\"describe+announce+get-parameter+options+pause+play+record",
75                "+redirect+setup+set-parameter+teardown+get+post\""
76            )
77        );
78        check_deserialize!(
79            crate::RTSPProfile,
80            crate::RTSPProfile::all(),
81            "\"avp+savp+avpf+savpf\""
82        );
83        check_deserialize!(
84            crate::RTSPTransMode,
85            crate::RTSPTransMode::all(),
86            "\"rtp+rdt\""
87        );
88    }
89
90    #[test]
91    fn test_serde_roundtrip() {
92        gst::init().unwrap();
93
94        check_roundtrip!(crate::RTSPEvent, crate::RTSPEvent::all());
95        check_roundtrip!(crate::RTSPLowerTrans, crate::RTSPLowerTrans::all());
96        check_roundtrip!(crate::RTSPMethod, crate::RTSPMethod::all());
97        check_roundtrip!(crate::RTSPProfile, crate::RTSPProfile::all());
98        check_roundtrip!(crate::RTSPTransMode, crate::RTSPTransMode::all());
99    }
100}