#[doc = crate::_tags!(internal)]
#[doc = crate::_doc_meta!{location("yard")}]
#[cfg_attr(not(feature = "__docs_internal"), doc(hidden))]
#[cfg_attr(cargo_primary_package, doc(hidden))]
#[macro_export]
macro_rules! _devela_policy· {
(item_gate safe:$safe:literal, unsafe:$unsafe:literal, $($item:item)+) => {
$(
#[$crate::compile(not(env(__DEVELA_MEMBER)))]
$item
)+
#[$crate::compile(env(__DEVELA_MEMBER))]
$crate::_devela_policy!{%item_gate devela safe:$safe, unsafe:$unsafe, $($item)+}
};
(%item_gate 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
)+
};
(item_gate unsafe:$unsafe:literal, $($item:item)+) => {
$(
#[$crate::compile(not(env(__DEVELA_MEMBER)))]
$item
)+
#[$crate::compile(env(__DEVELA_MEMBER))]
$crate::_devela_policy!{%item_gate devela unsafe:$unsafe, $($item)+}
};
(%item_gate devela unsafe:$unsafe:literal, $($item:item)+) => {
#[cfg(feature = $unsafe)]
$(
#[cfg_attr(nightly_doc, doc(cfg(feature = $unsafe)))] $item
)+
};
(unreachable) => { $crate::__devela_unreachable_unchecked() };
(item_attr devela { $(#[$attr:meta])* } $item:item) => {
#[$crate::compile_attr(env(__DEVELA_MEMBER) $(, $attr)*)]
$item
};
($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() } }
}