@@ -6,7 +6,10 @@ use crate::error::Error::{ParseError, SecretsManagerError};
6
6
use crate :: error:: Result ;
7
7
use aws_credential_types:: provider:: ProvideCredentials ;
8
8
use aws_credential_types:: { provider, Credentials } ;
9
+ use aws_sdk_s3:: error:: SdkError ;
9
10
use aws_sdk_secretsmanager as secretsmanager;
11
+ use aws_sdk_secretsmanager:: error:: DisplayErrorContext ;
12
+ use aws_sdk_secretsmanager:: operation:: get_secret_value:: GetSecretValueError ;
10
13
use aws_secretsmanager_caching:: output:: GetSecretValueOutputDef ;
11
14
use aws_secretsmanager_caching:: SecretsManagerCachingClient ;
12
15
use base64:: prelude:: Engine ;
@@ -38,7 +41,7 @@ impl Client {
38
41
secretsmanager:: config:: Builder :: from ( & config) ,
39
42
NonZeroUsize :: new ( 1 ) . expect ( "valid non-zero usize" ) ,
40
43
Duration :: from_secs ( 900 ) ,
41
- false ,
44
+ true ,
42
45
)
43
46
. await
44
47
. map_err ( |err| SecretsManagerError ( err. to_string ( ) ) ) ?;
@@ -89,10 +92,16 @@ impl ProvideCredentials for SecretsManagerCredentials {
89
92
impl SecretsManagerCredentials {
90
93
/// Construct the credentials from the secret.
91
94
pub async fn new ( id : & str , client : & Client ) -> Result < Self > {
92
- let secret = client
93
- . get_secret ( id)
94
- . await
95
- . map_err ( |err| SecretsManagerError ( format ! ( "no valid secret {}: {}" , id, err) ) ) ?;
95
+ let secret = client. get_secret ( id) . await . map_err ( |err| {
96
+ let sdk_err: Option < & SdkError < GetSecretValueError > > = err. downcast_ref ( ) ;
97
+ let display_err = if let Some ( err) = sdk_err {
98
+ DisplayErrorContext ( & err) . to_string ( )
99
+ } else {
100
+ err. to_string ( )
101
+ } ;
102
+
103
+ SecretsManagerError ( format ! ( "no valid secret {}: {}" , id, display_err) )
104
+ } ) ?;
96
105
97
106
let secret = if let Some ( string) = secret. secret_string {
98
107
from_str ( & string) ?
0 commit comments