lib_ruby_parser/
token_buf.rs

1use crate::Bytes;
2
3#[derive(Debug, Clone, Default)]
4pub(crate) struct TokenBuf {
5    pub(crate) bytes: Bytes,
6}
7
8impl TokenBuf {
9    pub(crate) fn new(bytes: &[u8]) -> Self {
10        Self {
11            bytes: Bytes::new(Vec::from(bytes)),
12        }
13    }
14
15    pub(crate) fn take(&mut self) -> Self {
16        std::mem::take(self)
17    }
18
19    pub(crate) fn push(&mut self, byte: u8) {
20        self.bytes.push(byte);
21    }
22
23    pub(crate) fn append(&mut self, bytes: &[u8]) {
24        for byte in bytes {
25            self.push(*byte)
26        }
27    }
28
29    pub(crate) fn prepend(&mut self, part: &[u8]) {
30        let mut tmp = part.to_vec();
31        tmp.extend(self.bytes.as_raw().iter());
32        self.bytes.set_raw(tmp);
33    }
34
35    pub(crate) fn borrow_string(&self) -> Result<&str, &[u8]> {
36        match std::str::from_utf8(self.bytes.as_raw()) {
37            Ok(s) => Ok(s),
38            Err(_) => Err(self.bytes.as_raw()),
39        }
40    }
41
42    pub(crate) fn len(&self) -> usize {
43        self.bytes.len()
44    }
45
46    pub(crate) fn clear(&mut self) {
47        self.bytes.clear()
48    }
49}
50
51impl PartialEq<str> for TokenBuf {
52    fn eq(&self, other: &str) -> bool {
53        self.bytes.as_raw() == other.as_bytes()
54    }
55}