package exerr import ( "encoding/json" "errors" "fmt" "go.mongodb.org/mongo-driver/v2/bson" ) type ErrorSeverity struct{ Severity string } var ( SevTrace = ErrorSeverity{"Trace"} SevDebug = ErrorSeverity{"Debug"} SevInfo = ErrorSeverity{"Info"} SevWarn = ErrorSeverity{"Warn"} SevErr = ErrorSeverity{"Err"} SevFatal = ErrorSeverity{"Fatal"} ) func (e *ErrorSeverity) UnmarshalJSON(bytes []byte) error { return json.Unmarshal(bytes, &e.Severity) } func (e ErrorSeverity) MarshalJSON() ([]byte, error) { return json.Marshal(e.Severity) } func (e *ErrorSeverity) UnmarshalBSONValue(bt byte, data []byte) error { if bson.Type(bt) == bson.TypeNull { // we can't set nil in UnmarshalBSONValue (so we use default(struct)) // Use mongoext.CreateGoExtBsonRegistry if you need to unmarsh pointer values // https://stackoverflow.com/questions/75167597 // https://jira.mongodb.org/browse/GODRIVER-2252 *e = ErrorSeverity{} return nil } if bson.Type(bt) != bson.TypeString { return errors.New(fmt.Sprintf("cannot unmarshal %v into String", bson.Type(bt))) } var tt string err := bson.RawValue{Type: bson.Type(bt), Value: data}.Unmarshal(&tt) if err != nil { return err } *e = ErrorSeverity{tt} return nil } func (e ErrorSeverity) MarshalBSONValue() (byte, []byte, error) { tp, data, err := bson.MarshalValue(e.Severity) return byte(tp), data, err } //goland:noinspection GoUnusedGlobalVariable var AllSeverities = []ErrorSeverity{SevTrace, SevDebug, SevInfo, SevWarn, SevErr, SevFatal}