pub enum Source {
Found(Tz),
Inferred(Tz),
}Expand description
The source of the timezone.
Variants§
Found(Tz)
The timezone was found in the location element.
Inferred(Tz)
The timezone is inferred from the location’s country.
Implementations§
Source§impl Source
impl Source
Sourcepub fn into_timezone(self) -> Tz
pub fn into_timezone(self) -> Tz
Return the timezone and disregard where it came from.
Examples found in repository?
examples/price_cdr_with_unknown_version.rs (line 38)
6fn main() {
7 const CDR_JSON: &str = include_str!("data/cdr_time_and_parking_time.json");
8
9 // First the raw JSON is parsed into a `json::Document` and the OCPI version of the CDR is
10 // guessed. The `guess::CdrVersion` returned from calling `cdr::infer_version` is either certain
11 // or uncertain about the version of the contained `cdr::Versioned` object.
12 let cdr = json::parse_object(CDR_JSON).expect("Unable to parse CDR JSON");
13 let cdr = cdr::infer_version(cdr);
14
15 // The guessed Version can be either certain or uncertain.
16 // If the version is uncertain then fallback to presuming the CDR is v211.
17 let cdr = cdr.certain_or(Version::V211);
18 let cdr = cdr::build_versioned(cdr).ignore_warnings();
19
20 // The timezone can be inferred or found in the CDR, but a versioned CDR is required.
21 let timezone = match timezone::find_or_infer(&cdr) {
22 Ok(tz) => tz,
23 Err(err_set) => {
24 let (error, warnings) = err_set.into_parts();
25 eprintln!("Unable to infer timezone");
26 print_timezone_error(&error);
27 print_timezone_warnings(&warnings);
28 return;
29 }
30 };
31 let (timezone_source, warnings) = timezone.into_parts();
32
33 if !warnings.is_empty() {
34 print_timezone_warnings(&warnings);
35 }
36
37 // We don't care whether the timezone was found or inferred.
38 let timezone = timezone_source.into_timezone();
39
40 let report = match cdr::price(&cdr, price::TariffSource::UseCdr, timezone) {
41 Ok(r) => r,
42 Err(set) => {
43 let (error, warnings) = set.into_parts();
44 print_pricing_error(&error);
45 print_pricing_warnings(&warnings);
46 return;
47 }
48 };
49
50 let (report, warnings) = report.into_parts();
51
52 print_pricing_warnings(&warnings);
53
54 // The various fields of the `price::Report` can be examined or converted to JSON.
55 let price::Report {
56 periods: _,
57 tariff_used: _,
58 tariff_reports: _,
59 timezone: _,
60 billed_energy: _,
61 billed_idle_time: _,
62 total_charging_time: _,
63 billed_charging_time: _,
64 total_cost: _,
65 total_fixed_cost: _,
66 total_time: _,
67 total_charging_time_cost: _,
68 total_energy: _,
69 total_energy_cost: _,
70 total_idle_time: _,
71 total_idle_cost: _,
72 } = report;
73}Trait Implementations§
Auto Trait Implementations§
impl Freeze for Source
impl RefUnwindSafe for Source
impl Send for Source
impl Sync for Source
impl Unpin for Source
impl UnsafeUnpin for Source
impl UnwindSafe for Source
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