An open API service indexing awesome lists of open source software.

https://github.com/sagiegurari/envmnt

Environment variables utility functions.
https://github.com/sagiegurari/envmnt

environment environment-variables environment-vars rust rust-library utility-library

Last synced: about 1 year ago
JSON representation

Environment variables utility functions.

Awesome Lists containing this project

README

          

# envmnt

[![crates.io](https://img.shields.io/crates/v/envmnt.svg)](https://crates.io/crates/envmnt) [![CI](https://github.com/sagiegurari/envmnt/workflows/CI/badge.svg?branch=master)](https://github.com/sagiegurari/envmnt/actions) [![codecov](https://codecov.io/gh/sagiegurari/envmnt/branch/master/graph/badge.svg)](https://codecov.io/gh/sagiegurari/envmnt)

[![license](https://img.shields.io/crates/l/envmnt.svg)](https://github.com/sagiegurari/envmnt/blob/master/LICENSE) [![Libraries.io for GitHub](https://img.shields.io/librariesio/github/sagiegurari/envmnt.svg)](https://libraries.io/cargo/envmnt) [![Documentation](https://docs.rs/envmnt/badge.svg)](https://docs.rs/crate/envmnt/) [![downloads](https://img.shields.io/crates/d/envmnt.svg)](https://crates.io/crates/envmnt)

[![Built with cargo-make](https://sagiegurari.github.io/cargo-make/assets/badges/cargo-make.svg)](https://sagiegurari.github.io/cargo-make)

> Environment variables utility functions.

* [Overview](#overview)
* [Usage](#usage)
* [Installation](#installation)
* [API Documentation](https://sagiegurari.github.io/envmnt/)
* [Contributing](.github/CONTRIBUTING.md)
* [Release History](CHANGELOG.md)
* [License](#license)


## Overview
This library has many helper functions to access/modify/check environment variables.


## Usage
Simply include the library and invoke the various utility functions.

**Get/Set/Remove environment variables**

```rust
use envmnt::{ExpandOptions, ExpansionType};

fn main() {
if !envmnt::exists("MY_ENV_VAR") {
envmnt::set("MY_ENV_VAR", "SOME VALUE");
}

let mut value = envmnt::get_or("MY_ENV_VAR", "DEFAULT_VALUE");
println!("Env Value: {}", &value);

value = envmnt::get_or_panic("MY_ENV_VAR");
println!("Env Value: {}", &value);

let pre_value = envmnt::get_set("MY_ENV_VAR", "SOME NEW VALUE");

let value = envmnt::get_or("MY_ENV_VAR", "DEFAULT_VALUE");
println!("New Env Value: {}", &value);
println!("Previous Env Value: {:?}", &pre_value);

let var_was_set = envmnt::set_optional("MY_ENV_VAR", &Some("OPTIONAL VALUE"));
println!("Env Was Modified: {}", var_was_set);

let all_vars = envmnt::vars(); // returned as Vec<(String, String)>

for (key, value) in all_vars {
println!("{}: {}", key, value);
}

envmnt::set("MY_ENV_VAR2", "SOME VALUE2");

let value = envmnt::get_any(&vec!["MY_ENV_VAR1", "MY_ENV_VAR2"], "default");
println!("MY_ENV_VAR1 exists: {}", envmnt::exists("MY_ENV_VAR1"));
println!("MY_ENV_VAR2 exists: {}", envmnt::exists("MY_ENV_VAR2"));
println!("Found value: {}", value);

let mut options = ExpandOptions::new();
options.expansion_type = Some(ExpansionType::Unix);
let mut value = envmnt::expand("Env: MY_ENV value is: ${MY_ENV}", Some(options));
println!("Expanded: {}", &value);
options.expansion_type = Some(ExpansionType::UnixBracketsWithDefaults);
value = envmnt::expand(
"Env: MY_ENV_NOT_FOUND value is: ${MY_ENV_NOT_FOUND:default value}",
Some(options),
);
println!("Expanded: {}", &value);
}
```

**Get/Set boolean environment variables and other comparisons**

```rust
fn main() {
envmnt::set_bool("FLAG_VAR", true);
let mut flag_value = envmnt::is_or("FLAG_VAR", false);
println!("Bool Flag: {}", &flag_value);

flag_value = envmnt::is("FLAG_VAR");
assert!(flag_value);

envmnt::set_bool("FLAG_VAR", true);
assert!(envmnt::is_equal("FLAG_VAR", "true"));

envmnt::set("MY_ENV_VAR", "SOME VALUE");
let same = envmnt::is_equal("MY_ENV_VAR", "SOME VALUE");
println!("Value Is Same: {}", &same);
let mut contains = envmnt::contains("MY_ENV_VAR", "_ENV_");
println!("Value Contained: {}", &contains);
contains = envmnt::contains_ignore_case("MY_ENV_VAR", "_env_");
println!("Value Contained (case insensitive): {}", &contains);
}
```

**Get/Set numeric environment variables**

```rust
fn main() {
// all numeric data types: u8/i8/u16/i16/u32/i32/u64/i64/u128/i128/f32/f64/isize/usize
// are supported by specific set/get functions.
// get_parse can support parsing various data types beyond the simple numeric getters.
envmnt::set_u8("U8_TEST_ENV", 50);
let mut value_u8 = envmnt::get_u8("U8_TEST_ENV", 5);
assert_eq!(value_u8, 50);
value_u8 = envmnt::get_parse_or("U8_TEST_ENV", 5).unwrap();
assert_eq!(value_u8, 50);

envmnt::set_isize("ISIZE_TEST_ENV", -50);
let mut value_isize = envmnt::get_isize("ISIZE_TEST_ENV", 5);
assert_eq!(value_isize, -50);
value_isize = envmnt::get_parse("ISIZE_TEST_ENV").unwrap();
assert_eq!(value_isize, -50);

// increment/decrement values
value_isize = envmnt::increment("U8_TEST_ENV");
assert_eq!(value_isize, 51);
value_u8 = envmnt::get_u8("U8_TEST_ENV", 5);
assert_eq!(value_u8, 51);
value_isize = envmnt::decrement("U8_TEST_ENV");
assert_eq!(value_isize, 50);
value_u8 = envmnt::get_u8("U8_TEST_ENV", 5);
assert_eq!(value_u8, 50);
}
```

**Get/Set list environment variables**

```rust
fn main() {
envmnt::set_list(
"LIST_TEST_ENV",
&vec!["1".to_string(), "2".to_string(), "3".to_string()],
);

let mut values = envmnt::get_list("LIST_TEST_ENV").unwrap();
println!("List Values: {:?}", values);

let mut same = envmnt::is_equal("LIST_TEST_ENV", "1;2;3");
println!("Same: {}", same);

let mut options = envmnt::ListOptions::new();
options.separator = Some(",".to_string());
envmnt::set_list_with_options(
"LIST_TEST_ENV",
&vec!["1".to_string(), "2".to_string(), "3".to_string()],
&options,
);

values = envmnt::get_list_with_options("LIST_TEST_ENV", &options).unwrap();
println!("List Values: {:?}", values);

same = envmnt::is_equal("LIST_TEST_ENV", "1,2,3");
println!("Same: {}", same);
}
```

**Bulk Operations**

```rust
use indexmap::IndexMap;

fn main() {
let mut env: IndexMap = IndexMap::new();
env.insert("ENV_VAR1".to_string(), "MY VALUE".to_string());
env.insert("ENV_VAR2".to_string(), "MY VALUE2".to_string());

envmnt::set_all(&env);

let value = envmnt::get_or_panic("ENV_VAR1");
println!("Value Is: {}", &value);

let mut found = envmnt::is_any_exists(&vec!["ENV_VAR1", "ENV_VAR2"]);

println!("Any Found: {}", &found);

found = envmnt::is_all_exists(&vec!["ENV_VAR1", "ENV_VAR2"]);

println!("All Found: {}", &found);

envmnt::remove_all(&vec!["ENV_VAR1", "ENV_VAR2"]);

found = envmnt::is_any_exists(&vec!["ENV_VAR1", "ENV_VAR2"]);

println!("Any Found: {}", &found);

env = IndexMap::new();
env.insert("ENV_VAR1".to_string(), "MY VALUE".to_string());
env.insert("ENV_VAR2".to_string(), "MY VALUE2".to_string());

let eval_env = |key: String, value: String| {
let mut updated_key = String::from("KEY-");
updated_key.push_str(&key);
let mut updated_value = String::from("VALUE-");
updated_value.push_str(&value);
Some((updated_key, updated_value))
};

envmnt::evaluate_and_set_all(&env, eval_env);

let value = envmnt::get_or_panic("KEY-ENV_VAR1");
println!("Value Is: {}", &value);
}
```

**File Operations**

```rust
fn main() {
let mut output = envmnt::load_file("./src/test/var.env");
assert!(output.is_ok());

let eval_env = |key: String, value: String| {
let mut updated_key = String::from("KEY-");
updated_key.push_str(&key);
let mut updated_value = String::from("VALUE-");
updated_value.push_str(&value);
Some((updated_key, updated_value))
};

output = envmnt::evaluate_and_load_file("./src/test/var.env", eval_env);
assert!(output.is_ok());
}
```


## Installation
In order to use this library, just add it as a dependency:

```ini
[dependencies]
envmnt = "^0.10.4"
```

## API Documentation
See full docs at: [API Docs](https://sagiegurari.github.io/envmnt/)

## Contributing
See [contributing guide](.github/CONTRIBUTING.md)


## Release History

See [Changelog](CHANGELOG.md)


## License
Developed by Sagie Gur-Ari and licensed under the Apache 2 open source license.