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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#![allow(non_camel_case_types)]
use crate::{
parsers::{self, EmptyParser, LineParser, RepeatParser, StringParser},
Parser,
};
pub trait ParserFunction<Args> {
type Output;
fn call_parser_function(&self, args: Args) -> Self::Output;
}
pub struct line;
impl<'parse, 'source, T> ParserFunction<(T,)> for line
where
T: Parser<'parse, 'source>,
{
type Output = LineParser<T>;
fn call_parser_function(&self, (line_parser,): (T,)) -> Self::Output {
parsers::line(line_parser)
}
}
pub struct lines;
impl<'parse, 'source, T> ParserFunction<(T,)> for lines
where
T: Parser<'parse, 'source>,
{
type Output = RepeatParser<LineParser<T>, EmptyParser>;
fn call_parser_function(&self, (line_parser,): (T,)) -> Self::Output {
parsers::lines(line_parser)
}
}
pub struct repeat_sep;
impl<'parse, 'source, T, U> ParserFunction<(T, U)> for repeat_sep
where
T: Parser<'parse, 'source>,
U: Parser<'parse, 'source>,
{
type Output = RepeatParser<T, U>;
fn call_parser_function(&self, (parser, sep): (T, U)) -> Self::Output {
parsers::repeat_sep(parser, sep)
}
}
pub struct string;
impl<'parse, 'source, P> ParserFunction<(P,)> for string
where
P: Parser<'parse, 'source>,
{
type Output = StringParser<P>;
fn call_parser_function(&self, (parser,): (P,)) -> Self::Output {
StringParser { parser }
}
}