diff options
author | Teddy Wing | 2021-06-13 13:43:03 +0200 |
---|---|---|
committer | Teddy Wing | 2021-06-13 13:43:03 +0200 |
commit | 3b55e4a839f0b834146e7f86cb5b6b4378d1e59c (patch) | |
tree | 85f84a8fb5a252c196c39c84cde677c5e79df328 /src/multi_error.rs | |
parent | f5e63179e6ab176d145e96786df9d3d0bdaaf7a1 (diff) | |
download | reflectub-3b55e4a839f0b834146e7f86cb5b6b4378d1e59c.tar.bz2 |
Move `MultiError` to its own file
Diffstat (limited to 'src/multi_error.rs')
-rw-r--r-- | src/multi_error.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/multi_error.rs b/src/multi_error.rs new file mode 100644 index 0000000..efb4462 --- /dev/null +++ b/src/multi_error.rs @@ -0,0 +1,51 @@ +// Copyright (c) 2021 Teddy Wing +// +// This file is part of Reflectub. +// +// Reflectub is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Reflectub is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Reflectub. If not, see <https://www.gnu.org/licenses/>. + + +use std::fmt; + + +#[derive(Debug, thiserror::Error)] +pub struct MultiError { + errors: Vec<anyhow::Error>, +} + +impl fmt::Display for MultiError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{}", + self.errors + .iter() + .map(|e| format!("{:#}", e)) + .collect::<Vec<_>>() + .join("\n"), + ) + } +} + +impl From<anyhow::Error> for MultiError { + fn from(error: anyhow::Error) -> Self { + MultiError { errors: vec![error] } + } +} + +impl From<Vec<anyhow::Error>> for MultiError { + fn from(errors: Vec<anyhow::Error>) -> Self { + MultiError { errors: errors } + } +} |