gstreamer_audio/
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::AudioFlags);
11bitflags_serde_impl!(crate::AudioFormatFlags);
12bitflags_serde_impl!(crate::AudioPackFlags);
13
14#[cfg(test)]
15mod tests {
16 macro_rules! check_serialize {
17 ($flags:expr, $expected:expr) => {
18 let actual = serde_json::to_string(&$flags).unwrap();
19 assert_eq!(actual, $expected);
20 };
21 }
22
23 macro_rules! check_deserialize {
24 ($ty:ty, $expected:expr, $json:expr) => {
25 let actual: $ty = serde_json::from_str(&$json).unwrap();
26 assert_eq!(actual, $expected);
27 };
28 }
29
30 macro_rules! check_roundtrip {
31 ($ty:ty, $flags:expr) => {
32 let json = serde_json::to_string(&$flags).unwrap();
33 let deserialized: $ty = serde_json::from_str(&json).unwrap();
34 assert_eq!(deserialized, $flags);
35 };
36 }
37
38 #[test]
39 fn test_serialize() {
40 gst::init().unwrap();
41
42 check_serialize!(crate::AudioFlags::all(), "\"unpositioned\"");
43 check_serialize!(
44 crate::AudioFormatFlags::all(),
45 "\"integer+float+signed+complex+unpack\""
46 );
47 check_serialize!(crate::AudioPackFlags::all(), "\"truncate-range\"");
48 }
49
50 #[test]
51 fn test_deserialize() {
52 gst::init().unwrap();
53
54 check_deserialize!(
55 crate::AudioFlags,
56 crate::AudioFlags::all(),
57 "\"unpositioned\""
58 );
59 check_deserialize!(
60 crate::AudioFormatFlags,
61 crate::AudioFormatFlags::all(),
62 "\"integer+float+signed+complex+unpack\""
63 );
64 check_deserialize!(
65 crate::AudioPackFlags,
66 crate::AudioPackFlags::all(),
67 "\"truncate-range\""
68 );
69 }
70
71 #[test]
72 fn test_serde_roundtrip() {
73 gst::init().unwrap();
74
75 check_roundtrip!(crate::AudioFlags, crate::AudioFlags::all());
76 check_roundtrip!(crate::AudioFormatFlags, crate::AudioFormatFlags::all());
77 check_roundtrip!(crate::AudioPackFlags, crate::AudioPackFlags::all());
78 }
79}