Voltar ao código Rust

Leer un archivo de configuración y fallar con un mensaje útil

Un parser de clave=valor que usa Result y el operador ? para decir en qué línea está el error.

Este post ainda não está no seu idioma; você o vê em espanhol. O código é o mesmo.

O problema

Un servicio arranca leyendo un archivo de configuración. Si una línea está mal escrita, el programa debe decir cuál y por qué, no morir con un pánico críptico.

Rust
use std::collections::HashMap;

fn parsear(texto: &str) -> Result<HashMap<String, String>, String> {
    let mut config = HashMap::new();
    for (n, linea) in texto.lines().enumerate() {
        let linea = linea.trim();
        if linea.is_empty() || linea.starts_with('#') {
            continue;
        }
        let (clave, valor) = linea
            .split_once('=')
            .ok_or(format!("línea {}: falta el '='", n + 1))?;
        config.insert(clave.trim().to_string(), valor.trim().to_string());
    }
    Ok(config)
}

fn main() {
    let texto = "# servidor\npuerto = 8080\nmodo=produccion\n";
    match parsear(texto) {
        Ok(c) => println!("puerto: {}", c.get("puerto").map(String::as_str).unwrap_or("(sin definir)")),
        Err(e) => eprintln!("Configuración inválida: {e}"),
    }
}

Por que está escrito assim

  1. split_once devuelve un Option: o las dos mitades, o nada. ok_or lo convierte en un Result con el mensaje de error.
  2. El operador ? corta la función y devuelve el error apenas aparece: no hay if anidados.
  3. enumerate da el número de línea, que es lo que convierte "configuración inválida" en algo que se puede arreglar.
  4. main decide qué hacer con el error; parsear solo informa. Esa separación es la costumbre en Rust.
Como testar

Guardalo como main.rs y corré: rustc main.rs && ./main. Quitá el "=" de una línea para ver el mensaje.

Atenção

Todos los valores salen como texto. Convertir "8080" a número es otro paso que también puede fallar y merece su propio mensaje.

Adapte ao seu caso com IA

O botão copia este prompt com o código colado abaixo. Substitua os colchetes pelo que é seu e cole no ChatGPT, Claude, Gemini ou Copilot.

O prompt
Tengo este parser de configuración clave=valor en Rust. Convertilo para que llene una estructura tipada con estos campos: [CAMPOS Y TIPOS], con valores por defecto para [OPCIONALES] y un tipo de error propio (enum) en vez de String. Los obligatorios faltantes deben listarse todos juntos, no de a uno. Sin crates externos.

Exemplo escrito e revisado à mão.

Compartilhar

Comentários

Ainda não há comentários. O primeiro pode ser o seu.

Apenas texto, sem links. Não pedimos e-mail. Os comentários são revisados antes de serem publicados.

Adaptou para algo seu?

Me conte o que resolveu com isto, ou o que faltou.

Continue testando

Mais código

Ver todos
Darinel Ortega Online · respondo ao longo do dia
Hoje
Olá. Aqui eu não vendo nada: isto é para trocar conhecimento sobre tecnologia.
Escreva o que quiser — pode mandar texto, imagens ou documentos. As mensagens chegam ao meu console e eu respondo por lá.
Você está escrevendo fora do horário. Eu leio assim que o dia começar.

Conversa aberta para compartilhar conhecimento. As mensagens chegam ao meu console e eu respondo por lá.

Vamos marcar uma conversa

Escolha o dia e a hora que funcionem para você. Trinta minutos, sem discurso comercial.

Videochamada

Para uma videochamada, peça por aqui que eu te mando o link da sessão.