conjure_oxide/
pretty.rs

1use std::{path::PathBuf, sync::Arc};
2
3use anyhow::anyhow;
4use clap::ValueHint;
5
6use conjure_cp_cli::utils::testing::serialize_model;
7
8use crate::cli::{GlobalArgs, LOGGING_HELP_HEADING};
9use crate::solve::{init_context, parse};
10
11#[derive(Clone, Debug, clap::Args)]
12pub struct Args {
13    /// The input Essence file
14    #[arg(value_name = "INPUT_ESSENCE", value_hint = ValueHint::FilePath)]
15    pub input_file: PathBuf,
16
17    // The format you would like to print out (e.g. ast-json)
18    #[arg(long, help_heading=LOGGING_HELP_HEADING)]
19    pub output_format: String,
20}
21
22pub fn run_pretty_command(global_args: GlobalArgs, pretty_args: Args) -> anyhow::Result<()> {
23    // Preamble
24    let input_file = pretty_args.input_file.clone();
25    let context = init_context(&global_args, input_file)?;
26    let model = parse(&global_args, Arc::clone(&context))?;
27
28    // Running the correct method to acquire pretty string
29    let output = match pretty_args.output_format.as_str() {
30        "ast-json" => serialize_model(&model),
31        // "add_new_flag" => method(),
32        _ => {
33            return Err(anyhow!(
34                "Unknown output format {}; supports [ast-json]",
35                &pretty_args.output_format
36            ));
37        }
38    };
39
40    if output.is_ok() {
41        println!("{}", output.unwrap());
42        Ok(())
43    } else {
44        Err(anyhow!("Could not pretty print"))
45    }
46}