conjure_essence_parser/
parser_legacy.rs1use 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}