[dependencies]
enve = "0.3"
enve
helps you work with environment variables and convert it to any type
using only type annotations.
All standard environment variable types are included, but enve
under the hood
uses estring, so you can easily create
your own type.
Look at the examples to see the power!
Basic
fn main() -> Result<(), enve::Error> {
enve::sset("E", "10");
let res: f32 = enve::get("E")?;
println!("result: {}", res);
Ok(())
}
You can use predefined structs like SepVec
if you enable structs
feature.
Note: You can use custom types as annotations! Just implement ParseFragment
.
use enve::SepVec;
type PlusVec<T> = SepVec<T, '+'>;
type MulVec<T> = SepVec<T, '*'>;
fn main() -> Result<(), enve::Error> {
enve::sset("E", "10+5*2+3");
let res: f32 = enve::get::<PlusVec<MulVec<f32>>>("E")
.unwrap()
.iter()
.map(|m| m.iter().product::<f32>())
.sum::<f32>();
assert_eq!(res, 23.0);
Ok(())
}
You can also use predefined aggregators if you enable aggs
feature.
use enve::{SepVec, Product, Sum, estring::Aggregate};
type PlusVec<T> = SepVec<T, '+'>;
type MulVec<T> = SepVec<T, '*'>;
fn main() -> Result<(), enve::Error> {
enve::sset("E", "10+5*2+3");
let res: f32 = enve::get::<Sum<PlusVec<Product<MulVec<f32>>>>>("E")?
.agg();
assert_eq!(res, 23.0);
Ok(())
}
Join us in:
MIT. See LICENSE to see the full text.
pleshevskiy (Dmitriy Pleshevskiy) – creator, maintainer.