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  }