gstreamer_rtp/
flag_serde.rs
1use glib::{
4 prelude::*,
5 translate::{from_glib, ToGlibPtr},
6 FlagsClass,
7};
8use gst::{bitflags_deserialize_impl, bitflags_serde_impl, bitflags_serialize_impl};
9
10bitflags_serialize_impl!(crate::RTPBufferFlags, by_ones_decreasing);
11bitflags_deserialize_impl!(crate::RTPBufferFlags);
12bitflags_serde_impl!(crate::RTPBufferMapFlags);
13bitflags_serialize_impl!(
16 crate::RTPHeaderExtensionDirection,
17 by_ones_decreasing,
18 "v1_20"
19);
20bitflags_deserialize_impl!(crate::RTPHeaderExtensionDirection, "v1_20");
21bitflags_serde_impl!(crate::RTPHeaderExtensionFlags, "v1_20");
22
23#[cfg(test)]
24mod tests {
25 macro_rules! check_serialize {
26 ($flags:expr, $expected:expr) => {
27 let actual = serde_json::to_string(&$flags).unwrap();
28 assert_eq!(actual, $expected);
29 };
30 }
31
32 macro_rules! check_deserialize {
33 ($ty:ty, $expected:expr, $json:expr) => {
34 let actual: $ty = serde_json::from_str(&$json).unwrap();
35 assert_eq!(actual, $expected);
36 };
37 }
38
39 macro_rules! check_roundtrip {
40 ($ty:ty, $flags:expr) => {
41 let json = serde_json::to_string(&$flags).unwrap();
42 let deserialized: $ty = serde_json::from_str(&json).unwrap();
43 assert_eq!(deserialized, $flags);
44 };
45 }
46
47 #[test]
48 fn test_serialize() {
49 gst::init().unwrap();
50
51 check_serialize!(crate::RTPBufferFlags::all(), "\"retransmission+redundant\"");
52 check_serialize!(crate::RTPBufferMapFlags::all(), "\"skip-padding\"");
53 #[cfg(feature = "v1_20")]
54 check_serialize!(
55 crate::RTPHeaderExtensionDirection::all(),
56 "\"sendrecv+inherited\""
57 );
58 #[cfg(feature = "v1_20")]
59 check_serialize!(
60 crate::RTPHeaderExtensionDirection::INACTIVE
61 | crate::RTPHeaderExtensionDirection::SENDONLY
62 | crate::RTPHeaderExtensionDirection::INHERITED,
63 "\"sendonly+inherited\""
64 );
65 #[cfg(feature = "v1_20")]
66 check_serialize!(
67 crate::RTPHeaderExtensionFlags::all(),
68 "\"one-byte+two-byte\""
69 );
70 }
71
72 #[test]
73 fn test_deserialize() {
74 gst::init().unwrap();
75
76 check_deserialize!(
77 crate::RTPBufferFlags,
78 crate::RTPBufferFlags::all(),
79 "\"retransmission+redundant\""
80 );
81 check_deserialize!(
82 crate::RTPBufferMapFlags,
83 crate::RTPBufferMapFlags::all(),
84 "\"skip-padding\""
85 );
86 #[cfg(feature = "v1_20")]
87 check_deserialize!(
88 crate::RTPHeaderExtensionDirection,
89 crate::RTPHeaderExtensionDirection::all(),
90 "\"sendrecv+inactive+inherited\""
91 );
92 #[cfg(feature = "v1_20")]
93 check_deserialize!(
94 crate::RTPHeaderExtensionFlags,
95 crate::RTPHeaderExtensionFlags::all(),
96 "\"one-byte+two-byte\""
97 );
98 }
99
100 #[test]
101 fn test_serde_roundtrip() {
102 gst::init().unwrap();
103
104 check_roundtrip!(crate::RTPBufferFlags, crate::RTPBufferFlags::all());
105 check_roundtrip!(crate::RTPBufferMapFlags, crate::RTPBufferMapFlags::all());
106 #[cfg(feature = "v1_20")]
107 check_roundtrip!(
108 crate::RTPHeaderExtensionDirection,
109 crate::RTPHeaderExtensionDirection::all()
110 );
111 #[cfg(feature = "v1_20")]
112 check_roundtrip!(
113 crate::RTPHeaderExtensionFlags,
114 crate::RTPHeaderExtensionFlags::all()
115 );
116 }
117}