dope-manifold 0.35.0

Owned application and service composition for dope
Documentation
use std::mem;

use dope_core::{
    driver::{route::Identity, schedule::clock},
    io::socket,
};
use o3::base::time::Positive;

use crate::client::{conn::engine::liveness, deadline};

#[derive(Clone, Copy)]
pub(in crate::client) enum Deadline {
    None,
    Ensure,
    Progress,
    Cancel,
}

impl Deadline {
    pub(super) fn apply<'d, ID: Identity, P, X, C>(
        self,
        source: liveness::Change<'_, 'd, ID, P, X, C>,
        now: clock::Moment<'d>,
        window: Positive,
    ) -> C
    where
        P: socket::Prepared,
        X: liveness::Schedule<'d, ID, P>,
    {
        match self {
            Self::None => source.into_source(),
            Self::Ensure => source.ensure_after(deadline::Fixed::Send, now, window),
            Self::Progress => source.arm_after(deadline::Fixed::Send, now, window),
            Self::Cancel => source.cancel(deadline::Kind::Send),
        }
    }
}

const _: () = assert!(mem::size_of::<Deadline>() == 1);