compio-driver 0.12.0-rc.1

Low-level driver for compio
Documentation
use super::fallback::*;
use crate::{Decision, OpType, PollOpCode as OpCode, op::RecvMsgControl, sys::prelude::*};

unsafe impl<S: AsFd> OpCode for ReadManaged<S> {
    type Control = ();

    fn pre_submit(&mut self, control: &mut Self::Control) -> io::Result<Decision> {
        self.op.pre_submit(control)
    }

    fn op_type(&mut self, control: &mut Self::Control) -> Option<crate::OpType> {
        self.op.op_type(control)
    }

    fn operate(&mut self, control: &mut Self::Control) -> Poll<io::Result<usize>> {
        self.op.operate(control)
    }
}

unsafe impl<S: AsFd> OpCode for ReadManagedAt<S> {
    type Control = AioControl;

    unsafe fn init(&mut self, ctrl: &mut Self::Control) {
        unsafe { self.op.init(ctrl) }
    }

    fn pre_submit(&mut self, control: &mut Self::Control) -> io::Result<Decision> {
        self.op.pre_submit(control)
    }

    fn op_type(&mut self, control: &mut Self::Control) -> Option<OpType> {
        self.op.op_type(control)
    }

    fn operate(&mut self, control: &mut Self::Control) -> Poll<io::Result<usize>> {
        self.op.operate(control)
    }
}

unsafe impl<S: AsFd> OpCode for RecvManaged<S> {
    type Control = ();

    fn pre_submit(&mut self, control: &mut Self::Control) -> io::Result<Decision> {
        self.op.pre_submit(control)
    }

    fn op_type(&mut self, control: &mut Self::Control) -> Option<crate::OpType> {
        self.op.op_type(control)
    }

    fn operate(&mut self, control: &mut Self::Control) -> Poll<io::Result<usize>> {
        self.op.operate(control)
    }
}

unsafe impl<S: AsFd> OpCode for RecvFromManaged<S> {
    type Control = ();

    fn pre_submit(&mut self, control: &mut Self::Control) -> io::Result<Decision> {
        self.op.pre_submit(control)
    }

    fn op_type(&mut self, control: &mut Self::Control) -> Option<OpType> {
        self.op.op_type(control)
    }

    fn operate(&mut self, control: &mut Self::Control) -> Poll<io::Result<usize>> {
        self.op.operate(control)
    }
}

unsafe impl<S: AsFd> OpCode for RecvFromMulti<S> {
    type Control = ();

    fn pre_submit(&mut self, control: &mut Self::Control) -> io::Result<Decision> {
        self.op.pre_submit(control)
    }

    fn op_type(&mut self, control: &mut Self::Control) -> Option<OpType> {
        self.op.op_type(control)
    }

    fn operate(&mut self, control: &mut Self::Control) -> Poll<io::Result<usize>> {
        self.op.operate(control)
    }

    unsafe fn set_result(
        &mut self,
        _: &mut Self::Control,
        result: &io::Result<usize>,
        _: &crate::Extra,
    ) {
        if let Ok(result) = result {
            self.len = *result;
        }
    }
}

unsafe impl<C: IoBufMut, S: AsFd> OpCode for RecvMsgManaged<C, S> {
    type Control = RecvMsgControl;

    unsafe fn init(&mut self, ctrl: &mut Self::Control) {
        unsafe { self.op.init(ctrl) }
    }

    fn pre_submit(&mut self, control: &mut Self::Control) -> io::Result<Decision> {
        self.op.pre_submit(control)
    }

    fn op_type(&mut self, control: &mut Self::Control) -> Option<OpType> {
        self.op.op_type(control)
    }

    fn operate(&mut self, control: &mut Self::Control) -> Poll<io::Result<usize>> {
        self.op.operate(control)
    }

    unsafe fn set_result(
        &mut self,
        control: &mut Self::Control,
        result: &io::Result<usize>,
        extra: &crate::Extra,
    ) {
        unsafe { self.op.set_result(control, result, extra) }
    }
}

unsafe impl<S: AsFd> OpCode for RecvMsgMulti<S> {
    type Control = RecvMsgControl;

    unsafe fn init(&mut self, ctrl: &mut Self::Control) {
        unsafe { self.op.init(ctrl) }
    }

    fn pre_submit(&mut self, control: &mut Self::Control) -> io::Result<Decision> {
        self.op.pre_submit(control)
    }

    fn op_type(&mut self, control: &mut Self::Control) -> Option<OpType> {
        self.op.op_type(control)
    }

    fn operate(&mut self, control: &mut Self::Control) -> Poll<io::Result<usize>> {
        self.op.operate(control)
    }

    unsafe fn set_result(
        &mut self,
        control: &mut Self::Control,
        result: &io::Result<usize>,
        extra: &crate::Extra,
    ) {
        unsafe { self.op.set_result(control, result, extra) };
        if let Ok(result) = result {
            self.len = *result;
        }
    }
}