Struct elfo::time::Interval

source ·
pub struct Interval<M> { /* private fields */ }
Expand description

A source that emits messages periodically. Clones the message on every tick.

Tracing

Every message starts a new trace, thus a new trace id is generated and assigned to the current scope.

Example

use elfo::{time::Interval, messages::ConfigUpdated};

#[message]
struct MyTick;

let interval = ctx.attach(Interval::new(MyTick));
interval.start(ctx.config().period);

while let Some(envelope) = ctx.recv().await {
    msg!(match envelope {
        ConfigUpdated => {
            interval.set_period(ctx.config().period);
        },
        MyTick => {
            tracing::info!("tick!");
        },
    });
}

Implementations§

source§

impl<M> Interval<M>where M: Message,

source

pub fn new(message: M) -> UnattachedSource<Interval<M>>

Creates an unattached instance of Interval.

source

pub fn set_message(&self, message: M)

Replaces a stored message with the provided one.

source

pub fn set_period(&self, period: Duration)

Configures the period of ticks. Intended to be called on ConfigUpdated.

Does nothing if the timer is not started or the period hasn’t been changed.

Unlike rescheduling (start_* methods), it only adjusts the current period and doesn’t change the time origin. For instance, if we have a configured interval with period = 5s and try to call one of these methods, the difference looks something like this:

set_period(10s): | 5s | 5s | 5s |  # 10s  |   10s   |
start(10s):      | 5s | 5s | 5s |  #   10s   |   10s   |
                                   #
                              called here
Panics

If period is zero.

source

pub fn start(&self, period: Duration)

Schedules the timer to start emitting ticks every period. The first tick will be emitted also after period.

Reschedules the timer if it’s already started.

Panics

If period is zero.

source

pub fn start_after(&self, delay: Duration, period: Duration)

Schedules the timer to start emitting ticks every period. The first tick will be emitted after delay.

Reschedules the timer if it’s already started.

Panics

If period is zero.

source

pub fn start_at(&self, when: Instant, period: Duration)

Schedules the timer to start emitting ticks every period. The first tick will be emitted at when.

Reschedules the timer if it’s already started.

Panics

If period is zero.

Stability

This method is unstable, because it accepts [tokio::time::Instant], which will be replaced in the future to support other runtimes.

Availability

This API is marked as unstable and is only available when the unstable crate feature is enabled. This comes with no stability guarantees, and could be changed or removed at any time.

source

pub fn stop(&self)

Stops any ticks. To resume ticks use one of start_* methods.

Note: it doesn’t terminates the source. It means the source is present in the source map until SourceHandle::terminate() is called.

Trait Implementations§

source§

impl<M> SourceHandle for Interval<M>where M: Message,

source§

fn is_terminated(&self) -> bool

Returns true if the source has stopped producing messages.
source§

fn terminate(self)

Terminates the source. Drop is called immediately.

Auto Trait Implementations§

§

impl<M> !RefUnwindSafe for Interval<M>

§

impl<M> Send for Interval<M>where M: Send,

§

impl<M> Sync for Interval<M>where M: Sync,

§

impl<M> !Unpin for Interval<M>

§

impl<M> !UnwindSafe for Interval<M>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

§

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 Twhere U: TryFrom<T>,

§

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