Crates.io | envman |
lib.rs | envman |
version | |
source | src |
created_at | 2024-08-30 15:08:52.970922 |
updated_at | 2024-12-24 07:00:39.645511 |
description | Rust crates to manage environment variables. |
homepage | |
repository | https://github.com/moriyoshi-kasuga/envman |
max_upload_size | |
id | 1357777 |
Cargo.toml error: | TOML parse error at line 19, column 1 | 19 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
This crate adds a macro for easy management of environment variables.
If you would like to see more details, please see these codes.
use envman::EnvMan;
unsafe {
std::env::set_var("F0", "-1");
std::env::set_var("f1", "1");
}
// The type of field can be set if FromStr is implemented
#[derive(EnvMan)]
struct Foo {
f0: i32,
#[envman(rename = "f1")]
f_1: u8,
#[envman(default = "default value".to_string())]
f_n: String,
f_o: Option<i32>,
#[envman(default = 1, test = 2)]
f_test: u8,
}
// If rename is not set, it will be an upper case
let foo = Foo::load().unwrap();
// This value is taken from “F0”.
let f0 = foo.f0;
// This value is taken from “f1”.
let f_1 = foo.f_1;
// This value is taken from “F_N” and if it is not set, it will be set to “default value”.
let f_n = foo.f_n;
// This value is taken from “F_O” and if it is not set, it will be set to None.
let f_o = foo.f_o;
// This value is taken from “F_TEST” and if it is not set, it will be set to 1.
// and if it under test, it will be set to 2.
let f_test = foo.f_test;
use std::{net::SocketAddr, sync::LazyLock};
use envman::EnvMan;
fn main() {
// this unsafe block is necessary for test
// and it is not necessary in production
unsafe {
std::env::set_var("JWT_SECRET", "secret");
}
// initialize
let _ = &*ENVIRONMENTS;
println!("API_URL: {}", ENVIRONMENTS.api_url);
}
pub static ENVIRONMENTS: LazyLock<Environments> = LazyLock::new(|| Environments::load().unwrap());
#[derive(EnvMan)]
pub struct Environments {
#[envman(default = "127.0.0.1:8080", alltime_parse)]
pub api_url: SocketAddr,
#[envman(test = "secret".to_string())]
pub jwt_secret: String,
}
rename = "new name"
(default: upper case)parser = constants::default_parser
(default: FromStr::from_str)
parser type is
fn(&str) -> Result<T, E>
andE
has implstd::error::Error
if under test, use this value (Priority is first)
test
Use Default::default()test = Default::default()
(put anything of expr)if not found in env, use this value if a test exists and is under test, use the test
default
default = Default::default()
(put anything of expr)alltime_parse
(default: false)
The normal default (and test) return value is the field type if this is set, the return value is a string and the parser is used
Licensed under