2022-05-05 10:40:07 +00:00
|
|
|
// Take a look at the license at the top of the repository in the LICENSE file.
|
|
|
|
|
2023-01-03 18:58:25 +00:00
|
|
|
use glib::{
|
|
|
|
translate::{from_glib, ToGlibPtr},
|
|
|
|
FlagsClass, StaticType, ToValue,
|
|
|
|
};
|
2022-05-05 10:40:07 +00:00
|
|
|
use gst::{bitflags_deserialize_impl, bitflags_serde_impl, bitflags_serialize_impl};
|
|
|
|
|
|
|
|
bitflags_serialize_impl!(crate::RTPBufferFlags, by_ones_decreasing);
|
|
|
|
bitflags_deserialize_impl!(crate::RTPBufferFlags);
|
|
|
|
bitflags_serde_impl!(crate::RTPBufferMapFlags);
|
|
|
|
// use this implementation, since serializing to "sendonly+recvonly"
|
|
|
|
// wouldn't make much sense
|
|
|
|
bitflags_serialize_impl!(
|
|
|
|
crate::RTPHeaderExtensionDirection,
|
|
|
|
by_ones_decreasing,
|
|
|
|
"v1_20"
|
|
|
|
);
|
|
|
|
bitflags_deserialize_impl!(crate::RTPHeaderExtensionDirection, "v1_20");
|
|
|
|
bitflags_serde_impl!(crate::RTPHeaderExtensionFlags, "v1_20");
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
macro_rules! check_serialize {
|
|
|
|
($flags:expr, $expected:expr) => {
|
|
|
|
let actual = serde_json::to_string(&$flags).unwrap();
|
|
|
|
assert_eq!(actual, $expected);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! check_deserialize {
|
|
|
|
($ty:ty, $expected:expr, $json:expr) => {
|
|
|
|
let actual: $ty = serde_json::from_str(&$json).unwrap();
|
|
|
|
assert_eq!(actual, $expected);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! check_roundtrip {
|
|
|
|
($ty:ty, $flags:expr) => {
|
|
|
|
let json = serde_json::to_string(&$flags).unwrap();
|
|
|
|
let deserialized: $ty = serde_json::from_str(&json).unwrap();
|
|
|
|
assert_eq!(deserialized, $flags);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_serialize() {
|
|
|
|
gst::init().unwrap();
|
|
|
|
|
|
|
|
check_serialize!(crate::RTPBufferFlags::all(), "\"retransmission+redundant\"");
|
|
|
|
check_serialize!(crate::RTPBufferMapFlags::all(), "\"skip-padding\"");
|
|
|
|
#[cfg(feature = "v1_20")]
|
|
|
|
check_serialize!(
|
|
|
|
crate::RTPHeaderExtensionDirection::all(),
|
|
|
|
"\"sendrecv+inherited\""
|
|
|
|
);
|
|
|
|
#[cfg(feature = "v1_20")]
|
|
|
|
check_serialize!(
|
|
|
|
crate::RTPHeaderExtensionDirection::INACTIVE
|
|
|
|
| crate::RTPHeaderExtensionDirection::SENDONLY
|
|
|
|
| crate::RTPHeaderExtensionDirection::INHERITED,
|
|
|
|
"\"sendonly+inherited\""
|
|
|
|
);
|
|
|
|
#[cfg(feature = "v1_20")]
|
|
|
|
check_serialize!(
|
|
|
|
crate::RTPHeaderExtensionFlags::all(),
|
|
|
|
"\"one-byte+two-byte\""
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_deserialize() {
|
|
|
|
gst::init().unwrap();
|
|
|
|
|
|
|
|
check_deserialize!(
|
|
|
|
crate::RTPBufferFlags,
|
|
|
|
crate::RTPBufferFlags::all(),
|
|
|
|
"\"retransmission+redundant\""
|
|
|
|
);
|
|
|
|
check_deserialize!(
|
|
|
|
crate::RTPBufferMapFlags,
|
|
|
|
crate::RTPBufferMapFlags::all(),
|
|
|
|
"\"skip-padding\""
|
|
|
|
);
|
|
|
|
#[cfg(feature = "v1_20")]
|
|
|
|
check_deserialize!(
|
|
|
|
crate::RTPHeaderExtensionDirection,
|
|
|
|
crate::RTPHeaderExtensionDirection::all(),
|
|
|
|
"\"sendrecv+inactive+inherited\""
|
|
|
|
);
|
|
|
|
#[cfg(feature = "v1_20")]
|
|
|
|
check_deserialize!(
|
|
|
|
crate::RTPHeaderExtensionFlags,
|
|
|
|
crate::RTPHeaderExtensionFlags::all(),
|
|
|
|
"\"one-byte+two-byte\""
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_serde_roundtrip() {
|
|
|
|
gst::init().unwrap();
|
|
|
|
|
|
|
|
check_roundtrip!(crate::RTPBufferFlags, crate::RTPBufferFlags::all());
|
|
|
|
check_roundtrip!(crate::RTPBufferMapFlags, crate::RTPBufferMapFlags::all());
|
|
|
|
#[cfg(feature = "v1_20")]
|
|
|
|
check_roundtrip!(
|
|
|
|
crate::RTPHeaderExtensionDirection,
|
|
|
|
crate::RTPHeaderExtensionDirection::all()
|
|
|
|
);
|
|
|
|
#[cfg(feature = "v1_20")]
|
|
|
|
check_roundtrip!(
|
|
|
|
crate::RTPHeaderExtensionFlags,
|
|
|
|
crate::RTPHeaderExtensionFlags::all()
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|