diff --git a/src/enc.rs b/src/enc.rs index 9e73402..bcfbe31 100644 --- a/src/enc.rs +++ b/src/enc.rs @@ -450,6 +450,29 @@ pub trait Encode { pub struct Encoder; +pub struct Buffer(MaybeUninit<[u8; N * 2]>) where [u8; N * 2]:; + +impl Buffer where [u8; N * 2]: { + #[inline] + pub fn new() -> Self { + Self(MaybeUninit::uninit()) + } + + #[inline] + pub fn format_exact(&mut self, bytes: &[u8; N]) -> &str { + self.0 = MaybeUninit::new(Encoder::::enc_sized(bytes)); + unsafe { std::str::from_utf8_unchecked(self.0.assume_init_ref()) } + } + + // TODO: support using only part of the buffer. + + /*pub fn format(&mut self, bytes: &[u8]) -> &str { + assert!(bytes.len() <= N); + self.0 = MaybeUninit::new(Encoder::::enc_slice(bytes)); + unsafe { std::str::from_utf8_unchecked(self.0.assume_init_ref()) } + }*/ +} + #[repr(align(32))] struct Aligned32(T);