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