Skip to main content

Interval

Struct 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: Message> Interval<M>

Source

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

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)

Available on crate feature unstable only.

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.

§Stability

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: Message> SourceHandle for Interval<M>

Source§

fn is_terminated(&self) -> bool

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

fn terminate_by_ref(&self) -> bool

Terminates the source. Drop is called immediately. Read more
Source§

fn terminate(self) -> bool
where Self: Sized,

Terminates the source. Drop is called immediately. Read more

Auto Trait Implementations§

§

impl<M> Freeze for Interval<M>

§

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> UnsafeUnpin for Interval<M>

§

impl<M> !UnwindSafe for Interval<M>

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> 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, 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