pub enum Version<V, U>{
Certain(V),
Uncertain(U),
}
Expand description
The guessed version for the CDR or tariff objects.
Variants§
Certain(V)
If the Version of the object is certain, the Versioned
object is stored here.
Uncertain(U)
The version can’t be determined with certainty. The object with an uncertain version is stored here.
Implementations§
Source§impl<V, U> Version<V, U>where
V: Versioned,
U: Unversioned<Versioned = V>,
impl<V, U> Version<V, U>where
V: Versioned,
U: Unversioned<Versioned = V>,
Sourcepub fn certain_or(self, fallback: Version) -> V
pub fn certain_or(self, fallback: Version) -> V
Examples found in repository?
examples/lint_tariff.rs (line 23)
6fn main() {
7 const TARIFF_JSON: &str =
8 include_str!("../test_data/v221/real_world/misspelled_field/tariff.json");
9
10 let report = tariff::parse_and_report(TARIFF_JSON).unwrap();
11 let (tariff, unexpected_fields) = report.into_parts();
12
13 if !unexpected_fields.is_empty() {
14 eprintln!("Strange... there are fields in the tariff that are not defined in the spec.");
15
16 for path in &unexpected_fields {
17 eprintln!(" * {path}");
18 }
19
20 eprintln!();
21 }
22
23 let tariff = tariff.certain_or(Version::V221);
24 let report = tariff::lint(&tariff).unwrap();
25
26 print_lint_warnings(&tariff, &report.into_warning_report());
27}
More examples
examples/price_cdr_with_unknown_version.rs (line 18)
6fn main() {
7 const CDR_JSON: &str =
8 include_str!("../test_data/v211/real_world/time_and_parking_time/cdr.json");
9
10 // First the raw JSON should be parsed into a `cdr::Versioned` object.
11 // The `cdr::Report` returned from calling `cdr::parse` contains a `cdr::Versioned` object
12 // and a potential list of unexpected fields based on the OCPI v221 spec.
13 let cdr = cdr::parse(CDR_JSON).expect("Unable to parse CDR JSON");
14
15 // The guessed Version can be either certain or uncertain.
16 // In this case we discard the CDR object and try convert it into a version.
17 // If the version is uncertain then fallback to presuming the CDR is v221.
18 let cdr = cdr.certain_or(Version::V211);
19
20 // The timezone can be inferred or found in the CDR, but a versioned CDR is required.
21 let (timezone_source, warnings) = timezone::find_or_infer(&cdr).into_parts();
22
23 let Some(timezone_source) = timezone_source else {
24 eprintln!("Unable to infer timezone");
25 print_timezone_warnings(&cdr, &warnings.into_report());
26 return;
27 };
28
29 if !warnings.is_empty() {
30 print_timezone_warnings(&cdr, &warnings.into_report());
31 }
32
33 // We don't care whether the timezone was found or inferred.
34 let timezone = timezone_source.into_timezone();
35
36 let report = cdr::price(
37 CDR_JSON,
38 price::TariffSource::UseCdr,
39 timezone,
40 Version::V211,
41 )
42 .expect("unable to price CDR JSON");
43
44 // The various fields of the `price::Report` can be examined or converted to JSON.
45 let price::Report {
46 warnings: _,
47 periods: _,
48 tariff_index: _,
49 tariff_id: _,
50 tariff_reports: _,
51 timezone: _,
52 billed_energy: _,
53 billed_parking_time: _,
54 total_charging_time: _,
55 billed_charging_time: _,
56 total_cost: _,
57 total_fixed_cost: _,
58 total_time: _,
59 total_time_cost: _,
60 total_energy: _,
61 total_energy_cost: _,
62 total_parking_time: _,
63 total_parking_cost: _,
64 total_reservation_cost: _,
65 unexpected_fields,
66 } = report;
67
68 if !unexpected_fields.is_empty() {
69 eprintln!("Strange... there are fields in the CDR that are not defined in the spec.");
70
71 for path in &unexpected_fields {
72 eprintln!("{path}");
73 }
74 }
75}
Sourcepub fn unwrap_certain(self) -> Option<V>
pub fn unwrap_certain(self) -> Option<V>
Discard the object if the version is uncertain.
Trait Implementations§
Auto Trait Implementations§
impl<V, U> Freeze for Version<V, U>
impl<V, U> RefUnwindSafe for Version<V, U>where
V: RefUnwindSafe,
U: RefUnwindSafe,
impl<V, U> Send for Version<V, U>
impl<V, U> Sync for Version<V, U>
impl<V, U> Unpin for Version<V, U>
impl<V, U> UnwindSafe for Version<V, U>where
V: UnwindSafe,
U: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more