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,
}
}
}