这个项目能做什么

dotcfg 是一个 Rust crate,用于灵活、由开发者控制的应用程序配置管理。与强制使用固定目录策略或仅支持读取的 crate 不同,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 下双重许可。