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