Skip to main content

charon_error/error_formating/
attachments.rs

1use tracing::instrument;
2use tracing_error::SpanTrace;
3
4use crate::{
5    ResultER, SourceLocation,
6    error_formating::error_fmt::{ErrorFmt, ErrorFmtLoD, ErrorFmtSettings, ErrorFormatObj},
7    map,
8};
9
10impl ErrorFmt for SpanTrace {
11    #[instrument]
12    fn create_format_obj(&self, settings: ErrorFmtSettings) -> ResultER<ErrorFormatObj> {
13        match settings.level_of_detail {
14            ErrorFmtLoD::Compact | ErrorFmtLoD::Medium | ErrorFmtLoD::SubmitReport => {
15                let mut span_list = Vec::new();
16                self.with_spans(|meta_data, _field_values| {
17                    span_list.push(ErrorFormatObj::FormatString(vec![
18                        ErrorFormatObj::String(meta_data.target().to_owned()),
19                        ErrorFormatObj::String("::".to_owned()),
20                        ErrorFormatObj::String(meta_data.name().to_owned()),
21                        ErrorFormatObj::String(" at (".to_owned()),
22                        ErrorFormatObj::SourceLocation(SourceLocation::from_metadata(meta_data)),
23                        ErrorFormatObj::String(")".to_owned()),
24                    ]));
25                    true
26                });
27                Ok(ErrorFormatObj::Array(span_list))
28            }
29            ErrorFmtLoD::Full | ErrorFmtLoD::Debug => {
30                let mut span_list = Vec::new();
31                self.with_spans(|meta_data, field_values| {
32                    span_list.push(ErrorFormatObj::Object(map! {
33                        "target" => ErrorFormatObj::String(meta_data.target().to_owned()),
34                        "name" => ErrorFormatObj::String(meta_data.name().to_owned()),
35                        "source_location" => ErrorFormatObj::SourceLocation(SourceLocation::from_metadata(meta_data)),
36                        "field_values" => ErrorFormatObj::String(field_values.to_owned()),
37                    }));
38                    true
39                });
40                Ok(ErrorFormatObj::Array(span_list))
41            }
42        }
43    }
44}