# loadenv A simple, zero-dependency [dotenv](https://github.com/bkeepers/dotenv) implementation for Rust. # Usage 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](https://doc.rust-lang.org/std/io/trait.BufRead.html) 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](https://github.com/bkeepers/dotenv#why-is-it-not-overriding-existing-env-variables) on the dotenv project page. # File Format ```conf # Example .env file # Comments begin with `#` and must be on their own line # Pairs are in the form `KEY = value` USERNAME = ben PASSWORD = k4+5F_Sa9x%LA&Zy # `=` is optional for empty values DEBUG # whitespace around `=` is optional FOO=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. # Example 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::load_buf(dotenv.as_bytes()).ok(); for (k, v) in std::env::vars() { println!("{} = '{}'", k, v); } } ``` # Running Tests 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](https://doc.rust-lang.org/std/env/fn.set_var.html) page for more info.