A correct dotenv library, which supports:
- Multiline values
- Variable substitution
BASIC=basic
- empty lines are skipped
- lines beginning with
#
are treated as comments #
marks the beginning of a comment (unless when the value is wrapped in quotes)- empty values become empty strings
- inner quotes are maintained
- whitespace is removed from both ends of unquoted values
- single and double quoted values are escaped
- single and double quoted values maintain whitespace from both ends
- double quoted values expand new lines (
MULTILINE="new\nline"
becomesMULTILINE: "new line"
$KEY
will expand any env with the nameKEY
${KEY}
will expand any env with the nameKEY
\$KEY
will escape the$KEY
rather than expand${KEY:-default}
will first attempt to expand any env with the nameKEY
. If not one, then it will returndefault
The easiest and most common usage consists on calling load
when the
application starts, which will load environment variables from a file named
.env
in the current directory or any of its parents.
If you need more control about the file name or its location, you can
use the from_filename
, from_path
or from_read
.
A .env
file looks like this:
# a comment, will be ignored
REDIS_ADDRESS=localhost:6379
MEANING_OF_LIFE=42
You can optionally prefix each line with the word export
, which will
conveniently allow you to source the whole file on your shell.
A sample project using dotenv would look like this:
fn main() {
for (key, value) in dotenv::vars() {
println!("{}: {}", key, value);
}
}