Files
trbot/utils/flaterr/wrapper.go
2025-07-21 20:06:29 +08:00

90 lines
1.9 KiB
Go

package flaterr
import (
"fmt"
"github.com/rs/zerolog"
)
type ErrWrapper struct {
event zerolog.Event
err error
flatErr *MultErr
errForflat error
errContent string
msgTemplate Msg
mBool map[string]bool
mInt map[string]int
mInt64 map[string]int64
mFloat64 map[string]float64
mStr map[string]string
}
func LogWithErr(zerolog *zerolog.Logger, mErr *MultErr) *ErrWrapper {
return &ErrWrapper{
event: *zerolog.Error(),
flatErr: mErr,
mBool: map[string]bool{},
mInt: map[string]int{},
mInt64: map[string]int64{},
mFloat64: map[string]float64{},
mStr: map[string]string{},
}
}
// 传入 MultErr, 并返回一个 ErrWrapper 等待后续链式调用
func Wrapper(handlerErr *MultErr) *ErrWrapper {
return &ErrWrapper{
flatErr: handlerErr,
mBool: map[string]bool{},
mInt: map[string]int{},
mInt64: map[string]int64{},
mFloat64: map[string]float64{},
mStr: map[string]string{},
}
}
// 以错误模板发送日志和添加错误
func (ew *ErrWrapper) Tpl(msg Msg) *ErrWrapper {
ew.msgTemplate = msg
return ew
}
// log 信息,错误信息
func (ew *ErrWrapper) Msg(log string) *ErrWrapper {
ew.mStr["message"] = log
return ew
}
func (ew *ErrWrapper) Addf(format string, a ...any) *ErrWrapper {
ew.errForflat = fmt.Errorf(format, a...)
return ew
}
// 错误内容 错误模板
// 将字段注入 zerolog.Event 并返回一个空的函数
func (ew *ErrWrapper) Done(){
// ew.event.Msg("")
if ew.errForflat != nil {
ew.flatErr.Add(ew.errForflat)
}
if ew.err != nil {
ew.event.Err(ew.err)
}
if ew.errContent != "" {
ew.event.Str("content", ew.errContent)
}
for k, v := range ew.mBool { ew.event.Bool(k, v) }
for k, v := range ew.mInt { ew.event.Int(k, v) }
for k, v := range ew.mInt64 { ew.event.Int64(k, v) }
for k, v := range ew.mStr { ew.event.Str(k, v) }
for k, v := range ew.mFloat64 { ew.event.Float64(k, v) }
}