charon_error/error_formating/
attachments.rs1use 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}