use {
super::ToLocalSocketName,
std::{
fmt::{self, Debug, Formatter},
io::{self, prelude::*, IoSlice, IoSliceMut},
},
};
impmod! {local_socket,
LocalSocketStream as LocalSocketStreamImpl
}
pub struct LocalSocketStream {
pub(super) inner: LocalSocketStreamImpl,
}
impl LocalSocketStream {
pub fn connect<'a>(name: impl ToLocalSocketName<'a>) -> io::Result<Self> {
Ok(Self {
inner: LocalSocketStreamImpl::connect(name)?,
})
}
pub fn peer_pid(&self) -> io::Result<u32> {
self.inner.peer_pid()
}
pub fn set_nonblocking(&self, nonblocking: bool) -> io::Result<()> {
self.inner.set_nonblocking(nonblocking)
}
}
impl Read for LocalSocketStream {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
self.inner.read(buf)
}
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
self.inner.read_vectored(bufs)
}
}
impl Write for LocalSocketStream {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.inner.write(buf)
}
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
self.inner.write_vectored(bufs)
}
fn flush(&mut self) -> io::Result<()> {
self.inner.flush()
}
}
impl Debug for LocalSocketStream {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
Debug::fmt(&self.inner, f)
}
}
impl_handle_manip!(LocalSocketStream);