#env-var #json #variables #env #json-parser

env-vars-to-json

将环境变量转换为JSON

7个版本

0.1.6 2023年6月6日
0.1.5 2023年6月5日

43#env-var

每月49 次下载

MIT/Apache

33KB
780

env-vars-to-json: 从环境变量构建JSON

CI codecov Crates.io Docs.rs

此crate提供从环境变量构建 serde_json::Value 的方法。

示例

给定环境变量,具有前缀 PREFIX 和分隔符 __

export PREFIX__INT_LIST__0=1
export PREFIX__INT_LIST__1=2
export PREFIX__STRUCT__INT=1
export PREFIX__STRUCT__STRING=string
export PREFIX__STRUCT__BOOL_LIST__0=true
export PREFIX__STRUCT__BOOL_LIST__1=false
export PREFIX__STRUCT__STRUCT__INT=1
export PREFIX__STRUCT__STRUCT__STRING=string
export PREFIX__STRUCT__STRUCT__BOOL_LIST__0=true
export PREFIX__STRUCT__STRUCT__BOOL_LIST__1=false
export PREFIX__BOOL_LIST__3=true
export PREFIX__STRUCT__FLOAT=1.1
export PREFIX__BOOL_LIST__0=false
export PREFIX__STRING_LIST__0=string0

无默认JSON:

use serde_json::json;
use env_vars_to_json::Parser;

let json = Parser::default()
    .with_prefix("PREFIX")
    .with_separator("__")
    .parse_from_env()
    .expect("Failed to parse environment variables");

assert_eq!(json, json!(
  {
    "int_list": [1, 2],
    "struct": {
      "int": 1,
      "float": 1.1,
      "string": "string",
      "bool_list": [true, false],
      "struct": {
        "int": 1,
        "string": "string",
        "bool_list": [true, false]
      }
    },
    "bool_list": [false, null, null, true],
    "string_list": ["string0"]
  }
))

具有默认JSON和过滤器(需要启用 filter 功能):

use serde_json::json;
use env_vars_to_json::Parser;

let json = Parser::default()
    .with_prefix("PREFIX")
    .with_separator("__")
    .with_include(&[".*STRUCT.*"])
    .with_exclude(&[".*INT_LIST.*", "PREFIX__BOOL_LIST.*"])
    .with_json(json!(
        {
          "float_list": [1.1],
          "string_list": ["a", "b"],
          "bool_list": [true, false]
        }
    ))
    .parse_from_env()
    .expect("Failed to parse environment variables");

assert_eq!(json, json!(
  {
      "float_list": [1.1],
      "struct": {
        "int": 1,
        "float": 1.1,
        "string": "string",
        "bool_list": [true, false],
        "struct": {
          "int": 1,
          "string": "string",
          "bool_list": [true, false]
        }
      },
      "bool_list": [true, false],
      "string_list": ["a", "b"]
    }  
));

许可证

许可协议为以下之一

任选其一。

依赖

~0.7–2.3MB
~46K SLoC