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.
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.
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
- split_once devuelve un Option: o las dos mitades, o nada. ok_or lo convierte en un Result con el mensaje de error.
- El operador ? corta la función y devuelve el error apenas aparece: no hay if anidados.
- enumerate da el número de línea, que es lo que convierte "configuración inválida" en algo que se puede arreglar.
- main decide qué hacer con el error; parsear solo informa. Esa separación es la costumbre en Rust.
Guardalo como main.rs y corré: rustc main.rs && ./main. Quitá el "=" de una línea para ver el mensaje.
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.
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.
Comentários
Ainda não há comentários. O primeiro pode ser o seu.
Adaptou para algo seu?
Me conte o que resolveu com isto, ou o que faltou.