Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
7fe3e66cad
|
|||
a73d7d1654
|
@@ -19,8 +19,8 @@ type ErrorPackageConfigInit struct {
|
|||||||
ZeroLogAllTraces bool
|
ZeroLogAllTraces bool
|
||||||
RecursiveErrors bool
|
RecursiveErrors bool
|
||||||
ExtendedGinOutput bool
|
ExtendedGinOutput bool
|
||||||
ExtendGinOutput *func(err *ExErr, json map[string]any)
|
ExtendGinOutput func(err *ExErr, json map[string]any)
|
||||||
ExtendGinDataOutput *func(err *ExErr, depth int, json map[string]any)
|
ExtendGinDataOutput func(err *ExErr, depth int, json map[string]any)
|
||||||
}
|
}
|
||||||
|
|
||||||
var initialized = false
|
var initialized = false
|
||||||
@@ -42,13 +42,23 @@ func Init(cfg ErrorPackageConfigInit) {
|
|||||||
panic("Cannot re-init error package")
|
panic("Cannot re-init error package")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ego := func(err *ExErr, json map[string]any) {}
|
||||||
|
egdo := func(err *ExErr, depth int, json map[string]any) {}
|
||||||
|
|
||||||
|
if cfg.ExtendGinOutput != nil {
|
||||||
|
ego = cfg.ExtendGinOutput
|
||||||
|
}
|
||||||
|
if cfg.ExtendGinDataOutput != nil {
|
||||||
|
egdo = cfg.ExtendGinDataOutput
|
||||||
|
}
|
||||||
|
|
||||||
pkgconfig = ErrorPackageConfig{
|
pkgconfig = ErrorPackageConfig{
|
||||||
ZeroLogErrTraces: cfg.ZeroLogErrTraces,
|
ZeroLogErrTraces: cfg.ZeroLogErrTraces,
|
||||||
ZeroLogAllTraces: cfg.ZeroLogAllTraces,
|
ZeroLogAllTraces: cfg.ZeroLogAllTraces,
|
||||||
RecursiveErrors: cfg.RecursiveErrors,
|
RecursiveErrors: cfg.RecursiveErrors,
|
||||||
ExtendedGinOutput: cfg.ExtendedGinOutput,
|
ExtendedGinOutput: cfg.ExtendedGinOutput,
|
||||||
ExtendGinOutput: langext.Coalesce(cfg.ExtendGinOutput, func(err *ExErr, json map[string]any) {}),
|
ExtendGinOutput: ego,
|
||||||
ExtendGinDataOutput: langext.Coalesce(cfg.ExtendGinDataOutput, func(err *ExErr, depth int, json map[string]any) {}),
|
ExtendGinDataOutput: egdo,
|
||||||
}
|
}
|
||||||
|
|
||||||
initialized = true
|
initialized = true
|
||||||
|
@@ -2,8 +2,10 @@ package ginext
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/gin-gonic/gin/binding"
|
"github.com/gin-gonic/gin/binding"
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/exerr"
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
)
|
)
|
||||||
@@ -40,33 +42,55 @@ func (pctx *PreContext) Form(form any) *PreContext {
|
|||||||
func (pctx PreContext) Start() (*AppContext, *gin.Context, *HTTPResponse) {
|
func (pctx PreContext) Start() (*AppContext, *gin.Context, *HTTPResponse) {
|
||||||
if pctx.uri != nil {
|
if pctx.uri != nil {
|
||||||
if err := pctx.ginCtx.ShouldBindUri(pctx.uri); err != nil {
|
if err := pctx.ginCtx.ShouldBindUri(pctx.uri); err != nil {
|
||||||
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, commonApiErr.BindFailURI, "Failed to read uri", err))
|
err = exerr.Wrap(err, "Failed to read uri").
|
||||||
|
WithType(exerr.TypeBindFailURI).
|
||||||
|
Str("struct_type", fmt.Sprintf("%T", pctx.uri)).
|
||||||
|
Build()
|
||||||
|
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if pctx.query != nil {
|
if pctx.query != nil {
|
||||||
if err := pctx.ginCtx.ShouldBindQuery(pctx.query); err != nil {
|
if err := pctx.ginCtx.ShouldBindQuery(pctx.query); err != nil {
|
||||||
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, commonApiErr.BindFailQuery, "Failed to read query", err))
|
err = exerr.Wrap(err, "Failed to read query").
|
||||||
|
WithType(exerr.TypeBindFailQuery).
|
||||||
|
Str("struct_type", fmt.Sprintf("%T", pctx.query)).
|
||||||
|
Build()
|
||||||
|
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if pctx.body != nil {
|
if pctx.body != nil {
|
||||||
if pctx.ginCtx.ContentType() == "application/json" {
|
if pctx.ginCtx.ContentType() == "application/json" {
|
||||||
if err := pctx.ginCtx.ShouldBindJSON(pctx.body); err != nil {
|
if err := pctx.ginCtx.ShouldBindJSON(pctx.body); err != nil {
|
||||||
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, commonApiErr.BindFailJSON, "Failed to read body", err))
|
err = exerr.Wrap(err, "Failed to read json-body").
|
||||||
|
WithType(exerr.TypeBindFailJSON).
|
||||||
|
Str("struct_type", fmt.Sprintf("%T", pctx.body)).
|
||||||
|
Build()
|
||||||
|
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, err))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, commonApiErr.BindFailJSON, "missing JSON body", nil))
|
err := exerr.New(exerr.TypeBindFailJSON, "missing JSON body").
|
||||||
|
Str("struct_type", fmt.Sprintf("%T", pctx.body)).
|
||||||
|
Build()
|
||||||
|
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if pctx.form != nil {
|
if pctx.form != nil {
|
||||||
if pctx.ginCtx.ContentType() == "multipart/form-data" {
|
if pctx.ginCtx.ContentType() == "multipart/form-data" {
|
||||||
if err := pctx.ginCtx.ShouldBindWith(pctx.form, binding.Form); err != nil {
|
if err := pctx.ginCtx.ShouldBindWith(pctx.form, binding.Form); err != nil {
|
||||||
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, commonApiErr.BindFailFormData, "Failed to read multipart-form", err))
|
err = exerr.Wrap(err, "Failed to read multipart-form").
|
||||||
|
WithType(exerr.TypeBindFailFormData).
|
||||||
|
Str("struct_type", fmt.Sprintf("%T", pctx.form)).
|
||||||
|
Build()
|
||||||
|
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, err))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, commonApiErr.BindFailJSON, "missing form body", nil))
|
err := exerr.New(exerr.TypeBindFailFormData, "missing form body").
|
||||||
|
Str("struct_type", fmt.Sprintf("%T", pctx.form)).
|
||||||
|
Build()
|
||||||
|
return nil, nil, langext.Ptr(APIError(pctx.ginCtx, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
package goext
|
||||||
|
|
||||||
const GoextVersion = "0.0.194"
|
const GoextVersion = "0.0.196"
|
||||||
|
|
||||||
const GoextVersionTimestamp = "2023-07-24T11:40:47+0200"
|
const GoextVersionTimestamp = "2023-07-24T11:47:47+0200"
|
||||||
|
Reference in New Issue
Block a user