Timeline

Struct Timeline 

Source
pub struct Timeline { /* private fields */ }
Expand description

A sequence of ordered, non-overlapping intervals and associated values.

Intervals are sorted by their timestamp. The intervals will not overlap, but there may be gaps between intervals.

Implementations§

Source§

impl Timeline

Source

pub fn new() -> Self

Create an empty Timeline

Source

pub fn from_events( program: &Program, events: Vec<&EventContent>, ) -> Option<Self>

Creates a Timeline form a Program, and the Events that belong to it.

It sorts events according to their priority and builds the timeline accordingly. The timeline can have gaps if the intervals in the events contain gaps. The event with the highest priority always takes presence at a specific time point. Therefore, a long-lasting, low-priority event can be interrupted by a short, high-priority event, for example. In this case, the long-lasting event will be split into two parts, such that the high-priority event fits in between.

Input:
|------------------------long, low prio--------------------------|    |--another-interval--|
                   |-----short, high prio---|
Result:
|--long, low prio--|-----short, high prio---|---long, low prio---|    |--another-interval--|

This function logs at warn level if provided with an Event those program_id does not match with the Program::id. The corresponding event will be ignored then building the timeline.

This function also logs at warn level if there are two overlapping events at the same priority. There is no guarantee which event will take precedence, though in the current implementation the event stored later in the events param will take precedence.

There must be an IntervalPeriod present on the event level, or the individual intervals. If both are specified, the individual period takes precedence over the one specified in the event. If for an interval, there is no period present, and none specified in the event, then this function will return None

Source

pub fn iter(&self) -> Iter<'_>

Get an iterator over the Intervals in this Timeline

Source

pub fn at_datetime( &self, datetime: &DateTime<Utc>, ) -> Option<(&Range<DateTime<Utc>>, Interval<'_>)>

Returns the Interval applicable at the requested time point and the range it is valid for.

Source

pub fn next_update(&self, datetime: &DateTime<Utc>) -> Option<DateTime<Utc>>

Returns the time when to next change takes effect.

Example:

  |--interval 1--|---interval 2---|       |---interval 3---|
  ↑              ↑                ↑       ↑                ↑
08:03          09:56            10:59   11:01            12:00

For the timeline illustrated above,

  • next_update(09:56) would return Some(10:59)
  • next_update(10:00) would return Some(10:59)
  • next_update(11:00) would return Some(11:01)
  • next_update(12:00) would return None
  • next_update(12:01) would return None

Trait Implementations§

Source§

impl Clone for Timeline

Source§

fn clone(&self) -> Timeline

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Timeline

Source§

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

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

impl Default for Timeline

Source§

fn default() -> Timeline

Returns the “default value” for a type. Read more

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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: 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: 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 = Infallible

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
Source§

impl<T> ErasedDestructor for T
where T: 'static,