gstreamer_editing_services/
formatter.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2use crate::{ffi, prelude::*, Formatter};
3use gst::glib::translate::*;
4
5mod sealed {
6    pub trait Sealed {}
7    impl<T: super::IsA<super::Formatter>> Sealed for T {}
8}
9
10pub trait FormatterExtManual: sealed::Sealed + IsA<Formatter> + 'static {
11    fn can_load_uri(&self, uri: &str) -> Result<(), glib::Error> {
12        unsafe {
13            let klass = self.class_of::<crate::Formatter>().unwrap();
14
15            let f = klass.as_ref().can_load_uri.ok_or_else(|| {
16                glib::Error::new(gst::CoreError::Failed, "No `can_load_uri` method defined")
17            })?;
18
19            let mut err = std::ptr::null_mut();
20            let res = f(
21                self.as_ref().to_glib_none().0,
22                uri.to_glib_none().0,
23                &mut err,
24            );
25
26            if res == glib::ffi::GTRUE {
27                Ok(())
28            } else {
29                Err(from_glib_full(err))
30            }
31        }
32    }
33
34    #[doc(alias = "ges_formatter_class_register_metas")]
35    fn register(
36        type_: glib::types::Type,
37        name: &str,
38        description: Option<&str>,
39        extensions: Option<&str>,
40        caps: Option<&str>,
41        version: f64,
42        rank: gst::Rank,
43    ) {
44        skip_assert_initialized!();
45
46        unsafe {
47            let klass = mut_override(
48                gst::glib::Class::<crate::Formatter>::from_type(type_)
49                    .unwrap()
50                    .as_ref(),
51            );
52
53            ffi::ges_formatter_class_register_metas(
54                klass,
55                name.to_glib_none().0,
56                description.to_glib_none().0,
57                extensions.to_glib_none().0,
58                caps.to_glib_none().0,
59                version,
60                rank.into_glib(),
61            )
62        }
63    }
64}
65
66impl<O: IsA<Formatter>> FormatterExtManual for O {}