1 个不稳定版本
0.1.0 | 2023年5月31日 |
---|
#1664 在 解析器实现
66KB
896 行
Renvar
renvar
是一个库,用于将环境变量反序列化为 Rust 数据结构。
非常感谢 softprops 及其 envy 库,因为这个库受到了它的启发,并从中借鉴了大量的代码。
安装
将其添加到您的 Cargo.toml
[dependencies]
renvar = "0.1"
用法
use renvar::{from_env, from_iter, from_str};
use serde::Deserialize;
use std::env;
let env_content = r#"
name=renvar
type=Library
dependencies=serde
"#;
#[derive(Debug, Deserialize, PartialEq, Eq)]
enum CrateType {
Library,
Binary,
}
#[derive(Debug, Deserialize, PartialEq, Eq)]
struct Renvar {
name: String,
#[serde(rename = "type")]
typ: CrateType,
dependencies: Vec<String>,
}
let actual = Renvar {
name: "renvar".to_owned(),
typ: CrateType::Library,
dependencies: vec!["serde".to_owned()],
};
// we can read from strings
let value = from_str::<Renvar>(env_content).unwrap();
assert_eq!(value, actual);
// directly from the environment
let envs = vec![
("name".to_owned(), "renvar".to_owned()),
("type".to_owned(), "Library".to_owned()),
("dependencies".to_owned(), "serde".to_owned()),
];
for (key, value) in envs.clone().into_iter() {
env::set_var(key, value);
}
let value = from_env::<Renvar>().unwrap();
assert_eq!(value, actual);
// or from iterables
let value = from_iter::<Renvar, _>(envs).unwrap();
assert_eq!(value, actual);
功能标志
Renvar 有以下功能标志
prefixed
prefixed
提供了一个接受前缀的 prefixed
函数。反序列化之前,会移除前缀。
postfixed
postfix
与前缀完全相同,只是使用后缀
case_insensitive_prefixed
prefixed
的不区分大小写的变体
case_insensitive_postfixed
postfixed
的不区分大小写的变体
with_trimmer
最后,with_trimmer
功能标志为您提供了所有上述功能的 *_with_trimmer
变体,您可以通过传递一个闭包来移除环境变量开头和结尾的冗余字符。
支持的 数据类型
Strings
和str
枚举
序列
单元结构体
开发
测试
如果您有 just,请运行 just test
,否则请运行 cargo test --all-features
依赖
~110–345KB