1use clap::{Parser, ValueEnum};
2use jrsonnet_evaluator::trace::{CompactFormat, HiDocFormat, PathResolver, TraceFormat};
3
4#[derive(PartialEq, Eq, ValueEnum, Clone)]
5pub enum TraceFormatName {
6 Compact,
8 Explaining,
10 HiDoc,
12}
13
14#[derive(Parser)]
15#[clap(next_help_heading = "STACK TRACE VISUAL")]
16pub struct TraceOpts {
17 #[clap(long)]
19 trace_format: Option<TraceFormatName>,
20 #[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 self
30 .trace_format
31 .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 format
45 }
46}