conjure_essence_parser/
parser_legacy.rs

1use crate::errors::EssenceParseError;
2use conjure_core::parse::model_from_json;
3use conjure_core::{context::Context, Model};
4use std::sync::{Arc, RwLock};
5
6pub fn parse_essence_file(
7    path: &str,
8    context: Arc<RwLock<Context<'static>>>,
9) -> Result<Model, EssenceParseError> {
10    let mut cmd = std::process::Command::new("conjure");
11    let output = match cmd
12        .arg("pretty")
13        .arg("--output-format=astjson")
14        .arg(path)
15        .output()
16    {
17        Ok(output) => output,
18        Err(e) => return Err(EssenceParseError::ConjurePrettyError(e.to_string())),
19    };
20
21    if !output.status.success() {
22        let stderr_string = String::from_utf8(output.stderr)
23            .unwrap_or("stderr is not a valid UTF-8 string".to_string());
24        return Err(EssenceParseError::ConjurePrettyError(stderr_string));
25    }
26
27    let astjson = match String::from_utf8(output.stdout) {
28        Ok(astjson) => astjson,
29        Err(e) => {
30            return Err(EssenceParseError::ConjurePrettyError(format!(
31                "Error parsing output from conjure: {:#?}",
32                e
33            )))
34        }
35    };
36
37    let parsed_model = model_from_json(&astjson, context)?;
38    Ok(parsed_model)
39}