1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use super::slice::SliceRead;
use super::{Position, Read, ReadError};

/// A reader for strings which implements the [`Read`] trait.
pub struct StrRead<'a> {
    /// The delegate reader.
    slice_read: SliceRead<'a>,
}

impl<'a> StrRead<'a> {
    pub fn new(string: &'a str) -> Self {
        StrRead {
            slice_read: SliceRead::new(string.as_bytes()),
        }
    }
}

impl Read for StrRead<'_> {
    fn position(&self) -> Position {
        self.slice_read.position()
    }

    fn peek(&mut self) -> Result<Option<u8>, ReadError> {
        self.slice_read.peek()
    }

    fn next(&mut self) -> Result<Option<u8>, ReadError> {
        self.slice_read.next()
    }

    fn next4(&mut self) -> Result<[u8; 4], ReadError> {
        self.slice_read.next4()
    }

    fn next5(&mut self) -> Result<[u8; 5], ReadError> {
        self.slice_read.next5()
    }

    fn skip_whitespace(&mut self) -> Result<(), ReadError> {
        self.slice_read.skip_whitespace()
    }

    fn next_number(&mut self) -> Result<(), ReadError> {
        self.slice_read.next_number()
    }

    fn next_likely_string(&mut self, buf: &mut Vec<u8>) -> Result<(), ReadError> {
        self.slice_read.next_likely_string(buf)
    }
}