diff options
author | Jesse Luehrs <doy@tozt.net> | 2020-04-11 18:53:45 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2020-04-11 18:53:45 -0400 |
commit | f65b65bb24960a75cf1f900819c4005e7729e834 (patch) | |
tree | 568998776208a3d9ba1c4adf738cef4a4fa28ea4 /src/bin/rbw/sock.rs | |
parent | 34053ffef22233c32b731acbf03d79f061e6c63b (diff) | |
download | rbw-f65b65bb24960a75cf1f900819c4005e7729e834.tar.gz rbw-f65b65bb24960a75cf1f900819c4005e7729e834.zip |
refactor client code
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() + } +} |