pub trait ConstByteBufSize {
const MAX_DECIMAL_LEN: usize;
}
impl_numconst_buf_size! {
(usize | u128 | u64 | u32 | u16 | u8)::MAX;
(isize | i128 | i64 | i32 | i16 | i8)::MIN;
}
impl ConstByteBufSize for char {
const MAX_DECIMAL_LEN: usize = {
let mut n = char::MAX as u32;
let mut count = 0;
while n != 0 {
count += 1;
n /= 10;
}
count
};
}
macro_rules! impl_numconst_buf_size {
[
($($ty:ty)|* ) ::MAX;
$($all:tt)*
] => {
$(
impl ConstByteBufSize for $ty {
/// Max decimal digits needed to represent any `
#[doc = stringify!($ty)]
#[doc = "`"]
const MAX_DECIMAL_LEN: usize = {
let max = <$ty>::MAX;
let mut n = max;
let mut count = 0;
while n != 0 {
count += 1;
n /= 10;
}
count
};
}
)*
$crate::buf::size::impl_numconst_buf_size! {
$($all)*
}
};
[
($($ty:ty)|* ) ::MIN;
$($all:tt)*
] => {
$(
impl ConstByteBufSize for $ty {
#[doc = stringify!($ty)]
#[doc = "`"]
const MAX_DECIMAL_LEN: usize = {
let min = <$ty>::MIN;
let mut n = min.unsigned_abs() as u128;
let mut count = 1;
while n != 0 {
count += 1;
n /= 10;
}
count
};
}
)*
$crate::buf::size::impl_numconst_buf_size! {
$($all)*
}
};
() => {}
}
pub(crate) use impl_numconst_buf_size;