mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
100 lines
2.6 KiB
Go
100 lines
2.6 KiB
Go
|
// Copyright 2017 Gerasimos Maropoulos, ΓΜ. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package errors
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"runtime"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// Prefix the error prefix, applies to each error's message.
|
||
|
Prefix = ""
|
||
|
// NewLine adds a new line to the end of each error's message
|
||
|
// defaults to true
|
||
|
NewLine = true
|
||
|
)
|
||
|
|
||
|
// Error holds the error message, this message never really changes
|
||
|
type Error struct {
|
||
|
message string
|
||
|
appended bool
|
||
|
}
|
||
|
|
||
|
// New creates and returns an Error with a pre-defined user output message
|
||
|
// all methods below that doesn't accept a pointer receiver because actually they are not changing the original message
|
||
|
func New(errMsg string) *Error {
|
||
|
if NewLine {
|
||
|
errMsg += "\n"
|
||
|
}
|
||
|
return &Error{message: Prefix + errMsg}
|
||
|
}
|
||
|
|
||
|
// String returns the error message
|
||
|
func (e Error) String() string {
|
||
|
return e.message
|
||
|
}
|
||
|
|
||
|
// Error returns the message of the actual error
|
||
|
// implements the error
|
||
|
func (e Error) Error() string {
|
||
|
return e.String()
|
||
|
}
|
||
|
|
||
|
// Format returns a formatted new error based on the arguments
|
||
|
// it does NOT change the original error's message
|
||
|
func (e Error) Format(a ...interface{}) Error {
|
||
|
e.message = fmt.Sprintf(e.message, a...)
|
||
|
return e
|
||
|
}
|
||
|
|
||
|
// Append adds a message to the predefined error message and returns a new error
|
||
|
// it does NOT change the original error's message
|
||
|
func (e Error) Append(format string, a ...interface{}) Error {
|
||
|
// eCp := *e
|
||
|
if NewLine {
|
||
|
format += "\n"
|
||
|
}
|
||
|
e.message += fmt.Sprintf(format, a...)
|
||
|
e.appended = true
|
||
|
return e
|
||
|
}
|
||
|
|
||
|
// AppendErr adds an error's message to the predefined error message and returns a new error
|
||
|
// it does NOT change the original error's message
|
||
|
func (e Error) AppendErr(err error) Error {
|
||
|
return e.Append(err.Error())
|
||
|
}
|
||
|
|
||
|
// IsAppended returns true if the Error instance is created using original's Error.Append/AppendErr func
|
||
|
func (e Error) IsAppended() bool {
|
||
|
return e.appended
|
||
|
}
|
||
|
|
||
|
// With does the same thing as Format but it receives an error type which if it's nil it returns a nil error
|
||
|
func (e Error) With(err error) error {
|
||
|
if err == nil {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
return e.Format(err.Error())
|
||
|
}
|
||
|
|
||
|
// Panic output the message and after panics
|
||
|
func (e Error) Panic() {
|
||
|
_, fn, line, _ := runtime.Caller(1)
|
||
|
errMsg := e.message
|
||
|
errMsg += "\nCaller was: " + fmt.Sprintf("%s:%d", fn, line)
|
||
|
panic(errMsg)
|
||
|
}
|
||
|
|
||
|
// Panicf output the formatted message and after panics
|
||
|
func (e Error) Panicf(args ...interface{}) {
|
||
|
_, fn, line, _ := runtime.Caller(1)
|
||
|
errMsg := e.Format(args...).Error()
|
||
|
errMsg += "\nCaller was: " + fmt.Sprintf("%s:%d", fn, line)
|
||
|
panic(errMsg)
|
||
|
}
|