diff --git a/crates/cli-tools/CHANGELOG.md b/crates/cli-tools/CHANGELOG.md index fa18e15d..f2262453 100644 --- a/crates/cli-tools/CHANGELOG.md +++ b/crates/cli-tools/CHANGELOG.md @@ -10,6 +10,7 @@ ### Minor +- Handle more errors during platform discovery and `action::PlatformReboot` - Extend `fs::write()` first parameter to set the `OpenOptions` too - Add `error::root_cause_is()` to check the `anyhow::Error` root cause - Add `action::PlatformLock` for locking a platform protocol diff --git a/crates/cli-tools/src/action.rs b/crates/cli-tools/src/action.rs index 7d4a5a50..4daaeb2e 100644 --- a/crates/cli-tools/src/action.rs +++ b/crates/cli-tools/src/action.rs @@ -375,7 +375,10 @@ async fn final_call( match connection.receive::().await { Ok(x) => proof(x)?, Err(e) => { - if root_cause_is::(&e, |x| matches!(x, rusb::Error::NoDevice)) { + if root_cause_is::(&e, |x| { + use rusb::Error::*; + matches!(x, NoDevice | Pipe) + }) { return Ok(()); } if root_cause_is::(&e, |x| { diff --git a/crates/cli-tools/src/action/protocol.rs b/crates/cli-tools/src/action/protocol.rs index 005f5004..7306d30c 100644 --- a/crates/cli-tools/src/action/protocol.rs +++ b/crates/cli-tools/src/action/protocol.rs @@ -61,8 +61,8 @@ impl ProtocolUsb { let context = GlobalContext::default(); let mut matches = Vec::new(); for candidate in wasefire_protocol_usb::list(&context)? { - let mut connection = candidate.connect(timeout)?; - let info = connection.call::(()).await?; + let Ok(mut connection) = candidate.connect(timeout) else { continue }; + let Ok(info) = connection.call::(()).await else { continue }; if !self.matches(connection.device(), &info) { continue; }