Files
zesdex/src/ipc/conn.rs
T

35 lines
938 B
Rust
Raw Normal View History

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<Self> {
Ok(Connection { inner: stream })
}
pub fn connect_unix(path: &str) -> Result<Self> {
let stream = UnixStream::connect(path)?;
Ok(Connection { inner: stream })
}
pub fn send<T: serde::Serialize>(&mut self, value: &T) -> Result<()> {
let data = frame::serialize_frame(value)?;
frame::write_frame(&mut self.inner, &data)
}
pub fn receive<T: serde::de::DeserializeOwned>(&mut self) -> Result<Option<T>> {
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),
}
}
}