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}