gstreamer_editing_services/
formatter.rs
1use 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 {}