Move write implementation out to the private trait

This commit is contained in:
David Tolnay 2021-12-12 11:44:48 -08:00
parent e6a8f6f2f1
commit 0f27c02804
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
1 changed files with 10 additions and 12 deletions

View File

@ -92,18 +92,16 @@ impl Buffer {
} }
} }
// Seal to prevent downstream implementations of the Integer trait.
mod private {
pub trait Sealed {}
}
/// An integer that can be written into an [`itoa::Buffer`][Buffer]. /// An integer that can be written into an [`itoa::Buffer`][Buffer].
/// ///
/// This trait is sealed and cannot be implemented for types outside of itoa. /// This trait is sealed and cannot be implemented for types outside of itoa.
pub trait Integer: private::Sealed { pub trait Integer: private::Sealed {}
// Not public API.
#[doc(hidden)] // Seal to prevent downstream implementations of the Integer trait.
fn write(self, buf: &mut Buffer) -> &str; mod private {
pub trait Sealed {
fn write(self, buf: &mut crate::Buffer) -> &str;
}
} }
trait IntegerPrivate<B> { trait IntegerPrivate<B> {
@ -121,7 +119,9 @@ const DEC_DIGITS_LUT: &[u8] = b"\
// https://github.com/rust-lang/rust/blob/b8214dc6c6fc20d0a660fb5700dca9ebf51ebe89/src/libcore/fmt/num.rs#L188-L266 // https://github.com/rust-lang/rust/blob/b8214dc6c6fc20d0a660fb5700dca9ebf51ebe89/src/libcore/fmt/num.rs#L188-L266
macro_rules! impl_IntegerCommon { macro_rules! impl_IntegerCommon {
($max_len:expr, $t:ident) => { ($max_len:expr, $t:ident) => {
impl Integer for $t { impl Integer for $t {}
impl private::Sealed for $t {
#[inline] #[inline]
fn write(self, buf: &mut Buffer) -> &str { fn write(self, buf: &mut Buffer) -> &str {
unsafe { unsafe {
@ -135,8 +135,6 @@ macro_rules! impl_IntegerCommon {
} }
} }
} }
impl private::Sealed for $t {}
}; };
} }