Skip to main content

sark_json/
body.rs

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}