use std::num;
#[derive(Clone, Copy, Debug)]
pub struct Proof<const MIN: u32, const MAX: u32>(u32);
impl<const MIN: u32, const MAX: u32> Proof<MIN, MAX> {
pub const unsafe fn assume(value: u32) -> Self {
Self(value)
}
pub const fn retain(self) -> super::U32<MIN, MAX> {
super::U32(self.0)
}
}
#[derive(Clone, Copy, Debug)]
pub struct NonZeroProof<const MIN: u32, const MAX: u32>(num::NonZero<u32>);
impl<const MIN: u32, const MAX: u32> NonZeroProof<MIN, MAX> {
pub const unsafe fn assume(value: num::NonZero<u32>) -> Self {
let () = super::NonZeroU32::<MIN, MAX>::RANGE;
Self(value)
}
pub const fn retain(self) -> super::NonZeroU32<MIN, MAX> {
super::NonZeroU32(self.0)
}
}
pub(crate) const unsafe fn nonzero_usize<const MAX: usize>(
value: usize,
) -> super::NonZeroUsize<1, MAX> {
let () = super::NonZeroUsize::<1, MAX>::RANGE;
super::NonZeroUsize(unsafe { num::NonZero::new_unchecked(value) })
}