aws_lite_rs/api/
secretsmanager.rs1use crate::{
8 AwsHttpClient, Result,
9 ops::secretsmanager::SecretsmanagerOps,
10 types::secretsmanager::{
11 DeleteSecretRequest, DeleteSecretResponse, ListSecretsRequest, ListSecretsResponse,
12 RotateSecretRequest, RotateSecretResponse,
13 },
14};
15
16pub struct SecretsmanagerClient<'a> {
18 ops: SecretsmanagerOps<'a>,
19}
20
21impl<'a> SecretsmanagerClient<'a> {
22 pub(crate) fn new(client: &'a AwsHttpClient) -> Self {
24 Self {
25 ops: SecretsmanagerOps::new(client),
26 }
27 }
28
29 pub async fn list_secrets(&self, body: &ListSecretsRequest) -> Result<ListSecretsResponse> {
31 self.ops.list_secrets(body).await
32 }
33
34 pub async fn delete_secret(&self, body: &DeleteSecretRequest) -> Result<DeleteSecretResponse> {
36 self.ops.delete_secret(body).await
37 }
38
39 pub async fn rotate_secret(&self, body: &RotateSecretRequest) -> Result<RotateSecretResponse> {
41 self.ops.rotate_secret(body).await
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[tokio::test]
50 async fn list_secrets_returns_secret_list() {
51 let mut mock = crate::MockClient::new();
52 mock.expect_post("/").returning_json(serde_json::json!({
53 "SecretList": [
54 {
55 "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-AbCd",
56 "Name": "my-secret",
57 "Description": "My test secret",
58 "RotationEnabled": false,
59 "CreatedDate": 1700000000.0,
60 "LastChangedDate": 1700001000.0
61 }
62 ],
63 "NextToken": null
64 }));
65 let client = crate::AwsHttpClient::from_mock(mock);
66 let result = client
67 .secretsmanager()
68 .list_secrets(&ListSecretsRequest::default())
69 .await
70 .unwrap();
71 assert_eq!(result.secret_list.len(), 1);
72 let entry = &result.secret_list[0];
73 assert_eq!(
74 entry.arn.as_deref(),
75 Some("arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-AbCd")
76 );
77 assert_eq!(entry.name.as_deref(), Some("my-secret"));
78 assert_eq!(entry.rotation_enabled, Some(false));
79 assert_eq!(entry.created_date, Some(1700000000.0));
80 }
81
82 #[tokio::test]
83 async fn delete_secret_returns_arn_and_name() {
84 let mut mock = crate::MockClient::new();
85 mock.expect_post("/").returning_json(serde_json::json!({
86 "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-AbCd",
87 "Name": "my-secret",
88 "DeletionDate": 1700086400.0
89 }));
90 let client = crate::AwsHttpClient::from_mock(mock);
91 let result = client
92 .secretsmanager()
93 .delete_secret(&DeleteSecretRequest {
94 secret_id: "my-secret".to_string(),
95 force_delete_without_recovery: Some(true),
96 ..Default::default()
97 })
98 .await
99 .unwrap();
100 assert_eq!(
101 result.arn.as_deref(),
102 Some("arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-AbCd")
103 );
104 assert_eq!(result.name.as_deref(), Some("my-secret"));
105 assert_eq!(result.deletion_date, Some(1700086400.0));
106 }
107
108 #[tokio::test]
109 async fn rotate_secret_returns_arn_and_version() {
110 let mut mock = crate::MockClient::new();
111 mock.expect_post("/").returning_json(serde_json::json!({
112 "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-AbCd",
113 "Name": "my-secret",
114 "VersionId": "abc-version-123"
115 }));
116 let client = crate::AwsHttpClient::from_mock(mock);
117 let result = client
118 .secretsmanager()
119 .rotate_secret(&RotateSecretRequest {
120 secret_id: "my-secret".to_string(),
121 ..Default::default()
122 })
123 .await
124 .unwrap();
125 assert_eq!(
126 result.arn.as_deref(),
127 Some("arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-AbCd")
128 );
129 assert_eq!(result.name.as_deref(), Some("my-secret"));
130 assert_eq!(result.version_id.as_deref(), Some("abc-version-123"));
131 }
132}