github.com/status-im/status-go@v1.1.0/errors/errors.go (about) 1 package errors 2 3 import ( 4 "encoding/json" 5 ) 6 7 // ErrorCode represents a specific error code. 8 type ErrorCode string 9 10 const GenericErrorCode ErrorCode = "0" 11 12 // ErrorResponse represents an error response structure. 13 type ErrorResponse struct { 14 Code ErrorCode `json:"code"` 15 Details string `json:"details,omitempty"` 16 } 17 18 // Error implements the error interface for ErrorResponse. 19 func (e *ErrorResponse) Error() string { 20 errorJSON, _ := json.Marshal(e) 21 return string(errorJSON) 22 } 23 24 // IsErrorResponse determines if an error is an ErrorResponse. 25 func IsErrorResponse(err error) bool { 26 _, ok := err.(*ErrorResponse) 27 return ok 28 } 29 30 // ErrorCodeFromError returns the ErrorCode from an error. 31 func ErrorCodeFromError(err error) ErrorCode { 32 if err == nil { 33 return GenericErrorCode 34 } 35 if errResp, ok := err.(*ErrorResponse); ok { 36 return errResp.Code 37 } 38 return GenericErrorCode 39 } 40 41 // DetailsFromError returns the details from an error. 42 func DetailsFromError(err error) string { 43 if err == nil { 44 return "" 45 } 46 if errResp, ok := err.(*ErrorResponse); ok { 47 return errResp.Details 48 } 49 return err.Error() 50 } 51 52 // CreateErrorResponseFromError creates an ErrorResponse from a generic error. 53 func CreateErrorResponseFromError(err error) error { 54 if err == nil { 55 return nil 56 } 57 if errResp, ok := err.(*ErrorResponse); ok { 58 return errResp 59 } 60 return &ErrorResponse{ 61 Code: GenericErrorCode, 62 Details: err.Error(), 63 } 64 }