gstreamer_tag/
tags.rs

1use gst::glib::translate::*;
2use std::ptr;
3
4pub struct ExtendedComment {
5    pub key: Option<glib::GString>,
6    pub lang: Option<glib::GString>,
7    pub value: glib::GString,
8}
9
10#[doc(alias = "gst_tag_parse_extended_comment")]
11pub fn tag_parse_extended_comment(
12    ext_comment: &str,
13    fail_if_no_key: bool,
14) -> Result<ExtendedComment, gst::glib::BoolError> {
15    skip_assert_initialized!();
16    unsafe {
17        let mut c_key = ptr::null_mut();
18        let mut c_lang = ptr::null_mut();
19        let mut c_value = ptr::null_mut();
20        let res: bool = from_glib(crate::ffi::gst_tag_parse_extended_comment(
21            ext_comment.to_glib_none().0,
22            &mut c_key,
23            &mut c_lang,
24            &mut c_value,
25            fail_if_no_key.into_glib(),
26        ));
27        if !res {
28            Err(glib::bool_error!("Failed to parse extended comment"))
29        } else {
30            let key = from_glib_full(c_key);
31            let lang = from_glib_full(c_lang);
32            let value = from_glib_full(c_value);
33
34            Ok(ExtendedComment { key, lang, value })
35        }
36    }
37}