errors

package
v1.11.6 Latest Latest
Warning

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

Go to latest
Published: Aug 8, 2023 License: MIT Imports: 12 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 (
	MinPkgArchive        = 100
	MinPkgArtifact       = 200
	MinPkgCertificate    = 300
	MinPkgCluster        = 400
	MinPkgConfig         = 500
	MinPkgConsole        = 800
	MinPkgCrypt          = 900
	MinPkgDatabase       = 1000
	MinPkgFTPClient      = 1100
	MinPkgHttpCli        = 1200
	MinPkgHttpServer     = 1300
	MinPkgHttpServerPool = 1320
	MinPkgIOUtils        = 1400
	MinPkgLDAP           = 1500
	MinPkgLogger         = 1600
	MinPkgMail           = 1700
	MinPkgMailer         = 1800
	MinPkgMailPooler     = 1900
	MinPkgMonitor        = 2000
	MinPkgMonitorCfg     = 2020
	MinPkgMonitorPool    = 2100
	MinPkgNetwork        = 2200
	MinPkgNats           = 2300
	MinPkgNutsDB         = 2400
	MinPkgOAuth          = 2500
	MinPkgAws            = 2600
	MinPkgRequest        = 2700
	MinPkgRouter         = 2800
	MinPkgSemaphore      = 2900
	MinPkgSMTP           = 3000
	MinPkgSMTPConfig     = 3050
	MinPkgStatic         = 3100
	MinPkgStatus         = 3200
	MinPkgSocket         = 3300
	MinPkgVersion        = 3400
	MinPkgViper          = 3500

	MinAvailable = 4000

	// MIN_AVAILABLE @Deprecated use MinAvailable constant
	MIN_AVAILABLE = MinAvailable
)
View Source
const NUL_MESSAGE = ""
View Source
const NullMessage = ""
View Source
const (
	PathSeparator = "/"
)
View Source
const UNK_MESSAGE = "unknown error"
View Source
const UnknownMessage = "unknown error"

Variables

This section is empty.

Functions

func ConvPathFromLocal added in v1.9.17

func ConvPathFromLocal(str string) string

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
const UnknownError 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
	// contains filtered or unexported fields
}

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 current 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
	//GetParent return a slice of Error interface for each parent error with or without the first error.
	GetParent(withMainError bool) []Error
	//Map run a function on each func and parent. If the function return false, the loop stop.
	Map(fct FuncMap) 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

func NewErrorRecovered added in v1.9.11

func NewErrorRecovered(msg string, recovered string, parent ...error) Error

func NewErrorTrace added in v1.9.10

func NewErrorTrace(code int, msg string, file string, line int, 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 Errors added in v1.10.9

type Errors interface {
	// ErrorsLast return the last registered error
	ErrorsLast() error

	// ErrorsList return a slice of all registered errors
	ErrorsList() []error
}

type FuncMap added in v1.10.0

type FuncMap func(e Error) bool

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)

type ReturnGin added in v1.10.0

type ReturnGin interface {
	Return

	GinTonicAbort(ctx *gin.Context, httpCode int)
	GinTonicErrorAbort(ctx *gin.Context, httpCode int)
}

Jump to

Keyboard shortcuts

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