1use crate::Result;
2use crate::error::Fail;
3
4#[derive(Clone, Copy)]
5pub struct InlineToken<const N: usize> {
6 len: u8,
7 bytes: [u8; N],
8}
9
10impl<const N: usize> InlineToken<N> {
11 pub const fn new() -> Self {
12 Self {
13 len: 0,
14 bytes: [0; N],
15 }
16 }
17
18 pub fn push(&mut self, b: u8) -> Result<()> {
19 let idx = self.len as usize;
20 if idx >= N {
21 return Err(Fail::bad());
22 }
23 self.bytes[idx] = b;
24 self.len += 1;
25 Ok(())
26 }
27
28 pub fn as_bytes(&self) -> &[u8] {
29 &self.bytes[..self.len as usize]
30 }
31
32 pub fn len(&self) -> usize {
33 self.len as usize
34 }
35
36 pub fn is_empty(&self) -> bool {
37 self.len == 0
38 }
39}
40
41impl<const N: usize> Default for InlineToken<N> {
42 fn default() -> Self {
43 Self::new()
44 }
45}