lwb_parser/parser/peg/
parse_result.rs

1use crate::sources::source_file::SourceFileIterator;
2
3/// Represents a parser that parsed its value successfully.
4/// It parsed the value of type `O`.
5/// It also stores the best error encountered during parsing, and the position AFTER the parsed value in `pos`.
6#[derive(Clone)]
7pub struct ParseResult<'src, O: Clone> {
8    pub result: O,
9    pub pos: SourceFileIterator<'src>,
10    pub pos_err: SourceFileIterator<'src>,
11    pub ok: bool,
12    pub recovered: bool,
13}
14
15impl<'src, O: Clone> ParseResult<'src, O> {
16    /// Maps the result of this ParseSuccess, using a mapping function.
17    pub fn map<F, ON: Clone>(self, mapfn: F) -> ParseResult<'src, ON>
18    where
19        F: Fn(O) -> ON,
20    {
21        ParseResult {
22            result: mapfn(self.result),
23            pos: self.pos,
24            pos_err: self.pos_err,
25            ok: self.ok,
26            recovered: self.recovered,
27        }
28    }
29
30    pub fn new(
31        result: O,
32        pos: SourceFileIterator<'src>,
33        pos_err: SourceFileIterator<'src>,
34        ok: bool,
35        recovered: bool,
36    ) -> Self {
37        ParseResult {
38            result,
39            pos,
40            pos_err,
41            ok,
42            recovered,
43        }
44    }
45
46    pub fn new_ok(
47        result: O,
48        pos: SourceFileIterator<'src>,
49        pos_err: SourceFileIterator<'src>,
50        recovered: bool,
51    ) -> Self {
52        ParseResult {
53            result,
54            pos,
55            pos_err,
56            ok: true,
57            recovered,
58        }
59    }
60
61    pub fn new_err(
62        result: O,
63        pos: SourceFileIterator<'src>,
64        pos_err: SourceFileIterator<'src>,
65    ) -> Self {
66        ParseResult {
67            result,
68            pos,
69            pos_err,
70            ok: false,
71            recovered: false,
72        }
73    }
74}