1 个不稳定版本
0.1.0 | 2023年6月21日 |
---|
在 配置 中排名 558
13KB
139 行
config-secret
config-secret
是一个额外的配置包源,遵循 Docker/Kubernetes conventions。
它允许通过指定为环境变量的文件注入配置的一部分。 查看示例。
安装
[dependencies]
config = "0.13"
config-secret = "0.1.0"
用法
use config::Config;
use config_secret::EnvironmentSecretFile;
let source = EnvironmentSecretFile::with_prefix("APP").separator("_");
let config = Config::builder().add_source(source).build().unwrap();
let settings = config.try_deserialize::<Settings>().unwrap();
// settings...
示例
定义
让我们介绍我们的类型和我们的 config
初始化器
use config::{Config, ConfigError};
use config_secret::EnvironmentSecretFile;
use serde::Deserialize;
#[derive(Deserialize, Clone, Debug)]
pub struct Settings {
pub server: ServerSettings,
pub redis: RedisSettings,
}
#[derive(Deserialize, Clone, Debug)]
pub struct ServerSettings {
pub host: String,
pub port: u16,
}
#[derive(Deserialize, Clone, Debug)]
pub struct RedisSettings {
pub nodes: Vec<String>,
pub username: Option<String>,
pub password: Option<String>,
}
pub fn get_settings() -> Result<Settings, ConfigError> {
let config = Config::builder()
.add_source(
config::Environment::with_prefix("APP")
.separator("_")
.list_separator(",")
.with_list_parse_key("redis.nodes")
.try_parsing(true),
)
.add_source(
EnvironmentSecretFile::with_prefix("APP")
.separator("_")
)
.build()?;
config.try_deserialize::<Settings>()
}
完整配置
我们可以添加一个环境变量来设置一个密钥,该密钥配置整个配置
APP_FILE=/run/secrets/my_secret.json
{
"server": {
"host": "0.0.0.0",
"port": 5000
},
"redis": {
"nodes": [
"redis://10.0.0.1:6379",
"redis://10.0.0.2:6379",
"redis://10.0.0.3:6379"
]
}
}
let settings = get_settings().unwrap();
assert!(settings.server.host == "0.0.0.0");
部分配置
我们可以添加环境变量,只设置配置的子部分
APP_SERVER_HOST=127.0.0.1
APP_SERVER_PORT=5000
APP_REDIS_FILE=/run/secrets/redis.yaml
nodes:
- redis://10.0.0.1:6379
- redis://10.0.0.2:6379
- redis://10.0.0.3:6379
username: redis
password: superpassword
let settings = get_settings().unwrap();
assert!(settings.server.host == "127.0.0.1");
assert!(settings.redis.username == "redis");
许可证
依赖关系
~1.2–1.6MB
~31K SLoC