Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
e10140e143
|
|||
e165f0f62f
|
|||
655d4daad9
|
|||
87a004e577
|
|||
376c6cab50
|
@@ -7,6 +7,9 @@ type SyncSet[TData comparable] struct {
|
|||||||
lock sync.Mutex
|
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 {
|
func (s *SyncSet[TData]) Add(value TData) bool {
|
||||||
s.lock.Lock()
|
s.lock.Lock()
|
||||||
defer s.lock.Unlock()
|
defer s.lock.Unlock()
|
||||||
@@ -15,10 +18,10 @@ func (s *SyncSet[TData]) Add(value TData) bool {
|
|||||||
s.data = make(map[TData]bool)
|
s.data = make(map[TData]bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok := s.data[value]
|
_, existsInPreState := s.data[value]
|
||||||
s.data[value] = true
|
s.data[value] = true
|
||||||
|
|
||||||
return !ok
|
return !existsInPreState
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncSet[TData]) AddAll(values []TData) {
|
func (s *SyncSet[TData]) AddAll(values []TData) {
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package exerr
|
package exerr
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -37,25 +38,32 @@ type ErrorType struct {
|
|||||||
|
|
||||||
//goland:noinspection GoUnusedGlobalVariable
|
//goland:noinspection GoUnusedGlobalVariable
|
||||||
var (
|
var (
|
||||||
TypeInternal = ErrorType{"INTERNAL_ERROR", langext.Ptr(500)}
|
TypeInternal = NewType("INTERNAL_ERROR", langext.Ptr(500))
|
||||||
TypePanic = ErrorType{"PANIC", langext.Ptr(500)}
|
TypePanic = NewType("PANIC", langext.Ptr(500))
|
||||||
TypeNotImplemented = ErrorType{"NOT_IMPLEMENTED", 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)}
|
TypeBindFailURI = NewType("BINDFAIL_URI", langext.Ptr(400))
|
||||||
TypeBindFailQuery = ErrorType{"BINDFAIL_QUERY", langext.Ptr(400)}
|
TypeBindFailQuery = NewType("BINDFAIL_QUERY", langext.Ptr(400))
|
||||||
TypeBindFailJSON = ErrorType{"BINDFAIL_JSON", langext.Ptr(400)}
|
TypeBindFailJSON = NewType("BINDFAIL_JSON", langext.Ptr(400))
|
||||||
TypeBindFailFormData = ErrorType{"BINDFAIL_FORMDATA", langext.Ptr(400)}
|
TypeBindFailFormData = NewType("BINDFAIL_FORMDATA", langext.Ptr(400))
|
||||||
TypeBindFailHeader = ErrorType{"BINDFAIL_HEADER", langext.Ptr(400)}
|
TypeBindFailHeader = NewType("BINDFAIL_HEADER", langext.Ptr(400))
|
||||||
|
|
||||||
TypeUnauthorized = ErrorType{"UNAUTHORIZED", langext.Ptr(401)}
|
TypeUnauthorized = NewType("UNAUTHORIZED", langext.Ptr(401))
|
||||||
TypeAuthFailed = ErrorType{"AUTH_FAILED", langext.Ptr(401)}
|
TypeAuthFailed = NewType("AUTH_FAILED", langext.Ptr(401))
|
||||||
|
|
||||||
// other values come from pkgconfig
|
// other values come from pkgconfig
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var registeredTypes = dataext.SyncSet[string]{}
|
||||||
|
|
||||||
func NewType(key string, defStatusCode *int) ErrorType {
|
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}
|
return ErrorType{key, defStatusCode}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5,10 +5,8 @@ import (
|
|||||||
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
||||||
)
|
)
|
||||||
|
|
||||||
func BodyBuffer() gin.HandlerFunc {
|
func BodyBuffer(g *gin.Context) {
|
||||||
return func(g *gin.Context) {
|
if g.Request.Body != nil {
|
||||||
if g.Request.Body != nil {
|
g.Request.Body = dataext.NewBufferedReadCloser(g.Request.Body)
|
||||||
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) {
|
func (w *GinRouteBuilder) Handle(handler WHandlerFunc) {
|
||||||
|
|
||||||
if w.routes.wrapper.bufferBody {
|
if w.routes.wrapper.bufferBody {
|
||||||
arr := make([]gin.HandlerFunc, len(w.handlers)+1)
|
arr := make([]gin.HandlerFunc, 0, len(w.handlers)+1)
|
||||||
arr = append(arr, BodyBuffer())
|
arr = append(arr, BodyBuffer)
|
||||||
arr = append(arr, w.handlers...)
|
arr = append(arr, w.handlers...)
|
||||||
w.handlers = arr
|
w.handlers = arr
|
||||||
}
|
}
|
||||||
@@ -143,13 +143,25 @@ func (w *GinRouteBuilder) Handle(handler WHandlerFunc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *GinWrapper) NoRoute(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{
|
w.routeSpecs = append(w.routeSpecs, ginRouteSpec{
|
||||||
Method: "ANY",
|
Method: "ANY",
|
||||||
URL: "[NO_ROUTE]",
|
URL: "[NO_ROUTE]",
|
||||||
Middlewares: nil,
|
Middlewares: middlewareNames,
|
||||||
Handler: nameOfFunction(handler),
|
Handler: handlerName,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
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