9个版本
0.1.8 | 2024年8月5日 |
---|---|
0.1.7 | 2024年8月5日 |
0.1.6 | 2023年11月25日 |
#618 在 编码
每月248次下载
15KB
357 行
enveror
结构化环境变量的库
功能
- 使用
.
表示env-vals的结构 - 使用
serde
在enveror
中定义环境变量的结构 - 每个变量(无对象)都在单行内完全定义
示例
config
如果你想定义以下结构,
{
"STAGE": "dev",
"CLOUD": {
"API_KEY_ID": "hogehoge=hog",
"API_SECRET_KEY": "fug+;l[l;uw:er-0-63-096z,nxvcafuga",
"STORAGE": {
"IMAGES": "myimages"
}
},
"CORS_ORIGINS": ["https://127.0.0.1:3000", "", "https://enveror.example.com"],
"WORKER_COUNT": 4,
"TIMEOUT_SECONDS": 2.3,
"EMPTY_STRING": " ",
"SAMPLE": true,
"CONFIG": {
"FLAGS": [true, false, false, true],
"NUMBERS": [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
}
你可以设置以下环境变量。
STAGE="dev"
CLOUD.API_KEY_ID="hogehoge=hog"
CLOUD.API_SECRET_KEY="fug+;l[l;uw:er\-0-63-096z,nxvcafuga"
CLOUD.STORAGE.IMAGES="myimages"
CORS_ORIGINS=["https://127.0.0.1:3000", "", "https://enveror.example.com"]
WORKER_COUNT=4
TIMEOUT_SECONDS=2.3
EMPTY_STRING=" "
SAMPLE=true
CONFIG.FLAGS=[true, false, false, true]
CONFIG.NUMBERS=[1, 2, 3, 4, 5, 6, 7, 8, 9]
代码
以下是对解析和反序列化的测试代码。
use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
enum Stage {
Dev,
Prod,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
struct EnverorConfig {
stage: Stage,
cloud: Cloud,
cors_origins: Vec<String>,
worker_count: u8,
timeout_seconds: f32,
empty_string: String,
sample: bool,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
struct Cloud {
api_key_id: String,
api_secret_key: String,
storage: CloudStorage,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
struct CloudStorage {
images: String,
}
extern crate enveror;
#[test]
fn parse_deserialize() -> Result<(), Box<dyn std::error::Error>> {
enveror::Enveror::new()
.ignore_default_config()
.path(PathBuf::from("./tests/case_enveror"))
.load()?
.construct::<EnverorConfig>()?;
Ok(())
}
依赖项
~0.7–1.6MB
~35K SLoC