{"id":17002037,"url":"https://github.com/sagiegurari/envmnt","last_synced_at":"2025-04-13T09:51:54.221Z","repository":{"id":54063439,"uuid":"185587052","full_name":"sagiegurari/envmnt","owner":"sagiegurari","description":"Environment variables utility functions.","archived":false,"fork":false,"pushed_at":"2024-07-29T12:53:05.000Z","size":4102,"stargazers_count":27,"open_issues_count":0,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-15T04:26:53.717Z","etag":null,"topics":["environment","environment-variables","environment-vars","rust","rust-library","utility-library"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sagiegurari.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-08T10:47:35.000Z","updated_at":"2024-07-29T12:53:09.000Z","dependencies_parsed_at":"2023-12-19T01:01:16.800Z","dependency_job_id":"0c797032-3274-4ff3-ae0f-d5f382bb3010","html_url":"https://github.com/sagiegurari/envmnt","commit_stats":{"total_commits":147,"total_committers":6,"mean_commits":24.5,"dds":0.108843537414966,"last_synced_commit":"f922e8ef826f2c165ac36999fba0d30c7ca6c310"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagiegurari%2Fenvmnt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagiegurari%2Fenvmnt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagiegurari%2Fenvmnt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sagiegurari%2Fenvmnt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sagiegurari","download_url":"https://codeload.github.com/sagiegurari/envmnt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248695301,"owners_count":21146952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["environment","environment-variables","environment-vars","rust","rust-library","utility-library"],"created_at":"2024-10-14T04:26:55.176Z","updated_at":"2025-04-13T09:51:54.195Z","avatar_url":"https://github.com/sagiegurari.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# envmnt\n\n[![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)\u003cbr\u003e\n[![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)\u003cbr\u003e\n[![Built with cargo-make](https://sagiegurari.github.io/cargo-make/assets/badges/cargo-make.svg)](https://sagiegurari.github.io/cargo-make)\n\n\u003e Environment variables utility functions.\n\n* [Overview](#overview)\n* [Usage](#usage)\n* [Installation](#installation)\n* [API Documentation](https://sagiegurari.github.io/envmnt/)\n* [Contributing](.github/CONTRIBUTING.md)\n* [Release History](CHANGELOG.md)\n* [License](#license)\n\n\u003ca name=\"overview\"\u003e\u003c/a\u003e\n## Overview\nThis library has many helper functions to access/modify/check environment variables.\n\n\u003ca name=\"usage\"\u003e\u003c/a\u003e\n## Usage\nSimply include the library and invoke the various utility functions.\n\n**Get/Set/Remove environment variables**\n\n\u003c!--{ \"examples/modify.rs\" | lines: 2 | code: rust }--\u003e\n```rust\nuse envmnt::{ExpandOptions, ExpansionType};\n\nfn main() {\n    if !envmnt::exists(\"MY_ENV_VAR\") {\n        envmnt::set(\"MY_ENV_VAR\", \"SOME VALUE\");\n    }\n\n    let mut value = envmnt::get_or(\"MY_ENV_VAR\", \"DEFAULT_VALUE\");\n    println!(\"Env Value: {}\", \u0026value);\n\n    value = envmnt::get_or_panic(\"MY_ENV_VAR\");\n    println!(\"Env Value: {}\", \u0026value);\n\n    let pre_value = envmnt::get_set(\"MY_ENV_VAR\", \"SOME NEW VALUE\");\n\n    let value = envmnt::get_or(\"MY_ENV_VAR\", \"DEFAULT_VALUE\");\n    println!(\"New Env Value: {}\", \u0026value);\n    println!(\"Previous Env Value: {:?}\", \u0026pre_value);\n\n    let var_was_set = envmnt::set_optional(\"MY_ENV_VAR\", \u0026Some(\"OPTIONAL VALUE\"));\n    println!(\"Env Was Modified: {}\", var_was_set);\n\n    let all_vars = envmnt::vars(); // returned as Vec\u003c(String, String)\u003e\n\n    for (key, value) in all_vars {\n        println!(\"{}: {}\", key, value);\n    }\n\n    envmnt::set(\"MY_ENV_VAR2\", \"SOME VALUE2\");\n\n    let value = envmnt::get_any(\u0026vec![\"MY_ENV_VAR1\", \"MY_ENV_VAR2\"], \"default\");\n    println!(\"MY_ENV_VAR1 exists: {}\", envmnt::exists(\"MY_ENV_VAR1\"));\n    println!(\"MY_ENV_VAR2 exists: {}\", envmnt::exists(\"MY_ENV_VAR2\"));\n    println!(\"Found value: {}\", value);\n\n    let mut options = ExpandOptions::new();\n    options.expansion_type = Some(ExpansionType::Unix);\n    let mut value = envmnt::expand(\"Env: MY_ENV value is: ${MY_ENV}\", Some(options));\n    println!(\"Expanded: {}\", \u0026value);\n    options.expansion_type = Some(ExpansionType::UnixBracketsWithDefaults);\n    value = envmnt::expand(\n        \"Env: MY_ENV_NOT_FOUND value is: ${MY_ENV_NOT_FOUND:default value}\",\n        Some(options),\n    );\n    println!(\"Expanded: {}\", \u0026value);\n}\n```\n\u003c!--{ end }--\u003e\n\n**Get/Set boolean environment variables and other comparisons**\n\n\u003c!--{ \"examples/boolean.rs\" | lines: 3 | code: rust }--\u003e\n```rust\nfn main() {\n    envmnt::set_bool(\"FLAG_VAR\", true);\n    let mut flag_value = envmnt::is_or(\"FLAG_VAR\", false);\n    println!(\"Bool Flag: {}\", \u0026flag_value);\n\n    flag_value = envmnt::is(\"FLAG_VAR\");\n    assert!(flag_value);\n\n    envmnt::set_bool(\"FLAG_VAR\", true);\n    assert!(envmnt::is_equal(\"FLAG_VAR\", \"true\"));\n\n    envmnt::set(\"MY_ENV_VAR\", \"SOME VALUE\");\n    let same = envmnt::is_equal(\"MY_ENV_VAR\", \"SOME VALUE\");\n    println!(\"Value Is Same: {}\", \u0026same);\n    let mut contains = envmnt::contains(\"MY_ENV_VAR\", \"_ENV_\");\n    println!(\"Value Contained: {}\", \u0026contains);\n    contains = envmnt::contains_ignore_case(\"MY_ENV_VAR\", \"_env_\");\n    println!(\"Value Contained (case insensitive): {}\", \u0026contains);\n}\n```\n\u003c!--{ end }--\u003e\n\n\n**Get/Set numeric environment variables**\n\n\u003c!--{ \"examples/numeric.rs\" | lines: 3 | code: rust }--\u003e\n```rust\nfn main() {\n    // all numeric data types: u8/i8/u16/i16/u32/i32/u64/i64/u128/i128/f32/f64/isize/usize\n    // are supported by specific set/get functions.\n    // get_parse can support parsing various data types beyond the simple numeric getters.\n    envmnt::set_u8(\"U8_TEST_ENV\", 50);\n    let mut value_u8 = envmnt::get_u8(\"U8_TEST_ENV\", 5);\n    assert_eq!(value_u8, 50);\n    value_u8 = envmnt::get_parse_or(\"U8_TEST_ENV\", 5).unwrap();\n    assert_eq!(value_u8, 50);\n\n    envmnt::set_isize(\"ISIZE_TEST_ENV\", -50);\n    let mut value_isize = envmnt::get_isize(\"ISIZE_TEST_ENV\", 5);\n    assert_eq!(value_isize, -50);\n    value_isize = envmnt::get_parse(\"ISIZE_TEST_ENV\").unwrap();\n    assert_eq!(value_isize, -50);\n\n    // increment/decrement values\n    value_isize = envmnt::increment(\"U8_TEST_ENV\");\n    assert_eq!(value_isize, 51);\n    value_u8 = envmnt::get_u8(\"U8_TEST_ENV\", 5);\n    assert_eq!(value_u8, 51);\n    value_isize = envmnt::decrement(\"U8_TEST_ENV\");\n    assert_eq!(value_isize, 50);\n    value_u8 = envmnt::get_u8(\"U8_TEST_ENV\", 5);\n    assert_eq!(value_u8, 50);\n}\n```\n\u003c!--{ end }--\u003e\n\n**Get/Set list environment variables**\n\n\u003c!--{ \"examples/list.rs\" | lines: 3 | code: rust }--\u003e\n```rust\nfn main() {\n    envmnt::set_list(\n        \"LIST_TEST_ENV\",\n        \u0026vec![\"1\".to_string(), \"2\".to_string(), \"3\".to_string()],\n    );\n\n    let mut values = envmnt::get_list(\"LIST_TEST_ENV\").unwrap();\n    println!(\"List Values: {:?}\", values);\n\n    let mut same = envmnt::is_equal(\"LIST_TEST_ENV\", \"1;2;3\");\n    println!(\"Same: {}\", same);\n\n    let mut options = envmnt::ListOptions::new();\n    options.separator = Some(\",\".to_string());\n    envmnt::set_list_with_options(\n        \"LIST_TEST_ENV\",\n        \u0026vec![\"1\".to_string(), \"2\".to_string(), \"3\".to_string()],\n        \u0026options,\n    );\n\n    values = envmnt::get_list_with_options(\"LIST_TEST_ENV\", \u0026options).unwrap();\n    println!(\"List Values: {:?}\", values);\n\n    same = envmnt::is_equal(\"LIST_TEST_ENV\", \"1,2,3\");\n    println!(\"Same: {}\", same);\n}\n```\n\u003c!--{ end }--\u003e\n\n**Bulk Operations**\n\n\u003c!--{ \"examples/bulk.rs\" | lines: 2 | code: rust }--\u003e\n```rust\nuse indexmap::IndexMap;\n\nfn main() {\n    let mut env: IndexMap\u003cString, String\u003e = IndexMap::new();\n    env.insert(\"ENV_VAR1\".to_string(), \"MY VALUE\".to_string());\n    env.insert(\"ENV_VAR2\".to_string(), \"MY VALUE2\".to_string());\n\n    envmnt::set_all(\u0026env);\n\n    let value = envmnt::get_or_panic(\"ENV_VAR1\");\n    println!(\"Value Is: {}\", \u0026value);\n\n    let mut found = envmnt::is_any_exists(\u0026vec![\"ENV_VAR1\", \"ENV_VAR2\"]);\n\n    println!(\"Any Found: {}\", \u0026found);\n\n    found = envmnt::is_all_exists(\u0026vec![\"ENV_VAR1\", \"ENV_VAR2\"]);\n\n    println!(\"All Found: {}\", \u0026found);\n\n    envmnt::remove_all(\u0026vec![\"ENV_VAR1\", \"ENV_VAR2\"]);\n\n    found = envmnt::is_any_exists(\u0026vec![\"ENV_VAR1\", \"ENV_VAR2\"]);\n\n    println!(\"Any Found: {}\", \u0026found);\n\n    env = IndexMap::new();\n    env.insert(\"ENV_VAR1\".to_string(), \"MY VALUE\".to_string());\n    env.insert(\"ENV_VAR2\".to_string(), \"MY VALUE2\".to_string());\n\n    let eval_env = |key: String, value: String| {\n        let mut updated_key = String::from(\"KEY-\");\n        updated_key.push_str(\u0026key);\n        let mut updated_value = String::from(\"VALUE-\");\n        updated_value.push_str(\u0026value);\n        Some((updated_key, updated_value))\n    };\n\n    envmnt::evaluate_and_set_all(\u0026env, eval_env);\n\n    let value = envmnt::get_or_panic(\"KEY-ENV_VAR1\");\n    println!(\"Value Is: {}\", \u0026value);\n}\n```\n\u003c!--{ end }--\u003e\n\n**File Operations**\n\n\u003c!--{ \"examples/file.rs\" | lines: 3 | code: rust }--\u003e\n```rust\nfn main() {\n    let mut output = envmnt::load_file(\"./src/test/var.env\");\n    assert!(output.is_ok());\n\n    let eval_env = |key: String, value: String| {\n        let mut updated_key = String::from(\"KEY-\");\n        updated_key.push_str(\u0026key);\n        let mut updated_value = String::from(\"VALUE-\");\n        updated_value.push_str(\u0026value);\n        Some((updated_key, updated_value))\n    };\n\n    output = envmnt::evaluate_and_load_file(\"./src/test/var.env\", eval_env);\n    assert!(output.is_ok());\n}\n```\n\u003c!--{ end }--\u003e\n\n\u003ca name=\"installation\"\u003e\u003c/a\u003e\n## Installation\nIn order to use this library, just add it as a dependency:\n\n```ini\n[dependencies]\nenvmnt = \"^0.10.4\"\n```\n\n## API Documentation\nSee full docs at: [API Docs](https://sagiegurari.github.io/envmnt/)\n\n## Contributing\nSee [contributing guide](.github/CONTRIBUTING.md)\n\n\u003ca name=\"history\"\u003e\u003c/a\u003e\n## Release History\n\nSee [Changelog](CHANGELOG.md)\n\n\u003ca name=\"license\"\u003e\u003c/a\u003e\n## License\nDeveloped by Sagie Gur-Ari and licensed under the Apache 2 open source license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsagiegurari%2Fenvmnt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsagiegurari%2Fenvmnt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsagiegurari%2Fenvmnt/lists"}