Skip to main content

PricedSession

Struct PricedSession 

Source
pub struct PricedSession {
    pub start: DateTime,
    pub end: Option<DateTime>,
    pub periods: Vec<PricedPeriod>,
    pub time_zone: TimeZone,
    pub profile_type: Option<ProfileType>,
    pub ad_hoc_payment: bool,
    pub reservation_expired: bool,
}
Available on crate feature tariffs only.
Expand description

A session reduced to what the pricing engine needs.

Build one with PricedSession::from_cdr or PricedSession::from_session, or by hand for a “what would this cost?” calculation that has no CDR yet.

Fields§

§start: DateTime

When the session started, in UTC.

§end: Option<DateTime>

When the session ended, in UTC, if it has.

§periods: Vec<PricedPeriod>

The charging periods, in order.

§time_zone: TimeZone

The time zone of the Location, which the local-time restrictions are expressed in.

§profile_type: Option<ProfileType>

The ProfileType the driver selected, which decides which Tariff.type applies.

§ad_hoc_payment: bool

Whether the driver used ad-hoc payment rather than a contract.

§reservation_expired: bool

Whether a reservation that was made expired before charging started.

Selects between the RESERVATION and RESERVATION_EXPIRES tariff elements.

Implementations§

Source§

impl PricedSession

Source

pub fn from_cdr(cdr: &Cdr, time_zone: TimeZone) -> Self

Builds the pricing input from an OCPI 2.3.0 CDR.

The CDR does not carry the Location’s time zone — it is not one of the fields CdrLocation keeps — so it has to be supplied. Use the time_zone of the Location the session took place at.

Source

pub fn from_session(session: &Session, time_zone: TimeZone) -> Self

Builds the pricing input from an OCPI 2.3.0 Session.

Source§

impl PricedSession

Source

pub fn from_cdr_v2_2_1(cdr: &Cdr, time_zone: TimeZone) -> Self

Builds the pricing input from an OCPI 2.2.1 CDR.

The charging period types are wire-identical between 2.2.1 and 2.3.0, so this reuses the same reduction.

Source

pub fn from_session_v2_2_1(session: &Session, time_zone: TimeZone) -> Self

Builds the pricing input from an OCPI 2.2.1 Session.

Source§

impl PricedSession

Source

pub fn new(start: DateTime, time_zone: TimeZone) -> Self

A session with no periods, for building up by hand.

Source

pub fn with_period(self, period: PricedPeriod) -> Self

Adds a charging period.

Source

pub const fn ending(self, end: DateTime) -> Self

Sets the end of the session.

Source

pub fn total_energy_kwh(&self) -> Number

The total energy across all periods, in kWh.

Source

pub fn total_charging_hours(&self) -> Number

The total charging time across all periods, in hours.

Source

pub fn total_parking_hours(&self) -> Number

The total parking time across all periods, in hours.

Source

pub fn total_reservation_hours(&self) -> Number

The total reservation time across all periods, in hours.

Source

pub fn energy_before(&self, index: usize) -> Number

The energy charged before index, for a min_kwh/max_kwh restriction.

Source

pub fn duration_before(&self, index: usize) -> i64

The session duration up to the start of period index, in seconds.

min_duration: Minimum duration in seconds the Charging Session MUST last.

Source

pub fn first_out_of_order(&self) -> Option<DateTime>

The start of the first period that does not begin after the one before it, if any.

The engine reads the periods as a timeline: a period’s duration is the gap to the next one, and step_size applies to “the last relevant PriceComponent”. Neither means anything if the list is out of order, which is a thing that happens when a CPO merges period streams from more than one source.

Source

pub fn period_end(&self, index: usize) -> Option<DateTime>

The end of period index: the start of the next one, or the end of the session.

Trait Implementations§

Source§

impl Clone for PricedSession

Source§

fn clone(&self) -> PricedSession

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PricedSession

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for PricedSession

Source§

fn eq(&self, other: &PricedSession) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for PricedSession

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more