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 #[arg(value_name = "INPUT_ESSENCE", value_hint = ValueHint::FilePath)]
15 pub input_file: PathBuf,
16
17 #[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 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 let output = match pretty_args.output_format.as_str() {
30 "ast-json" => serialize_model(&model),
31 _ => {
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}