osiris_typed/
parser.rs

1pub type Parse<I, O = I> = fn(input: I) -> (I, O);
2
3pub type ParserChain<I, O = I> = Vec<Parse<I, O>>;
4
5pub fn parse<I, O: Default>(chain: ParserChain<I, O>, input: I) -> (I, O) {
6    let mut input: I = input;
7    let mut output: O = O::default();
8    for parser in chain {
9        (input, output) = parser(input);
10    }
11    (input, output)
12}
13
14pub trait Parser<I: Default, O = I> {
15    fn parse(input: I) -> (I, O);
16}