From c1e682c25c24be3174d44ceb95b0537c38299d0c Mon Sep 17 00:00:00 2001 From: HampusM Date: Mon, 12 Sep 2022 20:22:13 +0200 Subject: feat!: allow factories access to DI container BREAKING CHANGE: Factory types should now be written with the Fn trait instead of the IFactory trait and the to_factory & to_default_factory methods of BindingBuilder now expect a function returning a factory function --- macros/src/lib.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'macros/src/lib.rs') diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 25f3c5c..4c815db 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -13,6 +13,7 @@ mod declare_interface_args; mod dependency; mod factory_macro_args; mod factory_type_alias; +mod fn_trait; mod injectable_impl; mod injectable_macro_args; mod libs; @@ -166,6 +167,7 @@ pub fn injectable(args_stream: TokenStream, impl_stream: TokenStream) -> TokenSt /// ``` /// # use syrette::factory; /// # use syrette::interfaces::factory::IFactory; +/// # use syrette::ptr::TransientPtr; /// # /// # trait IConfigurator {} /// # @@ -182,7 +184,7 @@ pub fn injectable(args_stream: TokenStream, impl_stream: TokenStream) -> TokenSt /// # impl IConfigurator for Configurator {} /// # /// #[factory] -/// type IConfiguratorFactory = dyn IFactory<(Vec,), dyn IConfigurator>; +/// type IConfiguratorFactory = dyn Fn(Vec) -> TransientPtr; /// ``` #[proc_macro_attribute] #[cfg(feature = "factory")] @@ -226,15 +228,18 @@ pub fn factory(args_stream: TokenStream, type_alias_stream: TokenStream) -> Toke quote! { syrette::declare_interface!( syrette::castable_factory::blocking::CastableFactory< - #arg_types, - #return_type - > -> #factory_interface + (std::rc::Rc,), + #factory_interface + > -> syrette::interfaces::factory::IFactory< + (std::rc::Rc,), + #factory_interface + > ); syrette::declare_interface!( syrette::castable_factory::blocking::CastableFactory< - #arg_types, - #return_type + (std::rc::Rc,), + #factory_interface > -> syrette::interfaces::any_factory::AnyFactory ); } @@ -315,14 +320,17 @@ pub fn declare_default_factory(args_stream: TokenStream) -> TokenStream quote! { syrette::declare_interface!( syrette::castable_factory::blocking::CastableFactory< - (), + (std::rc::Rc,), #interface, - > -> syrette::interfaces::factory::IFactory<(), #interface> + > -> syrette::interfaces::factory::IFactory< + (std::rc::Rc,), + #interface + > ); syrette::declare_interface!( syrette::castable_factory::blocking::CastableFactory< - (), + (std::rc::Rc,), #interface, > -> syrette::interfaces::any_factory::AnyFactory ); -- cgit v1.2.3-18-g5258