1use crate::DeferredWriter;
3
4mod sealed {
5 pub trait Sealed: itoap::Integer {}
6
7 impl Sealed for i8 {}
8 impl Sealed for u8 {}
9 impl Sealed for i16 {}
10 impl Sealed for u16 {}
11 impl Sealed for i32 {}
12 impl Sealed for u32 {}
13 impl Sealed for i64 {}
14 impl Sealed for u64 {}
15 impl Sealed for i128 {}
16 impl Sealed for u128 {}
17 impl Sealed for isize {}
18 impl Sealed for usize {}
19}
20
21pub trait Integer: sealed::Sealed {}
23
24impl Integer for i8 {}
25impl Integer for u8 {}
26impl Integer for i16 {}
27impl Integer for u16 {}
28impl Integer for i32 {}
29impl Integer for u32 {}
30impl Integer for i64 {}
31impl Integer for u64 {}
32impl Integer for i128 {}
33impl Integer for u128 {}
34impl Integer for isize {}
35impl Integer for usize {}
36
37#[inline]
39pub fn ascii_digits<I>(writer: &mut DeferredWriter, value: I)
40where
41 I: Integer,
42{
43 let ptr = writer.buf_write_ptr(I::MAX_LEN);
44 if ptr.is_null() {
45 ascii_digits_cold(writer, value)
46 } else {
47 unsafe {
50 let len = itoap::write_to_ptr(ptr, value);
51 writer.advance_unchecked(len);
52 }
53 }
54}
55
56#[inline(never)]
57#[cold]
58fn ascii_digits_cold<I>(writer: &mut DeferredWriter, value: I)
59where
60 I: Integer,
61{
62 let _ = itoap::write(writer, value);
63}