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 glib::object::IsA; 10 use glib::translate::*; 11 use glib::value::ToSendValue; 12 use gst_sys; 13 use tags::*; 14 use TagMergeMode; 15 use TagSetter; 16 17 pub trait TagSetterExtManual: 'static { add<'a, T: Tag<'a>>(&self, value: T::TagType, mode: TagMergeMode) where T::TagType: ToSendValue18 fn add<'a, T: Tag<'a>>(&self, value: T::TagType, mode: TagMergeMode) 19 where 20 T::TagType: ToSendValue; 21 } 22 23 impl<O: IsA<TagSetter>> TagSetterExtManual for O { add<'a, T: Tag<'a>>(&self, value: T::TagType, mode: TagMergeMode) where T::TagType: ToSendValue,24 fn add<'a, T: Tag<'a>>(&self, value: T::TagType, mode: TagMergeMode) 25 where 26 T::TagType: ToSendValue, 27 { 28 unsafe { 29 let v = value.to_send_value(); 30 31 gst_sys::gst_tag_setter_add_tag_value( 32 self.as_ref().to_glib_none().0, 33 mode.to_glib(), 34 T::tag_name().to_glib_none().0, 35 v.to_glib_none().0, 36 ); 37 } 38 } 39 } 40