0 Tage Serie
rust / expert
Snippet

Rekursive Fehlerbehebungs-Pipeline über Fallback-Decoder

Dieses Design etabliert einen rekursiven Fehlerbehebungsfluss, bei dem fehlgeschlagene primäre Parser-Ergebnisse auf sekundäre Parser-Logik zurückgreifen und rekursiv versuchen, den Fehler unter Verwendung eines sicheren Konfigurationszustands zu beheben.

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
enum PipelineError {
InvalidFormat(String),
NetworkFailure(String),
}
fn primary_decoder(input: &str) -> Result<String, PipelineError> {
if input.starts_with("RAW:") {
Ok(input[4..].to_string())
} else {
Err(PipelineError::InvalidFormat("Missing RAW prefix".to_string()))
}
}
fn secondary_decoder(input: &str) -> Result<String, PipelineError> {
if input.starts_with("HEX:") {
Ok(format!("Decoded Hex: {}", &input[4..]))
} else {
Err(PipelineError::InvalidFormat("Missing HEX prefix".to_string()))
}
}
fn run_pipeline(input: &str, depth: usize) -> Result<String, PipelineError> {
if depth == 0 {
return Err(PipelineError::NetworkFailure("Max recovery depth reached".to_string()));
}
primary_decoder(input).or_else(|err| match err {
PipelineError::InvalidFormat(_) => {
secondary_decoder(input).or_else(|_| run_pipeline("RAW:fallback", depth - 1))
}
other => Err(other),
})
}
Erklärung
1
primary_decoder(input).or_else(...)
Versucht den ersten Dekodierungsschritt und fängt Fehlerereignisse ab, um die Ausführung umzuleiten.
2
match err { PipelineError::InvalidFormat(_) => ... }
Filtert Fehler-Varianten, um eine kontextspezifische Fallback-Behandlung anzuwenden.
3
run_pipeline("RAW:fallback", depth - 1)
Ruft die Pipeline rekursiv mit einer modifizierten Eingabe und verringerter Rekursionstiefe auf, um Stack-Overflows zu vermeiden.
4
other => Err(other)
Reicht nicht behebbare Fehler-Varianten direkt im Ausführungs-Stack nach oben weiter.