use dope_core::{
driver::{self, flight, retained, route},
io::fd::handles,
};
use crate::wire::send;
pub(crate) unsafe trait Send {
fn submit_retained<'owner, 'd: 'owner, Tag: route::Tag>(
&self,
fd: &handles::Descriptor<'d>,
target: route::Target<'d, Tag>,
flights: &flight::Slots<'d, Tag>,
driver: &mut retained::Context<'_, 'owner, 'd>,
) -> Result<flight::Flight<'d>, driver::SubmitError>;
}
unsafe impl Send for send::Plain<'_> {
fn submit_retained<'owner, 'd: 'owner, Tag: route::Tag>(
&self,
fd: &handles::Descriptor<'d>,
target: route::Target<'d, Tag>,
flights: &flight::Slots<'d, Tag>,
driver: &mut retained::Context<'_, 'owner, 'd>,
) -> Result<flight::Flight<'d>, driver::SubmitError> {
let submission = retained::raw::Submission::send(fd, self.as_slice(), target)
.map_err(|_| driver::SubmitError)?;
unsafe { retained::raw::Owner::submit(driver, flights, submission) }
}
}
unsafe impl Send for send::Vectored<'_> {
fn submit_retained<'owner, 'd: 'owner, Tag: route::Tag>(
&self,
fd: &handles::Descriptor<'d>,
target: route::Target<'d, Tag>,
flights: &flight::Slots<'d, Tag>,
driver: &mut retained::Context<'_, 'owner, 'd>,
) -> Result<flight::Flight<'d>, driver::SubmitError> {
let submission = retained::raw::Submission::send_msg(fd, self.message(), target);
unsafe { retained::raw::Owner::submit(driver, flights, submission) }
}
}