errors

package
v1.5.10 Latest Latest
Warning

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

Go to latest
Published: Mar 5, 2021 License: MIT Imports: 11 Imported by: 0

README

Error package

This package allows extending go error interface to add parent tree, code of error, trace, ... This package still compatible with error interface and can be customized to define what information is return for standard go error implementation.

The main mind of this package is to be simple use, quickly implement and having more capabilities than go error interface

Example of implement

You will find many uses of this package in the golib repos.

We will create an error.go file into any package, and we will construct it like this :

import errors "github.com/nabbar/golib/errors"

const (
    // create const for code as type CodeError to use features func
    // we init the iota number to an minimal free code
    // golib/errors expose the minimal available iota with const : errors.MIN_AVAILABLE
    // with this method, all code uint will be predictable
	EMPTY_PARAMS errors.CodeError = iota + errors.MIN_AVAILABLE
    MY_ERROR
    // add here all const you will use as code to identify error with code & message
)

func init() {
    // register your function getMessage
	errors.RegisterFctMessage(getMessage)
}

// This function will return the message of one error code
func getMessage(code errors.CodeError) (message string) {
	switch code {
	case EMPTY_PARAMS:
		return "given parameters is empty"
	case My_ERROR:
		return "example of message for code MY_ERROR"
	}

    // CAREFUL : the default return if code is not found must be en empty string !
	return ""
}

In go source file, we can implement the call to package golib/errors like this :

// will test if err is not nil
// if is nil, will return nil, otherwise will return a Error interface from the MY_ERROR code with a parent err
_ = MY_ERROR.Iferror(err)
// return an Error interface from the MY_ERROR code and if err is not nil, add a parent err
_ = MY_ERROR.ErrorParent(err)
// error can be cascaded add like this
_ = MY_ERROR.IfError(EMPTY_PARAMS.IfError(err))
return MY_ERROR.Error(EMPTY_PARAMS.ErrorParent(err))

Documentation

Index

Constants

View Source
const (
	MIN_PKG_Archive    = 100
	MIN_PKG_Artifact   = 200
	MIN_PKG_Certif     = 300
	MIN_PKG_Console    = 400
	MIN_PKG_Crypt      = 500
	MIN_PKG_Httpcli    = 600
	MIN_PKG_Httpserver = 700
	MIN_PKG_IOUtils    = 800
	MIN_PKG_LDAP       = 900
	MIN_PKG_Mail       = 1000
	MIN_PKG_Mailer     = 1100
	MIN_PKG_Network    = 1200
	MIN_PKG_OAuth      = 1300
	MIN_PKG_Aws        = 1400
	MIN_PKG_Router     = 1500
	MIN_PKG_Semaphore  = 1600
	MIN_PKG_SMTP       = 1700
	MIN_PKG_Static     = 1800
	MIN_PKG_Version    = 1900

	MIN_AVAILABLE = 4000
)
View Source
const NUL_MESSAGE = ""
View Source
const UNK_MESSAGE = "unknown error"

Variables

This section is empty.

Functions

func ExistInMapMessage

func ExistInMapMessage(code CodeError) bool

func GetCodePackages added in v1.5.1

func GetCodePackages(rootPackage string) map[CodeError]string

func GetDefaultGlue

func GetDefaultGlue() string

GetDefaultGlue return the current glue used to joins errors with parents.

func GetDefaultPattern

func GetDefaultPattern() string

GetDefaultPattern return the current pattern used for string of error with code. The pattern is fmt pattern with 2 inputs in order : code, message.

func GetDefaultPatternTrace

func GetDefaultPatternTrace() string

GetDefaultPatternTrace return the current pattern used for string of error with code and trace. The pattern is fmt pattern with 3 inputs in order : code, message, trace.

func RegisterIdFctMessage

func RegisterIdFctMessage(minCode CodeError, fct Message)

func SetDefaultGlue

func SetDefaultGlue(glue string)

SetTracePathFilter define the glue string to be used to join main error with parents'errors.

func SetDefaultPattern

func SetDefaultPattern(pattern string)

GetDefaultPatternTrace define the pattern to be used for string of error with code. The pattern is fmt pattern with 2 inputs in order : code, message.

func SetDefaultPatternTrace

func SetDefaultPatternTrace(patternTrace string)

SetDefaultPatternTrace define the pattern to be used for string of error with code and trace. The pattern is fmt pattern with 3 inputs in order : code, message, trace.

func SetModeReturnError

func SetModeReturnError(mode ErrorMode)

func SetTracePathFilter added in v1.3.0

func SetTracePathFilter(path string)

SetTracePathFilter customize the filter apply to filepath on trace.

Types

type CodeError

type CodeError uint16
const UNK_ERROR CodeError = 0

func (CodeError) Error

func (c CodeError) Error(p Error) Error

func (CodeError) ErrorParent

func (c CodeError) ErrorParent(p ...error) Error

func (CodeError) GetInt

func (c CodeError) GetInt() int

func (CodeError) GetMessage

func (c CodeError) GetMessage() string

func (CodeError) GetString

func (c CodeError) GetString() string

func (CodeError) GetUint16

func (c CodeError) GetUint16() uint16

func (CodeError) IfError

func (c CodeError) IfError(e Error) Error

func (CodeError) Iferror

func (c CodeError) Iferror(e error) Error

type DefaultReturn added in v1.5.0

type DefaultReturn struct {
	Code    string
	Message string
}

func NewDefaultReturn added in v1.5.0

func NewDefaultReturn() *DefaultReturn

func (*DefaultReturn) AddParent added in v1.5.0

func (r *DefaultReturn) AddParent(code int, msg string, file string, line int)

func (DefaultReturn) GinTonicAbort added in v1.5.0

func (r DefaultReturn) GinTonicAbort(ctx *gin.Context, httpCode int)

func (DefaultReturn) GinTonicErrorAbort added in v1.5.0

func (r DefaultReturn) GinTonicErrorAbort(ctx *gin.Context, httpCode int)

func (DefaultReturn) JSON added in v1.5.0

func (r DefaultReturn) JSON() []byte

func (*DefaultReturn) SetError added in v1.5.0

func (r *DefaultReturn) SetError(code int, msg string, file string, line int)

type Error

type Error interface {
	//IsCodeError check if the given error code is matching with the current Error
	IsCodeError(code CodeError) bool
	//HasCodeError check if current error or parent has the given error code
	HasCodeError(code CodeError) bool
	//GetCodeError return the CodeError value of the curent error
	GetCodeError() CodeError
	//GetCodeErrorParent return a slice of CodeError value of all parent Error and the code of the current Error
	GetCodeErrorParent() []CodeError

	//IsError check if the given error params is a valid error and not a nil pointer
	IsError(e error) bool
	//HasError check if the given error in params is still in parent error
	HasError(err error) bool
	//HasParent check if the current Error has any valid parent
	HasParent() bool

	//AddParent will add all no empty given error into parent of the current Error pointer
	AddParent(parent ...error)
	//SetParent will replace all parent with the given error list
	SetParent(parent ...error)
	//AddParentError will add all no empty given Error into parent of the current Error pointer
	AddParentError(parent ...Error)
	//SetParentError will replace all parent with the given Error list
	SetParentError(parent ...Error)

	//Code is used to return the code of current Error, as string
	Code() string
	//CodeFull is used to return a joint string of code of current Error and code of all parent Error
	CodeFull(glue string) string
	//CodeSlice is used to return a slice string of all code of current Error (main and parent)
	CodeSlice() []string

	//CodeError is used to return a composed string of current Error code with message, for current Error and no parent
	CodeError(pattern string) string
	//CodeErrorFull is used to return a composed string of couple error code with message, for current Error and all parent
	CodeErrorFull(pattern, glue string) string
	//CodeErrorSlice is used to return a composed string slice of couple error code with message, for current Error and all parent
	CodeErrorSlice(pattern string) []string

	//CodeErrorTrace is used to return a composed string of current Error code with message and trace information, for current Error and no parent
	CodeErrorTrace(pattern string) string
	//CodeErrorTraceFull is used to return a composed string of couple error code with message and trace information, for current Error and all parent
	CodeErrorTraceFull(pattern, glue string) string
	//CodeErrorTraceSlice is used to return a composed string slice of couple error code with message and trace information, for current Error and all parent
	CodeErrorTraceSlice(pattern string) []string

	//Error is used to match with error interface
	//this function will return a mixed result depends of the configuration defined by calling SetModeReturnError
	Error() string

	//StringError is used to return the error message, for current Error and no parent
	StringError() string
	//StringErrorFull is used to return the error message, for current Error and all parent
	StringErrorFull(glue string) string
	//StringErrorSlice is used to return the error message, for current Error and all parent, as a slice of string
	StringErrorSlice() []string

	//GetError is used to return a new error interface based of the current error (and no parent)
	GetError() error
	//GetErrorFull is used to return a new error interface based of the current error with all parent
	GetErrorFull(glue string) error
	//GetErrorSlice is used to return a slice of new error interface, based of the current error and all parent
	GetErrorSlice() []error

	//GetIError is used to return a Error interface pointer based of current Error
	GetIError() Error
	//GetIErrorSlice is used to return a slice of Error interface pointer, based of current Error and all parents
	GetIErrorSlice() []Error

	//GetTrace will return a comped string for the trace of the current Error
	GetTrace() string
	//GetTrace will return a slice of comped string fpr the trace of the current Error and all parent
	GetTraceSlice() []string

	//Return will transform the current Error into a given pointer that implement the Return interface
	Return(r Return)
	//ReturnError will send the current Error value to the given function ReturnError
	ReturnError(f ReturnError)
	//ReturnParent will send all parent information of the current Error value to the given function ReturnError
	ReturnParent(f ReturnError)
}

func MakeErrorIfError

func MakeErrorIfError(err ...Error) Error

func NewError

func NewError(code uint16, message string, parent Error) Error

func NewErrorIfError

func NewErrorIfError(code uint16, message string, parent Error) Error

func NewErrorIferror

func NewErrorIferror(code uint16, message string, parent error) Error

type ErrorMode

type ErrorMode uint8
const (
	Default ErrorMode = iota
	ErrorReturnCode
	ErrorReturnCodeFull
	ErrorReturnCodeError
	ErrorReturnCodeErrorFull
	ErrorReturnCodeErrorTrace
	ErrorReturnCodeErrorTraceFull
	ErrorReturnStringError
	ErrorReturnStringErrorFull
)

func GetModeReturnError

func GetModeReturnError() ErrorMode

func (ErrorMode) String

func (m ErrorMode) String() string

type Message

type Message func(code CodeError) (message string)

type Return added in v1.5.0

type Return interface {
	SetError(code int, msg string, file string, line int)
	AddParent(code int, msg string, file string, line int)
}

type ReturnError added in v1.5.0

type ReturnError func(code int, msg string, file string, line int)

Jump to

Keyboard shortcuts

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