// Checked inline byte buffer for the Rust counterparts; not a Goose layout. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct SmallBytes { data: [u8; N], len: usize } impl SmallBytes { pub fn new(bytes: &[u8]) -> Self { let mut value = Self { data: [0; N], len: 0 }; value.append(bytes); value } pub fn append(&mut self, bytes: &[u8]) { let end = self.len.checked_add(bytes.len()).expect("length overflow"); assert!(end <= N, "inline byte capacity exceeded"); self.data[self.len..end].copy_from_slice(bytes); self.len = end; } pub fn as_bytes(&self) -> &[u8] { &self.data[..self.len] } }