gstreamer_pbutils/
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::DiscovererSerializeFlags);
11bitflags_serde_impl!(crate::PbUtilsCapsDescriptionFlags, "v1_20");
12
13#[cfg(test)]
14mod tests {
15    macro_rules! check_serialize {
16        ($flags:expr, $expected:expr) => {
17            let actual = serde_json::to_string(&$flags).unwrap();
18            assert_eq!(actual, $expected);
19        };
20    }
21
22    macro_rules! check_deserialize {
23        ($ty:ty, $expected:expr, $json:expr) => {
24            let actual: $ty = serde_json::from_str(&$json).unwrap();
25            assert_eq!(actual, $expected);
26        };
27    }
28
29    macro_rules! check_roundtrip {
30        ($ty:ty, $flags:expr) => {
31            let json = serde_json::to_string(&$flags).unwrap();
32            let deserialized: $ty = serde_json::from_str(&json).unwrap();
33            assert_eq!(deserialized, $flags);
34        };
35    }
36
37    #[test]
38    fn test_serialize() {
39        gst::init().unwrap();
40
41        check_serialize!(crate::DiscovererSerializeFlags::all(), "\"caps+tags+misc\"");
42        #[cfg(feature = "v1_22")]
43        check_serialize!(
44            crate::PbUtilsCapsDescriptionFlags::all(),
45            "\"container+audio+video+image+subtitle+tag+generic+metadata\""
46        );
47        #[cfg(all(feature = "v1_20", not(feature = "v1_22")))]
48        check_serialize!(
49            crate::PbUtilsCapsDescriptionFlags::all(),
50            "\"container+audio+video+image+subtitle+tag+generic\""
51        );
52    }
53
54    #[test]
55    fn test_deserialize() {
56        gst::init().unwrap();
57
58        check_deserialize!(
59            crate::DiscovererSerializeFlags,
60            crate::DiscovererSerializeFlags::all(),
61            "\"caps+tags+misc\""
62        );
63        #[cfg(feature = "v1_22")]
64        check_deserialize!(
65            crate::PbUtilsCapsDescriptionFlags,
66            crate::PbUtilsCapsDescriptionFlags::all(),
67            "\"container+audio+video+image+subtitle+tag+generic+metadata\""
68        );
69        #[cfg(all(feature = "v1_20", not(feature = "v1_22")))]
70        check_deserialize!(
71            crate::PbUtilsCapsDescriptionFlags,
72            crate::PbUtilsCapsDescriptionFlags::all(),
73            "\"container+audio+video+image+subtitle+tag+generic\""
74        );
75    }
76
77    #[test]
78    fn test_serde_roundtrip() {
79        gst::init().unwrap();
80
81        check_roundtrip!(
82            crate::DiscovererSerializeFlags,
83            crate::DiscovererSerializeFlags::all()
84        );
85        #[cfg(feature = "v1_20")]
86        check_roundtrip!(
87            crate::PbUtilsCapsDescriptionFlags,
88            crate::PbUtilsCapsDescriptionFlags::all()
89        );
90    }
91}