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