use crate::{CompletionQueue, IoUring, SubmissionQueue, Submitter};
use std::sync::Arc;
#[derive(Clone)]
pub struct SubmitterUring {
inner: Arc<IoUring>,
}
pub struct SubmissionUring {
inner: Arc<IoUring>,
}
pub struct CompletionUring {
inner: Arc<IoUring>,
}
pub(crate) fn split(ring: IoUring) -> (SubmitterUring, SubmissionUring, CompletionUring) {
let inner = Arc::new(ring);
(
SubmitterUring {
inner: Arc::clone(&inner),
},
SubmissionUring {
inner: Arc::clone(&inner),
},
CompletionUring { inner },
)
}
impl SubmitterUring {
#[inline]
pub fn submitter(&self) -> Submitter<'_> {
self.inner.submitter()
}
}
impl SubmissionUring {
pub fn submission(&mut self) -> SubmissionQueue<'_> {
unsafe { self.inner.submission_shared() }
}
}
impl CompletionUring {
pub fn completion(&mut self) -> CompletionQueue<'_> {
unsafe { self.inner.completion_shared() }
}
}