@@ -4,19 +4,20 @@ use std::str::FromStr;
44use crate :: error:: Error ;
55use std:: collections:: HashMap ;
66
7- /// Load a nenvironment variable by name and parse it into type `T`.
8- /// The function is used by `envconfig_derive` to implement `init()`.
7+ /// Load an environment variable by name and parse it into type `T`.
98///
10- /// It returns `Error` in the following cases:
9+ /// This function can also use a hashmap as a fallback or for testing purposes.
10+ ///
11+ /// # Errors
1112/// - Environment variable is not present
1213/// - Parsing failed
13- pub fn load_var < T : FromStr > (
14+ pub fn load_var < T : FromStr , S : :: std :: hash :: BuildHasher > (
1415 var_name : & ' static str ,
15- hashmap : Option < & HashMap < String , String > > ,
16+ hashmap : Option < & HashMap < String , String , S > > ,
1617) -> Result < T , Error > {
1718 match hashmap {
1819 None => env:: var ( var_name) . ok ( ) ,
19- Some ( hashmap) => hashmap. get ( var_name) . map ( |val| val . to_string ( ) ) ,
20+ Some ( hashmap) => hashmap. get ( var_name) . map ( std :: string :: ToString :: to_string) ,
2021 }
2122 . ok_or ( Error :: EnvVarMissing { name : var_name } )
2223 . and_then ( |string_value| {
@@ -26,14 +27,21 @@ pub fn load_var<T: FromStr>(
2627 } )
2728}
2829
29- pub fn load_var_with_default < T : FromStr > (
30+ /// Tries to load an environment variable by name and parse it into type `T`.
31+ /// If the environment variable is not present, it returns a default value.
32+ ///
33+ /// This function can also use a hashmap as a fallback or for testing purposes.
34+ ///
35+ /// # Errors
36+ /// - Parsing failed
37+ pub fn load_var_with_default < T : FromStr , S : :: std:: hash:: BuildHasher > (
3038 var_name : & ' static str ,
31- hashmap : Option < & HashMap < String , String > > ,
39+ hashmap : Option < & HashMap < String , String , S > > ,
3240 default : & ' static str ,
3341) -> Result < T , Error > {
3442 let opt_var = match hashmap {
3543 None => env:: var ( var_name) . ok ( ) ,
36- Some ( hashmap) => hashmap. get ( var_name) . map ( |val| val . to_string ( ) ) ,
44+ Some ( hashmap) => hashmap. get ( var_name) . map ( std :: string :: ToString :: to_string) ,
3745 } ;
3846
3947 let string_value = match opt_var {
@@ -46,13 +54,20 @@ pub fn load_var_with_default<T: FromStr>(
4654 . map_err ( |_| Error :: ParseError { name : var_name } )
4755}
4856
49- pub fn load_optional_var < T : FromStr > (
57+ /// Tries to load an environment variable by name and parse it into type `T`.
58+ /// If the environment variable is not present, it returns `None`.
59+ ///
60+ /// This function can also use a hashmap as a fallback or for testing purposes.
61+ ///
62+ /// # Errors
63+ /// - Parsing failed
64+ pub fn load_optional_var < T : FromStr , S : :: std:: hash:: BuildHasher > (
5065 var_name : & ' static str ,
51- hashmap : Option < & HashMap < String , String > > ,
66+ hashmap : Option < & HashMap < String , String , S > > ,
5267) -> Result < Option < T > , Error > {
5368 let opt_var = match hashmap {
5469 None => env:: var ( var_name) . ok ( ) ,
55- Some ( hashmap) => hashmap. get ( var_name) . map ( |val| val . to_string ( ) ) ,
70+ Some ( hashmap) => hashmap. get ( var_name) . map ( std :: string :: ToString :: to_string) ,
5671 } ;
5772
5873 match opt_var {
0 commit comments