io_engine/
callback_worker.rs1use crate::tasks::{CbArgs, IOEvent};
2use crossfire::{MTx, Tx, flavor::Flavor};
3use io_buffer::Buffer;
4use rustix::io::Errno;
5
6pub trait Worker<C: CbArgs>: Send + 'static {
11 fn done(&self, event: Box<IOEvent<C>>);
12}
13
14impl<C, F> Worker<C> for MTx<F>
16where
17 F: Flavor<Item = Box<IOEvent<C>>>,
18 C: CbArgs,
19{
20 fn done(&self, item: Box<IOEvent<C>>) {
21 let _ = self.send(item);
22 }
23}
24
25impl<C, F> Worker<C> for Tx<F>
27where
28 F: Flavor<Item = Box<IOEvent<C>>>,
29 C: CbArgs,
30{
31 fn done(&self, item: Box<IOEvent<C>>) {
32 let _ = self.send(item);
33 }
34}
35
36pub struct InlineClosure<C: CbArgs>(pub Box<dyn Fn(C, i64, Result<Option<Buffer>, Errno>) + Send>);
43
44impl<C: CbArgs> Worker<C> for InlineClosure<C> {
45 fn done(&self, event: Box<IOEvent<C>>) {
46 event.callback_unchecked(&self.0);
47 }
48}