typestar

Un enum de error propio en Rust

Un enum por modo de falla, con un impl de Display que se lee como una oración.

use std::fmt;

#[derive(Debug)]
enum ConfigError {
    Missing(String),
    OutOfRange { field: String, value: i64 },
}

impl fmt::Display for ConfigError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            ConfigError::Missing(key) => write!(f, "missing key {key}"),
            ConfigError::OutOfRange { field, value } => {
                write!(f, "{field} out of range: {value}")
            }
        }
    }
}

fn main() {
    let err = ConfigError::OutOfRange {
        field: "port".to_string(),
        value: 99999,
    };
    println!("{err}");
    println!("{:?}", ConfigError::Missing("host".to_string()));
}

Cómo funciona

  1. Cada variante lleva el detalle que esa falla necesita.
  2. impl Display es lo que lo vuelve imprimible.
  3. Hacer match sobre el enum deja a quien llama reaccionar por variante.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
548
Tokens
153
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 87 segundos.

Escribe este fragmento

Paso 1 de 5 en Tus propios tipos de error; paso 8 de 15 en Manejo de errores.

← Anterior Siguiente →