#[macro_export]
#[cfg_attr(cargo_primary_package, doc(hidden))]
macro_rules! maybe {
( // Returns either Some(<$T>::default()) or `None`.
default: $implements_default:stmt, $T:ty ) => {{
#[$crate::compile($implements_default)]
fn maybe_default<T: Default>() -> Option<T> {
Some(T::default())
}
#[$crate::compile(not($implements_default))]
fn maybe_default<T>() -> Option<T> {
None
}
maybe_default::<$T>()
}};
(
clone: $implements_clone:stmt, $T:ty, $value:expr ) => {{
#[$crate::compile($implements_clone)]
fn maybe_clone<T: Clone>(value: &T) -> Option<T> {
Some(value.clone())
}
#[$crate::compile(not($implements_clone))]
fn maybe_clone<T>(_value: &T) -> Option<T> {
None
}
maybe_clone::<$T>($value)
}};
}
#[doc(inline)]
pub use maybe;