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.