1 /**
2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 * SPDX-License-Identifier: Apache-2.0.
4 */
5
6 #include <aws/core/client/AWSError.h>
7 #include <aws/core/utils/HashingUtils.h>
8 #include <aws/dynamodb/DynamoDBErrors.h>
9 #include <aws/dynamodb/model/TransactionCanceledException.h>
10
11 using namespace Aws::Client;
12 using namespace Aws::Utils;
13 using namespace Aws::DynamoDB;
14 using namespace Aws::DynamoDB::Model;
15
16 namespace Aws
17 {
18 namespace DynamoDB
19 {
GetModeledError()20 template<> AWS_DYNAMODB_API TransactionCanceledException DynamoDBError::GetModeledError()
21 {
22 assert(this->GetErrorType() == DynamoDBErrors::TRANSACTION_CANCELED);
23 return TransactionCanceledException(this->GetJsonPayload().View());
24 }
25
26 namespace DynamoDBErrorMapper
27 {
28
29 static const int CONDITIONAL_CHECK_FAILED_HASH = HashingUtils::HashString("ConditionalCheckFailedException");
30 static const int TRANSACTION_CANCELED_HASH = HashingUtils::HashString("TransactionCanceledException");
31 static const int LIMIT_EXCEEDED_HASH = HashingUtils::HashString("LimitExceededException");
32 static const int REPLICA_ALREADY_EXISTS_HASH = HashingUtils::HashString("ReplicaAlreadyExistsException");
33 static const int TRANSACTION_CONFLICT_HASH = HashingUtils::HashString("TransactionConflictException");
34 static const int REPLICA_NOT_FOUND_HASH = HashingUtils::HashString("ReplicaNotFoundException");
35 static const int TABLE_NOT_FOUND_HASH = HashingUtils::HashString("TableNotFoundException");
36 static const int EXPORT_NOT_FOUND_HASH = HashingUtils::HashString("ExportNotFoundException");
37 static const int TRANSACTION_IN_PROGRESS_HASH = HashingUtils::HashString("TransactionInProgressException");
38 static const int BACKUP_IN_USE_HASH = HashingUtils::HashString("BackupInUseException");
39 static const int CONTINUOUS_BACKUPS_UNAVAILABLE_HASH = HashingUtils::HashString("ContinuousBackupsUnavailableException");
40 static const int TABLE_IN_USE_HASH = HashingUtils::HashString("TableInUseException");
41 static const int PROVISIONED_THROUGHPUT_EXCEEDED_HASH = HashingUtils::HashString("ProvisionedThroughputExceededException");
42 static const int RESOURCE_IN_USE_HASH = HashingUtils::HashString("ResourceInUseException");
43 static const int INVALID_RESTORE_TIME_HASH = HashingUtils::HashString("InvalidRestoreTimeException");
44 static const int ITEM_COLLECTION_SIZE_LIMIT_EXCEEDED_HASH = HashingUtils::HashString("ItemCollectionSizeLimitExceededException");
45 static const int BACKUP_NOT_FOUND_HASH = HashingUtils::HashString("BackupNotFoundException");
46 static const int IDEMPOTENT_PARAMETER_MISMATCH_HASH = HashingUtils::HashString("IdempotentParameterMismatchException");
47 static const int POINT_IN_TIME_RECOVERY_UNAVAILABLE_HASH = HashingUtils::HashString("PointInTimeRecoveryUnavailableException");
48 static const int TABLE_ALREADY_EXISTS_HASH = HashingUtils::HashString("TableAlreadyExistsException");
49 static const int EXPORT_CONFLICT_HASH = HashingUtils::HashString("ExportConflictException");
50 static const int GLOBAL_TABLE_ALREADY_EXISTS_HASH = HashingUtils::HashString("GlobalTableAlreadyExistsException");
51 static const int INVALID_EXPORT_TIME_HASH = HashingUtils::HashString("InvalidExportTimeException");
52 static const int REQUEST_LIMIT_EXCEEDED_HASH = HashingUtils::HashString("RequestLimitExceeded");
53 static const int GLOBAL_TABLE_NOT_FOUND_HASH = HashingUtils::HashString("GlobalTableNotFoundException");
54 static const int DUPLICATE_ITEM_HASH = HashingUtils::HashString("DuplicateItemException");
55 static const int INDEX_NOT_FOUND_HASH = HashingUtils::HashString("IndexNotFoundException");
56
57
GetErrorForName(const char * errorName)58 AWSError<CoreErrors> GetErrorForName(const char* errorName)
59 {
60 int hashCode = HashingUtils::HashString(errorName);
61
62 if (hashCode == CONDITIONAL_CHECK_FAILED_HASH)
63 {
64 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::CONDITIONAL_CHECK_FAILED), false);
65 }
66 else if (hashCode == TRANSACTION_CANCELED_HASH)
67 {
68 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::TRANSACTION_CANCELED), false);
69 }
70 else if (hashCode == LIMIT_EXCEEDED_HASH)
71 {
72 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::LIMIT_EXCEEDED), true);
73 }
74 else if (hashCode == REPLICA_ALREADY_EXISTS_HASH)
75 {
76 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::REPLICA_ALREADY_EXISTS), false);
77 }
78 else if (hashCode == TRANSACTION_CONFLICT_HASH)
79 {
80 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::TRANSACTION_CONFLICT), false);
81 }
82 else if (hashCode == REPLICA_NOT_FOUND_HASH)
83 {
84 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::REPLICA_NOT_FOUND), false);
85 }
86 else if (hashCode == TABLE_NOT_FOUND_HASH)
87 {
88 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::TABLE_NOT_FOUND), false);
89 }
90 else if (hashCode == EXPORT_NOT_FOUND_HASH)
91 {
92 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::EXPORT_NOT_FOUND), false);
93 }
94 else if (hashCode == TRANSACTION_IN_PROGRESS_HASH)
95 {
96 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::TRANSACTION_IN_PROGRESS), true);
97 }
98 else if (hashCode == BACKUP_IN_USE_HASH)
99 {
100 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::BACKUP_IN_USE), false);
101 }
102 else if (hashCode == CONTINUOUS_BACKUPS_UNAVAILABLE_HASH)
103 {
104 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::CONTINUOUS_BACKUPS_UNAVAILABLE), false);
105 }
106 else if (hashCode == TABLE_IN_USE_HASH)
107 {
108 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::TABLE_IN_USE), false);
109 }
110 else if (hashCode == PROVISIONED_THROUGHPUT_EXCEEDED_HASH)
111 {
112 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::PROVISIONED_THROUGHPUT_EXCEEDED), true);
113 }
114 else if (hashCode == RESOURCE_IN_USE_HASH)
115 {
116 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::RESOURCE_IN_USE), true);
117 }
118 else if (hashCode == INVALID_RESTORE_TIME_HASH)
119 {
120 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::INVALID_RESTORE_TIME), false);
121 }
122 else if (hashCode == ITEM_COLLECTION_SIZE_LIMIT_EXCEEDED_HASH)
123 {
124 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::ITEM_COLLECTION_SIZE_LIMIT_EXCEEDED), false);
125 }
126 else if (hashCode == BACKUP_NOT_FOUND_HASH)
127 {
128 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::BACKUP_NOT_FOUND), false);
129 }
130 else if (hashCode == IDEMPOTENT_PARAMETER_MISMATCH_HASH)
131 {
132 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::IDEMPOTENT_PARAMETER_MISMATCH), false);
133 }
134 else if (hashCode == POINT_IN_TIME_RECOVERY_UNAVAILABLE_HASH)
135 {
136 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::POINT_IN_TIME_RECOVERY_UNAVAILABLE), false);
137 }
138 else if (hashCode == TABLE_ALREADY_EXISTS_HASH)
139 {
140 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::TABLE_ALREADY_EXISTS), false);
141 }
142 else if (hashCode == EXPORT_CONFLICT_HASH)
143 {
144 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::EXPORT_CONFLICT), false);
145 }
146 else if (hashCode == GLOBAL_TABLE_ALREADY_EXISTS_HASH)
147 {
148 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::GLOBAL_TABLE_ALREADY_EXISTS), false);
149 }
150 else if (hashCode == INVALID_EXPORT_TIME_HASH)
151 {
152 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::INVALID_EXPORT_TIME), false);
153 }
154 else if (hashCode == REQUEST_LIMIT_EXCEEDED_HASH)
155 {
156 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::REQUEST_LIMIT_EXCEEDED), true);
157 }
158 else if (hashCode == GLOBAL_TABLE_NOT_FOUND_HASH)
159 {
160 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::GLOBAL_TABLE_NOT_FOUND), false);
161 }
162 else if (hashCode == DUPLICATE_ITEM_HASH)
163 {
164 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::DUPLICATE_ITEM), false);
165 }
166 else if (hashCode == INDEX_NOT_FOUND_HASH)
167 {
168 return AWSError<CoreErrors>(static_cast<CoreErrors>(DynamoDBErrors::INDEX_NOT_FOUND), false);
169 }
170 return AWSError<CoreErrors>(CoreErrors::UNKNOWN, false);
171 }
172
173 } // namespace DynamoDBErrorMapper
174 } // namespace DynamoDB
175 } // namespace Aws
176