use std::mem::transmute; use glib::{ prelude::*, signal::{connect_raw, SignalHandlerId}, translate::*, }; use crate::{ffi, AudioAggregatorConvertPad}; mod sealed { pub trait Sealed {} impl> Sealed for T {} } pub trait AudioAggregatorConvertPadExtManual: sealed::Sealed + IsA + 'static { #[doc(alias = "converter-config")] fn converter_config(&self) -> Option { ObjectExt::property::>(self.as_ref(), "converter-config") .map(|c| c.try_into().unwrap()) } #[doc(alias = "converter-config")] fn set_converter_config(&self, converter_config: Option<&crate::AudioConverterConfig>) { ObjectExt::set_property( self.as_ref(), "converter-config", converter_config.map(|s| s.as_ref()), ) } #[doc(alias = "converter-config")] fn connect_converter_config_notify( &self, f: F, ) -> SignalHandlerId { unsafe extern "C" fn notify_converter_config_trampoline< P: IsA, F: Fn(&P) + Send + Sync + 'static, >( this: *mut ffi::GstAudioAggregatorConvertPad, _param_spec: glib::ffi::gpointer, f: glib::ffi::gpointer, ) { let f: &F = &*(f as *const F); f(AudioAggregatorConvertPad::from_glib_borrow(this).unsafe_cast_ref()) } unsafe { let f: Box = Box::new(f); connect_raw( self.as_ptr() as *mut _, b"notify::converter-config\0".as_ptr() as *const _, Some(transmute::<_, unsafe extern "C" fn()>( notify_converter_config_trampoline:: as *const (), )), Box::into_raw(f), ) } } } impl> AudioAggregatorConvertPadExtManual for O {}