#![doc = include_str!("README.md")]
#![allow(incomplete_features)]
#![feature(const_trait_impl)]
#![feature(unsized_const_params)]
#![feature(adt_const_params)]
#![feature(negative_impls)]
#![feature(const_heap)]
#![feature(const_default)]
#![feature(generic_const_exprs)]
mod root;
pub use root::Root;
pub struct Report<'valid, const NAME: &'static str> {
chain: &'valid mut Vec<&'static str>
}
impl<'valid, const NAME: &'static str> Report<'valid, NAME> {
pub const fn chain(&'valid self) -> &'valid [&'static str] {return self.chain.as_slice()}
pub const fn to<const OTHER: &'static str>(&'valid mut self) -> Report<'valid, OTHER> {
if !OTHER.is_empty() {self.chain.push(OTHER);}
return Report {
chain: self.chain
}
}
}
impl<'valid, const NAME: &'static str> Drop for Report<'valid, NAME> {
fn drop(&mut self) {if !NAME.is_empty() {self.chain.pop();}}
}
impl<'valid, const NAME: &'static str> !Send for Report<'valid, NAME> {}
impl<'valid, const NAME: &'static str> !Sync for Report<'valid, NAME> {}