errcode

package
v1.1.21 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2024 License: MIT Imports: 10 Imported by: 0

README

errcode

Error codes usually include system-level error codes and business-level error codes, consisting of a total of 5 decimal digits, e.g. 20101

First digit Middle two digits Last two digits
For http error codes, 2 indicates a business-level error (1 is a system-level error) Service Module Code Specific error codes
For grpc error codes, 4 indicates a business-level error (3 is a system-level error) Service Module Code Specific error codes
  • Error levels occupy one digit: 1 (http) and 3 (grpc) indicate system-level errors, 2 (http) and 4 (grpc) indicate business-level errors, usually caused by illegal user operations.
  • Double-digit service modules: A large system usually has no more than two service modules; if it exceeds that, it's time to split the system.
  • Error codes take up two digits: prevents a module from being customised with too many error codes, which are not well maintained later.

Example of use

Example of http error code usage

    import "github.com/18721889353/sunshine/pkg/errcode"

    // defining error codes
    var ErrLogin = errcode.NewError(20101, "incorrect username or password")

    // return error
    response.Error(c, errcode.LoginErr)

Example of grpc error code usage

    import "github.com/18721889353/sunshine/pkg/errcode"

    // defining error codes
    var ErrLogin = errcode.NewRPCStatus(40101, "incorrect username or password")

    // return error
    errcode.ErrLogin.Err()
    // return with error details
    errcode.ErrLogin.Err(errcode.Any("err", err))

Documentation

Overview

Package errcode is used for http and grpc error codes, include system-level error codes and business-level error codes

Index

Constants

View Source
const ToHTTPCodeLabel = "[standard http code]"

ToHTTPCodeLabel need to convert to standard http code label

Variables

View Source
var (
	Success             = NewError(0, "ok")
	InvalidParams       = NewError(10001, "Invalid Parameter")
	Unauthorized        = NewError(10002, "Unauthorized")
	InternalServerError = NewError(10003, "Internal Server Error")
	NotFound            = NewError(10004, "Not Found")
	Timeout             = NewError(10006, "Request Timeout")
	TooManyRequests     = NewError(10007, "Too Many Requests")
	Forbidden           = NewError(10008, "Forbidden")
	LimitExceed         = NewError(10009, "Limit Exceed")
	DeadlineExceeded    = NewError(10010, "Deadline Exceeded")
	AccessDenied        = NewError(10011, "Access Denied")
	MethodNotAllowed    = NewError(10012, "Method Not Allowed")
	ServiceUnavailable  = NewError(10013, "Service Unavailable")

	Canceled           = NewError(10014, "Canceled")
	Unknown            = NewError(10015, "Unknown")
	PermissionDenied   = NewError(10016, "Permission Denied")
	ResourceExhausted  = NewError(10017, "Resource Exhausted")
	FailedPrecondition = NewError(10018, "Failed Precondition")
	Aborted            = NewError(10019, "Aborted")
	OutOfRange         = NewError(10020, "Out Of Range")
	Unimplemented      = NewError(10021, "Unimplemented")
	DataLoss           = NewError(10022, "Data Loss")

	StatusBadGateway = NewError(10023, "Bad Gateway")

	// Deprecated: use Conflict instead
	AlreadyExists = NewError(10005, "Already Exists")
	Conflict      = NewError(10409, "Conflict")
	TooEarly      = NewError(10425, "Too Early")
)

http system level error code, error code range 10000~20000

View Source
var (
	StatusSuccess = NewRPCStatus(0, "ok")

	StatusCanceled            = NewRPCStatus(30001, "Canceled")
	StatusUnknown             = NewRPCStatus(30002, "Unknown")
	StatusInvalidParams       = NewRPCStatus(30003, "Invalid Parameter")
	StatusDeadlineExceeded    = NewRPCStatus(30004, "Deadline Exceeded")
	StatusNotFound            = NewRPCStatus(30005, "Not Found")
	StatusAlreadyExists       = NewRPCStatus(30006, "Already Exists")
	StatusPermissionDenied    = NewRPCStatus(30007, "Permission Denied")
	StatusResourceExhausted   = NewRPCStatus(30008, "Resource Exhausted")
	StatusFailedPrecondition  = NewRPCStatus(30009, "Failed Precondition")
	StatusAborted             = NewRPCStatus(30010, "Aborted")
	StatusOutOfRange          = NewRPCStatus(30011, "Out Of Range")
	StatusUnimplemented       = NewRPCStatus(30012, "Unimplemented")
	StatusInternalServerError = NewRPCStatus(30013, "Internal Server Error")
	StatusServiceUnavailable  = NewRPCStatus(30014, "Service Unavailable")
	StatusDataLoss            = NewRPCStatus(30015, "Data Loss")
	StatusUnauthorized        = NewRPCStatus(30016, "Unauthorized")

	StatusTimeout          = NewRPCStatus(30017, "Request Timeout")
	StatusTooManyRequests  = NewRPCStatus(30018, "Too Many Requests")
	StatusForbidden        = NewRPCStatus(30019, "Forbidden")
	StatusLimitExceed      = NewRPCStatus(30020, "Limit Exceed")
	StatusMethodNotAllowed = NewRPCStatus(30021, "Method Not Allowed")
	StatusAccessDenied     = NewRPCStatus(30022, "Access Denied")
	StatusConflict         = NewRPCStatus(30023, "Conflict")
)

rpc system level error code with status prefix, error code range 30000~40000

View Source
var SkipResponse = errors.New("skip response") //nolint

SkipResponse skip response

Functions

func GetErrorCode added in v1.0.5

func GetErrorCode(err error) int

GetErrorCode get Error code from error returned by http invoke

func GetStatusCode added in v1.0.5

func GetStatusCode(err error) codes.Code

GetStatusCode get status code from error returned by RPC invoke

func HCode

func HCode(num int) int

HCode Generate an error code between 20000 and 30000 according to the number

http service level error code, Err prefix, example.

var ( ErrUserCreate = NewError(HCode(1)+1, "failed to create user") // 20101 ErrUserDelete = NewError(HCode(1)+2, "failed to delete user") // 20102 ErrUserUpdate = NewError(HCode(1)+3, "failed to update user") // 20103 ErrUserGet = NewError(HCode(1)+4, "failed to get user details") // 20104 )

func ListGRPCErrCodes

func ListGRPCErrCodes(w http.ResponseWriter, _ *http.Request)

ListGRPCErrCodes list grpc error codes, http handle func

func RCode

func RCode(num int) codes.Code

RCode Generate an error code between 40000 and 50000 according to the number

rpc service level error code, status prefix, example.

var (
	StatusUserCreate = NewRPCStatus(RCode(1)+1, "failed to create user")		// 40101
	StatusUserDelete = NewRPCStatus(RCode(1)+2, "failed to delete user")		// 40102
	StatusUserUpdate = NewRPCStatus(RCode(1)+3, "failed to update user")		// 40103
	StatusUserGet    = NewRPCStatus(RCode(1)+4, "failed to get user details")	// 40104
)

func ShowConfig

func ShowConfig(jsonData []byte) func(w http.ResponseWriter, r *http.Request)

ShowConfig show config info @Summary show config info @Description show config info @Tags system @Accept json @Produce json @Router /config [get]

Types

type Detail

type Detail struct {
	// contains filtered or unexported fields
}

Detail error details

func Any

func Any(key string, val interface{}) Detail

Any type key value

func (*Detail) String

func (d *Detail) String() string

String detail key-value

type ErrInfo

type ErrInfo struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

ErrInfo error info

func ListHTTPErrCodes

func ListHTTPErrCodes() []ErrInfo

ListHTTPErrCodes list http error codes

type Error

type Error struct {
	// contains filtered or unexported fields
}

Error error

func NewError

func NewError(code int, msg string, details ...string) *Error

NewError create a new error message

func ParseError

func ParseError(err error) *Error

ParseError parsing out error codes from error messages

func ToHTTPErr

func ToHTTPErr(st *status.Status) *Error

ToHTTPErr converted to http error

func (*Error) Code

func (e *Error) Code() int

Code get error code

func (*Error) Details

func (e *Error) Details() []string

Details get error code details

func (*Error) Err

func (e *Error) Err(msg ...string) error

Err convert to standard error, if there is a parameter 'msg', it will replace the original message.

func (*Error) ErrToHTTP

func (e *Error) ErrToHTTP(msg ...string) error

ErrToHTTP convert to standard error add ToHTTPCodeLabel to error message, use it if you need to convert to standard HTTP status code, if there is a parameter 'msg', it will replace the original message. Tips: you can call the GetErrorCode function to get the standard HTTP status code.

func (*Error) Msg

func (e *Error) Msg() string

Msg get error code message

func (*Error) NeedHTTPCode

func (e *Error) NeedHTTPCode() bool

NeedHTTPCode need to convert to standard http code

func (*Error) RewriteMsg added in v1.0.43

func (e *Error) RewriteMsg(msg string) *Error

RewriteMsg rewrite error message

func (*Error) ToHTTPCode

func (e *Error) ToHTTPCode() int

ToHTTPCode convert to http error code

func (*Error) WithDetails

func (e *Error) WithDetails(details ...string) *Error

WithDetails add error details

func (*Error) WithOutMsg

func (e *Error) WithOutMsg(msg string) *Error

WithOutMsg out error message Deprecated: use RewriteMsg instead

func (*Error) WithOutMsgI18n

func (e *Error) WithOutMsgI18n(langMsg map[int]map[string]string, lang string) *Error

WithOutMsgI18n out error message i18n langMsg example:

map[int]map[string]string{
		20010: {
			"en-US": "login failed",
			"zh-CN": "登录失败",
		},
	}

lang BCP 47 code https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a

type RPCStatus

type RPCStatus struct {
	// contains filtered or unexported fields
}

RPCStatus rpc status

func NewRPCStatus

func NewRPCStatus(code codes.Code, msg string) *RPCStatus

NewRPCStatus create a new rpc status

func (*RPCStatus) Code

func (s *RPCStatus) Code() codes.Code

Code get code

func (*RPCStatus) Err

func (s *RPCStatus) Err(desc ...string) error

Err return error if there is a parameter 'desc', it will replace the original message

func (*RPCStatus) ErrToHTTP

func (s *RPCStatus) ErrToHTTP(desc ...string) error

ErrToHTTP convert to standard error add ToHTTPCodeLabel to error message, usually used when HTTP calls the GRPC API, if there is a parameter 'desc', it will replace the original message.

func (*RPCStatus) Msg

func (s *RPCStatus) Msg() string

Msg get message

func (*RPCStatus) ToRPCCode

func (s *RPCStatus) ToRPCCode() codes.Code

ToRPCCode converted to standard RPC error code

func (*RPCStatus) ToRPCErr

func (s *RPCStatus) ToRPCErr(desc ...string) error

ToRPCErr converted to standard RPC error, use it if you need to convert to standard RPC errors, if there is a parameter 'desc', it will replace the original message.

type Responser

type Responser interface {
	Success(ctx *gin.Context, data interface{})
	ParamError(ctx *gin.Context, err error)
	Error(ctx *gin.Context, err error) bool
}

Responser response interface

func NewResponser

func NewResponser(isFromRPC bool, httpErrors []*Error, rpcStatus []*RPCStatus) Responser

NewResponser creates a new responser, if isFromRPC=true, it means return from rpc, otherwise default return from http

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL