Об этом проекте
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.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.