PR3-Rust-SS26/E-enums/03_result.rs

28 lines
829 B
Rust

// Result<T, E> modelliert Erfolg ODER Fehler. Jeder Fehlertyp ist eine eigene Enum Variante.
#[derive(Debug)] //generiert automatisch eine Debug-Ausgabe
enum FehlerArt {
ZuKurz,
KeineZahl,
}
// Rückgabe ist entweder Ok(eine_zahl) oder Err(ein_fehler)
fn parse_alter(input: &str) -> Result<u32, FehlerArt> {
if input.len() < 1 {
return Err(FehlerArt::ZuKurz);
}
input.parse::<u32>().map_err(|_| FehlerArt::KeineZahl)
}
fn main() {
let eingaben = vec!["25", "", "abc", "42"];
for e in eingaben {
match parse_alter(e) {
Ok(alter) => println!("\"{e}\" → Alter: {alter}"),
Err(FehlerArt::ZuKurz) => println!("\"{e}\" → Fehler: leere Eingabe"),
Err(FehlerArt::KeineZahl) => println!("\"{e}\" → Fehler: keine gültige Zahl"),
}
}
}