#env-var #deserialize #datatype #prefixed

renvar

将环境变量反序列化为 Rust 数据类型的库

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 变体,您可以通过传递一个闭包来移除环境变量开头和结尾的冗余字符。

支持的 数据类型

  • Stringsstr
  • 枚举
  • 序列
  • 单元结构体

开发

测试

如果您有 just,请运行 just test,否则请运行 cargo test --all-features

依赖

~110–345KB