az-yml 2026.5.10

YAML 配置文件的加载、路径查询与值提取工具库,面向 Spring Boot 风格配置约定。
Documentation
# az-yml

YAML 配置文件的加载、路径查询与值提取工具库,面向 Spring Boot 风格配置约定。

## 功能

- **YAML 文件加载**`load_yaml` / `load_yaml_value` 将 YAML 文件反序列化为任意类型或原始 `YamlDoc`
- **路径查询**`YamlPath` 支持 `spring.datasource.url``items[0].name` 等点号+下标路径语法
- **环境变量替换** — 字符串值中的 `${VAR:default}` 占位符自动替换为环境变量
- **Spring Boot 配置解析**`SpringYaml` 模拟 `application.yml``application-{profile}.yml` 的 profile 激活机制
- **数据库配置提取**`DatabaseConfigReader` 自动扫描 Spring YAML 中的 JDBC / R2DBC 数据源 URL、用户名与密码
- **密码脱敏**`DatabaseConfig``Debug` 输出自动将 `jdbc_password` 替换为 `***REDACTED***`
- **便捷宏**`yaml_path!` 编译期路径解析、`yaml_get!` 路径查询快捷方式

## 安装

在 `Cargo.toml` 中添加:

```toml
[dependencies]
az-yml = { path = "../az-yml" }        # workspace 内部引用
# 或发布后:
# az-yml = "0.1"                       # crates.io 引用
```

## 用法

```rust
use az_yml::{load_yaml_value, SpringYaml, DatabaseConfigReader, YamlDoc};
use az_yml::yaml_path;

// 加载 YAML 文件
let doc = load_yaml_value("application.yml")?;

// 路径查询
let url = doc.get_string("spring.datasource.url")?;
let port = doc.get("server.port")?;

// 使用宏进行编译期路径解析
let path = yaml_path!("spring.datasource.url");
let value = az_yml::get_yaml_path_value(&doc, &path);

// Spring Boot 风格配置加载(自动处理 profile)
let spring = SpringYaml::from_dir("src/main/resources");
let active_config = spring.load_active()?;

// 提取数据库配置
let db_config = DatabaseConfigReader::read("src/main/resources", None)?;
if let Some(config) = db_config {
    println!("JDBC URL: {}", config.jdbc_url);
}
```

## 依赖的 crates

- `serde` — 序列化/反序列化框架
- `serde_yaml` — YAML 解析
- `thiserror` — 错误类型派生