use clap::{Parser, ValueEnum};
use jrsonnet_evaluator::trace::{CompactFormat, HiDocFormat, PathResolver, TraceFormat};
#[derive(PartialEq, Eq, ValueEnum, Clone)]
pub enum TraceFormatName {
Compact,
Explaining,
HiDoc,
}
#[derive(Parser)]
#[clap(next_help_heading = "STACK TRACE VISUAL")]
pub struct TraceOpts {
#[clap(long)]
trace_format: Option<TraceFormatName>,
#[clap(long, short = 't', default_value = "20")]
max_trace: usize,
}
impl TraceOpts {
pub fn trace_format(&self) -> Box<dyn TraceFormat> {
let resolver = PathResolver::new_cwd_fallback();
let max_trace = self.max_trace;
let format: Box<dyn TraceFormat> = match self
.trace_format
.as_ref()
.unwrap_or(&TraceFormatName::Compact)
{
TraceFormatName::Compact => Box::new(CompactFormat {
resolver,
padding: 4,
max_trace,
}),
TraceFormatName::Explaining | TraceFormatName::HiDoc => Box::new(HiDocFormat {
resolver,
max_trace,
}),
};
format
}
}