#[doc = crate::_tags!(internal)]
#[doc = crate::_doc_location!("yard")]
#[cfg_attr(not(feature = "__docs_internal"), doc(hidden))]
#[cfg_attr(cargo_primary_package, doc(hidden))]
#[macro_export]
macro_rules! __devela_policy {
(safe:$safe:literal, unsafe:$unsafe:literal, $($item:item)+) => {
$(
#[$crate::compile(not(env(__DEVELA_MEMBER)))]
$item
)+
#[$crate::compile(env(__DEVELA_MEMBER))]
$crate::_devela_policy!{%devela safe:$safe, unsafe:$unsafe, $($item)+}
};
(%devela safe:$safe:literal, unsafe:$unsafe:literal, $($item:item)+) => {
$(
#[cfg(all(not(feature = $safe), feature = $unsafe))]
#[cfg_attr(nightly_doc, doc(cfg(feature = $unsafe)))] $item
)+
};
(unsafe:$unsafe:literal, $($item:item)+) => {
$(
#[$crate::compile(not(env(__DEVELA_MEMBER)))]
$item
)+
#[$crate::compile(env(__DEVELA_MEMBER))]
$crate::_devela_policy!{%devela unsafe:$unsafe, $($item)+}
};
(%devela unsafe:$unsafe:literal, $($item:item)+) => {
#[cfg(feature = $unsafe)]
$(
#[cfg_attr(nightly_doc, doc(cfg(feature = $unsafe)))] $item
)+
};
(unreachable) => { $crate::__devela_unreachable_unchecked() };
($vis:vis mod $mod_name:ident, devela { $($devela:item)* } extern { $($extern:item)* }) => {
#[allow(non_snake_case)]
#[$crate::compile(env(__DEVELA_MEMBER))]
mod $mod_name { $($devela)* }
#[allow(non_snake_case)]
#[$crate::compile(not(env(__DEVELA_MEMBER)))]
mod $mod_name { $($extern)* }
$vis use $mod_name::*;
};
}
#[doc(inline)]
pub use __devela_policy as _devela_policy;
#[crate::compile(env(__DEVELA_MEMBER))] #[cfg(not(unsafe··))]
#[rustfmt::skip] #[doc(hidden)] #[inline(always)]
pub const fn __devela_unreachable_unchecked() -> ! { crate::unreachable!() }
#[crate::compile(env(__DEVELA_MEMBER))] #[cfg(unsafe··)]
#[rustfmt::skip] #[doc(hidden)] #[inline(always)]
pub const fn __devela_unreachable_unchecked() -> ! {
if cfg!(debug_assertions) { crate::unreachable!(); }
else { unsafe { crate::unreachable_unchecked() } }
}
#[crate::compile(not(env(__DEVELA_MEMBER)))]
#[rustfmt::skip] #[doc(hidden)] #[inline(always)]
pub const fn __devela_unreachable_unchecked() -> ! {
if cfg!(debug_assertions) { crate::unreachable!(); }
else { unsafe { crate::unreachable_unchecked() } }
}