pub struct Set<W: Warning>(/* private fields */);Implementations§
Source§impl<W: Warning> Set<W>
impl<W: Warning> Set<W>
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Return true if the Warning set is empty.
Examples found in repository?
More examples
6fn main() {
7 const CDR_JSON: &str = include_str!("data/cdr_time_and_parking_time.json");
8
9 // First the raw JSON should be parsed into a `cdr::Versioned` object.
10 // The `cdr::Report` returned from calling `cdr::parse` contains a `cdr::Versioned` object
11 // and a potential list of unexpected fields based on the OCPI v221 spec.
12 let cdr = cdr::parse(CDR_JSON).expect("Unable to parse CDR JSON");
13
14 // The guessed Version can be either certain or uncertain.
15 // In this case we discard the CDR object and try to convert it into a version.
16 // If the version is uncertain then fallback to presuming the CDR is v211.
17 let cdr = cdr.certain_or(Version::V211);
18
19 // The timezone can be inferred or found in the CDR, but a versioned CDR is required.
20 let timezone = match timezone::find_or_infer(&cdr) {
21 Ok(tz) => tz,
22 Err(err_set) => {
23 let (error, warnings) = err_set.into_parts();
24 eprintln!("Unable to infer timezone");
25 print_timezone_error(&error);
26 print_timezone_warnings(&warnings);
27 return;
28 }
29 };
30 let (timezone_source, warnings) = timezone.into_parts();
31
32 if !warnings.is_empty() {
33 print_timezone_warnings(&warnings);
34 }
35
36 // We don't care whether the timezone was found or inferred.
37 let timezone = timezone_source.into_timezone();
38 let report = cdr::parse_with_version(CDR_JSON, Version::V211).expect("Unable to parse CDR");
39 let cdr::ParseReport {
40 cdr,
41 unexpected_fields,
42 } = report;
43
44 if !unexpected_fields.is_empty() {
45 eprintln!("Strange... there are fields in the CDR that are not defined in the spec.");
46
47 for path in &unexpected_fields {
48 eprintln!("{path}");
49 }
50 }
51
52 let report = match cdr::price(&cdr, price::TariffSource::UseCdr, timezone) {
53 Ok(r) => r,
54 Err(set) => {
55 let (error, warnings) = set.into_parts();
56 print_pricing_error(&error);
57 print_pricing_warnings(&warnings);
58 return;
59 }
60 };
61
62 let (report, warnings) = report.into_parts();
63
64 print_pricing_warnings(&warnings);
65
66 // The various fields of the `price::Report` can be examined or converted to JSON.
67 let price::Report {
68 periods: _,
69 tariff_used: _,
70 tariff_reports: _,
71 timezone: _,
72 billed_energy: _,
73 billed_idle_time: _,
74 total_charging_time: _,
75 billed_charging_time: _,
76 total_cost: _,
77 total_fixed_cost: _,
78 total_time: _,
79 total_charging_time_cost: _,
80 total_energy: _,
81 total_energy_cost: _,
82 total_idle_time: _,
83 total_idle_cost: _,
84 total_reservation_cost: _,
85 } = report;
86}
87
88/// Print the `timezone::Warning` that halted the example to `stderr`.
89fn print_timezone_error(error: &warning::Error<timezone::Warning>) {
90 eprintln!(
91 "ERR: Unable to find timezone due to error at path `{}`: {}",
92 error.element().path(),
93 error.warning()
94 );
95}
96
97/// Print the `timezone::Warning`s to `stderr`.
98fn print_timezone_warnings(warnings: &warning::Set<timezone::Warning>) {
99 if warnings.is_empty() {
100 return;
101 }
102
103 eprintln!(
104 "WARN: {} warnings from the timezone search",
105 warnings.len_warnings()
106 );
107
108 eprintln!(
109 "WARN: {} warnings from the timezone search:\n {}",
110 warnings.len_warnings(),
111 warning::SetWriter::new(warnings)
112 );
113}
114
115/// Print the `price::Warning` that halted the process to `stderr`.
116fn print_pricing_error(error: &warning::Error<price::Warning>) {
117 eprintln!(
118 "ERR: Unable to price CDR due to error at path `{}`: {}",
119 error.element().path(),
120 error.warning()
121 );
122}
123
124/// Print the `price::Warning`s to `stderr`.
125fn print_pricing_warnings(warnings: &warning::Set<price::Warning>) {
126 if warnings.is_empty() {
127 return;
128 }
129
130 eprintln!(
131 "WARN: {} warnings from the linting:\n {}",
132 warnings.len_warnings(),
133 warning::SetWriter::new(warnings)
134 );
135}Sourcepub fn len_elements(&self) -> usize
pub fn len_elements(&self) -> usize
Sourcepub fn len_warnings(&self) -> usize
pub fn len_warnings(&self) -> usize
Examples found in repository?
More examples
98fn print_timezone_warnings(warnings: &warning::Set<timezone::Warning>) {
99 if warnings.is_empty() {
100 return;
101 }
102
103 eprintln!(
104 "WARN: {} warnings from the timezone search",
105 warnings.len_warnings()
106 );
107
108 eprintln!(
109 "WARN: {} warnings from the timezone search:\n {}",
110 warnings.len_warnings(),
111 warning::SetWriter::new(warnings)
112 );
113}
114
115/// Print the `price::Warning` that halted the process to `stderr`.
116fn print_pricing_error(error: &warning::Error<price::Warning>) {
117 eprintln!(
118 "ERR: Unable to price CDR due to error at path `{}`: {}",
119 error.element().path(),
120 error.warning()
121 );
122}
123
124/// Print the `price::Warning`s to `stderr`.
125fn print_pricing_warnings(warnings: &warning::Set<price::Warning>) {
126 if warnings.is_empty() {
127 return;
128 }
129
130 eprintln!(
131 "WARN: {} warnings from the linting:\n {}",
132 warnings.len_warnings(),
133 warning::SetWriter::new(warnings)
134 );
135}Sourcepub fn id_path_map(&self, config: Limit) -> IdPathMap<'_>
pub fn id_path_map(&self, config: Limit) -> IdPathMap<'_>
Return a collection of Ids mapped to the paths they occurred at.
Sourcepub fn msg_path_map(&self, config: Limit) -> MsgPathMap<'_>
pub fn msg_path_map(&self, config: Limit) -> MsgPathMap<'_>
Return a collection of warning messages mapped to the paths they occurred at.
Sourcepub fn path_map(&self) -> BTreeMap<&str, Vec<&W>>
pub fn path_map(&self) -> BTreeMap<&str, Vec<&W>>
Return a map of json::Element paths to a list of Warning.
This is designed to be used to print out maps of warnings associated with elements.
You can use the debug alternate format {:#?} to print the map ‘pretty’ over multiple lines
with indentation.
Sourcepub fn into_path_map(self) -> BTreeMap<Path, Vec<W>>
pub fn into_path_map(self) -> BTreeMap<Path, Vec<W>>
Consume the Set and return a map of json::Element paths to a list of Warnings.
This is designed to be used to print out maps of warnings associated with elements.
Sourcepub fn path_id_map(&self) -> BTreeMap<&str, Vec<Id>>
pub fn path_id_map(&self) -> BTreeMap<&str, Vec<Id>>
Return a map of json::Element paths to a list of Warning ids as Strings.
This is designed to be used to print out maps of warnings associated with elements.
You can use the debug alternate format {:#?} to print the map ‘pretty’ over multiple lines
with indentation.
Note: This representation is also valid JSON and can be copied directly to a test expectation file.
Sourcepub fn path_msg_map(&self) -> BTreeMap<&str, Vec<String>>
pub fn path_msg_map(&self) -> BTreeMap<&str, Vec<String>>
Return a map of json::Element paths to a list of Warning messages as Strings.
This is designed to be used to print out maps of warnings associated with elements.
You can use the debug alternate format {:#?} to print the map ‘pretty’ over multiple lines
with indentation.