#![no_std]
macro_rules! generate {
($article:literal $upper:ident $param:ident $lower:ident) => {
#[doc = $article]
#[doc = concat!("[`", stringify!($lower), "`]")]
pub struct $upper<const $param: $lower>;
impl<const $param: $lower> $upper<$param> {
#[doc = concat!("[`", stringify!($lower), "`].")]
pub const VALUE: $lower = $param;
}
impl<const $param: $lower> sealed::Sealed for $upper<$param> {}
impl<const $param: $lower> Constant<$lower> for $upper<$param> {
const VALUE: $lower = $param;
}
};
}
generate!("A" U8 N u8);
generate!("A" U16 N u16);
generate!("A" U32 N u32);
generate!("A" U64 N u64);
generate!("A" U128 N u128);
generate!("An" I8 N i8);
generate!("An" I16 N i16);
generate!("An" I32 N i32);
generate!("An" I64 N i64);
generate!("An" I128 N i128);
generate!("A" Usize N usize);
generate!("An" Isize N isize);
generate!("A" Bool B bool);
generate!("A" Char C char);
mod sealed {
pub trait Sealed {}
}
pub trait Constant<T>: sealed::Sealed {
const VALUE: T;
}