From affc53a515ba089aa8b73d16081ad35253f314cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 1 Dec 2017 11:21:20 +0200 Subject: [PATCH] Implement fmt::Debug more consistently for miniobjects and various other types --- gstreamer/src/buffer.rs | 10 +++++++- gstreamer/src/bufferlist.rs | 15 ++++++++++++ gstreamer/src/caps.rs | 8 ++++++ gstreamer/src/context.rs | 10 ++++++++ gstreamer/src/date_time.rs | 16 ++++++++++++ gstreamer/src/event.rs | 14 +++++++++++ gstreamer/src/lib.rs | 1 + gstreamer/src/log.rs | 4 ++- gstreamer/src/message.rs | 16 ++++++++++++ gstreamer/src/query.rs | 13 ++++++++++ gstreamer/src/segment.rs | 49 +++++++++++++++++++++++++++++++++++-- gstreamer/src/structure.rs | 8 ++++++ gstreamer/src/tags.rs | 8 ++++++ 13 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 gstreamer/src/date_time.rs diff --git a/gstreamer/src/buffer.rs b/gstreamer/src/buffer.rs index 5c6256ffc..5fb3e2835 100644 --- a/gstreamer/src/buffer.rs +++ b/gstreamer/src/buffer.rs @@ -371,7 +371,15 @@ impl ToOwned for BufferRef { impl fmt::Debug for BufferRef { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{:?}", unsafe { self.as_ptr() }) + f.debug_struct("Buffer") + .field("pts", &self.get_pts()) + .field("dts", &self.get_dts()) + .field("duration", &self.get_duration()) + .field("size", &self.get_size()) + .field("offset", &self.get_offset()) + .field("offset_end", &self.get_offset_end()) + .field("flags", &self.get_flags()) + .finish() } } diff --git a/gstreamer/src/bufferlist.rs b/gstreamer/src/bufferlist.rs index 3bcf3aef2..645437650 100644 --- a/gstreamer/src/bufferlist.rs +++ b/gstreamer/src/bufferlist.rs @@ -10,6 +10,7 @@ use ffi; use glib; use glib::StaticType; use glib::translate::{from_glib, from_glib_full}; +use std::fmt; use miniobject::*; use Buffer; @@ -94,6 +95,20 @@ impl ToOwned for BufferListRef { } } +impl fmt::Debug for BufferListRef { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let size = self.iter().map(|b| b.get_size()).sum::(); + let (pts, dts) = self.get(0).map(|b| (b.get_pts(), b.get_dts())).unwrap_or((::ClockTime::none(), ::ClockTime::none())); + + f.debug_struct("BufferList") + .field("buffers", &self.len()) + .field("pts", &pts) + .field("dts", &dts) + .field("size", &size) + .finish() + } +} + impl StaticType for BufferListRef { fn static_type() -> glib::Type { unsafe { from_glib(ffi::gst_buffer_list_get_type()) } diff --git a/gstreamer/src/caps.rs b/gstreamer/src/caps.rs index 50b10dfdc..a2b978d9f 100644 --- a/gstreamer/src/caps.rs +++ b/gstreamer/src/caps.rs @@ -344,6 +344,14 @@ define_iter!(Iter, &'a CapsRef, &'a StructureRef); define_iter!(IterMut, &'a mut CapsRef, &'a mut StructureRef); impl fmt::Debug for CapsRef { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_tuple("Caps") + .field(&self.to_string()) + .finish() + } +} + +impl fmt::Display for CapsRef { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(&self.to_string()) } diff --git a/gstreamer/src/context.rs b/gstreamer/src/context.rs index 0769712a0..7c3ab2ac1 100644 --- a/gstreamer/src/context.rs +++ b/gstreamer/src/context.rs @@ -6,6 +6,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use std::fmt; use std::ffi::CStr; use ffi; @@ -76,6 +77,15 @@ impl StaticType for ContextRef { } } +impl fmt::Debug for ContextRef { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("Context") + .field("type", &self.get_context_type()) + .field("structure", &self.get_structure()) + .finish() + } +} + impl ToOwned for ContextRef { type Owned = GstRc; diff --git a/gstreamer/src/date_time.rs b/gstreamer/src/date_time.rs new file mode 100644 index 000000000..fe7ff9f77 --- /dev/null +++ b/gstreamer/src/date_time.rs @@ -0,0 +1,16 @@ +// Copyright (C) 2017 Sebastian Dröge +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use DateTime; +use std::fmt; + +impl fmt::Display for DateTime { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str(self.to_iso8601_string().unwrap_or(String::from("None")).as_str()) + } +} diff --git a/gstreamer/src/event.rs b/gstreamer/src/event.rs index 05538cb70..5e8b9bbfe 100644 --- a/gstreamer/src/event.rs +++ b/gstreamer/src/event.rs @@ -13,6 +13,7 @@ use structure::*; use std::ptr; use std::mem; use std::cmp; +use std::fmt; use std::ffi::CStr; use glib; @@ -368,6 +369,19 @@ impl glib::types::StaticType for EventRef { } } +impl fmt::Debug for EventRef { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("Event") + .field("type", & unsafe { + let type_ = ffi::gst_event_type_get_name((*self.as_ptr()).type_); + CStr::from_ptr(type_).to_str().unwrap() + }) + .field("seqnum", &self.get_seqnum()) + .field("structure", &self.get_structure()) + .finish() + } +} + impl ToOwned for EventRef { type Owned = GstRc; diff --git a/gstreamer/src/lib.rs b/gstreamer/src/lib.rs index 6e846a42b..7c88ff301 100644 --- a/gstreamer/src/lib.rs +++ b/gstreamer/src/lib.rs @@ -106,6 +106,7 @@ mod parse_context; mod enums; mod clock_time; mod format; +mod date_time; pub use object::GstObjectExtManual; pub use element::{ElementExtManual, ElementMessageType, NotifyWatchId}; pub use element::{ELEMENT_METADATA_AUTHOR, ELEMENT_METADATA_DESCRIPTION, ELEMENT_METADATA_DOC_URI, diff --git a/gstreamer/src/log.rs b/gstreamer/src/log.rs index 8e3f661ca..30b0acc04 100644 --- a/gstreamer/src/log.rs +++ b/gstreamer/src/log.rs @@ -121,7 +121,9 @@ unsafe impl Send for DebugCategory {} impl fmt::Debug for DebugCategory { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.write_str(self.get_name()) + f.debug_tuple("DebugCategory") + .field(&self.get_name()) + .finish() } } diff --git a/gstreamer/src/message.rs b/gstreamer/src/message.rs index 86669676a..d4aa4437a 100644 --- a/gstreamer/src/message.rs +++ b/gstreamer/src/message.rs @@ -11,9 +11,11 @@ use Object; use miniobject::*; use structure::*; use TagList; +use GstObjectExt; use std::ptr; use std::mem; +use std::fmt; use std::ffi::CStr; use glib; @@ -342,6 +344,20 @@ impl glib::types::StaticType for MessageRef { } } +impl fmt::Debug for MessageRef { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("Message") + .field("type", & unsafe { + let type_ = ffi::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("structure", &self.get_structure()) + .finish() + } +} + impl ToOwned for MessageRef { type Owned = GstRc; diff --git a/gstreamer/src/query.rs b/gstreamer/src/query.rs index 260740f5f..81d804fad 100644 --- a/gstreamer/src/query.rs +++ b/gstreamer/src/query.rs @@ -12,6 +12,7 @@ use structure::*; use std::ptr; use std::mem; +use std::fmt; use std::ffi::CStr; use std::ops::Deref; @@ -182,6 +183,18 @@ impl glib::types::StaticType for QueryRef { } } +impl fmt::Debug for QueryRef { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("Query") + .field("type", & unsafe { + let type_ = ffi::gst_query_type_get_name((*self.as_ptr()).type_); + CStr::from_ptr(type_).to_str().unwrap() + }) + .field("structure", &self.get_structure()) + .finish() + } +} + impl ToOwned for QueryRef { type Owned = GstRc; diff --git a/gstreamer/src/segment.rs b/gstreamer/src/segment.rs index eba0f5bab..98c54a84f 100644 --- a/gstreamer/src/segment.rs +++ b/gstreamer/src/segment.rs @@ -7,6 +7,7 @@ // except according to those terms. use Format; +use ClockTime; use SeekFlags; use SeekType; use ffi; @@ -16,6 +17,7 @@ use gobject_ffi; use glib; use std::mem; use std::ptr; +use std::fmt; pub struct Segment(ffi::GstSegment); @@ -233,11 +235,11 @@ impl Segment { self.0.applied_rate = applied_rate; } - pub fn get_format(&self) -> ::Format { + pub fn get_format(&self) -> Format { from_glib(self.0.format) } - pub fn set_format(&mut self, format: ::Format) { + pub fn set_format(&mut self, format: Format) { self.0.format = format.to_glib(); } @@ -315,6 +317,49 @@ impl Clone for Segment { } } +impl fmt::Debug for Segment { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self.get_format() { + Format::Undefined => { + f.debug_struct("Segment") + .field("format", &Format::Undefined) + .finish() + }, + Format::Time => { + f.debug_struct("Segment") + .field("format", &Format::Time) + .field("start", &ClockTime::from(self.get_start())) + .field("offset", &ClockTime::from(self.get_offset())) + .field("stop", &ClockTime::from(self.get_stop())) + .field("rate", &self.get_rate()) + .field("applied_rate", &self.get_applied_rate()) + .field("flags", &self.get_flags()) + .field("time", &ClockTime::from(self.get_time())) + .field("base", &ClockTime::from(self.get_base())) + .field("position", &ClockTime::from(self.get_position())) + .field("duration", &ClockTime::from(self.get_duration())) + .finish() + }, + _ => { + f.debug_struct("Segment") + .field("format", &self.get_format()) + .field("start", &self.get_start()) + .field("offset", &self.get_offset()) + .field("stop", &self.get_stop()) + .field("rate", &self.get_rate()) + .field("applied_rate", &self.get_applied_rate()) + .field("flags", &self.get_flags()) + .field("time", &self.get_time()) + .field("base", &self.get_base()) + .field("position", &self.get_position()) + .field("duration", &self.get_duration()) + .finish() + } + + } + } +} + impl glib::types::StaticType for Segment { fn static_type() -> glib::types::Type { unsafe { glib::translate::from_glib(ffi::gst_segment_get_type()) } diff --git a/gstreamer/src/structure.rs b/gstreamer/src/structure.rs index 865de18a0..f670565fd 100644 --- a/gstreamer/src/structure.rs +++ b/gstreamer/src/structure.rs @@ -115,6 +115,14 @@ impl Drop for Structure { } impl fmt::Debug for Structure { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_tuple("Structure") + .field(&self.to_string()) + .finish() + } +} + +impl fmt::Display for Structure { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(&self.to_string()) } diff --git a/gstreamer/src/tags.rs b/gstreamer/src/tags.rs index ac91e6eb1..b4c244a03 100644 --- a/gstreamer/src/tags.rs +++ b/gstreamer/src/tags.rs @@ -327,6 +327,14 @@ impl TagListRef { } impl fmt::Debug for TagListRef { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_tuple("TagList") + .field(&self.to_string()) + .finish() + } +} + +impl fmt::Display for TagListRef { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(&self.to_string()) }