diff options
Diffstat (limited to 'src/bin/rbw/sock.rs')
-rw-r--r-- | src/bin/rbw/sock.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/bin/rbw/sock.rs b/src/bin/rbw/sock.rs new file mode 100644 index 0000000..05597e6 --- /dev/null +++ b/src/bin/rbw/sock.rs @@ -0,0 +1,29 @@ +use std::io::{BufRead as _, Write as _}; + +pub struct Sock(std::os::unix::net::UnixStream); + +impl Sock { + pub fn connect() -> Self { + Self( + std::os::unix::net::UnixStream::connect( + rbw::dirs::runtime_dir().join("socket"), + ) + .unwrap(), + ) + } + + pub fn send(&mut self, msg: &rbw::agent::Request) { + let Self(sock) = self; + sock.write_all(serde_json::to_string(msg).unwrap().as_bytes()) + .unwrap(); + sock.write_all(b"\n").unwrap(); + } + + pub fn recv(&mut self) -> rbw::agent::Response { + let Self(sock) = self; + let mut buf = std::io::BufReader::new(sock); + let mut line = String::new(); + buf.read_line(&mut line).unwrap(); + serde_json::from_str(&line).unwrap() + } +} |