34 lines
654 B
Go
34 lines
654 B
Go
package errtranslator
|
|
|
|
import "encoding/json"
|
|
|
|
var mysqlErrCodes = map[string]int{
|
|
"uniqueConstraint": 1062,
|
|
}
|
|
|
|
type MysqlErrTranslator struct{}
|
|
|
|
type MysqlErr struct {
|
|
Number int `json:"Number"`
|
|
Message string `json:"Message"`
|
|
}
|
|
|
|
func (m *MysqlErrTranslator) Translate(err error) error {
|
|
parsedErr, marshalErr := json.Marshal(err)
|
|
if marshalErr != nil {
|
|
return err
|
|
}
|
|
|
|
var mysqlErr MysqlErr
|
|
unmarshalErr := json.Unmarshal(parsedErr, &mysqlErr)
|
|
if unmarshalErr != nil {
|
|
return err
|
|
}
|
|
|
|
if mysqlErr.Number == mysqlErrCodes["uniqueConstraint"] {
|
|
return ErrDuplicatedKey{Code: mysqlErr.Number, Message: mysqlErr.Message}
|
|
}
|
|
|
|
return err
|
|
}
|