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