rust / expert
Snippet
Konstruktion benutzerdefinierter Fehlertypen mit dynamischer Kausalitätsverkettung
Die Implementierung von std::error::Error mit der Methode source ermöglicht es benutzerdefinierten Fehlern, zugrunde liegende Fehler zu verketten. Dies erleichtert das Debugging, indem Ursacheninformationen erhalten bleiben und Aufrufer die Kausalitätskette dynamisch über Downcasting oder Hilfsbibliotheken abfragen können.
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
27
28
29
30
31
32
33
use std::error::Error;use std::fmt;#[derive(Debug)]pub struct SubsystemError {pub detail: &'static str,}impl fmt::Display for SubsystemError {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {write!(f, "Subsystem failure: {}", self.detail)}}impl Error for SubsystemError {}#[derive(Debug)]pub struct ApplicationError {pub message: String,pub source: SubsystemError,}impl fmt::Display for ApplicationError {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {write!(f, "Application error occurred: {}", self.message)}}impl Error for ApplicationError {fn source(&self) -> Option<&(dyn Error + 'static)> {Some(&self.source)}}
Erklärung
1
impl Error for SubsystemError {}
Nutzt die Standardimplementierung des Error-Traits, was voraussetzt, dass der Typ bereits Debug und Display implementiert.
2
pub source: SubsystemError,
Definiert ein Feld im Wrapper-Fehler, das die ursprüngliche Ursache des Fehlers enthält.
3
fn source(&self) -> Option<&(dyn Error + 'static)> {
Überschreibt die Standardmethode source, um eine Referenz auf das verschachtelte Fehler-Trait-Objekt zurückzugeben, was eine dynamische Abfrage ermöglicht.