1use crate::mem::MaybeUninit;
2
3#[unstable(feature = "int_format_into", issue = "138215")]
5pub trait NumBufferTrait {
6 const BUF_SIZE: usize;
8}
9
10macro_rules! impl_NumBufferTrait {
11 ($($signed:ident, $unsigned:ident,)*) => {
12 $(
13 #[unstable(feature = "int_format_into", issue = "138215")]
14 impl NumBufferTrait for $signed {
15 const BUF_SIZE: usize = $signed::MAX.ilog(10) as usize + 2;
17 }
18 #[unstable(feature = "int_format_into", issue = "138215")]
19 impl NumBufferTrait for $unsigned {
20 const BUF_SIZE: usize = $unsigned::MAX.ilog(10) as usize + 1;
21 }
22 )*
23 }
24}
25
26impl_NumBufferTrait! {
27 i8, u8,
28 i16, u16,
29 i32, u32,
30 i64, u64,
31 isize, usize,
32 i128, u128,
33}
34
35#[unstable(feature = "int_format_into", issue = "138215")]
38pub struct NumBuffer<T: NumBufferTrait> {
39 pub(crate) buf: [MaybeUninit<u8>; 40],
41 phantom: core::marker::PhantomData<T>,
43}
44
45#[unstable(feature = "int_format_into", issue = "138215")]
46impl<T: NumBufferTrait> core::fmt::Debug for NumBuffer<T> {
47 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
48 f.debug_struct("NumBuffer").finish()
49 }
50}
51
52#[unstable(feature = "int_format_into", issue = "138215")]
53impl<T: NumBufferTrait> NumBuffer<T> {
54 #[unstable(feature = "int_format_into", issue = "138215")]
56 pub const fn new() -> Self {
57 NumBuffer { buf: [MaybeUninit::<u8>::uninit(); 40], phantom: core::marker::PhantomData }
59 }
60
61 #[unstable(feature = "int_format_into", issue = "138215")]
63 pub const fn capacity(&self) -> usize {
64 self.buf.len()
65 }
66}