Sobre el proyecto
dotcfg es un crate de Rust para la gestión flexible de la configuración de aplicaciones controlada por el desarrollador. A diferencia de otros crates que imponen una estrategia de directorio fija o solo admiten lectura, dotcfg te permite elegir dónde viven las configuraciones y qué formatos incluir, manteniendo el binario pequeño con soporte de formatos condicionado por features.
### Ubicaciones de almacenamiento
Por defecto, las configuraciones se almacenan en `~/.toolname/config.toml`, de forma similar a `.cargo` o `.ssh`. Los usuarios pueden optar por rutas estándar XDG mediante `.xdg()`, almacenar en una ruta absoluta arbitraria con `.at_dir()`, o dejar que dotcfg recorra hacia arriba desde el directorio de trabajo actual para localizar una configuración local del proyecto (de forma análoga a cómo Git encuentra `.git`).
### Soporte de formatos
TOML está habilitado por defecto. JSON y YAML están disponibles como features opcionales (`json`, `yaml`), y ambos pueden combinarse para que un único binario lea múltiples formatos. También se puede establecer un nombre de archivo personalizado (por ejemplo, `settings.json`).
### Estrategias de carga
- `load()` — devuelve `None` cuando el archivo no existe, dejando que la aplicación decida cómo proceder.
- `load_or_error()` — devuelve un error si falta el archivo, adecuado para CLIs que requieren una configuración previa.
- `load_or_default()` — crea el archivo poblado con valores `Default` en el primer uso.
### Acceso por clave
Lee y escribe claves individuales sin cargar ni sobrescribir la configuración completa:
- `cfg.get("user.name")` / `cfg.set("user.name", "jane")`
- `cfg.get_as::<u16>("port")` / `cfg.set_val("port", 8080u16)`
Se admiten claves anidadas con notación de puntos (por ejemplo, `section.field`) y se asignan de forma natural a tablas TOML, objetos JSON y mappings YAML. Los archivos o directorios faltantes se crean al escribir.
### Anulación mediante variables de entorno
Las anulaciones de entorno basadas en prefijos permiten que `MYAPP_PORT=9000` tenga precedencia sobre el valor del archivo sin modificar el estado en disco. `get` devuelve la cadena sin procesar, mientras que `get_as` analiza booleanos, números y valores `Vec` separados por comas. Las operaciones de escritura siguen afectando solo al archivo de configuración.
### Integración con CLI
La biblioteca funciona junto con `clap` para implementar la cadena de precedencia estándar: flag de CLI > archivo de configuración > valor por defecto de reserva.
### Otras utilidades
`exists()`, `dir()`, `file_path()`, `delete_file()` y `delete_dir()` están disponibles para inspección y limpieza programáticas.
### Licencia
Con doble licencia bajo MIT OR Apache-2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.