A simple, zero-dependency dotenv implementation for Rust.
This library exposes two similar functions. The first is loadenv::load()
, which looks for a file named .env
in the current directory and loads its contents into the environment. The second is loadenv::load_buf()
, which takes a BufRead and loads its contents into the environment. This function can be used to load .env files from custom locations or from other data structures like &[u8]
.
Most of the time, load()
should be enough for your program.
Variables that are already defined in the environment will not be replaced as per this section on the dotenv project page.
```conf
#
and must be on their own lineKEY = value
USERNAME = ben PASSWORD = k4+5F_Sa9x%LA&Zy
=
is optional for empty valuesDEBUG
=
is optionalFOO=bar BOP = baz ```
A .env
file consists of zero or more key-value pairs in the form KEY = value
. Whitespace before and after the =
is ignored (including whitespace at the beginning and end of the line).
In addition, the following rules apply to all lines:
- Empty lines are ignored.
- Lines that begin with #
are comments and are ignored. Note that comments must be on their own line.
- KEY
may only contain 0-9
, A-Z
and _
.
- value
may be any value.
A more detailed example can be found in .env
in the root of this project.
Load the example .env file and print out the new environment. ```rust fn main() { loadenv::load().ok();
for (k, v) in std::env::vars() {
println!("{} = '{}'", k, v);
}
} ```
Load a .env from a string. ```rust fn main() { let dotenv = "FOO=bar\nBOP = baz \n# Comment\n"; loadenv::loadbuf(dotenv.asbytes()).ok();
for (k, v) in std::env::vars() {
println!("{} = '{}'", k, v);
}
} ```
Tests must be run in single-threaded mode using cargo test -- --test-threads=1
. Otherwise, testing will be unreliable because many std::env
methods are not thread-safe. See this page for more info.