1#![deny(warnings, unconditional_panic)]
5#![deny(nonstandard_style)]
6#![deny(clippy::all)]
7#![allow(unused)]
8#![allow(clippy::result_large_err)]
9
10use aws_sdk_dynamodb::{
11 config::{
12 interceptors::{BeforeSerializationInterceptorContextMut, FinalizerInterceptorContextMut},
13 ConfigBag, Intercept, RuntimeComponents,
14 },
15 error::BoxError,
16};
17use aws_smithy_runtime_api::client::interceptors::context::Input;
18use aws_smithy_types::config_bag::{Storable, StoreReplace};
19
20macro_rules! modify_request {
21 ($cfg:ident,$request:ident,$self:ident,$transform:ident) => {{
22 $cfg.interceptor_state()
24 .store_put(OriginalRequest(Input::erase($request.clone())));
25
26 let result = tokio::task::block_in_place(|| {
28 tokio::runtime::Handle::current().block_on(async {
29 $self
30 .client
31 .$transform()
32 .sdk_input($request.clone())
33 .send()
34 .await
35 })
36 });
37 match result {
38 Ok(x) => *$request = x.transformed_input.unwrap(),
39 Err(x) => {
40 let s = format!("{:?}", x);
41 return Err(s.into());
42 }
43 };
44 }};
45}
46
47macro_rules! modify_response {
48 ($cfg:ident,$type:ty,$response:ident,$self:ident,$transform:ident) => {{
49 let original = $cfg
51 .load::<OriginalRequest>()
52 .expect("we put this in ourselves");
53 let original = original
54 .0
55 .downcast_ref::<$type>()
56 .expect("we know this type corresponds to the output type");
57
58 let result = tokio::task::block_in_place(|| {
60 tokio::runtime::Handle::current().block_on(async {
61 $self
62 .client
63 .$transform()
64 .original_input(original.clone())
65 .sdk_output($response.clone())
66 .send()
67 .await
68 })
69 });
70 match result {
71 Ok(x) => *$response = x.transformed_output.unwrap(),
72 Err(x) => {
73 let s = format!("{:?}", x);
74 return Err(s.into());
75 }
76 };
77 }};
78}
79
80#[derive(Debug)]
81pub struct DbEsdkInterceptor {
82 client: crate::client::Client,
83}
84
85impl DbEsdkInterceptor {
86 pub fn new(
87 config: crate::types::dynamo_db_tables_encryption_config::DynamoDbTablesEncryptionConfig,
88 ) -> Result<Self, crate::types::error::Error> {
89 let client = crate::client::Client::from_conf(config)?;
90 Ok(DbEsdkInterceptor { client })
91 }
92}
93
94unsafe impl Sync for DbEsdkInterceptor {}
95unsafe impl Send for DbEsdkInterceptor {}
96
97#[derive(Debug)]
98struct OriginalRequest(Input);
99
100impl Storable for OriginalRequest {
101 type Storer = StoreReplace<Self>;
102}
103
104impl Intercept for DbEsdkInterceptor {
105 fn name(&self) -> &'static str {
106 "DbEsdkInterceptor"
107 }
108
109 fn modify_before_serialization(
110 &self,
111 context: &mut BeforeSerializationInterceptorContextMut,
113 _rc: &RuntimeComponents,
114 cfg: &mut ConfigBag,
115 ) -> Result<(), BoxError> {
116 if let Some(batch_execute_statement_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::batch_execute_statement::BatchExecuteStatementInput>() {
117 modify_request!(cfg, batch_execute_statement_request, self, batch_execute_statement_input_transform);
118 } else if let Some(batch_get_item_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::batch_get_item::BatchGetItemInput>() {
119 modify_request!(cfg, batch_get_item_request, self, batch_get_item_input_transform);
120 } else if let Some(batch_write_item_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::batch_write_item::BatchWriteItemInput>() {
121 modify_request!(cfg, batch_write_item_request, self, batch_write_item_input_transform);
122 } else if let Some(delete_item_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::delete_item::DeleteItemInput>() {
123 modify_request!(cfg, delete_item_request, self, delete_item_input_transform);
124 } else if let Some(execute_statement_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::execute_statement::ExecuteStatementInput>() {
125 modify_request!(cfg, execute_statement_request, self, execute_statement_input_transform);
126 } else if let Some(execute_transaction_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::execute_transaction::ExecuteTransactionInput>() {
127 modify_request!(cfg, execute_transaction_request, self, execute_transaction_input_transform);
128 } else if let Some(get_item_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::get_item::GetItemInput>() {
129 modify_request!(cfg, get_item_request, self, get_item_input_transform);
130 } else if let Some(put_item_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::put_item::PutItemInput>() {
131 modify_request!(cfg, put_item_request, self, put_item_input_transform);
132 } else if let Some(query_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::query::QueryInput>() {
133 modify_request!(cfg, query_request, self, query_input_transform);
134 } else if let Some(scan_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::scan::ScanInput>() {
135 modify_request!(cfg, scan_request, self, scan_input_transform);
136 } else if let Some(transact_get_items_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::transact_get_items::TransactGetItemsInput>() {
137 modify_request!(cfg, transact_get_items_request, self, transact_get_items_input_transform);
138 } else if let Some(transact_write_items_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::transact_write_items::TransactWriteItemsInput>() {
139 modify_request!(cfg, transact_write_items_request, self, transact_write_items_input_transform);
140 } else if let Some(update_item_request) = context.input_mut().downcast_mut::<aws_sdk_dynamodb::operation::update_item::UpdateItemInput>() {
141 modify_request!(cfg, update_item_request, self, update_item_input_transform);
142 }
143 Ok(())
144 }
145
146 fn modify_before_attempt_completion(
147 &self,
148 context: &mut FinalizerInterceptorContextMut,
149 _rc: &RuntimeComponents,
150 cfg: &mut ConfigBag,
151 ) -> Result<(), BoxError> {
152 if let Some(Ok(output)) = context.output_or_error_mut() {
153 if let Some(batch_execute_statement_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::batch_execute_statement::BatchExecuteStatementOutput>() {
154 modify_response!(cfg, aws_sdk_dynamodb::operation::batch_execute_statement::BatchExecuteStatementInput, batch_execute_statement_response, self, batch_execute_statement_output_transform);
155 } else if let Some(batch_get_item_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::batch_get_item::BatchGetItemOutput>() {
156 modify_response!(cfg, aws_sdk_dynamodb::operation::batch_get_item::BatchGetItemInput, batch_get_item_response, self, batch_get_item_output_transform);
157 } else if let Some(batch_write_item_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::batch_write_item::BatchWriteItemOutput>() {
158 modify_response!(cfg, aws_sdk_dynamodb::operation::batch_write_item::BatchWriteItemInput, batch_write_item_response, self, batch_write_item_output_transform);
159 } else if let Some(delete_item_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::delete_item::DeleteItemOutput>() {
160 modify_response!(cfg, aws_sdk_dynamodb::operation::delete_item::DeleteItemInput, delete_item_response, self, delete_item_output_transform);
161 } else if let Some(execute_statement_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::execute_statement::ExecuteStatementOutput>() {
162 modify_response!(cfg, aws_sdk_dynamodb::operation::execute_statement::ExecuteStatementInput, execute_statement_response, self, execute_statement_output_transform);
163 } else if let Some(execute_transaction_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::execute_transaction::ExecuteTransactionOutput>() {
164 modify_response!(cfg, aws_sdk_dynamodb::operation::execute_transaction::ExecuteTransactionInput, execute_transaction_response, self, execute_transaction_output_transform);
165 } else if let Some(get_item_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::get_item::GetItemOutput>() {
166 modify_response!(cfg, aws_sdk_dynamodb::operation::get_item::GetItemInput, get_item_response, self, get_item_output_transform);
167 } else if let Some(put_item_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::put_item::PutItemOutput>() {
168 modify_response!(cfg, aws_sdk_dynamodb::operation::put_item::PutItemInput, put_item_response, self, put_item_output_transform);
169 } else if let Some(query_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::query::QueryOutput>() {
170 modify_response!(cfg, aws_sdk_dynamodb::operation::query::QueryInput, query_response, self, query_output_transform);
171 } else if let Some(scan_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::scan::ScanOutput>() {
172 modify_response!(cfg, aws_sdk_dynamodb::operation::scan::ScanInput, scan_response, self, scan_output_transform);
173 } else if let Some(transact_get_items_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::transact_get_items::TransactGetItemsOutput>() {
174 modify_response!(cfg, aws_sdk_dynamodb::operation::transact_get_items::TransactGetItemsInput, transact_get_items_response, self, transact_get_items_output_transform);
175 } else if let Some(transact_write_items_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::transact_write_items::TransactWriteItemsOutput>() {
176 modify_response!(cfg, aws_sdk_dynamodb::operation::transact_write_items::TransactWriteItemsInput, transact_write_items_response, self, transact_write_items_output_transform);
177 } else if let Some(update_item_response) = output.downcast_mut::<aws_sdk_dynamodb::operation::update_item::UpdateItemOutput>() {
178 modify_response!(cfg, aws_sdk_dynamodb::operation::update_item::UpdateItemInput, update_item_response, self, update_item_output_transform);
179 }
180 }
181 Ok(())
182 }
183}