Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
e10140e143
|
|||
e165f0f62f
|
|||
655d4daad9
|
|||
87a004e577
|
|||
376c6cab50
|
@@ -7,6 +7,9 @@ type SyncSet[TData comparable] struct {
|
||||
lock sync.Mutex
|
||||
}
|
||||
|
||||
// Add adds `value` to the set
|
||||
// returns true if the value was actually inserted
|
||||
// returns false if the value already existed
|
||||
func (s *SyncSet[TData]) Add(value TData) bool {
|
||||
s.lock.Lock()
|
||||
defer s.lock.Unlock()
|
||||
@@ -15,10 +18,10 @@ func (s *SyncSet[TData]) Add(value TData) bool {
|
||||
s.data = make(map[TData]bool)
|
||||
}
|
||||
|
||||
_, ok := s.data[value]
|
||||
_, existsInPreState := s.data[value]
|
||||
s.data[value] = true
|
||||
|
||||
return !ok
|
||||
return !existsInPreState
|
||||
}
|
||||
|
||||
func (s *SyncSet[TData]) AddAll(values []TData) {
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package exerr
|
||||
|
||||
import (
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
)
|
||||
|
||||
@@ -37,25 +38,32 @@ type ErrorType struct {
|
||||
|
||||
//goland:noinspection GoUnusedGlobalVariable
|
||||
var (
|
||||
TypeInternal = ErrorType{"INTERNAL_ERROR", langext.Ptr(500)}
|
||||
TypePanic = ErrorType{"PANIC", langext.Ptr(500)}
|
||||
TypeNotImplemented = ErrorType{"NOT_IMPLEMENTED", langext.Ptr(500)}
|
||||
TypeInternal = NewType("INTERNAL_ERROR", langext.Ptr(500))
|
||||
TypePanic = NewType("PANIC", langext.Ptr(500))
|
||||
TypeNotImplemented = NewType("NOT_IMPLEMENTED", langext.Ptr(500))
|
||||
|
||||
TypeWrap = ErrorType{"Wrap", nil}
|
||||
TypeWrap = NewType("Wrap", nil)
|
||||
|
||||
TypeBindFailURI = ErrorType{"BINDFAIL_URI", langext.Ptr(400)}
|
||||
TypeBindFailQuery = ErrorType{"BINDFAIL_QUERY", langext.Ptr(400)}
|
||||
TypeBindFailJSON = ErrorType{"BINDFAIL_JSON", langext.Ptr(400)}
|
||||
TypeBindFailFormData = ErrorType{"BINDFAIL_FORMDATA", langext.Ptr(400)}
|
||||
TypeBindFailHeader = ErrorType{"BINDFAIL_HEADER", langext.Ptr(400)}
|
||||
TypeBindFailURI = NewType("BINDFAIL_URI", langext.Ptr(400))
|
||||
TypeBindFailQuery = NewType("BINDFAIL_QUERY", langext.Ptr(400))
|
||||
TypeBindFailJSON = NewType("BINDFAIL_JSON", langext.Ptr(400))
|
||||
TypeBindFailFormData = NewType("BINDFAIL_FORMDATA", langext.Ptr(400))
|
||||
TypeBindFailHeader = NewType("BINDFAIL_HEADER", langext.Ptr(400))
|
||||
|
||||
TypeUnauthorized = ErrorType{"UNAUTHORIZED", langext.Ptr(401)}
|
||||
TypeAuthFailed = ErrorType{"AUTH_FAILED", langext.Ptr(401)}
|
||||
TypeUnauthorized = NewType("UNAUTHORIZED", langext.Ptr(401))
|
||||
TypeAuthFailed = NewType("AUTH_FAILED", langext.Ptr(401))
|
||||
|
||||
// other values come from pkgconfig
|
||||
)
|
||||
|
||||
var registeredTypes = dataext.SyncSet[string]{}
|
||||
|
||||
func NewType(key string, defStatusCode *int) ErrorType {
|
||||
insertOkay := registeredTypes.Add(key)
|
||||
if !insertOkay {
|
||||
panic("Cannot register same ErrType ('" + key + "') more than once")
|
||||
}
|
||||
|
||||
return ErrorType{key, defStatusCode}
|
||||
}
|
||||
|
||||
|
@@ -5,10 +5,8 @@ import (
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
||||
)
|
||||
|
||||
func BodyBuffer() gin.HandlerFunc {
|
||||
return func(g *gin.Context) {
|
||||
func BodyBuffer(g *gin.Context) {
|
||||
if g.Request.Body != nil {
|
||||
g.Request.Body = dataext.NewBufferedReadCloser(g.Request.Body)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -112,8 +112,8 @@ func (w *GinRouteBuilder) Use(middleware ...gin.HandlerFunc) *GinRouteBuilder {
|
||||
func (w *GinRouteBuilder) Handle(handler WHandlerFunc) {
|
||||
|
||||
if w.routes.wrapper.bufferBody {
|
||||
arr := make([]gin.HandlerFunc, len(w.handlers)+1)
|
||||
arr = append(arr, BodyBuffer())
|
||||
arr := make([]gin.HandlerFunc, 0, len(w.handlers)+1)
|
||||
arr = append(arr, BodyBuffer)
|
||||
arr = append(arr, w.handlers...)
|
||||
w.handlers = arr
|
||||
}
|
||||
@@ -143,13 +143,25 @@ func (w *GinRouteBuilder) Handle(handler WHandlerFunc) {
|
||||
}
|
||||
|
||||
func (w *GinWrapper) NoRoute(handler WHandlerFunc) {
|
||||
w.engine.NoRoute(Wrap(w, handler))
|
||||
|
||||
handlers := make([]gin.HandlerFunc, 0)
|
||||
|
||||
if w.bufferBody {
|
||||
handlers = append(handlers, BodyBuffer)
|
||||
}
|
||||
|
||||
middlewareNames := langext.ArrMap(handlers, func(v gin.HandlerFunc) string { return nameOfFunction(v) })
|
||||
handlerName := nameOfFunction(handler)
|
||||
|
||||
handlers = append(handlers, Wrap(w, handler))
|
||||
|
||||
w.engine.NoRoute(handlers...)
|
||||
|
||||
w.routeSpecs = append(w.routeSpecs, ginRouteSpec{
|
||||
Method: "ANY",
|
||||
URL: "[NO_ROUTE]",
|
||||
Middlewares: nil,
|
||||
Handler: nameOfFunction(handler),
|
||||
Middlewares: middlewareNames,
|
||||
Handler: handlerName,
|
||||
})
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
package goext
|
||||
|
||||
const GoextVersion = "0.0.226"
|
||||
const GoextVersion = "0.0.231"
|
||||
|
||||
const GoextVersionTimestamp = "2023-08-08T14:28:09+0200"
|
||||
const GoextVersionTimestamp = "2023-08-08T16:10:31+0200"
|
||||
|
Reference in New Issue
Block a user