mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-12-24 13:27:56 +08:00
CommonConf加了这一行:Extra map[string]interface{} `toml:"extra"`
这样就可以兼容一切未来未知的格式了, 同时 proxy包的 ClientCreator和 ServerCreator接口
也相应改动了,不再需要传入 map.
58 lines
990 B
Go
58 lines
990 B
Go
package utils
|
||
|
||
import "fmt"
|
||
|
||
func NewErr(desc string, e error) *ErrInErr {
|
||
return &ErrInErr{
|
||
ErrDesc: desc,
|
||
ErrDetail: e,
|
||
}
|
||
}
|
||
|
||
func NewDataErr(desc string, e error, data interface{}) *ErrInErr {
|
||
return &ErrInErr{
|
||
ErrDesc: desc,
|
||
ErrDetail: e,
|
||
Data: data,
|
||
}
|
||
}
|
||
|
||
// ErrInErr 很适合一个err包含另一个err,并且提供附带数据的情况
|
||
type ErrInErr struct {
|
||
ErrDesc string
|
||
ErrDetail error
|
||
Data interface{}
|
||
|
||
cachedStr string
|
||
}
|
||
|
||
func (e *ErrInErr) Error() string {
|
||
return e.String()
|
||
}
|
||
|
||
func (e *ErrInErr) String() string {
|
||
if e.cachedStr == "" {
|
||
e.cachedStr = e.string()
|
||
}
|
||
return e.cachedStr
|
||
}
|
||
|
||
func (e *ErrInErr) string() string {
|
||
if e.Data != nil {
|
||
|
||
if e.ErrDetail != nil {
|
||
return fmt.Sprintf("%s : %s, Data: %v", e.ErrDesc, e.ErrDetail.Error(), e.Data)
|
||
|
||
}
|
||
|
||
return fmt.Sprintf("%s , Data: %v", e.ErrDesc, e.Data)
|
||
|
||
}
|
||
if e.ErrDetail != nil {
|
||
return fmt.Sprintf("%s : %s", e.ErrDesc, e.ErrDetail.Error())
|
||
|
||
}
|
||
return e.ErrDesc
|
||
|
||
}
|