gstreamer_editing_services/
flag_serde.rs
1use 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}