pub struct Toast<Message>where
Message: Clone,{
pub id: u64,
pub title: String,
pub message: String,
pub intent: ToastIntent,
pub lifetime: ToastLifetime,
pub created_at: Instant,
pub on_dismiss: Message,
}Expand description
A toast notification.
Message is your application’s top-level message type. The on_dismiss
field is fired when the user clicks the toast’s close button. It is not
fired when a transient toast expires; expiration is a silent sweep.
Fields§
§id: u64Application-assigned id. snora does not interpret or generate ids;
the application is the source of truth. Typically a monotonically
increasing u64.
title: StringBold heading line — typically a few words.
message: StringBody text — one or two short sentences, explaining the situation.
intent: ToastIntentSemantic category (Info, Success, Warning, …). Resolved to a
theme color by the engine.
lifetime: ToastLifetimeAuto-dismiss policy. Defaults to ToastLifetime::DEFAULT
(4-second transient).
created_at: InstantWhen this toast was enqueued. Used with lifetime to compute
expiration.
on_dismiss: MessageEmitted when the user clicks the close button.
Implementations§
Source§impl<Message> Toast<Message>where
Message: Clone,
impl<Message> Toast<Message>where
Message: Clone,
Sourcepub fn new(
id: u64,
intent: ToastIntent,
title: impl Into<String>,
message: impl Into<String>,
on_dismiss: Message,
) -> Toast<Message>
pub fn new( id: u64, intent: ToastIntent, title: impl Into<String>, message: impl Into<String>, on_dismiss: Message, ) -> Toast<Message>
Build a new toast with created_at set to Instant::now().
This constructor takes the mandatory fields positionally and uses
ToastLifetime::DEFAULT for the lifetime. Use builder-style
methods below to customize further.
§Example
use snora_core::{Toast, ToastIntent};
#[derive(Clone, Debug)]
enum Msg { DismissToast(u64) }
let toast = Toast::new(
/* id */ 1,
/* intent */ ToastIntent::Success,
/* title */ "Saved",
/* message */ "Your changes are stored.",
/* on_dismiss */ Msg::DismissToast(1),
);
assert_eq!(toast.id, 1);
assert_eq!(toast.title, "Saved");
assert_eq!(toast.intent, ToastIntent::Success);Sourcepub fn with_lifetime(self, lifetime: ToastLifetime) -> Toast<Message>
pub fn with_lifetime(self, lifetime: ToastLifetime) -> Toast<Message>
Override the lifetime.
Sourcepub fn persistent(self) -> Toast<Message>
pub fn persistent(self) -> Toast<Message>
Make this toast persistent (never auto-dismiss).
Use for notifications the user must explicitly acknowledge — “Export complete”, “Disk almost full”, confirmations of long operations.
§Example
use snora_core::{Toast, ToastIntent, ToastLifetime};
#[derive(Clone, Debug)]
enum Msg { DismissToast(u64) }
let toast = Toast::new(
1, ToastIntent::Info, "Exported", "Done.", Msg::DismissToast(1),
)
.persistent();
assert_eq!(toast.lifetime, ToastLifetime::Persistent);Sourcepub fn with_created_at(self, created_at: Instant) -> Toast<Message>
pub fn with_created_at(self, created_at: Instant) -> Toast<Message>
Override the creation timestamp. Mainly useful for tests.
Sourcepub fn is_expired(&self, now: Instant) -> bool
pub fn is_expired(&self, now: Instant) -> bool
True when this toast has outlived its transient deadline.
Persistent toasts always return false.
Trait Implementations§
Auto Trait Implementations§
impl<Message> Freeze for Toast<Message>where
Message: Freeze,
impl<Message> RefUnwindSafe for Toast<Message>where
Message: RefUnwindSafe,
impl<Message> Send for Toast<Message>where
Message: Send,
impl<Message> Sync for Toast<Message>where
Message: Sync,
impl<Message> Unpin for Toast<Message>where
Message: Unpin,
impl<Message> UnsafeUnpin for Toast<Message>where
Message: UnsafeUnpin,
impl<Message> UnwindSafe for Toast<Message>where
Message: UnwindSafe,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<State, Message> IntoBoot<State, Message> for State
impl<State, Message> IntoBoot<State, Message> for State
Source§fn into_boot(self) -> (State, Task<Message>)
fn into_boot(self) -> (State, Task<Message>)
Application.