From cde9d4b41a4b37612420ac522bc261147966efa5 Mon Sep 17 00:00:00 2001 From: HampusM Date: Thu, 11 Jul 2024 20:48:47 +0200 Subject: refactor: move & rename AnyFactory and AnyThreadsafeFactory traits --- src/any_factory.rs | 13 ------------- src/castable_factory/mod.rs | 9 +++++++-- src/castable_factory/threadsafe.rs | 9 ++++++--- src/lib.rs | 3 --- src/provider/async.rs | 26 +++++++++++++++++--------- src/provider/blocking.rs | 14 ++++++++------ 6 files changed, 38 insertions(+), 36 deletions(-) delete mode 100644 src/any_factory.rs (limited to 'src') diff --git a/src/any_factory.rs b/src/any_factory.rs deleted file mode 100644 index 3aee98f..0000000 --- a/src/any_factory.rs +++ /dev/null @@ -1,13 +0,0 @@ -//! Interface for any factory to ever exist. - -use std::any::Any; -use std::fmt::Debug; - -/// Interface for any factory to ever exist. -pub trait AnyFactory: Any + Debug -{ - fn as_any(&self) -> &dyn Any; -} - -/// Interface for any threadsafe factory to ever exist. -pub trait AnyThreadsafeFactory: AnyFactory + Send + Sync + Debug {} diff --git a/src/castable_factory/mod.rs b/src/castable_factory/mod.rs index 196dc14..0cb2127 100644 --- a/src/castable_factory/mod.rs +++ b/src/castable_factory/mod.rs @@ -1,12 +1,17 @@ use std::any::{type_name, Any}; use std::fmt::Debug; -use crate::any_factory::AnyFactory; use crate::ptr::TransientPtr; #[cfg(feature = "async")] pub mod threadsafe; +/// Interface for any castable factory. +pub trait AnyCastableFactory: Any + Debug +{ + fn as_any(&self) -> &dyn Any; +} + pub struct CastableFactory where ReturnInterface: 'static + ?Sized, @@ -32,7 +37,7 @@ where } } -impl AnyFactory +impl AnyCastableFactory for CastableFactory where ReturnInterface: 'static + ?Sized, diff --git a/src/castable_factory/threadsafe.rs b/src/castable_factory/threadsafe.rs index 5935d75..8b1e66d 100644 --- a/src/castable_factory/threadsafe.rs +++ b/src/castable_factory/threadsafe.rs @@ -1,9 +1,12 @@ use std::any::{type_name, Any}; use std::fmt::Debug; -use crate::any_factory::{AnyFactory, AnyThreadsafeFactory}; +use crate::castable_factory::AnyCastableFactory; use crate::ptr::TransientPtr; +/// Interface for any threadsafe castable factory. +pub trait AnyThreadsafeCastableFactory: AnyCastableFactory + Send + Sync + Debug {} + pub struct ThreadsafeCastableFactory where DIContainerT: 'static, @@ -33,7 +36,7 @@ where } } -impl AnyFactory +impl AnyCastableFactory for ThreadsafeCastableFactory where DIContainerT: 'static, @@ -45,7 +48,7 @@ where } } -impl AnyThreadsafeFactory +impl AnyThreadsafeCastableFactory for ThreadsafeCastableFactory where DIContainerT: 'static, diff --git a/src/lib.rs b/src/lib.rs index d93acc8..5544faa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -113,9 +113,6 @@ mod util; #[cfg(feature = "factory")] mod castable_factory; -#[cfg(feature = "factory")] -mod any_factory; - #[cfg(test)] #[cfg(not(tarpaulin_include))] mod test_utils; diff --git a/src/provider/async.rs b/src/provider/async.rs index 3875363..6ccb082 100644 --- a/src/provider/async.rs +++ b/src/provider/async.rs @@ -16,15 +16,21 @@ pub enum AsyncProvidable Singleton(ThreadsafeSingletonPtr>), #[cfg(feature = "factory")] Factory( - crate::ptr::ThreadsafeFactoryPtr, + crate::ptr::ThreadsafeFactoryPtr< + dyn crate::castable_factory::threadsafe::AnyThreadsafeCastableFactory, + >, ), #[cfg(feature = "factory")] DefaultFactory( - crate::ptr::ThreadsafeFactoryPtr, + crate::ptr::ThreadsafeFactoryPtr< + dyn crate::castable_factory::threadsafe::AnyThreadsafeCastableFactory, + >, ), #[cfg(feature = "factory")] AsyncDefaultFactory( - crate::ptr::ThreadsafeFactoryPtr, + crate::ptr::ThreadsafeFactoryPtr< + dyn crate::castable_factory::threadsafe::AnyThreadsafeCastableFactory, + >, ), } @@ -182,8 +188,9 @@ pub enum AsyncFactoryVariant #[cfg(feature = "factory")] pub struct AsyncFactoryProvider { - factory: - crate::ptr::ThreadsafeFactoryPtr, + factory: crate::ptr::ThreadsafeFactoryPtr< + dyn crate::castable_factory::threadsafe::AnyThreadsafeCastableFactory, + >, variant: AsyncFactoryVariant, } @@ -192,7 +199,7 @@ impl AsyncFactoryProvider { pub fn new( factory: crate::ptr::ThreadsafeFactoryPtr< - dyn crate::any_factory::AnyThreadsafeFactory, + dyn crate::castable_factory::threadsafe::AnyThreadsafeCastableFactory, >, variant: AsyncFactoryVariant, ) -> Self @@ -302,13 +309,14 @@ mod tests { use std::any::Any; - use crate::any_factory::{AnyFactory, AnyThreadsafeFactory}; + use crate::castable_factory::threadsafe::AnyThreadsafeCastableFactory; + use crate::castable_factory::AnyCastableFactory; use crate::ptr::ThreadsafeFactoryPtr; #[derive(Debug)] struct FooFactory; - impl AnyFactory for FooFactory + impl AnyCastableFactory for FooFactory { fn as_any(&self) -> &dyn Any { @@ -316,7 +324,7 @@ mod tests } } - impl AnyThreadsafeFactory for FooFactory {} + impl AnyThreadsafeCastableFactory for FooFactory {} let factory_provider = AsyncFactoryProvider::new( ThreadsafeFactoryPtr::new(FooFactory), diff --git a/src/provider/blocking.rs b/src/provider/blocking.rs index bde3be5..65e315d 100644 --- a/src/provider/blocking.rs +++ b/src/provider/blocking.rs @@ -13,9 +13,11 @@ pub enum Providable Transient(TransientPtr>), Singleton(SingletonPtr>), #[cfg(feature = "factory")] - Factory(crate::ptr::FactoryPtr), + Factory(crate::ptr::FactoryPtr), #[cfg(feature = "factory")] - DefaultFactory(crate::ptr::FactoryPtr), + DefaultFactory( + crate::ptr::FactoryPtr, + ), } #[cfg_attr(test, mockall::automock)] @@ -108,7 +110,7 @@ where #[cfg(feature = "factory")] pub struct FactoryProvider { - factory: crate::ptr::FactoryPtr, + factory: crate::ptr::FactoryPtr, is_default_factory: bool, } @@ -116,7 +118,7 @@ pub struct FactoryProvider impl FactoryProvider { pub fn new( - factory: crate::ptr::FactoryPtr, + factory: crate::ptr::FactoryPtr, is_default_factory: bool, ) -> Self { @@ -198,13 +200,13 @@ mod tests { use std::any::Any; - use crate::any_factory::AnyFactory; + use crate::castable_factory::AnyCastableFactory; use crate::ptr::FactoryPtr; #[derive(Debug)] struct FooFactory; - impl AnyFactory for FooFactory + impl AnyCastableFactory for FooFactory { fn as_any(&self) -> &dyn Any { -- cgit v1.2.3-18-g5258