用于从环境变量、命令行参数生成 toml,然后与已有的 toml 文件做配置合并。
先设置环境变量 source ./env
:
rust
export TEST_server__host=127.0.0.1
export TEST_site__title="xxAI.Art - 我们计算艺术"
export TEST_grpc_port=9999
export TEST_site__xxai_art__mail=xxai.art@gmail.com
export TEST_compress=true
用法见 ./src/lib.rs :
```rust mod env; pub use env::{envwithprefix, kv_toml}; mod merge;
pub use merge::merge;
fn test() { use std::env::vars;
let config = "grpcport=1234 mysqlport=1235
[site] title=\"a b c\" password=\"xyz\"
[site.xxai_art] hide=true "; println!("\n## toml config\n\n```toml\n{config}\n");
let prefix = "TEST"; let env = envwith_prefix(vars(), prefix);
let toml = kvtoml(env, "_");
println!("## convert env into toml\n\ntoml\n{toml}\n
");
let mut config = config.parse().unwrap();
merge(&mut config, &toml.parse().unwrap());
let config = toml::ser::tostringpretty(&config).unwrap();
println!("## merge config and env\n\ntoml\n{config}\n
");
}
```
输出为 :
```toml grpcport=1234 mysqlport=1235
[site] title="a b c" password="xyz"
[site.xxai_art] hide=true
```toml grpcport=9999 compress=true [site] title="xxAI.Art - 我们计算艺术" [site.xxaiart] mail="xxai.art@gmail.com" [server] host="127.0.0.1"
```
```toml compress = true grpcport = 9999 mysqlport = 1235
[server] host = "127.0.0.1"
[site] password = "xyz" title = "xxAI.Art - 我们计算艺术"
[site.xxai_art] hide = true mail = "xxai.art@gmail.com"
```