dope-net 0.20.0

Owned network transports for dope
Documentation
use dope_core::driver::receive::credit;
use o3::depot::queue::pool;

use crate::link::{event, pool::recv::storage::queue};

pub struct Loan<'a, 'd> {
    events: pool::Lane<'a, event::Completion<'d>>,
    credit: credit::Slot<'a, 'd>,
}

impl<'a, 'd> Loan<'a, 'd> {
    pub(crate) fn new(
        events: pool::Lane<'a, event::Completion<'d>>,
        credit: credit::Slot<'a, 'd>,
    ) -> Self {
        Self { events, credit }
    }

    pub(in crate::link::pool) fn get(&self) -> credit::Slot<'_, 'd> {
        self.credit
    }
}

impl<'d> queue::Ops<'d> for Loan<'_, 'd> {
    fn prepare_pop(&mut self) -> Option<pool::Front<'_, event::Completion<'d>, ()>> {
        queue::Ops::prepare_pop(&mut self.events)
    }

    fn has_queued(&self) -> bool {
        queue::Ops::has_queued(&self.events)
    }
}

impl<'d> queue::Write<'d> for Loan<'_, 'd> {
    fn prepare_push<T>(&mut self, done: T) -> queue::Push<'_, 'd, T> {
        queue::Write::prepare_push(&mut self.events, done)
    }
}