-
Notifications
You must be signed in to change notification settings - Fork 0
/
error.go
77 lines (67 loc) · 2.33 KB
/
error.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package dygo
import (
"fmt"
"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
"github.com/pkg/errors"
)
type dError struct {
Function string
ErrorMessage error
}
const (
errDygoError = "DygoError"
errMissingTableName = "table name is missing"
errMissingPartitionKey = "partition key is missing"
errMissingRegion = "region is missing"
errMissingClient = "something went wrong while creating the client"
)
// Error returns the error message associated with the Error struct.
// It formats the error message with the error type, method name, and error message.
func (e *dError) Error() string {
return fmt.Sprintf("%s:: method : %s() message: %s", errDygoError, e.Function, e.ErrorMessage)
}
// DynamoError returns a new instance of Error.
func dynamoError() *dError {
return &dError{}
}
// Method sets the function name associated with the error.
func (e *dError) method(method string) *dError {
e.Function = method
return e
}
// Message sets the error message for the Error instance.
func (e *dError) message(msg string) *dError {
e.ErrorMessage = errors.New(msg)
return e
}
// getDynamoDBError returns a custom error based on the type of error encountered in DynamoDB operations.
func getDynamoDBError(method string, err error) error {
method = fmt.Sprintf("%s()", method)
var cce *types.ConditionalCheckFailedException
var dce *types.DuplicateItemException
var infe *types.IndexNotFoundException
var ise *types.InternalServerError
var rnfe *types.ResourceNotFoundException
var tnfe *types.TableNotFoundException
switch {
case errors.As(err, &cce):
if method == "Delete()" {
return dynamoError().method(method).message("key doesnt exist")
}
if method == "Create()" {
return dynamoError().method(method).message("duplicate item")
}
return dynamoError().method(method).message("key doesnt exist")
case errors.As(err, &dce):
return dynamoError().method(method).message("duplicate item")
case errors.As(err, &infe):
return dynamoError().method(method).message("index doesnt exist")
case errors.As(err, &ise):
return dynamoError().method(method).message("internal server error")
case errors.As(err, &rnfe):
return dynamoError().method(method).message("table/index doesnt exist")
case errors.As(err, &tnfe):
return dynamoError().method(method).message("table doesnt exist")
}
return nil
}