1
use std::{path::PathBuf, sync::Arc};
2

            
3
use anyhow::anyhow;
4
use clap::ValueHint;
5

            
6
use conjure_cp_cli::utils::testing::serialize_model;
7

            
8
use crate::cli::{GlobalArgs, LOGGING_HELP_HEADING};
9
use crate::solve::{init_context, parse};
10

            
11
#[derive(Clone, Debug, clap::Args)]
12
pub 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

            
22
pub 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
}