bmf_parse/
base.rs

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}