sipha 3.0.0

PEG parser, syntax trees, and code generation
Documentation
//! Convenience helpers for common parse flows.

use crate::diagnostics::parsed_doc::ParsedDoc;
use crate::parse::engine::{Engine, ParseError};
use crate::parse::insn::ParseGraph;

/// Parse the given source and build a [`ParsedDoc`] on success.
///
/// This is a convenience wrapper around `Engine::parse` + `ParsedDoc::from_slice`.
pub fn parse_to_doc(
    engine: &mut Engine,
    graph: &ParseGraph<'_>,
    source: impl AsRef<[u8]>,
) -> Result<ParsedDoc, ParseError> {
    let src = source.as_ref();
    let out = engine.parse(graph, src)?;
    ParsedDoc::from_slice(src, &out).ok_or(ParseError::BadGraph(
        crate::parse::engine::BadGraphKind::InvalidTreeEvents,
    ))
}