1 // Copyright (C) 2017 Sebastian Dröge <sebastian@centricular.com> 2 // 3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or 4 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 5 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your 6 // option. This file may not be copied, modified, or distributed 7 // except according to those terms. 8 9 use Caps; 10 11 use glib_sys; 12 use gobject_sys; 13 use gst_sys; 14 15 use glib; 16 use glib::translate::{from_glib_full, FromGlibPtrNone, ToGlibPtr, ToGlibPtrMut}; 17 18 use std::ffi::CStr; 19 use std::fmt; 20 use std::ptr; 21 22 #[repr(C)] 23 pub struct StaticCaps(ptr::NonNull<gst_sys::GstStaticCaps>); 24 25 impl StaticCaps { get(&self) -> Caps26 pub fn get(&self) -> Caps { 27 unsafe { from_glib_full(gst_sys::gst_static_caps_get(self.0.as_ptr())) } 28 } 29 } 30 31 unsafe impl Send for StaticCaps {} 32 unsafe impl Sync for StaticCaps {} 33 34 impl fmt::Debug for StaticCaps { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result35 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 36 f.debug_struct("StaticCaps") 37 .field("str", &unsafe { 38 CStr::from_ptr(self.0.as_ref().string).to_str() 39 }) 40 .finish() 41 } 42 } 43 44 impl glib::types::StaticType for StaticCaps { static_type() -> glib::types::Type45 fn static_type() -> glib::types::Type { 46 unsafe { glib::translate::from_glib(gst_sys::gst_static_caps_get_type()) } 47 } 48 } 49 50 #[doc(hidden)] 51 impl<'a> glib::value::FromValueOptional<'a> for StaticCaps { from_value_optional(value: &glib::Value) -> Option<Self>52 unsafe fn from_value_optional(value: &glib::Value) -> Option<Self> { 53 Option::<StaticCaps>::from_glib_none( 54 gobject_sys::g_value_get_boxed(value.to_glib_none().0) as *mut gst_sys::GstStaticCaps 55 ) 56 } 57 } 58 59 #[doc(hidden)] 60 impl glib::value::SetValue for StaticCaps { set_value(value: &mut glib::Value, this: &Self)61 unsafe fn set_value(value: &mut glib::Value, this: &Self) { 62 gobject_sys::g_value_set_boxed( 63 value.to_glib_none_mut().0, 64 glib::translate::ToGlibPtr::<*const gst_sys::GstStaticCaps>::to_glib_none(this).0 65 as glib_sys::gpointer, 66 ) 67 } 68 } 69 70 #[doc(hidden)] 71 impl glib::value::SetValueOptional for StaticCaps { set_value_optional(value: &mut glib::Value, this: Option<&Self>)72 unsafe fn set_value_optional(value: &mut glib::Value, this: Option<&Self>) { 73 gobject_sys::g_value_set_boxed( 74 value.to_glib_none_mut().0, 75 glib::translate::ToGlibPtr::<*const gst_sys::GstStaticCaps>::to_glib_none(&this).0 76 as glib_sys::gpointer, 77 ) 78 } 79 } 80 81 #[doc(hidden)] 82 impl glib::translate::GlibPtrDefault for StaticCaps { 83 type GlibType = *mut gst_sys::GstStaticCaps; 84 } 85 86 #[doc(hidden)] 87 impl<'a> glib::translate::ToGlibPtr<'a, *const gst_sys::GstStaticCaps> for StaticCaps { 88 type Storage = &'a StaticCaps; 89 to_glib_none(&'a self) -> glib::translate::Stash<'a, *const gst_sys::GstStaticCaps, Self>90 fn to_glib_none(&'a self) -> glib::translate::Stash<'a, *const gst_sys::GstStaticCaps, Self> { 91 glib::translate::Stash(self.0.as_ptr(), self) 92 } 93 to_glib_full(&self) -> *const gst_sys::GstStaticCaps94 fn to_glib_full(&self) -> *const gst_sys::GstStaticCaps { 95 unimplemented!() 96 } 97 } 98 99 #[doc(hidden)] 100 impl glib::translate::FromGlibPtrNone<*const gst_sys::GstStaticCaps> for StaticCaps { 101 #[inline] from_glib_none(ptr: *const gst_sys::GstStaticCaps) -> Self102 unsafe fn from_glib_none(ptr: *const gst_sys::GstStaticCaps) -> Self { 103 assert!(!ptr.is_null()); 104 StaticCaps(ptr::NonNull::new_unchecked(ptr as *mut _)) 105 } 106 } 107 108 #[doc(hidden)] 109 impl glib::translate::FromGlibPtrNone<*mut gst_sys::GstStaticCaps> for StaticCaps { 110 #[inline] from_glib_none(ptr: *mut gst_sys::GstStaticCaps) -> Self111 unsafe fn from_glib_none(ptr: *mut gst_sys::GstStaticCaps) -> Self { 112 assert!(!ptr.is_null()); 113 StaticCaps(ptr::NonNull::new_unchecked(ptr)) 114 } 115 } 116 117 #[doc(hidden)] 118 impl glib::translate::FromGlibPtrBorrow<*mut gst_sys::GstStaticCaps> for StaticCaps { 119 #[inline] from_glib_borrow(ptr: *mut gst_sys::GstStaticCaps) -> Self120 unsafe fn from_glib_borrow(ptr: *mut gst_sys::GstStaticCaps) -> Self { 121 assert!(!ptr.is_null()); 122 StaticCaps(ptr::NonNull::new_unchecked(ptr)) 123 } 124 } 125 126 #[doc(hidden)] 127 impl glib::translate::FromGlibPtrFull<*mut gst_sys::GstStaticCaps> for StaticCaps { 128 #[inline] from_glib_full(_ptr: *mut gst_sys::GstStaticCaps) -> Self129 unsafe fn from_glib_full(_ptr: *mut gst_sys::GstStaticCaps) -> Self { 130 unimplemented!(); 131 } 132 } 133