#![forbid(unsafe_code)]
use clap::Parser;
use miette::ErrorHook;
use cedar_policy_cli::{
authorize, check_parse, evaluate, format_policies, link, new, partial_authorize,
translate_policy, translate_schema, validate, visualize, CedarExitCode, Cli, Commands,
ErrorFormat,
};
fn main() -> CedarExitCode {
let cli = Cli::parse();
let err_hook: Option<ErrorHook> = match cli.err_fmt {
ErrorFormat::Human => None, ErrorFormat::Plain => Some(Box::new(|_| {
Box::new(miette::NarratableReportHandler::new())
})),
ErrorFormat::Json => Some(Box::new(|_| Box::new(miette::JSONReportHandler::new()))),
};
if let Some(err_hook) = err_hook {
#[allow(clippy::expect_used)]
miette::set_hook(err_hook).expect("failed to install error-reporting hook");
}
match cli.command {
Commands::Authorize(args) => authorize(&args),
Commands::Evaluate(args) => evaluate(&args).0,
Commands::CheckParse(args) => check_parse(&args),
Commands::Validate(args) => validate(&args),
Commands::Format(args) => format_policies(&args),
Commands::Link(args) => link(&args),
Commands::TranslatePolicy(args) => translate_policy(&args),
Commands::Visualize(args) => visualize(&args),
Commands::TranslateSchema(args) => translate_schema(&args),
Commands::New(args) => new(&args),
Commands::PartiallyAuthorize(args) => partial_authorize(&args),
}
}