0 Tage Serie
rust / expert
Snippet

Manuelle Fehlerquellen-Verkettung und Formatierung

In Standard-Rust ohne externe Crates erfordert idiomatische Fehlerbehandlung die Implementierung von std::fmt::Display für Benutzermeldungen sowie std::error::Error::source zur Bereitstellung von Ursachenketten.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use std::error::Error;
use std::fmt;
#[derive(Debug)]
pub enum PipelineError {
ParseFailed(String),
NetworkTimeout { target: String, cause: std::io::Error },
}
impl fmt::Display for PipelineError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::ParseFailed(msg) => write!(f, "Data parsing failure: {}", msg),
Self::NetworkTimeout { target, .. } => write!(f, "Network request timed out for host: {}", target),
}
}
}
impl Error for PipelineError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
Self::ParseFailed(_) => None,
Self::NetworkTimeout { cause, .. } => Some(cause),
}
}
}
Erklärung
1
pub enum PipelineError {
Deklariert ein domänenspezifisches Fehler-Enum, das String-Kontext und verschachtelte IO-Fehler speichern kann.
2
impl fmt::Display for PipelineError {
Formatiert benutzerfreundliche Fehlermeldungen für Konsolen- oder Log-Ausgaben.
3
impl Error for PipelineError {
Implementiert den std Error Trait, um das Verketten von Fehlerquellen zu ermöglichen.
4
Self::NetworkTimeout { cause, .. } => Some(cause),
Gibt eine dynamische Trait-Objekt-Referenz auf den zugrundeliegenden Verursacherfehler zurück.