From 168fdfa31fc48c3221a1d9f9473c6cd689da5ce1 Mon Sep 17 00:00:00 2001 From: Sean Klein Date: Wed, 16 Oct 2024 18:03:46 -0700 Subject: [PATCH] merge errors --- nexus/src/app/mod.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/nexus/src/app/mod.rs b/nexus/src/app/mod.rs index 2300dbce6a..d6d0f22f94 100644 --- a/nexus/src/app/mod.rs +++ b/nexus/src/app/mod.rs @@ -673,21 +673,35 @@ impl Nexus { let external_server = self.external_server.lock().unwrap().take(); let mut res = Ok(()); + let extend_err = + |mut res: &mut Result<(), String>, mut new: Result<(), String>| { + match (&mut res, &mut new) { + (Err(s), Err(new_err)) => { + s.push_str(&format!(", {new_err}")) + } + (Ok(()), Err(_)) => *res = new, + (_, Ok(())) => (), + } + }; + if let Some(server) = external_server { - res = res.and(server.close().await); + extend_err(&mut res, server.close().await); } let techport_external_server = self.techport_external_server.lock().unwrap().take(); if let Some(server) = techport_external_server { - res = res.and(server.close().await); + extend_err(&mut res, server.close().await); } let internal_server = self.internal_server.lock().unwrap().take(); if let Some(server) = internal_server { - res = res.and(server.close().await); + extend_err(&mut res, server.close().await); } let producer_server = self.producer_server.lock().unwrap().take(); if let Some(server) = producer_server { - res = res.and(server.close().await.map_err(|e| e.to_string())); + extend_err( + &mut res, + server.close().await.map_err(|e| e.to_string()), + ); } res }