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