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
use crate::sources::source_file::SourceFileIterator;
#[derive(Clone)]
pub struct ParseResult<'src, O: Clone> {
pub result: O,
pub pos: SourceFileIterator<'src>,
pub pos_err: SourceFileIterator<'src>,
pub ok: bool,
pub recovered: bool,
}
impl<'src, O: Clone> ParseResult<'src, O> {
pub fn map<F, ON: Clone>(self, mapfn: F) -> ParseResult<'src, ON>
where
F: Fn(O) -> ON,
{
ParseResult {
result: mapfn(self.result),
pos: self.pos,
pos_err: self.pos_err,
ok: self.ok,
recovered: self.recovered,
}
}
pub fn new(
result: O,
pos: SourceFileIterator<'src>,
pos_err: SourceFileIterator<'src>,
ok: bool,
recovered: bool,
) -> Self {
ParseResult {
result,
pos,
pos_err,
ok,
recovered,
}
}
pub fn new_ok(
result: O,
pos: SourceFileIterator<'src>,
pos_err: SourceFileIterator<'src>,
recovered: bool,
) -> Self {
ParseResult {
result,
pos,
pos_err,
ok: true,
recovered,
}
}
pub fn new_err(
result: O,
pos: SourceFileIterator<'src>,
pos_err: SourceFileIterator<'src>,
) -> Self {
ParseResult {
result,
pos,
pos_err,
ok: false,
recovered: false,
}
}
}