use std::mem;
use dope_core::{
driver::{self, retained, retained::flight, route, route::Identity},
io::{
fd::handles,
socket,
socket::{option, pending},
transfer,
},
};
use setup::Setup;
mod duplex;
pub mod egress;
pub mod event;
pub mod oneshot;
pub mod pool;
mod setup;
pub mod slot;
#[derive(Clone, Copy, PartialEq, Eq)]
#[repr(transparent)]
pub struct Consumed(transfer::Len);
impl Consumed {
pub const ZERO: Self = Self(transfer::Len::ZERO);
pub const fn into_len(self) -> transfer::Len {
self.0
}
pub(crate) const fn proven(amount: transfer::Len) -> Self {
Self(amount)
}
}
const _: () = assert!(mem::size_of::<Consumed>() == mem::size_of::<transfer::Len>());
fn connect<'addr, 'd, ID: Identity, A: socket::Prepared>(
fd: handles::Descriptor<'d>,
addr: &'addr A,
target: route::Target<'d, ID>,
slots: &flight::Slots<'d, ID>,
driver: driver::Context<'_, 'd>,
opts: option::Set,
) -> Result<pending::Connection<'d>, pending::Rejection<'d>>
where
'd: 'addr,
{
let op = retained::raw::Connect::new(fd, addr, target);
unsafe { op.try_connect(driver, slots, &opts) }
}