1use clap::{Parser, ValueEnum};2use jrsonnet_evaluator::trace::{CompactFormat, ExplainingFormat, PathResolver, TraceFormat};34#[derive(PartialEq, Eq, ValueEnum, Clone)]5pub enum TraceFormatName {6 7 Compact,8 9 Explaining,10}1112#[derive(Parser)]13#[clap(next_help_heading = "STACK TRACE VISUAL")]14pub struct TraceOpts {15 16 #[clap(long)]17 trace_format: Option<TraceFormatName>,18 19 20 #[clap(long, short = 't', default_value = "20")]21 max_trace: usize,22}23impl TraceOpts {24 pub fn trace_format(&self) -> Box<dyn TraceFormat> {25 let resolver = PathResolver::new_cwd_fallback();26 let max_trace = self.max_trace;27 let format: Box<dyn TraceFormat> = match self28 .trace_format29 .as_ref()30 .unwrap_or(&TraceFormatName::Compact)31 {32 TraceFormatName::Compact => Box::new(CompactFormat {33 resolver,34 padding: 4,35 max_trace,36 }),37 TraceFormatName::Explaining => Box::new(ExplainingFormat {38 resolver,39 max_trace,40 }),41 };42 format43 }44}