Reformar errores en Rust
map_err reescribe el error y deja en paz el valor exitoso.
fn read_port(text: &str) -> Result<u16, String> {
text.trim()
.parse::<u16>()
.map_err(|e| format!("bad port {text:?}: {e}"))
}
fn main() {
match read_port(" 8080 ") {
Ok(port) => println!("listening on {port}"),
Err(msg) => println!("{msg}"),
}
println!("{:?}", read_port("http"));
println!("{}", read_port("nope").unwrap_or_default());
}
Cómo funciona
map_erresmappara el lado del error.- Así encajas el error de una biblioteca en tu propio tipo.
unwrap_or_defaultcierra la cadena sin un panic.
Palabras clave y builtins usados aquí
ErrOkResultStringfnmatchstru16
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 340
- Tokens
- 117
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 70 segundos.
Paso 3 de 4 en Result y el operador ?; paso 6 de 15 en Manejo de errores.