@@ -157,30 +157,36 @@ impl S3Config {
157157
158158 fn get_value ( & self , key : S3ConfigKey ) -> Option < String > {
159159 match key {
160- S3ConfigKey :: AccessKeyId => self . access_key_id . clone ( ) . or ( key. get_from_env ( ) ) ,
161- S3ConfigKey :: SecretAccessKey => self . secret_access_key . clone ( ) . or ( key. get_from_env ( ) ) ,
160+ S3ConfigKey :: AccessKeyId => self . access_key_id . clone ( ) . or_else ( || key. get_from_env ( ) ) ,
161+ S3ConfigKey :: SecretAccessKey => self
162+ . secret_access_key
163+ . clone ( )
164+ . or_else ( || key. get_from_env ( ) ) ,
162165 S3ConfigKey :: Region => self
163166 . region
164167 . clone ( )
165- . or ( key. get_from_env ( ) )
166- . or ( self . default_region . clone ( ) )
167- . or ( S3ConfigKey :: DefaultRegion . get_from_env ( ) ) ,
168- S3ConfigKey :: DefaultRegion => self . default_region . clone ( ) . or ( key. get_from_env ( ) ) ,
169- S3ConfigKey :: Bucket => self . bucket . clone ( ) . or ( key. get_from_env ( ) ) ,
170- S3ConfigKey :: Endpoint => self . endpoint . clone ( ) . or ( key. get_from_env ( ) ) ,
171- S3ConfigKey :: Token => self . token . clone ( ) . or ( key. get_from_env ( ) ) ,
168+ . or_else ( || key. get_from_env ( ) )
169+ . or_else ( || self . default_region . clone ( ) )
170+ . or_else ( || S3ConfigKey :: DefaultRegion . get_from_env ( ) ) ,
171+ S3ConfigKey :: DefaultRegion => {
172+ self . default_region . clone ( ) . or_else ( || key. get_from_env ( ) )
173+ }
174+ S3ConfigKey :: Bucket => self . bucket . clone ( ) . or_else ( || key. get_from_env ( ) ) ,
175+ S3ConfigKey :: Endpoint => self . endpoint . clone ( ) . or_else ( || key. get_from_env ( ) ) ,
176+ S3ConfigKey :: Token => self . token . clone ( ) . or_else ( || key. get_from_env ( ) ) ,
172177 S3ConfigKey :: VirtualHostedStyleRequest => self
173178 . virtual_hosted_style_request
174- . clone ( )
175179 . map ( |v| v. to_string ( ) )
176- . or ( key. get_from_env ( ) ) ,
177- S3ConfigKey :: MetadataEndpoint => self . metadata_endpoint . clone ( ) . or ( key. get_from_env ( ) ) ,
178- S3ConfigKey :: Profile => self . profile . clone ( ) . or ( key. get_from_env ( ) ) ,
180+ . or_else ( || key. get_from_env ( ) ) ,
181+ S3ConfigKey :: MetadataEndpoint => self
182+ . metadata_endpoint
183+ . clone ( )
184+ . or_else ( || key. get_from_env ( ) ) ,
185+ S3ConfigKey :: Profile => self . profile . clone ( ) . or_else ( || key. get_from_env ( ) ) ,
179186 S3ConfigKey :: AllowHttp => self
180187 . allow_http
181- . clone ( )
182188 . map ( |v| v. to_string ( ) )
183- . or ( key. get_from_env ( ) ) ,
189+ . or_else ( || key. get_from_env ( ) ) ,
184190 }
185191 }
186192
@@ -197,12 +203,12 @@ impl S3Config {
197203 . with_region (
198204 config
199205 . get_value ( S3ConfigKey :: Region )
200- . ok_or ( ConfigError :: required ( "aws region must be specified." ) ) ?,
206+ . ok_or_else ( || ConfigError :: required ( "aws region must be specified." ) ) ?,
201207 )
202208 . with_bucket_name (
203209 config
204210 . get_value ( S3ConfigKey :: Bucket )
205- . ok_or ( ConfigError :: required ( "aws bucket must be specified." ) ) ?,
211+ . ok_or_else ( || ConfigError :: required ( "aws bucket must be specified." ) ) ?,
206212 ) ;
207213
208214 if let Some ( endpoint) = config. get_value ( S3ConfigKey :: Endpoint ) {
0 commit comments