#![no_std]
#![doc = include_str!("README.md")]
#![allow(incomplete_features)]
#![feature(const_trait_impl)]
#![feature(const_convert)]
#![feature(unsized_const_params)]
#![feature(adt_const_params)]
#![feature(negative_impls)]
#![feature(const_heap)]
#![feature(const_default)]
#![feature(generic_const_exprs)]
extern crate alloc;
mod root;
pub use root::Root;
use alloc::vec::Vec;
use core::{
ptr::NonNull,
ops::Deref
};
pub struct Report<const NAME: &'static str> {
chain: NonNull<Vec<&'static str>>,
}
impl<const NAME: &'static str> Report<NAME> {
pub const fn to<const OTHER: &'static str>(&mut self) -> Report<OTHER> {
if !OTHER.is_empty() {unsafe {self.chain.as_mut().push(OTHER)};}
return Report {
chain: self.chain
}
}
}
impl<const NAME: &'static str> Drop for Report<NAME> {
fn drop(&mut self) {if !NAME.is_empty() {unsafe {self.chain.as_mut().pop()};}}
}
impl<const NAME: &'static str> !Send for Report<NAME> {}
impl<const NAME: &'static str> !Sync for Report<NAME> {}
impl<const NAME: &'static str> Deref for Report<NAME> {
type Target = [&'static str];
fn deref(&self) -> &Self::Target {return unsafe {&self.chain.as_ref()}}
}