errors

package
v1.13.1 Latest Latest
Warning

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

Go to latest
Published: Nov 21, 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     = baseInc + iota
	MinPkgArtifact    = baseInc + MinPkgArchive
	MinPkgCertificate = baseInc + MinPkgArtifact
	MinPkgCluster     = baseInc + MinPkgCertificate
	MinPkgConfig      = baseInc + MinPkgCluster
	MinPkgConsole     = moreInc + MinPkgConfig
	MinPkgCrypt       = baseInc + MinPkgConsole

	MinPkgDatabaseGorm  = baseInc + MinPkgCrypt
	MinPkgDatabaseKVDrv = baseSub + MinPkgDatabaseGorm
	MinPkgDatabaseKVMap = baseSub + MinPkgDatabaseKVDrv
	MinPkgDatabaseKVTbl = baseSub + MinPkgDatabaseKVMap
	MinPkgDatabaseKVItm = baseSub + MinPkgDatabaseKVTbl

	MinPkgFileProgress = baseInc + MinPkgDatabaseGorm
	MinPkgFTPClient    = baseInc + MinPkgFileProgress
	MinPkgHttpCli      = baseInc + MinPkgFTPClient

	MinPkgHttpServer     = baseInc + MinPkgHttpCli
	MinPkgHttpServerPool = baseSub + MinPkgHttpServer

	MinPkgIOUtils    = baseInc + MinPkgHttpServer
	MinPkgLDAP       = baseInc + MinPkgIOUtils
	MinPkgLogger     = baseInc + MinPkgLDAP
	MinPkgMail       = baseInc + MinPkgLogger
	MinPkgMailer     = baseInc + MinPkgMail
	MinPkgMailPooler = baseInc + MinPkgMailer

	MinPkgMonitor     = baseInc + MinPkgMailPooler
	MinPkgMonitorCfg  = baseSub + MinPkgMonitor
	MinPkgMonitorPool = baseSub + MinPkgMonitorCfg

	MinPkgNetwork   = baseInc + MinPkgMonitor
	MinPkgNats      = baseInc + MinPkgNetwork
	MinPkgNutsDB    = baseInc + MinPkgNats
	MinPkgOAuth     = baseInc + MinPkgNutsDB
	MinPkgAws       = baseInc + MinPkgOAuth
	MinPkgRequest   = baseInc + MinPkgAws
	MinPkgRouter    = baseInc + MinPkgRequest
	MinPkgSemaphore = baseInc + MinPkgRouter

	MinPkgSMTP       = baseInc + MinPkgSemaphore
	MinPkgSMTPConfig = baseInc + MinPkgSMTP

	MinPkgStatic  = baseInc + MinPkgSMTPConfig
	MinPkgStatus  = baseInc + MinPkgStatic
	MinPkgSocket  = baseInc + MinPkgStatus
	MinPkgVersion = baseInc + MinPkgSocket
	MinPkgViper   = baseInc + MinPkgVersion

	MinAvailable = baseInc + MinPkgViper
)
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 ContainsString added in v1.12.0

func ContainsString(e error, s string) bool

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 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 Has added in v1.12.0

func Has(e error, code CodeError) bool

func Is added in v1.12.0

func Is(e error) bool

func IsCode added in v1.12.0

func IsCode(e error, code CodeError) bool

func RegisterIdFctMessage

func RegisterIdFctMessage(minCode CodeError, fct Message)

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) 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

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 {
	//IsCode check if the given error code is matching with the current Error
	IsCode(code CodeError) bool
	//HasCode check if current error or parent has the given error code
	HasCode(code CodeError) bool
	//GetCode return the CodeError value of the current error
	GetCode() CodeError
	//GetParentCode return a slice of CodeError value of all parent Error and the code of the current Error
	GetParentCode() []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
	//ContainsString return true if any message into the main error or the parent message error contains the given part string
	ContainsString(s string) bool

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

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

	//CodeError is used to return a composed string of current Error code with message, for current Error and no parent
	CodeError(pattern 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
	//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
	//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
	//GetErrorSlice is used to return a slice of new error interface, based of the current error and all parent
	GetErrorSlice() []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 AddOrNew added in v1.12.0

func AddOrNew(errMain, errSub error, parent ...error) Error

func Get added in v1.12.0

func Get(e error) Error

func IfError added in v1.12.0

func IfError(code uint16, message string, parent ...error) Error

func Make added in v1.12.0

func Make(e error) Error

func MakeIfError added in v1.12.0

func MakeIfError(err ...error) Error

func New added in v1.12.0

func New(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