Skip to main content

rustack_dynamodb_model/
input.rs

1//! DynamoDB input types for the 12 MVP operations.
2//!
3//! All input structs use `PascalCase` JSON field naming to match the DynamoDB
4//! wire protocol (`awsJson1_0`). Optional fields are omitted when `None`,
5//! empty `HashMap`s and `Vec`s are omitted to produce minimal JSON payloads.
6
7use std::collections::HashMap;
8
9use serde::{Deserialize, Serialize};
10
11use crate::{
12    attribute_value::AttributeValue,
13    types::{
14        AttributeDefinition, AttributeValueUpdate, BillingMode, Condition, ConditionalOperator,
15        ExpectedAttributeValue, GlobalSecondaryIndex, KeySchemaElement, KeysAndAttributes,
16        LocalSecondaryIndex, ProvisionedThroughput, ReturnConsumedCapacity,
17        ReturnItemCollectionMetrics, ReturnValue, SSESpecification, Select, StreamSpecification,
18        Tag, TimeToLiveSpecification, TransactGetItem, TransactWriteItem, WriteRequest,
19    },
20};
21
22// ---------------------------------------------------------------------------
23// Table management
24// ---------------------------------------------------------------------------
25
26/// Input for the `CreateTable` operation.
27#[derive(Debug, Clone, Default, Serialize, Deserialize)]
28#[serde(rename_all = "PascalCase")]
29pub struct CreateTableInput {
30    /// The name of the table to create.
31    pub table_name: String,
32
33    /// The key schema for the table (partition key and optional sort key).
34    pub key_schema: Vec<KeySchemaElement>,
35
36    /// The attribute definitions for the key schema and index key attributes.
37    #[serde(default)]
38    pub attribute_definitions: Vec<AttributeDefinition>,
39
40    /// The billing mode for the table (`PROVISIONED` or `PAY_PER_REQUEST`).
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub billing_mode: Option<BillingMode>,
43
44    /// The provisioned throughput settings (required when billing mode is `PROVISIONED`).
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub provisioned_throughput: Option<ProvisionedThroughput>,
47
48    /// Global secondary indexes to create on the table.
49    #[serde(default, skip_serializing_if = "Vec::is_empty")]
50    pub global_secondary_indexes: Vec<GlobalSecondaryIndex>,
51
52    /// Local secondary indexes to create on the table.
53    #[serde(default, skip_serializing_if = "Vec::is_empty")]
54    pub local_secondary_indexes: Vec<LocalSecondaryIndex>,
55
56    /// The stream specification for the table.
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub stream_specification: Option<StreamSpecification>,
59
60    /// The server-side encryption specification.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub sse_specification: Option<SSESpecification>,
63
64    /// Tags to associate with the table.
65    #[serde(default, skip_serializing_if = "Vec::is_empty")]
66    pub tags: Vec<Tag>,
67}
68
69/// Input for the `DeleteTable` operation.
70#[derive(Debug, Clone, Default, Serialize, Deserialize)]
71#[serde(rename_all = "PascalCase")]
72pub struct DeleteTableInput {
73    /// The name of the table to delete.
74    pub table_name: String,
75}
76
77/// Input for the `UpdateTable` operation.
78#[derive(Debug, Clone, Default, Serialize, Deserialize)]
79#[serde(rename_all = "PascalCase")]
80pub struct UpdateTableInput {
81    /// The name of the table to update.
82    pub table_name: String,
83
84    /// The new billing mode for the table.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub billing_mode: Option<BillingMode>,
87
88    /// The new provisioned throughput settings.
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub provisioned_throughput: Option<ProvisionedThroughput>,
91
92    /// New attribute definitions (for GSI changes).
93    #[serde(default, skip_serializing_if = "Vec::is_empty")]
94    pub attribute_definitions: Vec<AttributeDefinition>,
95}
96
97/// Input for the `DescribeTable` operation.
98#[derive(Debug, Clone, Default, Serialize, Deserialize)]
99#[serde(rename_all = "PascalCase")]
100pub struct DescribeTableInput {
101    /// The name of the table to describe.
102    pub table_name: String,
103}
104
105/// Input for the `ListTables` operation.
106#[derive(Debug, Clone, Default, Serialize, Deserialize)]
107#[serde(rename_all = "PascalCase")]
108pub struct ListTablesInput {
109    /// The name of the table that starts the list. Use the value returned in
110    /// `LastEvaluatedTableName` from a previous request to continue pagination.
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub exclusive_start_table_name: Option<String>,
113
114    /// The maximum number of table names to return (1--100).
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub limit: Option<i32>,
117}
118
119// ---------------------------------------------------------------------------
120// Item CRUD
121// ---------------------------------------------------------------------------
122
123/// Input for the `PutItem` operation.
124#[derive(Debug, Clone, Default, Serialize, Deserialize)]
125#[serde(rename_all = "PascalCase")]
126pub struct PutItemInput {
127    /// The name of the table to put the item into.
128    pub table_name: String,
129
130    /// A map of attribute name to attribute value, representing the item.
131    pub item: HashMap<String, AttributeValue>,
132
133    /// A condition that must be satisfied for the put to succeed.
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub condition_expression: Option<String>,
136
137    /// Substitution tokens for attribute names in an expression.
138    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
139    pub expression_attribute_names: HashMap<String, String>,
140
141    /// Substitution tokens for attribute values in an expression.
142    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
143    pub expression_attribute_values: HashMap<String, AttributeValue>,
144
145    /// Determines the attributes to return after the operation.
146    #[serde(skip_serializing_if = "Option::is_none")]
147    pub return_values: Option<ReturnValue>,
148
149    /// Determines the level of detail about provisioned throughput consumption.
150    #[serde(skip_serializing_if = "Option::is_none")]
151    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
152
153    /// Determines whether item collection metrics are returned.
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub return_item_collection_metrics: Option<ReturnItemCollectionMetrics>,
156
157    /// Legacy: expected conditions for conditional writes.
158    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
159    pub expected: HashMap<String, ExpectedAttributeValue>,
160
161    /// Legacy: logical operator for combining multiple expected conditions.
162    #[serde(skip_serializing_if = "Option::is_none")]
163    pub conditional_operator: Option<ConditionalOperator>,
164
165    /// Determines whether to return the item attributes on a failed condition check.
166    /// Valid values: `NONE`, `ALL_OLD`.
167    #[serde(skip_serializing_if = "Option::is_none")]
168    pub return_values_on_condition_check_failure: Option<String>,
169}
170
171/// Input for the `GetItem` operation.
172#[derive(Debug, Clone, Default, Serialize, Deserialize)]
173#[serde(rename_all = "PascalCase")]
174pub struct GetItemInput {
175    /// The name of the table containing the item.
176    pub table_name: String,
177
178    /// A map of attribute names to `AttributeValue` objects representing the
179    /// primary key of the item to retrieve.
180    pub key: HashMap<String, AttributeValue>,
181
182    /// If `true`, a strongly consistent read is used; otherwise, an eventually
183    /// consistent read is used.
184    #[serde(skip_serializing_if = "Option::is_none")]
185    pub consistent_read: Option<bool>,
186
187    /// A string that identifies the attributes to retrieve from the table.
188    #[serde(skip_serializing_if = "Option::is_none")]
189    pub projection_expression: Option<String>,
190
191    /// Substitution tokens for attribute names in an expression.
192    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
193    pub expression_attribute_names: HashMap<String, String>,
194
195    /// Determines the level of detail about provisioned throughput consumption.
196    #[serde(skip_serializing_if = "Option::is_none")]
197    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
198
199    /// Legacy: attribute names to retrieve (use `projection_expression` instead).
200    #[serde(default, skip_serializing_if = "Option::is_none")]
201    pub attributes_to_get: Option<Vec<String>>,
202}
203
204/// Input for the `UpdateItem` operation.
205#[derive(Debug, Clone, Default, Serialize, Deserialize)]
206#[serde(rename_all = "PascalCase")]
207pub struct UpdateItemInput {
208    /// The name of the table containing the item to update.
209    pub table_name: String,
210
211    /// The primary key of the item to be updated.
212    pub key: HashMap<String, AttributeValue>,
213
214    /// An expression that defines one or more attributes to be updated.
215    #[serde(skip_serializing_if = "Option::is_none")]
216    pub update_expression: Option<String>,
217
218    /// A condition that must be satisfied for the update to succeed.
219    #[serde(skip_serializing_if = "Option::is_none")]
220    pub condition_expression: Option<String>,
221
222    /// Substitution tokens for attribute names in an expression.
223    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
224    pub expression_attribute_names: HashMap<String, String>,
225
226    /// Substitution tokens for attribute values in an expression.
227    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
228    pub expression_attribute_values: HashMap<String, AttributeValue>,
229
230    /// Determines the attributes to return after the operation.
231    #[serde(skip_serializing_if = "Option::is_none")]
232    pub return_values: Option<ReturnValue>,
233
234    /// Determines the level of detail about provisioned throughput consumption.
235    #[serde(skip_serializing_if = "Option::is_none")]
236    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
237
238    /// Determines whether item collection metrics are returned.
239    #[serde(skip_serializing_if = "Option::is_none")]
240    pub return_item_collection_metrics: Option<ReturnItemCollectionMetrics>,
241
242    /// Legacy: attribute updates map (use `update_expression` instead).
243    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
244    pub attribute_updates: HashMap<String, AttributeValueUpdate>,
245
246    /// Legacy: expected conditions for conditional writes.
247    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
248    pub expected: HashMap<String, ExpectedAttributeValue>,
249
250    /// Legacy: logical operator for combining multiple expected conditions.
251    #[serde(skip_serializing_if = "Option::is_none")]
252    pub conditional_operator: Option<ConditionalOperator>,
253
254    /// Determines whether to return the item attributes on a failed condition check.
255    /// Valid values: `NONE`, `ALL_OLD`.
256    #[serde(skip_serializing_if = "Option::is_none")]
257    pub return_values_on_condition_check_failure: Option<String>,
258}
259
260/// Input for the `DeleteItem` operation.
261#[derive(Debug, Clone, Default, Serialize, Deserialize)]
262#[serde(rename_all = "PascalCase")]
263pub struct DeleteItemInput {
264    /// The name of the table from which to delete the item.
265    pub table_name: String,
266
267    /// A map of attribute names to `AttributeValue` objects representing the
268    /// primary key of the item to delete.
269    pub key: HashMap<String, AttributeValue>,
270
271    /// A condition that must be satisfied for the deletion to succeed.
272    #[serde(skip_serializing_if = "Option::is_none")]
273    pub condition_expression: Option<String>,
274
275    /// Substitution tokens for attribute names in an expression.
276    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
277    pub expression_attribute_names: HashMap<String, String>,
278
279    /// Substitution tokens for attribute values in an expression.
280    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
281    pub expression_attribute_values: HashMap<String, AttributeValue>,
282
283    /// Determines the attributes to return after the operation.
284    #[serde(skip_serializing_if = "Option::is_none")]
285    pub return_values: Option<ReturnValue>,
286
287    /// Determines the level of detail about provisioned throughput consumption.
288    #[serde(skip_serializing_if = "Option::is_none")]
289    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
290
291    /// Determines whether item collection metrics are returned.
292    #[serde(skip_serializing_if = "Option::is_none")]
293    pub return_item_collection_metrics: Option<ReturnItemCollectionMetrics>,
294
295    /// Legacy: expected conditions for conditional writes.
296    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
297    pub expected: HashMap<String, ExpectedAttributeValue>,
298
299    /// Legacy: logical operator for combining multiple expected conditions.
300    #[serde(skip_serializing_if = "Option::is_none")]
301    pub conditional_operator: Option<ConditionalOperator>,
302
303    /// Determines whether to return the item attributes on a failed condition check.
304    /// Valid values: `NONE`, `ALL_OLD`.
305    #[serde(skip_serializing_if = "Option::is_none")]
306    pub return_values_on_condition_check_failure: Option<String>,
307}
308
309// ---------------------------------------------------------------------------
310// Query & Scan
311// ---------------------------------------------------------------------------
312
313/// Input for the `Query` operation.
314#[derive(Debug, Clone, Default, Serialize, Deserialize)]
315#[serde(rename_all = "PascalCase")]
316pub struct QueryInput {
317    /// The name of the table to query.
318    pub table_name: String,
319
320    /// The name of a secondary index to query.
321    #[serde(skip_serializing_if = "Option::is_none")]
322    pub index_name: Option<String>,
323
324    /// The condition that specifies the key values for items to be retrieved.
325    #[serde(skip_serializing_if = "Option::is_none")]
326    pub key_condition_expression: Option<String>,
327
328    /// A string that contains conditions for filtering the query results.
329    #[serde(skip_serializing_if = "Option::is_none")]
330    pub filter_expression: Option<String>,
331
332    /// A string that identifies the attributes to retrieve from the table.
333    #[serde(skip_serializing_if = "Option::is_none")]
334    pub projection_expression: Option<String>,
335
336    /// Substitution tokens for attribute names in an expression.
337    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
338    pub expression_attribute_names: HashMap<String, String>,
339
340    /// Substitution tokens for attribute values in an expression.
341    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
342    pub expression_attribute_values: HashMap<String, AttributeValue>,
343
344    /// Specifies the order of index traversal. `true` (default) for ascending,
345    /// `false` for descending.
346    #[serde(skip_serializing_if = "Option::is_none")]
347    pub scan_index_forward: Option<bool>,
348
349    /// The maximum number of items to evaluate (not necessarily the number of
350    /// matching items).
351    #[serde(skip_serializing_if = "Option::is_none")]
352    pub limit: Option<i32>,
353
354    /// The primary key of the first item that this operation will evaluate.
355    /// Used for pagination.
356    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
357    pub exclusive_start_key: HashMap<String, AttributeValue>,
358
359    /// The attributes to be returned in the result.
360    #[serde(skip_serializing_if = "Option::is_none")]
361    pub select: Option<Select>,
362
363    /// If `true`, a strongly consistent read is used.
364    #[serde(skip_serializing_if = "Option::is_none")]
365    pub consistent_read: Option<bool>,
366
367    /// Determines the level of detail about provisioned throughput consumption.
368    #[serde(skip_serializing_if = "Option::is_none")]
369    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
370
371    /// Legacy: key conditions (use `key_condition_expression` instead).
372    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
373    pub key_conditions: HashMap<String, Condition>,
374
375    /// Legacy: query filter (use `filter_expression` instead).
376    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
377    pub query_filter: HashMap<String, Condition>,
378
379    /// Legacy: attribute names to retrieve (use `projection_expression` instead).
380    #[serde(default, skip_serializing_if = "Option::is_none")]
381    pub attributes_to_get: Option<Vec<String>>,
382
383    /// Legacy: logical operator for combining multiple query filter conditions.
384    #[serde(skip_serializing_if = "Option::is_none")]
385    pub conditional_operator: Option<ConditionalOperator>,
386}
387
388/// Input for the `Scan` operation.
389#[derive(Debug, Clone, Default, Serialize, Deserialize)]
390#[serde(rename_all = "PascalCase")]
391pub struct ScanInput {
392    /// The name of the table to scan.
393    pub table_name: String,
394
395    /// The name of a secondary index to scan.
396    #[serde(skip_serializing_if = "Option::is_none")]
397    pub index_name: Option<String>,
398
399    /// A string that contains conditions for filtering the scan results.
400    #[serde(skip_serializing_if = "Option::is_none")]
401    pub filter_expression: Option<String>,
402
403    /// A string that identifies the attributes to retrieve from the table.
404    #[serde(skip_serializing_if = "Option::is_none")]
405    pub projection_expression: Option<String>,
406
407    /// Substitution tokens for attribute names in an expression.
408    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
409    pub expression_attribute_names: HashMap<String, String>,
410
411    /// Substitution tokens for attribute values in an expression.
412    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
413    pub expression_attribute_values: HashMap<String, AttributeValue>,
414
415    /// The maximum number of items to evaluate.
416    #[serde(skip_serializing_if = "Option::is_none")]
417    pub limit: Option<i32>,
418
419    /// The primary key of the first item that this operation will evaluate.
420    /// Used for pagination.
421    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
422    pub exclusive_start_key: HashMap<String, AttributeValue>,
423
424    /// For a parallel `Scan` request, identifies an individual segment to be
425    /// scanned by an application worker.
426    #[serde(skip_serializing_if = "Option::is_none")]
427    pub segment: Option<i32>,
428
429    /// For a parallel `Scan` request, the total number of segments into which
430    /// the table is divided.
431    #[serde(skip_serializing_if = "Option::is_none")]
432    pub total_segments: Option<i32>,
433
434    /// The attributes to be returned in the result.
435    #[serde(skip_serializing_if = "Option::is_none")]
436    pub select: Option<Select>,
437
438    /// If `true`, a strongly consistent read is used.
439    #[serde(skip_serializing_if = "Option::is_none")]
440    pub consistent_read: Option<bool>,
441
442    /// Determines the level of detail about provisioned throughput consumption.
443    #[serde(skip_serializing_if = "Option::is_none")]
444    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
445
446    /// Legacy: scan filter (use `filter_expression` instead).
447    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
448    pub scan_filter: HashMap<String, Condition>,
449
450    /// Legacy: attribute names to retrieve (use `projection_expression` instead).
451    #[serde(default, skip_serializing_if = "Option::is_none")]
452    pub attributes_to_get: Option<Vec<String>>,
453
454    /// Legacy: logical operator for combining multiple scan filter conditions.
455    #[serde(skip_serializing_if = "Option::is_none")]
456    pub conditional_operator: Option<ConditionalOperator>,
457}
458
459// ---------------------------------------------------------------------------
460// Batch operations
461// ---------------------------------------------------------------------------
462
463/// Input for the `BatchGetItem` operation.
464#[derive(Debug, Clone, Default, Serialize, Deserialize)]
465#[serde(rename_all = "PascalCase")]
466pub struct BatchGetItemInput {
467    /// A map of one or more table names to the corresponding keys and
468    /// projection expressions to retrieve.
469    pub request_items: HashMap<String, KeysAndAttributes>,
470
471    /// Determines the level of detail about provisioned throughput consumption.
472    #[serde(skip_serializing_if = "Option::is_none")]
473    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
474}
475
476/// Input for the `BatchWriteItem` operation.
477#[derive(Debug, Clone, Default, Serialize, Deserialize)]
478#[serde(rename_all = "PascalCase")]
479pub struct BatchWriteItemInput {
480    /// A map of one or more table names to a list of `WriteRequest` objects
481    /// (put or delete operations).
482    pub request_items: HashMap<String, Vec<WriteRequest>>,
483
484    /// Determines the level of detail about provisioned throughput consumption.
485    #[serde(skip_serializing_if = "Option::is_none")]
486    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
487
488    /// Determines whether item collection metrics are returned.
489    #[serde(skip_serializing_if = "Option::is_none")]
490    pub return_item_collection_metrics: Option<ReturnItemCollectionMetrics>,
491}
492
493// ---------------------------------------------------------------------------
494// Tagging
495// ---------------------------------------------------------------------------
496
497/// Input for the `TagResource` operation.
498#[derive(Debug, Clone, Default, Serialize, Deserialize)]
499#[serde(rename_all = "PascalCase")]
500pub struct TagResourceInput {
501    /// The ARN of the resource to tag.
502    pub resource_arn: String,
503    /// The tags to add to the resource.
504    pub tags: Vec<Tag>,
505}
506
507/// Input for the `UntagResource` operation.
508#[derive(Debug, Clone, Default, Serialize, Deserialize)]
509#[serde(rename_all = "PascalCase")]
510pub struct UntagResourceInput {
511    /// The ARN of the resource to untag.
512    pub resource_arn: String,
513    /// The tag keys to remove.
514    pub tag_keys: Vec<String>,
515}
516
517/// Input for the `ListTagsOfResource` operation.
518#[derive(Debug, Clone, Default, Serialize, Deserialize)]
519#[serde(rename_all = "PascalCase")]
520pub struct ListTagsOfResourceInput {
521    /// The ARN of the resource.
522    pub resource_arn: String,
523    /// An optional pagination token.
524    #[serde(skip_serializing_if = "Option::is_none")]
525    pub next_token: Option<String>,
526}
527
528// ---------------------------------------------------------------------------
529// Time to Live
530// ---------------------------------------------------------------------------
531
532/// Input for the `UpdateTimeToLive` operation.
533#[derive(Debug, Clone, Serialize, Deserialize)]
534#[serde(rename_all = "PascalCase")]
535pub struct UpdateTimeToLiveInput {
536    /// The name of the table.
537    pub table_name: String,
538    /// The TTL specification to apply.
539    pub time_to_live_specification: TimeToLiveSpecification,
540}
541
542/// Input for the `DescribeTimeToLive` operation.
543#[derive(Debug, Clone, Default, Serialize, Deserialize)]
544#[serde(rename_all = "PascalCase")]
545pub struct DescribeTimeToLiveInput {
546    /// The name of the table.
547    pub table_name: String,
548}
549
550// ---------------------------------------------------------------------------
551// Transactions
552// ---------------------------------------------------------------------------
553
554/// Input for the `TransactWriteItems` operation.
555#[derive(Debug, Clone, Default, Serialize, Deserialize)]
556#[serde(rename_all = "PascalCase")]
557pub struct TransactWriteItemsInput {
558    /// The list of write actions to perform atomically.
559    pub transact_items: Vec<TransactWriteItem>,
560    /// Determines the level of detail about provisioned throughput consumption.
561    #[serde(skip_serializing_if = "Option::is_none")]
562    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
563    /// Determines whether item collection metrics are returned.
564    #[serde(skip_serializing_if = "Option::is_none")]
565    pub return_item_collection_metrics: Option<ReturnItemCollectionMetrics>,
566    /// An idempotency token for the transaction.
567    #[serde(skip_serializing_if = "Option::is_none")]
568    pub client_request_token: Option<String>,
569}
570
571/// Input for the `TransactGetItems` operation.
572#[derive(Debug, Clone, Default, Serialize, Deserialize)]
573#[serde(rename_all = "PascalCase")]
574pub struct TransactGetItemsInput {
575    /// The list of get actions to perform.
576    pub transact_items: Vec<TransactGetItem>,
577    /// Determines the level of detail about provisioned throughput consumption.
578    #[serde(skip_serializing_if = "Option::is_none")]
579    pub return_consumed_capacity: Option<ReturnConsumedCapacity>,
580}
581
582// ---------------------------------------------------------------------------
583// Describe operations
584// ---------------------------------------------------------------------------
585
586/// Input for the `DescribeLimits` operation (empty).
587#[derive(Debug, Clone, Default, Serialize, Deserialize)]
588#[serde(rename_all = "PascalCase")]
589pub struct DescribeLimitsInput {}
590
591/// Input for the `DescribeEndpoints` operation (empty).
592#[derive(Debug, Clone, Default, Serialize, Deserialize)]
593#[serde(rename_all = "PascalCase")]
594pub struct DescribeEndpointsInput {}