| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package errors
- import (
- "fmt"
- "v2ray.com/core/common/serial"
- )
- type HasInnerError interface {
- Inner() error
- }
- type Error struct {
- message string
- inner error
- }
- func (v *Error) Error() string {
- return v.message
- }
- func (v *Error) Inner() error {
- if v.inner == nil {
- return nil
- }
- return v.inner
- }
- func New(msg ...interface{}) error {
- return &Error{
- message: serial.Concat(msg...),
- }
- }
- func Base(err error) ErrorBuilder {
- return ErrorBuilder{
- error: err,
- }
- }
- func Format(format string, values ...interface{}) error {
- return New(fmt.Sprintf(format, values...))
- }
- // Cause returns the root cause of this error.
- func Cause(err error) error {
- if err == nil {
- return nil
- }
- for {
- inner, ok := err.(HasInnerError)
- if !ok {
- break
- }
- if inner.Inner() == nil {
- break
- }
- err = inner.Inner()
- }
- return err
- }
- type ErrorBuilder struct {
- error
- }
- func (v ErrorBuilder) Message(msg ...interface{}) error {
- if v.error == nil {
- return nil
- }
- return &Error{
- message: serial.Concat(msg...) + " > " + v.error.Error(),
- inner: v.error,
- }
- }
- func (v ErrorBuilder) Format(format string, values ...interface{}) error {
- if v.error == nil {
- return nil
- }
- return &Error{
- message: fmt.Sprintf(format, values...) + " > " + v.error.Error(),
- inner: v.error,
- }
- }
|