@@ -84,43 +84,42 @@ pub fn split_file(split_id: impl Display) -> String {
8484 format ! ( "{split_id}.split" )
8585}
8686
87- pub fn get_from_env < T : FromStr + Debug > ( key : & str , default_value : T ) -> T {
88- if let Ok ( value_str ) = std :: env :: var ( key) {
89- if let Ok ( value ) = T :: from_str ( & value_str ) {
90- info ! ( value=?value , "using environment variable `{key}` value" ) ;
91- return value ;
92- } else {
93- error ! ( value=%value_str, "failed to parse environment variable `{key}` value" ) ;
94- }
95- }
96- info ! ( value=?default_value , "using environment variable `{key}` default value" ) ;
97- default_value
87+ fn get_from_env_opt_aux < T : Debug > (
88+ key : & str ,
89+ parse_fn : impl FnOnce ( & str ) -> Option < T > ,
90+ ) -> Option < T > {
91+ let value_str = std :: env :: var ( key ) . ok ( ) ? ;
92+ let Some ( value ) = parse_fn ( & value_str ) else {
93+ error ! ( value=%value_str, "failed to parse environment variable `{key}` value" ) ;
94+ return None ;
95+ } ;
96+ info ! ( value=?value , "using environment variable `{key}` value" ) ;
97+ Some ( value )
9898}
9999
100- pub fn get_bool_from_env ( key : & str , default_value : bool ) -> bool {
101- if let Ok ( value_str) = std:: env:: var ( key) {
102- if let Some ( value) = parse_bool_lenient ( & value_str) {
103- info ! ( value=%value, "using environment variable `{key}` value" ) ;
104- return value;
105- } else {
106- error ! ( value=%value_str, "failed to parse environment variable `{key}` value" ) ;
107- }
100+ pub fn get_from_env < T : FromStr + Debug > ( key : & str , default_value : T ) -> T {
101+ if let Some ( value) = get_from_env_opt ( key) {
102+ value
103+ } else {
104+ info ! ( default_value=?default_value, "using environment variable `{key}` default value" ) ;
105+ default_value
108106 }
109- info ! ( value=?default_value, "using environment variable `{key}` default value" ) ;
110- default_value
111107}
112108
113109pub fn get_from_env_opt < T : FromStr + Debug > ( key : & str ) -> Option < T > {
114- let Some ( value_str) = std:: env:: var ( key) . ok ( ) else {
115- info ! ( "environment variable `{key}` is not set" ) ;
116- return None ;
117- } ;
118- if let Ok ( value) = T :: from_str ( & value_str) {
119- info ! ( value=?value, "using environment variable `{key}` value" ) ;
120- Some ( value)
110+ get_from_env_opt_aux ( key, |val_str| val_str. parse ( ) . ok ( ) )
111+ }
112+
113+ pub fn get_bool_from_env_opt ( key : & str ) -> Option < bool > {
114+ get_from_env_opt_aux ( key, parse_bool_lenient)
115+ }
116+
117+ pub fn get_bool_from_env ( key : & str , default_value : bool ) -> bool {
118+ if let Some ( flag_value) = get_bool_from_env_opt ( key) {
119+ flag_value
121120 } else {
122- error ! ( value=%value_str , "failed to parse environment variable `{key}` value" ) ;
123- None
121+ info ! ( default_value=%default_value , "using environment variable `{key}` default value" ) ;
122+ default_value
124123 }
125124}
126125
0 commit comments