From e2b38115ec695a6620cdf244fd7bad922262560d Mon Sep 17 00:00:00 2001 From: HampusM Date: Mon, 16 Sep 2024 00:26:40 +0200 Subject: feat: make to_*dynamic_value functions usable without nightly Rust --- src/di_container/blocking/binding/builder.rs | 37 +++++++--------------------- 1 file changed, 9 insertions(+), 28 deletions(-) (limited to 'src/di_container/blocking/binding/builder.rs') diff --git a/src/di_container/blocking/binding/builder.rs b/src/di_container/blocking/binding/builder.rs index 558db6e..596a2aa 100644 --- a/src/di_container/blocking/binding/builder.rs +++ b/src/di_container/blocking/binding/builder.rs @@ -1,13 +1,16 @@ //! Binding builder for types inside of a [`DIContainer`]. use std::any::type_name; use std::marker::PhantomData; +use std::rc::Rc; +use crate::castable_function::CastableFunction; use crate::di_container::blocking::binding::scope_configurator::BindingScopeConfigurator; -#[cfg(feature = "factory")] use crate::di_container::blocking::binding::when_configurator::BindingWhenConfigurator; use crate::di_container::BindingOptions; use crate::errors::di_container::BindingBuilderError; use crate::interfaces::injectable::Injectable; +use crate::provider::blocking::{FunctionProvider, ProvidableFunctionKind}; +use crate::ptr::TransientPtr; use crate::util::use_double; use_double!(crate::dependency_history::DependencyHistory); @@ -181,11 +184,6 @@ where Interface: Fn>, Func: Fn(&DIContainer) -> Box, { - use std::rc::Rc; - - use crate::castable_function::CastableFunction; - use crate::provider::blocking::ProvidableFunctionKind; - if self .di_container .has_binding::(BindingOptions::new()) @@ -199,7 +197,7 @@ where self.di_container.set_binding::( BindingOptions::new(), - Box::new(crate::provider::blocking::FunctionProvider::new( + Box::new(FunctionProvider::new( Rc::new(factory_impl), ProvidableFunctionKind::UserCalled, )), @@ -248,35 +246,19 @@ where /// # let mut di_container = DIContainer::new(); /// # /// di_container.bind::().to_dynamic_value(&|_| { - /// Box::new(|| { - /// let buffer = TransientPtr::new(Buffer::::new()); - /// - /// buffer as TransientPtr - /// }) + /// Box::new(|| TransientPtr::new(Buffer::::new())) /// }); /// # /// # Ok(()) /// # } /// ``` - #[cfg(feature = "factory")] - #[cfg_attr(doc_cfg, doc(cfg(feature = "factory")))] - pub fn to_dynamic_value( + pub fn to_dynamic_value( self, func: &'static Func, ) -> Result, BindingBuilderError> where - Return: 'static + ?Sized, - Func: Fn( - &DIContainer, - ) -> crate::ptr::TransientPtr< - dyn Fn<(), Output = crate::ptr::TransientPtr>, - >, + Func: Fn(&DIContainer) -> TransientPtr TransientPtr>, { - use std::rc::Rc; - - use crate::castable_function::CastableFunction; - use crate::provider::blocking::ProvidableFunctionKind; - if self .di_container .has_binding::(BindingOptions::new()) @@ -290,7 +272,7 @@ where self.di_container.set_binding::( BindingOptions::new(), - Box::new(crate::provider::blocking::FunctionProvider::new( + Box::new(FunctionProvider::new( Rc::new(castable_func), ProvidableFunctionKind::Instant, )), @@ -376,7 +358,6 @@ mod tests } #[test] - #[cfg(feature = "factory")] fn can_bind_to_dynamic_value() { use crate::ptr::TransientPtr; -- cgit v1.2.3-18-g5258