dope-core 0.15.0

The manifold runtime
Documentation
use crate::{
    backend::{self, fixed},
    driver, io, platform,
};

pub(super) struct Reclaim<'a, 'd> {
    backend: &'a mut backend::Uring,
    driver: driver::Reference<'d>,
}

impl<'a, 'd> Reclaim<'a, 'd> {
    pub(super) fn new(backend: &'a mut backend::Uring, driver: driver::Reference<'d>) -> Self {
        Self { backend, driver }
    }

    pub(super) fn apply(self, completion: io::Completion) {
        let Self { backend, driver } = self;
        match completion.into_reclaim(driver) {
            io::Reclaim::Accepted(accepted) => fixed::Lifecycle::close(
                backend,
                driver::Close::untracked(accepted.into_slot()),
                driver,
                fixed::Phase::Final,
            ),
            io::Reclaim::Close(close) => {
                fixed::Lifecycle::close(backend, close, driver, fixed::Phase::Final)
            }
            io::Reclaim::Slots(retired) => {
                let slots = driver.outbound().take_retired_slots(retired);
                fixed::Lifecycle::release_slots(backend, slots);
            }
            io::Reclaim::Buffer(receive) => platform::Buffer::release(backend, receive),
            io::Reclaim::None => {}
        }
    }
}