package base import ( "fmt" "github.com/pkg/errors" ) // Error for opt type Error struct { ErrorCode int ErrorMsg string ErrorUserMsg string } // NewError one func NewError(code int, message string, userMessage string) Error { return Error{ ErrorCode: code, ErrorMsg: message, ErrorUserMsg: userMessage, } } func (err Error) Error() string { return err.ErrorMsg } // WrapPrint print Error & User like // Error { // ErrorCode: 400, // ErrorMsg: "something wrong with: %v", // ErrorUserMsg: "UI Error Tips: %v", // } // // Error { // ErrorCode: 400, // ErrorMsg: "something wrong with: %v", // ErrorUserMsg: "UI Error Tips", // } func (err Error) WrapPrint(core error, message string, user ...interface{}) error { if core == nil { return nil } ret := err SetErrPrintfMsg(&ret, core) if len(user) > 0 { SetErrPrintfUserMsg(&ret, user...) } return errors.Wrap(ret, message) } // Wrap Error like // Error { // ErrorCode: 400, // ErrorMsg: "action error", // ErrorUserMsg: "UI Error Tips", // } func (err Error) Wrap(core error) error { if core == nil { return nil } msg := err.ErrorMsg err.ErrorMsg = core.Error() return errors.Wrap(err, msg) } // SetErrPrintfMsg for API func SetErrPrintfMsg(err *Error, v ...interface{}) { err.ErrorMsg = fmt.Sprintf(err.ErrorMsg, v...) } // SetErrPrintfUserMsg for API func SetErrPrintfUserMsg(err *Error, v ...interface{}) { err.ErrorUserMsg = fmt.Sprintf(err.ErrorUserMsg, v...) } // value list var ( MQTTPubError = Error{100002, "mqtt pub msg error", ""} NsqStatisPubError = Error{100003, "nsq pub statis, it only must is Statis", ""} HttpRetCodeError = Error{100004, "http response retcode err", "http response retcode err"} )