macro_rules! features {
(: $($rest:tt)+) => {
$($rest)+
};
(async $($rest:tt)+) => {
#[cfg(feature = "generate-async")]
features!{ $($rest)+ }
};
(!async $($rest:tt)+) => {
#[cfg(not(feature = "generate-async"))]
features!{ $($rest)+ }
};
(fn $($rest:tt)+) => {
#[cfg(feature = "generate-blocking")]
features!{ $($rest)+ }
};
(!fn $($rest:tt)+) => {
#[cfg(not(feature = "generate-blocking"))]
features!{ $($rest)+ }
};
}
macro_rules! create_asyncable {
($T:ident => $($($traits:tt)+)?) => {
pub trait Desaturated<$T>: $($($traits)+ +)? internal::OnlyAutomatic<$T> {}
$(
impl<$T, U: $($traits)+> Desaturated<$T> for U {}
impl<$T, U: $($traits)+> internal::OnlyAutomatic<$T> for U {}
)?
};
}
pub(crate) use {create_asyncable, features};