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.