#[cfg(feature = "storage")]
mod ledger;
use core::marker::PhantomData;
use crate::{Participant, WakeAfter};
#[cfg(feature = "storage")]
pub use ledger::{
DelayAdmission, DelayAdmissionOutcome, DelayArmMismatch, DelayArmOutcome, DelayArmRefusal,
DelayLedger, DelayLedgerCreationError, DelayLedgerCreationFailure, DelayRefusalOutcome,
DelayReleaseOutcome, DelayUnavailable, DelayWithdrawalOutcome,
};
pub struct After<Message>(PhantomData<fn() -> Message>);
impl<Message: 'static> Participant for After<Message> {
type In<'message> = Delayed<Message>;
type Out<'message> = Message;
}
#[must_use = "delayed work must be sent through a delayed pipe"]
pub struct Delayed<Message> {
message: Message,
wake_after: WakeAfter,
}
impl<Message> Delayed<Message> {
pub const fn new(message: Message, wake_after: WakeAfter) -> Self {
Self {
message,
wake_after,
}
}
pub const fn message(&self) -> &Message {
&self.message
}
pub const fn wake_after(&self) -> WakeAfter {
self.wake_after
}
pub fn into_parts(self) -> (Message, WakeAfter) {
(self.message, self.wake_after)
}
}
#[cfg(all(kani, feature = "storage"))]
mod proofs;
#[cfg(test)]
mod tests;