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

env-vars-to-json

Convert environment variables to JSON

7 releases

0.1.6 Jun 6, 2023
0.1.5 Jun 5, 2023

#68 in #env

Download history 22/week @ 2024-07-26 2/week @ 2024-08-02 3/week @ 2024-09-13 16/week @ 2024-09-20 2/week @ 2024-09-27

85 downloads per month

MIT/Apache

33KB
780 lines

env-vars-to-json: Construct JSON from environment variables

CI codecov Crates.io Docs.rs

This crate provides methods to construct serde_json::Value from environment variables.

Examples:

Given environemnt variables, with prefix PREFIX and separator __:

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

Without default 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"]
  }
))

With default json and filters (require feature filter enabled):

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"]
    }  
));

License

Licensed under either of

at your option.

Dependencies

~0.7–2.2MB
~45K SLoC