telemetry_rust/middleware/aws/instrumentation/fluent_builder/
dynamodb.rs

1/// AWS DynamoDB fluent builder instrumentation implementations
2/// Generated by GitHub Copilot with human guidance
3use std::collections::HashSet;
4
5use super::{utils::*, *};
6use crate::semconv;
7
8impl<'a> AwsBuilderInstrument<'a> for GetItemFluentBuilder {
9    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
10        let table_name = self.get_table_name().clone().unwrap_or_default();
11        let attributes = attributes![
12            self.get_consistent_read()
13                .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
14            self.get_projection_expression()
15                .as_attribute(semconv::AWS_DYNAMODB_PROJECTION),
16        ];
17        DynamodbSpanBuilder::get_item(table_name).attributes(attributes)
18    }
19}
20impl InstrumentedFluentBuilderOutput for GetItemOutput {}
21instrument_aws_operation!(aws_sdk_dynamodb::operation::get_item);
22
23impl<'a> AwsBuilderInstrument<'a> for GetResourcePolicyFluentBuilder {
24    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
25        let table_name = self.get_resource_arn().clone().unwrap_or_default();
26        DynamodbSpanBuilder::get_resource_policy(table_name)
27    }
28}
29impl InstrumentedFluentBuilderOutput for GetResourcePolicyOutput {}
30instrument_aws_operation!(aws_sdk_dynamodb::operation::get_resource_policy);
31
32impl<'a> AwsBuilderInstrument<'a> for PutItemFluentBuilder {
33    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
34        let table_name = self.get_table_name().clone().unwrap_or_default();
35        DynamodbSpanBuilder::put_item(table_name)
36    }
37}
38impl InstrumentedFluentBuilderOutput for PutItemOutput {}
39instrument_aws_operation!(aws_sdk_dynamodb::operation::put_item);
40
41impl<'a> AwsBuilderInstrument<'a> for PutResourcePolicyFluentBuilder {
42    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
43        let table_name = self.get_resource_arn().clone().unwrap_or_default();
44        DynamodbSpanBuilder::put_resource_policy(table_name)
45    }
46}
47impl InstrumentedFluentBuilderOutput for PutResourcePolicyOutput {}
48instrument_aws_operation!(aws_sdk_dynamodb::operation::put_resource_policy);
49
50impl<'a> AwsBuilderInstrument<'a> for UpdateItemFluentBuilder {
51    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
52        let table_name = self.get_table_name().clone().unwrap_or_default();
53        DynamodbSpanBuilder::update_item(table_name)
54    }
55}
56impl InstrumentedFluentBuilderOutput for UpdateItemOutput {}
57instrument_aws_operation!(aws_sdk_dynamodb::operation::update_item);
58
59impl<'a> AwsBuilderInstrument<'a> for DeleteItemFluentBuilder {
60    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
61        let table_name = self.get_table_name().clone().unwrap_or_default();
62        DynamodbSpanBuilder::delete_item(table_name)
63    }
64}
65impl InstrumentedFluentBuilderOutput for DeleteItemOutput {}
66instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_item);
67
68impl<'a> AwsBuilderInstrument<'a> for DeleteResourcePolicyFluentBuilder {
69    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
70        let table_name = self.get_resource_arn().clone().unwrap_or_default();
71        DynamodbSpanBuilder::delete_resource_policy(table_name)
72    }
73}
74impl InstrumentedFluentBuilderOutput for DeleteResourcePolicyOutput {}
75instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_resource_policy);
76
77impl<'a> AwsBuilderInstrument<'a> for QueryFluentBuilder {
78    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
79        let table_name = self.get_table_name().clone().unwrap_or_default();
80        let attributes = attributes![
81            self.get_attributes_to_get()
82                .as_attribute(semconv::AWS_DYNAMODB_ATTRIBUTES_TO_GET),
83            self.get_consistent_read()
84                .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
85            self.get_index_name()
86                .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME),
87            self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
88            self.get_projection_expression()
89                .as_attribute(semconv::AWS_DYNAMODB_PROJECTION),
90            self.get_scan_index_forward()
91                .as_attribute(semconv::AWS_DYNAMODB_SCAN_FORWARD),
92            self.get_select().as_attribute(semconv::AWS_DYNAMODB_SELECT),
93        ];
94        DynamodbSpanBuilder::query(table_name).attributes(attributes)
95    }
96}
97impl InstrumentedFluentBuilderOutput for QueryOutput {
98    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
99        [
100            KeyValue::new(semconv::AWS_DYNAMODB_COUNT, self.count() as i64),
101            KeyValue::new(
102                semconv::AWS_DYNAMODB_SCANNED_COUNT,
103                self.scanned_count() as i64,
104            ),
105        ]
106    }
107}
108instrument_aws_operation!(aws_sdk_dynamodb::operation::query);
109
110impl<'a> AwsBuilderInstrument<'a> for ScanFluentBuilder {
111    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
112        let table_name = self.get_table_name().clone().unwrap_or_default();
113        let attributes = attributes![
114            self.get_attributes_to_get()
115                .as_attribute(semconv::AWS_DYNAMODB_ATTRIBUTES_TO_GET),
116            self.get_consistent_read()
117                .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
118            self.get_index_name()
119                .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME),
120            self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
121            self.get_projection_expression()
122                .as_attribute(semconv::AWS_DYNAMODB_PROJECTION),
123            self.get_select().as_attribute(semconv::AWS_DYNAMODB_SELECT),
124            self.get_segment()
125                .as_attribute(semconv::AWS_DYNAMODB_SEGMENT),
126            self.get_total_segments()
127                .as_attribute(semconv::AWS_DYNAMODB_TOTAL_SEGMENTS),
128        ];
129        DynamodbSpanBuilder::scan(table_name).attributes(attributes)
130    }
131}
132impl InstrumentedFluentBuilderOutput for ScanOutput {
133    fn extract_attributes(&self) -> impl IntoIterator<Item = KeyValue> {
134        [
135            KeyValue::new(semconv::AWS_DYNAMODB_COUNT, self.count() as i64),
136            KeyValue::new(
137                semconv::AWS_DYNAMODB_SCANNED_COUNT,
138                self.scanned_count() as i64,
139            ),
140        ]
141    }
142}
143instrument_aws_operation!(aws_sdk_dynamodb::operation::scan);
144
145impl<'a> AwsBuilderInstrument<'a> for BatchGetItemFluentBuilder {
146    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
147        let table_names = self
148            .get_request_items()
149            .iter()
150            .flat_map(|items| items.keys())
151            .map(ToOwned::to_owned);
152        let attributes = attributes![
153            self.get_request_items()
154                .as_ref()
155                .map(|items| items.len())
156                .as_attribute(semconv::DB_OPERATION_BATCH_SIZE)
157        ];
158        DynamodbSpanBuilder::batch_get_item(table_names).attributes(attributes)
159    }
160}
161impl InstrumentedFluentBuilderOutput for BatchGetItemOutput {}
162instrument_aws_operation!(aws_sdk_dynamodb::operation::batch_get_item);
163
164impl<'a> AwsBuilderInstrument<'a> for BatchWriteItemFluentBuilder {
165    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
166        let table_names = self
167            .get_request_items()
168            .iter()
169            .flat_map(|items| items.keys())
170            .map(ToOwned::to_owned);
171        let attributes = attributes![
172            self.get_request_items()
173                .as_ref()
174                .map(|items| items.len())
175                .as_attribute(semconv::DB_OPERATION_BATCH_SIZE)
176        ];
177        DynamodbSpanBuilder::batch_write_item(table_names).attributes(attributes)
178    }
179}
180impl InstrumentedFluentBuilderOutput for BatchWriteItemOutput {}
181instrument_aws_operation!(aws_sdk_dynamodb::operation::batch_write_item);
182
183impl<'a> AwsBuilderInstrument<'a> for TransactGetItemsFluentBuilder {
184    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
185        let table_names = self
186            .get_transact_items()
187            .iter()
188            .flatten()
189            .flat_map(|item| item.get().map(|op| op.table_name()))
190            .collect::<HashSet<_>>()
191            .into_iter()
192            .map(ToOwned::to_owned);
193        DynamodbSpanBuilder::transact_get_items(table_names)
194    }
195}
196impl InstrumentedFluentBuilderOutput for TransactGetItemsOutput {}
197instrument_aws_operation!(aws_sdk_dynamodb::operation::transact_get_items);
198
199impl<'a> AwsBuilderInstrument<'a> for TransactWriteItemsFluentBuilder {
200    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
201        let table_names = self
202            .get_transact_items()
203            .iter()
204            .flatten()
205            .flat_map(|item| {
206                [
207                    item.condition_check().map(|op| op.table_name()),
208                    item.put().map(|op| op.table_name()),
209                    item.delete().map(|op| op.table_name()),
210                    item.update().map(|op| op.table_name()),
211                ]
212            })
213            .flatten()
214            .collect::<HashSet<_>>()
215            .into_iter()
216            .map(ToOwned::to_owned);
217        DynamodbSpanBuilder::transact_write_items(table_names)
218    }
219}
220impl InstrumentedFluentBuilderOutput for TransactWriteItemsOutput {}
221instrument_aws_operation!(aws_sdk_dynamodb::operation::transact_write_items);
222
223// Table management operations
224impl<'a> AwsBuilderInstrument<'a> for CreateTableFluentBuilder {
225    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
226        let table_name = self.get_table_name().clone().unwrap_or_default();
227        let throughput = self.get_provisioned_throughput().as_ref();
228        let attributes = attributes![
229            throughput
230                .map(|pt| pt.read_capacity_units())
231                .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_READ_CAPACITY),
232            throughput
233                .map(|pt| pt.write_capacity_units())
234                .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY),
235        ];
236        DynamodbSpanBuilder::create_table(table_name).attributes(attributes)
237    }
238}
239impl InstrumentedFluentBuilderOutput for CreateTableOutput {}
240instrument_aws_operation!(aws_sdk_dynamodb::operation::create_table);
241
242impl<'a> AwsBuilderInstrument<'a> for DeleteTableFluentBuilder {
243    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
244        let table_name = self.get_table_name().clone().unwrap_or_default();
245        DynamodbSpanBuilder::delete_table(table_name)
246    }
247}
248impl InstrumentedFluentBuilderOutput for DeleteTableOutput {}
249instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_table);
250
251impl<'a> AwsBuilderInstrument<'a> for DescribeTableFluentBuilder {
252    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
253        let table_name = self.get_table_name().clone().unwrap_or_default();
254        DynamodbSpanBuilder::describe_table(table_name)
255    }
256}
257impl InstrumentedFluentBuilderOutput for DescribeTableOutput {}
258instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_table);
259
260impl<'a> AwsBuilderInstrument<'a> for UpdateTableFluentBuilder {
261    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
262        let table_name = self.get_table_name().clone().unwrap_or_default();
263        let throughput = self.get_provisioned_throughput().as_ref();
264        let attributes = attributes![
265            throughput
266                .map(|pt| pt.read_capacity_units())
267                .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_READ_CAPACITY),
268            throughput
269                .map(|pt| pt.write_capacity_units())
270                .as_attribute(semconv::AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY),
271        ];
272        DynamodbSpanBuilder::update_table(table_name).attributes(attributes)
273    }
274}
275impl InstrumentedFluentBuilderOutput for UpdateTableOutput {}
276instrument_aws_operation!(aws_sdk_dynamodb::operation::update_table);
277
278impl<'a> AwsBuilderInstrument<'a> for ListTablesFluentBuilder {
279    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
280        let attributes = attributes![
281            self.get_exclusive_start_table_name()
282                .as_attribute(semconv::AWS_DYNAMODB_EXCLUSIVE_START_TABLE),
283            self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
284        ];
285        DynamodbSpanBuilder::list_tables().attributes(attributes)
286    }
287}
288impl InstrumentedFluentBuilderOutput for ListTablesOutput {}
289instrument_aws_operation!(aws_sdk_dynamodb::operation::list_tables);
290
291// Backup operations
292impl<'a> AwsBuilderInstrument<'a> for CreateBackupFluentBuilder {
293    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
294        let table_name = self.get_table_name().clone().unwrap_or_default();
295        DynamodbSpanBuilder::create_backup(table_name)
296    }
297}
298impl InstrumentedFluentBuilderOutput for CreateBackupOutput {}
299instrument_aws_operation!(aws_sdk_dynamodb::operation::create_backup);
300
301impl<'a> AwsBuilderInstrument<'a> for DeleteBackupFluentBuilder {
302    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
303        DynamodbSpanBuilder::delete_backup()
304    }
305}
306impl InstrumentedFluentBuilderOutput for DeleteBackupOutput {}
307instrument_aws_operation!(aws_sdk_dynamodb::operation::delete_backup);
308
309impl<'a> AwsBuilderInstrument<'a> for DescribeBackupFluentBuilder {
310    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
311        DynamodbSpanBuilder::describe_backup()
312    }
313}
314impl InstrumentedFluentBuilderOutput for DescribeBackupOutput {}
315instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_backup);
316
317impl<'a> AwsBuilderInstrument<'a> for ListBackupsFluentBuilder {
318    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
319        let table_name = self.get_table_name().clone().unwrap_or_default();
320        DynamodbSpanBuilder::list_backups(table_name)
321    }
322}
323impl InstrumentedFluentBuilderOutput for ListBackupsOutput {}
324instrument_aws_operation!(aws_sdk_dynamodb::operation::list_backups);
325
326impl<'a> AwsBuilderInstrument<'a> for RestoreTableFromBackupFluentBuilder {
327    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
328        let target_table_name = self.get_target_table_name().clone().unwrap_or_default();
329        DynamodbSpanBuilder::restore_table_from_backup(target_table_name)
330    }
331}
332impl InstrumentedFluentBuilderOutput for RestoreTableFromBackupOutput {}
333instrument_aws_operation!(aws_sdk_dynamodb::operation::restore_table_from_backup);
334
335impl<'a> AwsBuilderInstrument<'a> for RestoreTableToPointInTimeFluentBuilder {
336    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
337        let target_table_name = self.get_target_table_name().clone().unwrap_or_default();
338        DynamodbSpanBuilder::restore_table_to_point_in_time(target_table_name)
339    }
340}
341impl InstrumentedFluentBuilderOutput for RestoreTableToPointInTimeOutput {}
342instrument_aws_operation!(aws_sdk_dynamodb::operation::restore_table_to_point_in_time);
343
344// PartiQL operations
345impl<'a> AwsBuilderInstrument<'a> for ExecuteStatementFluentBuilder {
346    /// Table name are not automatically extracted from PartiQL statement
347    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
348        let attributes = attributes![
349            self.get_consistent_read()
350                .as_attribute(semconv::AWS_DYNAMODB_CONSISTENT_READ),
351            self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
352        ];
353        DynamodbSpanBuilder::execute_statement("").attributes(attributes)
354    }
355}
356impl InstrumentedFluentBuilderOutput for ExecuteStatementOutput {}
357instrument_aws_operation!(aws_sdk_dynamodb::operation::execute_statement);
358
359impl<'a> AwsBuilderInstrument<'a> for BatchExecuteStatementFluentBuilder {
360    /// Table names are not automatically extracted from PartiQL statement
361    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
362        DynamodbSpanBuilder::batch_execute_statement(None::<StringValue>)
363    }
364}
365impl InstrumentedFluentBuilderOutput for BatchExecuteStatementOutput {}
366instrument_aws_operation!(aws_sdk_dynamodb::operation::batch_execute_statement);
367
368impl<'a> AwsBuilderInstrument<'a> for ExecuteTransactionFluentBuilder {
369    /// Table names are not automatically extracted from PartiQL statement
370    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
371        DynamodbSpanBuilder::execute_transaction(None::<StringValue>)
372    }
373}
374impl InstrumentedFluentBuilderOutput for ExecuteTransactionOutput {}
375instrument_aws_operation!(aws_sdk_dynamodb::operation::execute_transaction);
376
377// Additional global operations
378impl<'a> AwsBuilderInstrument<'a> for DescribeEndpointsFluentBuilder {
379    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
380        DynamodbSpanBuilder::describe_endpoints()
381    }
382}
383impl InstrumentedFluentBuilderOutput for DescribeEndpointsOutput {}
384instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_endpoints);
385
386impl<'a> AwsBuilderInstrument<'a> for DescribeLimitsFluentBuilder {
387    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
388        DynamodbSpanBuilder::describe_limits()
389    }
390}
391impl InstrumentedFluentBuilderOutput for DescribeLimitsOutput {}
392instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_limits);
393
394impl<'a> AwsBuilderInstrument<'a> for ListGlobalTablesFluentBuilder {
395    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
396        let attributes = attributes![
397            self.get_exclusive_start_global_table_name()
398                .as_attribute(semconv::AWS_DYNAMODB_EXCLUSIVE_START_TABLE),
399            self.get_limit().as_attribute(semconv::AWS_DYNAMODB_LIMIT),
400            self.get_region_name().as_attribute(semconv::CLOUD_REGION),
401        ];
402        DynamodbSpanBuilder::list_global_tables().attributes(attributes)
403    }
404}
405impl InstrumentedFluentBuilderOutput for ListGlobalTablesOutput {}
406instrument_aws_operation!(aws_sdk_dynamodb::operation::list_global_tables);
407
408// Import/Export operations
409impl<'a> AwsBuilderInstrument<'a> for DescribeExportFluentBuilder {
410    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
411        DynamodbSpanBuilder::describe_export()
412    }
413}
414impl InstrumentedFluentBuilderOutput for DescribeExportOutput {}
415instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_export);
416
417impl<'a> AwsBuilderInstrument<'a> for DescribeImportFluentBuilder {
418    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
419        DynamodbSpanBuilder::describe_import()
420    }
421}
422impl InstrumentedFluentBuilderOutput for DescribeImportOutput {}
423instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_import);
424
425impl<'a> AwsBuilderInstrument<'a> for ImportTableFluentBuilder {
426    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
427        let table_name = self
428            .get_table_creation_parameters()
429            .as_ref()
430            .map(|p| p.table_name())
431            .map(ToOwned::to_owned)
432            .unwrap_or_default();
433        DynamodbSpanBuilder::import_table(table_name)
434    }
435}
436impl InstrumentedFluentBuilderOutput for ImportTableOutput {}
437instrument_aws_operation!(aws_sdk_dynamodb::operation::import_table);
438
439impl<'a> AwsBuilderInstrument<'a> for ExportTableToPointInTimeFluentBuilder {
440    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
441        let table_arn = self.get_table_arn().clone().unwrap_or_default();
442        DynamodbSpanBuilder::export_table_to_point_in_time(table_arn)
443    }
444}
445impl InstrumentedFluentBuilderOutput for ExportTableToPointInTimeOutput {}
446instrument_aws_operation!(aws_sdk_dynamodb::operation::export_table_to_point_in_time);
447
448impl<'a> AwsBuilderInstrument<'a> for ListExportsFluentBuilder {
449    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
450        let table_arn = self.get_table_arn().clone().unwrap_or_default();
451        let attributes = attributes![
452            self.get_max_results()
453                .as_attribute(semconv::AWS_DYNAMODB_LIMIT)
454        ];
455        DynamodbSpanBuilder::list_exports(table_arn).attributes(attributes)
456    }
457}
458impl InstrumentedFluentBuilderOutput for ListExportsOutput {}
459instrument_aws_operation!(aws_sdk_dynamodb::operation::list_exports);
460
461impl<'a> AwsBuilderInstrument<'a> for ListImportsFluentBuilder {
462    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
463        let table_arn = self.get_table_arn().clone().unwrap_or_default();
464        let attributes = attributes![
465            self.get_page_size()
466                .as_attribute(semconv::AWS_DYNAMODB_LIMIT)
467        ];
468        DynamodbSpanBuilder::list_imports(table_arn).attributes(attributes)
469    }
470}
471impl InstrumentedFluentBuilderOutput for ListImportsOutput {}
472instrument_aws_operation!(aws_sdk_dynamodb::operation::list_imports);
473
474// Global table operations
475impl<'a> AwsBuilderInstrument<'a> for CreateGlobalTableFluentBuilder {
476    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
477        let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
478        DynamodbSpanBuilder::create_global_table(global_table_name)
479    }
480}
481impl InstrumentedFluentBuilderOutput for CreateGlobalTableOutput {}
482instrument_aws_operation!(aws_sdk_dynamodb::operation::create_global_table);
483
484impl<'a> AwsBuilderInstrument<'a> for DescribeGlobalTableFluentBuilder {
485    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
486        let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
487        DynamodbSpanBuilder::describe_global_table(global_table_name)
488    }
489}
490impl InstrumentedFluentBuilderOutput for DescribeGlobalTableOutput {}
491instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_global_table);
492
493impl<'a> AwsBuilderInstrument<'a> for DescribeGlobalTableSettingsFluentBuilder {
494    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
495        let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
496        DynamodbSpanBuilder::describe_global_table_settings(global_table_name)
497    }
498}
499impl InstrumentedFluentBuilderOutput for DescribeGlobalTableSettingsOutput {}
500instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_global_table_settings);
501
502impl<'a> AwsBuilderInstrument<'a> for UpdateGlobalTableFluentBuilder {
503    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
504        let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
505        DynamodbSpanBuilder::update_global_table(global_table_name)
506    }
507}
508impl InstrumentedFluentBuilderOutput for UpdateGlobalTableOutput {}
509instrument_aws_operation!(aws_sdk_dynamodb::operation::update_global_table);
510
511impl<'a> AwsBuilderInstrument<'a> for UpdateGlobalTableSettingsFluentBuilder {
512    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
513        let global_table_name = self.get_global_table_name().clone().unwrap_or_default();
514        DynamodbSpanBuilder::update_global_table_settings(global_table_name)
515    }
516}
517impl InstrumentedFluentBuilderOutput for UpdateGlobalTableSettingsOutput {}
518instrument_aws_operation!(aws_sdk_dynamodb::operation::update_global_table_settings);
519
520// Additional table management operations
521impl<'a> AwsBuilderInstrument<'a> for DescribeContinuousBackupsFluentBuilder {
522    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
523        let table_name = self.get_table_name().clone().unwrap_or_default();
524        DynamodbSpanBuilder::describe_continuous_backups(table_name)
525    }
526}
527impl InstrumentedFluentBuilderOutput for DescribeContinuousBackupsOutput {}
528instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_continuous_backups);
529
530impl<'a> AwsBuilderInstrument<'a> for UpdateContinuousBackupsFluentBuilder {
531    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
532        let table_name = self.get_table_name().clone().unwrap_or_default();
533        DynamodbSpanBuilder::update_continuous_backups(table_name)
534    }
535}
536impl InstrumentedFluentBuilderOutput for UpdateContinuousBackupsOutput {}
537instrument_aws_operation!(aws_sdk_dynamodb::operation::update_continuous_backups);
538
539impl<'a> AwsBuilderInstrument<'a> for DescribeTimeToLiveFluentBuilder {
540    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
541        let table_name = self.get_table_name().clone().unwrap_or_default();
542        DynamodbSpanBuilder::describe_time_to_live(table_name)
543    }
544}
545impl InstrumentedFluentBuilderOutput for DescribeTimeToLiveOutput {}
546instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_time_to_live);
547
548impl<'a> AwsBuilderInstrument<'a> for UpdateTimeToLiveFluentBuilder {
549    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
550        let table_name = self.get_table_name().clone().unwrap_or_default();
551        DynamodbSpanBuilder::update_time_to_live(table_name)
552    }
553}
554impl InstrumentedFluentBuilderOutput for UpdateTimeToLiveOutput {}
555instrument_aws_operation!(aws_sdk_dynamodb::operation::update_time_to_live);
556
557impl<'a> AwsBuilderInstrument<'a> for DescribeTableReplicaAutoScalingFluentBuilder {
558    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
559        let table_name = self.get_table_name().clone().unwrap_or_default();
560        DynamodbSpanBuilder::describe_table_replica_auto_scaling(table_name)
561    }
562}
563impl InstrumentedFluentBuilderOutput for DescribeTableReplicaAutoScalingOutput {}
564instrument_aws_operation!(
565    aws_sdk_dynamodb::operation::describe_table_replica_auto_scaling
566);
567
568impl<'a> AwsBuilderInstrument<'a> for UpdateTableReplicaAutoScalingFluentBuilder {
569    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
570        let table_name = self.get_table_name().clone().unwrap_or_default();
571        DynamodbSpanBuilder::update_table_replica_auto_scaling(table_name)
572    }
573}
574impl InstrumentedFluentBuilderOutput for UpdateTableReplicaAutoScalingOutput {}
575instrument_aws_operation!(aws_sdk_dynamodb::operation::update_table_replica_auto_scaling);
576
577// Kinesis streaming operations
578impl<'a> AwsBuilderInstrument<'a> for DescribeKinesisStreamingDestinationFluentBuilder {
579    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
580        let table_name = self.get_table_name().clone().unwrap_or_default();
581        DynamodbSpanBuilder::describe_kinesis_streaming_destination(table_name)
582    }
583}
584impl InstrumentedFluentBuilderOutput for DescribeKinesisStreamingDestinationOutput {}
585instrument_aws_operation!(
586    aws_sdk_dynamodb::operation::describe_kinesis_streaming_destination
587);
588
589impl<'a> AwsBuilderInstrument<'a> for EnableKinesisStreamingDestinationFluentBuilder {
590    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
591        let table_name = self.get_table_name().clone().unwrap_or_default();
592        DynamodbSpanBuilder::enable_kinesis_streaming_destination(table_name)
593    }
594}
595impl InstrumentedFluentBuilderOutput for EnableKinesisStreamingDestinationOutput {}
596instrument_aws_operation!(
597    aws_sdk_dynamodb::operation::enable_kinesis_streaming_destination
598);
599
600impl<'a> AwsBuilderInstrument<'a> for DisableKinesisStreamingDestinationFluentBuilder {
601    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
602        let table_name = self.get_table_name().clone().unwrap_or_default();
603        DynamodbSpanBuilder::disable_kinesis_streaming_destination(table_name)
604    }
605}
606impl InstrumentedFluentBuilderOutput for DisableKinesisStreamingDestinationOutput {}
607instrument_aws_operation!(
608    aws_sdk_dynamodb::operation::disable_kinesis_streaming_destination
609);
610
611impl<'a> AwsBuilderInstrument<'a> for UpdateKinesisStreamingDestinationFluentBuilder {
612    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
613        let table_name = self.get_table_name().clone().unwrap_or_default();
614        DynamodbSpanBuilder::update_kinesis_streaming_destination(table_name)
615    }
616}
617impl InstrumentedFluentBuilderOutput for UpdateKinesisStreamingDestinationOutput {}
618instrument_aws_operation!(
619    aws_sdk_dynamodb::operation::update_kinesis_streaming_destination
620);
621
622// Contributor insights operations
623impl<'a> AwsBuilderInstrument<'a> for DescribeContributorInsightsFluentBuilder {
624    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
625        let table_name = self.get_table_name().clone().unwrap_or_default();
626        let attributes = attributes![
627            self.get_index_name()
628                .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME)
629        ];
630        DynamodbSpanBuilder::describe_contributor_insights(table_name)
631            .attributes(attributes)
632    }
633}
634impl InstrumentedFluentBuilderOutput for DescribeContributorInsightsOutput {}
635instrument_aws_operation!(aws_sdk_dynamodb::operation::describe_contributor_insights);
636
637impl<'a> AwsBuilderInstrument<'a> for ListContributorInsightsFluentBuilder {
638    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
639        let table_name = self.get_table_name().clone().unwrap_or_default();
640        let attributes = attributes![
641            self.get_max_results()
642                .as_attribute(semconv::AWS_DYNAMODB_LIMIT)
643        ];
644        DynamodbSpanBuilder::list_contributor_insights(table_name).attributes(attributes)
645    }
646}
647impl InstrumentedFluentBuilderOutput for ListContributorInsightsOutput {}
648instrument_aws_operation!(aws_sdk_dynamodb::operation::list_contributor_insights);
649
650impl<'a> AwsBuilderInstrument<'a> for UpdateContributorInsightsFluentBuilder {
651    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
652        let table_name = self.get_table_name().clone().unwrap_or_default();
653        let attributes = attributes![
654            self.get_index_name()
655                .as_attribute(semconv::AWS_DYNAMODB_INDEX_NAME)
656        ];
657        DynamodbSpanBuilder::update_contributor_insights(table_name)
658            .attributes(attributes)
659    }
660}
661impl InstrumentedFluentBuilderOutput for UpdateContributorInsightsOutput {}
662instrument_aws_operation!(aws_sdk_dynamodb::operation::update_contributor_insights);
663
664// Resource tagging operations
665impl<'a> AwsBuilderInstrument<'a> for ListTagsOfResourceFluentBuilder {
666    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
667        let resource_arn = self.get_resource_arn().clone().unwrap_or_default();
668        DynamodbSpanBuilder::list_tags_of_resource(resource_arn)
669    }
670}
671impl InstrumentedFluentBuilderOutput for ListTagsOfResourceOutput {}
672instrument_aws_operation!(aws_sdk_dynamodb::operation::list_tags_of_resource);
673
674impl<'a> AwsBuilderInstrument<'a> for TagResourceFluentBuilder {
675    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
676        let resource_arn = self.get_resource_arn().clone().unwrap_or_default();
677        DynamodbSpanBuilder::tag_resource(resource_arn)
678    }
679}
680impl InstrumentedFluentBuilderOutput for TagResourceOutput {}
681instrument_aws_operation!(aws_sdk_dynamodb::operation::tag_resource);
682
683impl<'a> AwsBuilderInstrument<'a> for UntagResourceFluentBuilder {
684    fn build_aws_span(&self) -> AwsSpanBuilder<'a> {
685        let resource_arn = self.get_resource_arn().clone().unwrap_or_default();
686        DynamodbSpanBuilder::untag_resource(resource_arn)
687    }
688}
689impl InstrumentedFluentBuilderOutput for UntagResourceOutput {}
690instrument_aws_operation!(aws_sdk_dynamodb::operation::untag_resource);