From d8525f169649e4ce7e806e68de5e328135755326 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 2 Oct 2022 19:32:25 +0200 Subject: refactor: improve management of feature specific items --- src/ptr.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src/ptr.rs') diff --git a/src/ptr.rs b/src/ptr.rs index 426a796..824b086 100644 --- a/src/ptr.rs +++ b/src/ptr.rs @@ -2,6 +2,7 @@ use std::rc::Rc; use std::sync::Arc; +use feature_macros::feature_specific; use paste::paste; use crate::errors::ptr::{SomePtrError, SomeThreadsafePtrError}; @@ -16,15 +17,19 @@ pub type SingletonPtr = Rc; pub type ThreadsafeSingletonPtr = Arc; /// A smart pointer to a factory. -#[cfg(feature = "factory")] +#[feature_specific("factory")] pub type FactoryPtr = Rc; /// A threadsafe smart pointer to a factory. -#[cfg(feature = "factory")] +#[feature_specific("factory")] pub type ThreadsafeFactoryPtr = Arc; macro_rules! create_as_variant_fn { ($enum: ident, $variant: ident) => { + create_as_variant_fn!($enum, $variant,); + }; + + ($enum: ident, $variant: ident, $($attrs: meta),*) => { paste! { #[doc = "Returns as the `" [<$variant>] "` variant.\n" @@ -32,13 +37,13 @@ macro_rules! create_as_variant_fn { "# Errors\n" "Will return Err if it's not the `" [<$variant>] "` variant." ] + $(#[$attrs]),* pub fn [<$variant:snake>](self) -> Result<[<$variant Ptr>], [<$enum Error>]> { if let $enum::$variant(ptr) = self { return Ok(ptr); } - Err([<$enum Error>]::WrongPtrType { expected: stringify!($variant), found: self.into() @@ -62,6 +67,7 @@ where /// A smart pointer to a factory. #[cfg(feature = "factory")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "factory")))] Factory(FactoryPtr), } @@ -73,8 +79,7 @@ where create_as_variant_fn!(SomePtr, Singleton); - #[cfg(feature = "factory")] - create_as_variant_fn!(SomePtr, Factory); + create_as_variant_fn!(SomePtr, Factory, feature_specific("factory")); } /// Some threadsafe smart pointer. @@ -91,6 +96,7 @@ where /// A smart pointer to a factory. #[cfg(feature = "factory")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "factory")))] ThreadsafeFactory(ThreadsafeFactoryPtr), } @@ -102,6 +108,9 @@ where create_as_variant_fn!(SomeThreadsafePtr, ThreadsafeSingleton); - #[cfg(feature = "factory")] - create_as_variant_fn!(SomeThreadsafePtr, ThreadsafeFactory); + create_as_variant_fn!( + SomeThreadsafePtr, + ThreadsafeFactory, + feature_specific("factory") + ); } -- cgit v1.2.3-18-g5258