From 9a878ff83dbda0ba842a3d943fb1d3819a55f2b2 Mon Sep 17 00:00:00 2001 From: Michael Pfaff Date: Mon, 10 Apr 2023 20:09:50 -0400 Subject: [PATCH] Add sized encode buffer a la itoa --- src/enc.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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);