package exerr import ( "github.com/gin-gonic/gin" json "gogs.mikescher.com/BlackForestBytes/goext/gojson" "net/http" "time" ) func (ee *ExErr) toJson(depth int) gin.H { ginJson := gin.H{} if ee.UniqueID != "" { ginJson["id"] = ee.UniqueID } if ee.Category != CatWrap { ginJson["category"] = ee.Category } if ee.Type != TypeWrap { ginJson["type"] = ee.Type } if ee.StatusCode != nil { ginJson["statuscode"] = ee.StatusCode } if ee.Message != "" { ginJson["message"] = ee.Message } if ee.Caller != "" { ginJson["caller"] = ee.Caller } if ee.Severity != SevErr { ginJson["severity"] = ee.Severity } if ee.Timestamp != (time.Time{}) { ginJson["time"] = ee.Timestamp.Format(time.RFC3339) } if ee.WrappedErrType != "" { ginJson["wrappedErrType"] = ee.WrappedErrType } if ee.OriginalError != nil { ginJson["original"] = ee.OriginalError.toJson(depth + 1) } pkgconfig.ExtendGinDataOutput(ee, depth, ginJson) return ginJson } func (ee *ExErr) Output(g *gin.Context) { var statuscode = http.StatusInternalServerError var baseCat = ee.RecursiveCategory() var baseType = ee.RecursiveType() var baseStatuscode = ee.RecursiveStatuscode() var baseMessage = ee.RecursiveMessage() if baseCat == CatUser { statuscode = http.StatusBadRequest } else if baseCat == CatSystem { statuscode = http.StatusInternalServerError } if baseStatuscode != nil { statuscode = *ee.StatusCode } else if baseType.DefaultStatusCode != nil { statuscode = *baseType.DefaultStatusCode } warnOnPkgConfigNotInitialized() ginOutput := gin.H{ "errorid": ee.UniqueID, "message": baseMessage, "errorcode": baseType.Key, "category": baseCat.Category, } if pkgconfig.ExtendedGinOutput { ginOutput["__data"] = ee.toJson(0) } pkgconfig.ExtendGinOutput(ee, ginOutput) g.Render(statuscode, json.GoJsonRender{Data: ginOutput, NilSafeSlices: true, NilSafeMaps: true}) }