aboutsummaryrefslogtreecommitdiff
path: root/macros/src/factory
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/factory')
-rw-r--r--macros/src/factory/build_declare_interfaces.rs52
-rw-r--r--macros/src/factory/mod.rs1
2 files changed, 53 insertions, 0 deletions
diff --git a/macros/src/factory/build_declare_interfaces.rs b/macros/src/factory/build_declare_interfaces.rs
new file mode 100644
index 0000000..ac4ddd6
--- /dev/null
+++ b/macros/src/factory/build_declare_interfaces.rs
@@ -0,0 +1,52 @@
+use proc_macro2::TokenStream;
+use quote::quote;
+
+use crate::fn_trait::FnTrait;
+
+pub fn build_declare_factory_interfaces(
+ factory_interface: &FnTrait,
+ is_threadsafe: bool,
+) -> TokenStream
+{
+ if is_threadsafe {
+ quote! {
+ syrette::declare_interface!(
+ syrette::castable_factory::threadsafe::ThreadsafeCastableFactory<
+ (std::sync::Arc<syrette::async_di_container::AsyncDIContainer>,),
+ #factory_interface
+ > -> syrette::interfaces::factory::IFactory<
+ (std::sync::Arc<syrette::async_di_container::AsyncDIContainer>,),
+ #factory_interface
+ >,
+ async = true
+ );
+
+ syrette::declare_interface!(
+ syrette::castable_factory::threadsafe::ThreadsafeCastableFactory<
+ (std::sync::Arc<syrette::async_di_container::AsyncDIContainer>,),
+ #factory_interface
+ > -> syrette::interfaces::any_factory::AnyThreadsafeFactory,
+ async = true
+ );
+ }
+ } else {
+ quote! {
+ syrette::declare_interface!(
+ syrette::castable_factory::blocking::CastableFactory<
+ (std::rc::Rc<syrette::di_container::DIContainer>,),
+ #factory_interface
+ > -> syrette::interfaces::factory::IFactory<
+ (std::rc::Rc<syrette::di_container::DIContainer>,),
+ #factory_interface
+ >
+ );
+
+ syrette::declare_interface!(
+ syrette::castable_factory::blocking::CastableFactory<
+ (std::rc::Rc<syrette::di_container::DIContainer>,),
+ #factory_interface
+ > -> syrette::interfaces::any_factory::AnyFactory
+ );
+ }
+ }
+}
diff --git a/macros/src/factory/mod.rs b/macros/src/factory/mod.rs
index a8947c5..18bad8f 100644
--- a/macros/src/factory/mod.rs
+++ b/macros/src/factory/mod.rs
@@ -1,3 +1,4 @@
+pub mod build_declare_interfaces;
pub mod declare_default_args;
pub mod macro_args;
pub mod type_alias;