forked from mirrors/gstreamer-rs
gstreamer/message: enhance Debug impl for Message[Ref]
When "{:?}" printing a Message[Ref], the following issues lower the experience: - If the Message seqnum is GST_SEQNUM_INVALID (0), a panic occurs due to an assertion failure in MessageRef::get_seqnum. - The src of the Message displays the GString address. Origin issue for an occurrence of the first case above fixed in https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/860
This commit is contained in:
parent
fa3f6eefc9
commit
c987bb0c7d
1 changed files with 14 additions and 2 deletions
|
@ -140,14 +140,26 @@ impl fmt::Debug for Message {
|
|||
|
||||
impl fmt::Debug for MessageRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
// Don't retrieve `seqnum` using `MessageRef::get_seqnum`
|
||||
// because it would generate a new seqnum if a buggy `Element`
|
||||
// emitted a `Message` with an invalid `seqnum`.
|
||||
// We want to help the user find out there is something wrong here,
|
||||
// so they can investigate the origin.
|
||||
let seqnum = unsafe { gst_sys::gst_message_get_seqnum(self.as_mut_ptr()) };
|
||||
let seqnum = if seqnum != 0 {
|
||||
&seqnum as &dyn fmt::Debug
|
||||
} else {
|
||||
&"INVALID (0)" as &dyn fmt::Debug
|
||||
};
|
||||
|
||||
f.debug_struct("Message")
|
||||
.field("ptr", unsafe { &self.as_ptr() })
|
||||
.field("type", &unsafe {
|
||||
let type_ = gst_sys::gst_message_type_get_name((*self.as_ptr()).type_);
|
||||
CStr::from_ptr(type_).to_str().unwrap()
|
||||
})
|
||||
.field("seqnum", &self.get_seqnum())
|
||||
.field("src", &self.get_src().map(|s| s.get_name()))
|
||||
.field("seqnum", seqnum)
|
||||
.field("src", &self.get_src().map(|s| s.get_name().to_owned()))
|
||||
.field("structure", &self.get_structure())
|
||||
.finish()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue