lib_ruby_parser/
token_buf.rs1use 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}