gstreamer_pbutils/
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::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}