From f7bcdf12968b73752e675c2936b1a711e3dbd94f Mon Sep 17 00:00:00 2001 From: Skia Date: Mon, 4 Nov 2024 17:59:48 +0100 Subject: [PATCH] lib: refactor SwaySome::new to also have SwaySome::new_from_socket `SwaySome::new_from_socket` takes a socket path in argument. This allows the tests to be able to build a SwaySome instance with a custom socket path. --- src/lib.rs | 54 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 8a4bda5..1413fa0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -49,17 +49,6 @@ struct Workspace { impl SwaySome { pub fn new() -> SwaySome { - let mut swaysome = SwaySome { - socket: Cell::new(Some(SwaySome::get_stream())), - outputs: vec![], - workspaces: vec![], - }; - swaysome.outputs = swaysome.get_outputs(); - swaysome.workspaces = swaysome.get_workspaces(); - swaysome - } - - fn get_stream() -> UnixStream { for socket_var in ["SWAYSOCK", "I3SOCK"] { let socket_path = match env::var(socket_var) { Ok(val) => val, @@ -70,27 +59,40 @@ impl SwaySome { }; let socket = Path::new(&socket_path); - - match UnixStream::connect(&socket) { - Err(_) => { - eprintln!( - "counldn't connect to socket '{}' found in ${}", - socket_path, socket_var - ); - continue; - } - Ok(stream) => { - eprintln!( - "successful connection to socket '{}' found in ${}", - socket_path, socket_var - ); - return stream; + if socket.is_file() { + match SwaySome::new_from_socket(socket) { + Ok(swaysome) => return swaysome, + Err(e) => eprintln!("Error with value found in ${}: {}", socket_var, e), } } } panic!("couldn't find any i3/sway socket") } + pub fn new_from_socket(socket: &Path) -> Result { + let stream = match UnixStream::connect(&socket) { + Err(_) => { + return Err(format!( + "counldn't connect to socket '{}'", + socket.display() + )); + } + Ok(stream) => { + eprintln!("successful connection to socket '{}'", socket.display()); + stream + } + }; + + let mut swaysome = SwaySome { + socket: Cell::new(Some(stream)), + outputs: vec![], + workspaces: vec![], + }; + swaysome.outputs = swaysome.get_outputs(); + swaysome.workspaces = swaysome.get_workspaces(); + Ok(swaysome) + } + fn send_msg(&self, msg_type: u32, payload: &str) { let payload_length = payload.len() as u32;