use crate::interfaces::any_factory::{AnyFactory, AnyThreadsafeFactory}; use crate::interfaces::factory::IThreadsafeFactory; use crate::ptr::TransientPtr; pub struct ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { func: &'static (dyn Fn> + Send + Sync), } impl ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { pub fn new( func: &'static (dyn Fn> + Send + Sync), ) -> Self { Self { func } } } impl IThreadsafeFactory for ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { } impl Fn for ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { extern "rust-call" fn call(&self, args: Args) -> Self::Output { self.func.call(args) } } impl FnMut for ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { extern "rust-call" fn call_mut(&mut self, args: Args) -> Self::Output { self.call(args) } } impl FnOnce for ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { type Output = TransientPtr; extern "rust-call" fn call_once(self, args: Args) -> Self::Output { self.call(args) } } impl AnyFactory for ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { } impl AnyThreadsafeFactory for ThreadsafeCastableFactory where Args: 'static, ReturnInterface: 'static + ?Sized, { }