Loads environment variables into your structs in one shot.
econf
allows to override struct fields with environment variables easily. This is useful to build up applications that optionally overrides some configuration with environment variables. Here is the basic usage:
```rust use econf::LoadEnv;
struct A { x: bool, y: u64, }
fn main() { let a = A { x: true, y: 42, }; println!("Before: {:?}", a);
let a = econf::load(a, "PREFIX");
println!("After: {:?}", a);
} ```
```sh $ ./app Before: A { x: true, y: 42 } After: A { x: true, y: 42 }
$ PREFIX_X=false ./app Before: A { x: true, y: 42 } After: A { x: false, y: 42 } ```
In this example,
PREFIX_X
is loaded to x
PREFIX_Y
is loaded to y
There are some existing crates that provide similar features but econf
is unique in the following ways:
tuple
, Vec
, HashMap
and various types.bool
isize
, usize
, i8
, i16
,i32
,i64
,i128
, u8
,u16
,u32
,u64
,u128
char
, String
f32
, f64
IpAddr
,Ipv4Addr
,Ipv6Addr
,SocketAddr
,SocketAddrV4
,SocketAddrV6
NonZeroI128
,NonZeroI16
,NonZeroI32
,NonZeroI64
,NonZeroI8
,NonZeroIsize
,NonZeroU128
, NonZeroU16
,NonZeroU32
,NonZeroU64
,NonZeroU8
, NonZeroUsize
PathBuf
Vec
, HashSet
, HashMap
, Option
, BTreeMap
, BTreeSet
, BinaryHeap
, LinkedList
, VecDeque
Fields that do not implement LoadEnv or simply should not be loaded by econf can be skipped by adding the #[econf(skip)]
helper attribute:
```rust
struct A { x: bool, #[econf(skip)] y: u64, // will not be loaded by econf } ```
License: MIT