4 releases (2 stable)
new 1.0.1 | May 3, 2025 |
---|
#1161 in Rust patterns
35 downloads per month
9KB
58 lines
envish: Search for environment variables in Rust
envish
is a Rust library for discovering, iterating and grouping environment variables.
Installation
cargo add envish
Examples
Grouping environment variables
envish::group_by
gets a grouped collection of related environment variables.
The group expression must contain two named groups:
<group>
describes the substring that groups variables together.<key>
describes the variable's key in the result.
std::env::set_var("FOO_ALLY_AGE", "39");
std::env::set_var("FOO_ALLY_JOB", "assassin");
std::env::set_var("FOO_CHARLIE_AGE", "42");
std::env::set_var("FOO_CHARLIE_JOB", "jester");
let group_expr = r"FOO_(?<group>.+)_(?<key>.+)";
let mut groups = envish::group_by(group_expr).unwrap();
let ally = &groups["ALLY"];
assert_eq!(ally["AGE"], "39");
assert_eq!(ally["JOB"], "assassin");
let charlie = &groups["CHARLIE"];
assert_eq!(charlie["AGE"], "42");
assert_eq!(charlie["JOB"], "jester");
Search environment variables by regular expression
envish::search()
returns an iterator over all environment variables with names that match a given expression.
std::env::set_var("CAT_CLOWNS_WOO", "woo");
std::env::set_var("IMP_JESTER_FOO", "foo");
std::env::set_var("DOG_JUGGLE_WAR", "war");
std::env::set_var("IMP_JESTER_BAR", "bar");
let expr = "(.*)_JESTER_(.*)";
let mut matches = envish::search(expr).unwrap();
let m = matches.next().unwrap();
assert_eq!(m.0, "IMP_JESTER_FOO");
assert_eq!(m.1, "foo");
let m = matches.next().unwrap();
assert_eq!(m.0, "IMP_JESTER_BAR");
assert_eq!(m.1, "bar");
let m = matches.next();
assert!(m.is_none());
Search environment variables by prefix
envish::with_prefix()
returns an iterator over all environment variables with the given prefix.
std::env::set_var("CAT_CLOWNS_WOO", "woo");
std::env::set_var("IMP_JESTER_FOO", "foo");
std::env::set_var("DOG_JUGGLE_WAR", "war");
std::env::set_var("IMP_JESTER_BAR", "bar");
let prefix = "IMP_JESTER_";
let mut matches = envish::with_prefix(prefix).unwrap();
let m = matches.next().unwrap();
assert_eq!(m.0, "IMP_JESTER_FOO");
assert_eq!(m.1, "foo");
let m = matches.next().unwrap();
assert_eq!(m.0, "IMP_JESTER_BAR");
assert_eq!(m.1, "bar");
let m = matches.next();
assert!(m.is_none());
Support
Please submit all your questions, feature requests and bug reports at github.com/cariad/envish/issues. Thank you!
License
The library is open-source and published under the MIT License.
Author
Hello! 👋 I'm Cariad Eccleston. You can find me at cariad.earth, github.com/cariad, linkedin.com/in/cariad and @cariad.earth on Bluesky.
Dependencies
~2.2–3MB
~54K SLoC