1use clap::{Parser, ValueEnum};2use jrsonnet_evaluator::{3 error::Result,4 trace::{CompactFormat, ExplainingFormat, PathResolver, TraceFormat},5 State,6};78#[derive(PartialEq, Eq, ValueEnum, Clone)]9pub enum TraceFormatName {10 11 Compact,12 13 Explaining,14}1516#[derive(Parser)]17#[clap(next_help_heading = "STACK TRACE VISUAL")]18pub struct TraceOpts {19 20 #[clap(long)]21 trace_format: Option<TraceFormatName>,22 23 24 #[clap(long, short = 't', default_value = "20")]25 max_trace: usize,26}27impl TraceOpts {28 pub fn trace_format(&self) -> Box<dyn TraceFormat> {29 let resolver = PathResolver::new_cwd_fallback();30 let max_trace = self.max_trace;31 let format: Box<dyn TraceFormat> = match self32 .trace_format33 .as_ref()34 .unwrap_or(&TraceFormatName::Compact)35 {36 TraceFormatName::Compact => Box::new(CompactFormat {37 resolver,38 padding: 4,39 max_trace,40 }),41 TraceFormatName::Explaining => Box::new(ExplainingFormat {42 resolver,43 max_trace,44 }),45 };46 format47 }48}