1pub(crate) struct ParserState {
2 pub(crate) offset: usize,
3}
4
5pub(crate) fn read<'a>(input: &'a [u8], state: &mut ParserState, n: usize) -> Option<&'a [u8]> {
6 if state.offset + n <= input.len() {
7 let slice = &input[state.offset..state.offset + n];
8 state.offset += n;
9 Some(slice)
10 } else {
11 println!(
12 "read failed, offset: {}, n: {}, input.len(): {}",
13 state.offset,
14 n,
15 input.len()
16 );
17 None
18 }
19}
20
21#[inline]
22pub(crate) fn is_empty(input: &[u8], state: &ParserState) -> bool {
23 state.offset == input.len()
24}
25
26#[derive(Debug)]
27pub enum Either<A, B> {
28 A(A),
29 B(B),
30}