| 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.ToString(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,
 
- 	}
 
- }
 
 
  |