Skip to main content

dope_core/driver/
submission.rs

1use crate::backend::ops::raw::submission::SubmissionBackend;
2use crate::backend::{Backend, Sqe};
3
4use super::{DriverContext, PushError};
5
6pub mod raw {
7    use crate::backend::ops::raw::submission::SubmissionBackend;
8    use crate::backend::{Backend, RawSqe};
9
10    use super::{DriverContext, PushError};
11
12    pub trait Submission {
13        /// # Safety
14        /// Captured addresses obey their validity and aliasing contract through completion.
15        ///
16        /// ```compile_fail
17        /// use dope_core::{backend::RawSqe, driver::{DriverContext, submission::Submission as _}};
18        /// fn reject(driver: &mut DriverContext<'_, '_>, sqe: RawSqe) { driver.push(sqe); }
19        /// ```
20        unsafe fn push_raw(&mut self, sqe: RawSqe) -> Result<(), PushError>;
21    }
22
23    impl Submission for DriverContext<'_, '_> {
24        unsafe fn push_raw(&mut self, sqe: RawSqe) -> Result<(), PushError> {
25            <Backend as SubmissionBackend>::push(self.backend(), sqe.into_sqe())
26        }
27    }
28}
29
30pub trait Submission {
31    fn push(&mut self, sqe: Sqe) -> Result<(), PushError>;
32    fn flush_submissions(&mut self) -> bool;
33}
34
35impl Submission for DriverContext<'_, '_> {
36    fn push(&mut self, sqe: Sqe) -> Result<(), PushError> {
37        <Backend as SubmissionBackend>::push(self.backend(), sqe)
38    }
39
40    fn flush_submissions(&mut self) -> bool {
41        <Backend as SubmissionBackend>::flush_submissions(self.backend())
42    }
43}