package errorswrap import ( "errors" "fmt" ) type Errors struct { Code ErrorCode `json:"code"` Msg string `json:"msg"` } func (e *Errors) Error() string { return fmt.Sprintf("error code:%s,msg:%s", e.Code, e.Msg) } func NewError(code ErrorCode) error { return &Errors{Code: code} } type ErrorCode string const ( ErrorUnknown ErrorCode = "provider_unknown" ErrorProviderApiUrlInvalid ErrorCode = "provider_api_url_invalid" ErrorProviderApiKeyInvalid ErrorCode = "provider_api_key_invalid" ) func ErrorIsCode(err error, code ErrorCode) bool { var e *Errors if errors.As(err, &e) { return e.Code == code } return false } func GetErrorCode(err error) ErrorCode { var e *Errors if errors.As(err, &e) && e != nil { return e.Code } return ErrorUnknown }