diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/errors/ptr.rs | 21 | ||||
-rw-r--r-- | src/ptr.rs | 22 |
2 files changed, 14 insertions, 29 deletions
diff --git a/src/errors/ptr.rs b/src/errors/ptr.rs index 56621c1..1db10c7 100644 --- a/src/errors/ptr.rs +++ b/src/errors/ptr.rs @@ -1,8 +1,9 @@ //! Smart pointer alias errors. -/// Error type for [`SomePtr`]. +/// Error type for [`SomePtr`] and [`SomeThreadsafePtr`]. /// /// [`SomePtr`]: crate::ptr::SomePtr +/// [`SomeThreadsafePtr`]: crate::ptr::SomeThreadsafePtr #[derive(thiserror::Error, Debug)] pub enum SomePtrError { @@ -17,21 +18,3 @@ pub enum SomePtrError found: &'static str, }, } - -/// Error type for [`SomeThreadsafePtr`]. -/// -/// [`SomeThreadsafePtr`]: crate::ptr::SomeThreadsafePtr -#[derive(thiserror::Error, Debug)] -pub enum SomeThreadsafePtrError -{ - /// Tried to get as a wrong threadsafe smart pointer type. - #[error("Wrong threadsafe smart pointer type. Expected {expected}, found {found}")] - WrongPtrType - { - /// The expected smart pointer type. - expected: &'static str, - - /// The found smart pointer type. - found: &'static str, - }, -} @@ -4,7 +4,7 @@ use std::sync::Arc; use paste::paste; -use crate::errors::ptr::{SomePtrError, SomeThreadsafePtrError}; +use crate::errors::ptr::SomePtrError; /// A smart pointer for a interface in the transient scope. pub type TransientPtr<Interface> = Box<Interface>; @@ -26,11 +26,11 @@ pub type FactoryPtr<FactoryInterface> = Rc<FactoryInterface>; pub type ThreadsafeFactoryPtr<FactoryInterface> = Arc<FactoryInterface>; macro_rules! create_as_variant_fn { - ($enum: ident, $variant: ident) => { - create_as_variant_fn!($enum, $variant,); + ($enum: ident, $variant: ident, $err: ident) => { + create_as_variant_fn!($enum, $variant, $err,); }; - ($enum: ident, $variant: ident, $($attrs: meta),*) => { + ($enum: ident, $variant: ident, $err: ident, $($attrs: meta),*) => { paste! { #[doc = "Returns as the `" [<$variant>] "` variant.\n" @@ -39,13 +39,13 @@ macro_rules! create_as_variant_fn { "Will return Err if it's not the `" [<$variant>] "` variant." ] $(#[$attrs])* - pub fn [<$variant:snake>](self) -> Result<[<$variant Ptr>]<Interface>, [<$enum Error>]> + pub fn [<$variant:snake>](self) -> Result<[<$variant Ptr>]<Interface>, $err> { if let $enum::$variant(ptr) = self { return Ok(ptr); } - Err([<$enum Error>]::WrongPtrType { + Err($err::WrongPtrType { expected: stringify!($variant), found: self.into() }) @@ -76,13 +76,14 @@ impl<Interface> SomePtr<Interface> where Interface: 'static + ?Sized, { - create_as_variant_fn!(SomePtr, Transient); + create_as_variant_fn!(SomePtr, Transient, SomePtrError); - create_as_variant_fn!(SomePtr, Singleton); + create_as_variant_fn!(SomePtr, Singleton, SomePtrError); create_as_variant_fn!( SomePtr, Factory, + SomePtrError, cfg(feature = "factory"), cfg_attr(doc_cfg, doc(cfg(feature = "factory"))) ); @@ -110,13 +111,14 @@ impl<Interface> SomeThreadsafePtr<Interface> where Interface: 'static + ?Sized, { - create_as_variant_fn!(SomeThreadsafePtr, Transient); + create_as_variant_fn!(SomeThreadsafePtr, Transient, SomePtrError); - create_as_variant_fn!(SomeThreadsafePtr, ThreadsafeSingleton); + create_as_variant_fn!(SomeThreadsafePtr, ThreadsafeSingleton, SomePtrError); create_as_variant_fn!( SomeThreadsafePtr, ThreadsafeFactory, + SomePtrError, cfg(feature = "factory"), cfg_attr(doc_cfg, doc(cfg(feature = "factory"))) ); |