Об этом проекте

dotcfg — это крейт на Rust для гибкого управления конфигурацией приложений с контролем со стороны разработчика. В отличие от крейтов, которые навязывают фиксированную стратегию каталогов или поддерживают только чтение, dotcfg позволяет выбирать, где хранятся конфигурации и какие форматы включать, сохраняя бинарник компактным благодаря поддержке форматов, управляемой фичами. ### Расположение хранилища По умолчанию конфигурации хранятся в `~/.toolname/config.toml`, аналогично `.cargo` или `.ssh`. Пользователи могут выбрать пути, соответствующие стандарту XDG, через `.xdg()`, хранить данные по произвольному абсолютному пути с помощью `.at_dir()`, или позволить dotcfg подниматься вверх от текущего рабочего каталога для поиска конфигурации в проекте (аналогично тому, как Git находит `.git`). ### Поддержка форматов TOML включен по умолчанию. JSON и YAML доступны как опциональные фичи (`json`, `yaml`), и обе могут быть скомбинированы, чтобы один бинарник читал несколько форматов. Также можно задать пользовательское имя файла (например, `settings.json`). ### Стратегии загрузки - `load()` — возвращает `None`, когда файл не существует, позволяя приложению решать, как действовать дальше. - `load_or_error()` — возвращает ошибку, если файл отсутствует, подходит для CLI, требующих предварительной настройки. - `load_or_default()` — создает файл, заполненный значениями `Default` при первом использовании. ### Доступ по ключам Чтение и запись отдельных ключей без загрузки или перезаписи всей конфигурации: - `cfg.get("user.name")` / `cfg.set("user.name", "jane")` - `cfg.get_as::<u16>("port")` / `cfg.set_val("port", 8080u16)` Поддерживаются вложенные ключи с точечной нотацией (например, `section.field`), которые естественно сопоставляются с таблицами TOML, объектами JSON и маппингами YAML. Отсутствующие файлы или каталоги создаются при записи. ### Переопределения через переменные окружения Переопределения на основе префикса позволяют `MYAPP_PORT=9000` иметь приоритет над значением из файла без изменения состояния на диске. `get` возвращает сырую строку, а `get_as` парсит булевы значения, числа и значения `Vec`, разделенные запятыми. Операции записи по-прежнему нацелены только на файл конфигурации. ### Интеграция с CLI Библиотека работает вместе с `clap` для реализации стандартной цепочки приоритетов: флаг CLI > файл конфигурации > запасной вариант по умолчанию. ### Другие утилиты `exists()`, `dir()`, `file_path()`, `delete_file()` и `delete_dir()` доступны для программного просмотра и очистки. ### Лицензия Двойная лицензия: MIT OR Apache-2.0.