From d6effc972edd8e59fac7c8193478e531f40e3957 Mon Sep 17 00:00:00 2001 From: Tarasov Aleksandr <55220741+arabianq@users.noreply.github.com> Date: Sun, 8 Mar 2026 00:41:06 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20refactor:=20replace=20unsafe=20u?= =?UTF-8?q?nwraps=20in=20pipewire=20port=20parsing=20with=20safe=20destruc?= =?UTF-8?q?turing=20(#34)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced sequential unwraps on pipewire properties ("node.id", "port.id", "port.name") with an `if let` and `and_then()` pattern in `src/utils/pipewire.rs`. This provides safety against daemon crashes when properties are missing or malformed by silently returning instead of panicking. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- src/utils/pipewire.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/utils/pipewire.rs b/src/utils/pipewire.rs index 0606731..6e47df2 100644 --- a/src/utils/pipewire.rs +++ b/src/utils/pipewire.rs @@ -57,17 +57,19 @@ fn parse_global_object( }; // Check if the object is a port } else if props.get("port.direction").is_some() { - let node_id = props.get("node.id").unwrap().parse::().unwrap(); - let port_id = props.get("port.id").unwrap().parse::().unwrap(); - let port_name = props.get("port.name").unwrap(); + if let (Some(node_id), Some(port_id), Some(port_name)) = ( + props.get("node.id").and_then(|id| id.parse::().ok()), + props.get("port.id").and_then(|id| id.parse::().ok()), + props.get("port.name"), + ) { + let port = Port { + node_id, + port_id, + name: port_name.to_string(), + }; - let port = Port { - node_id, - port_id, - name: port_name.to_string(), - }; - - return (None, Some(port)); + return (None, Some(port)); + } } } (None, None)