1use aws_sdk_dynamodb::{
2 error::SdkError,
3 operation::{
4 create_table::CreateTableError, delete_table::DeleteTableError,
5 describe_table::DescribeTableError,
6 },
7};
8use thiserror::Error;
9
10#[derive(Error, Debug)]
11pub enum DynamoToolsError {
12 #[error("Failed to read configuration file '{0}': {1}")]
13 ConfigRead(String, #[source] std::io::Error),
14
15 #[error("Failed to parse configuration file '{0}': {1}")]
16 ConfigParse(String, #[source] serde_yaml::Error),
17
18 #[error("Failed to build AWS SDK config: {0}")]
19 AwsSdkConfig(#[from] aws_sdk_dynamodb::error::BuildError),
20
21 #[error("Missing expected field in configuration or SDK response: {0}")]
22 MissingField(String),
23 #[error("AWS DynamoDB SDK error: {0}")]
24 DynamoDbSdk(#[from] aws_sdk_dynamodb::Error),
25
26 #[error("AWS SDK error during table creation: {0}")]
27 TableCreation(#[from] SdkError<CreateTableError>),
28
29 #[error("AWS SDK error during table deletion: {0}")]
30 TableDeletion(#[from] SdkError<DeleteTableError>),
31
32 #[error("AWS SDK error during table description: {0}")]
33 TableDescribe(#[from] SdkError<DescribeTableError>),
34
35 #[error("Failed to read seed data file '{0}': {1}")]
36 SeedFileRead(String, #[source] std::io::Error),
37
38 #[error("Failed to parse seed data JSON file '{0}': {1}")]
39 SeedJsonParse(String, #[source] serde_json::Error),
40
41 #[error("Failed to convert seed data item to DynamoDB format: {0}")]
42 SeedDynamoConversion(#[from] serde_dynamo::Error),
43
44 #[error("Failed to batch write seed data to table '{0}': {1}")]
45 SeedBatchWrite(
46 String,
47 SdkError<aws_sdk_dynamodb::operation::batch_write_item::BatchWriteItemError>,
48 ),
49
50 #[error("Internal error: {0}")]
51 Internal(String),
52}
53
54pub type Result<T> = std::result::Result<T, DynamoToolsError>;