arch_pkg_text/parse/
partial.rs#[derive(Debug, Clone, Copy)]
pub struct PartialParseResult<Parsed, Error> {
parsed: Parsed,
error: Option<Error>,
}
impl<Parsed, Error> PartialParseResult<Parsed, Error> {
pub fn new_complete(parsed: Parsed) -> Self {
PartialParseResult {
parsed,
error: None,
}
}
pub fn new_partial(parsed: Parsed, error: Error) -> Self {
PartialParseResult {
parsed,
error: Some(error),
}
}
pub fn try_into_complete(self) -> Result<Parsed, Error> {
match self.error {
Some(error) => Err(error),
None => Ok(self.parsed),
}
}
pub fn into_partial(self) -> (Parsed, Option<Error>) {
(self.parsed, self.error)
}
pub fn parsed(&self) -> &'_ Parsed {
&self.parsed
}
pub fn error(&self) -> Option<&'_ Error> {
self.error.as_ref()
}
pub fn has_error(&self) -> bool {
self.error.is_some()
}
}
impl<Parsed, Error> From<PartialParseResult<Parsed, Error>> for Result<Parsed, Error> {
fn from(value: PartialParseResult<Parsed, Error>) -> Self {
value.try_into_complete()
}
}
impl<Parsed, Error> From<PartialParseResult<Parsed, Error>> for (Parsed, Option<Error>) {
fn from(value: PartialParseResult<Parsed, Error>) -> Self {
value.into_partial()
}
}
impl<Parsed, Error> From<(Parsed, Option<Error>)> for PartialParseResult<Parsed, Error> {
fn from((parsed, error): (Parsed, Option<Error>)) -> Self {
PartialParseResult { parsed, error }
}
}