use std::{io, os::fd::BorrowedFd};
use super::SocketOps;
use crate::{connection::socket::RecvmsgResult, runtime::IoSource};
#[derive(Debug)]
pub(crate) struct PipeOps;
impl SocketOps for PipeOps {
fn recv(&self, source: &IoSource, buffer: &mut [u8]) -> RecvmsgResult {
let read = rustix::io::read(source, buffer)?;
Ok((read, vec![]))
}
fn send(&self, source: &IoSource, buffer: &[u8], fds: &[BorrowedFd<'_>]) -> io::Result<usize> {
if !fds.is_empty() {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
"fds cannot be sent over a pipe",
));
}
Ok(rustix::io::write(source, buffer)?)
}
fn shutdown(&self, _source: &IoSource) -> io::Result<()> {
Ok(())
}
}