use std::os::unix::net::UnixStream; use anyhow::Result; use super::frame; pub struct Connection { inner: UnixStream, } impl Connection { pub fn from_stream(stream: UnixStream) -> Result { Ok(Connection { inner: stream }) } pub fn connect_unix(path: &str) -> Result { let stream = UnixStream::connect(path)?; Ok(Connection { inner: stream }) } pub fn send(&mut self, value: &T) -> Result<()> { let data = frame::serialize_frame(value)?; frame::write_frame(&mut self.inner, &data) } pub fn receive(&mut self) -> Result> { let data = frame::read_frame(&mut self.inner)?; match data { Some(bytes) => { let value: T = frame::deserialize_frame(&bytes)?; Ok(Some(value)) } None => Ok(None), } } }