diff options
Diffstat (limited to 'src/orchestrator/util.rs')
-rw-r--r-- | src/orchestrator/util.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/orchestrator/util.rs b/src/orchestrator/util.rs new file mode 100644 index 0000000..2b20694 --- /dev/null +++ b/src/orchestrator/util.rs @@ -0,0 +1,38 @@ +// +// Copyright (c) 2020-2021 science+computing ag and other contributors +// +// This program and the accompanying materials are made +// available under the terms of the Eclipse Public License 2.0 +// which is available at https://www.eclipse.org/legal/epl-2.0/ +// +// SPDX-License-Identifier: EPL-2.0 +// + +use std::collections::HashMap; + +use anyhow::Error; +use uuid::Uuid; + +/// Get a `Display`able interface for a Map of errors +/// +/// This is a helper trait for be able to display a `HashMap<Uuid, Error>` +/// in a `log::trace!()` call, for example +pub trait AsReceivedErrorDisplay { + fn display_error_map(&self) -> ReceivedErrorDisplay<'_>; +} + +impl AsReceivedErrorDisplay for HashMap<Uuid, Error> { + fn display_error_map(&self) -> ReceivedErrorDisplay<'_> { + ReceivedErrorDisplay(self) + } +} + + +pub struct ReceivedErrorDisplay<'a>(&'a HashMap<Uuid, Error>); + +impl<'a> std::fmt::Display for ReceivedErrorDisplay<'a> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.iter().try_for_each(|(uuid, err)| writeln!(f, "{}: {}", uuid, err)) + } +} + |