dope-core 0.15.0

The manifold runtime
Documentation
use std::io;

use crate::driver::{self, flight};

pub(crate) mod raw;
mod slots;

pub(crate) use slots::{Allocation, Reservation, Retirement, Slot, Slots};

#[derive(Clone, Copy)]
pub(crate) enum Phase {
    Active,
    Final,
}

pub(crate) trait Lifecycle {
    fn alloc_slots<'d>(
        &mut self,
        len: u32,
        driver: driver::Reference<'d>,
    ) -> io::Result<Reservation<'d>>;

    fn release_slots<'d>(&mut self, slots: Reservation<'d>);

    fn close<'d>(&mut self, close: driver::Close<'d>, driver: driver::Reference<'d>, phase: Phase);

    fn retire<'d>(&mut self, slot: Slot<'d>, phase: Phase);
}

pub(crate) trait Finalize: Lifecycle {
    fn settle<'q, 'd>(&mut self, drain: flight::Drain<'q, 'd>) -> io::Result<()>;
}