diff --git a/ginext/routes.go b/ginext/routes.go index daa5b26..22479dd 100644 --- a/ginext/routes.go +++ b/ginext/routes.go @@ -1,13 +1,14 @@ package ginext import ( - "git.blackforestbytes.com/BlackForestBytes/goext/langext" - "github.com/gin-gonic/gin" "net/http" "path" "reflect" "runtime" "strings" + + "git.blackforestbytes.com/BlackForestBytes/goext/langext" + "github.com/gin-gonic/gin" ) var anyMethods = []string{ @@ -210,6 +211,37 @@ func (w *GinRouteBuilder) HandleRawHTTPHandlerFunc(f http.HandlerFunc) { }) } +func (w *GinRouteBuilder) HandleExtHTTPHandlerFunc(f func(*gin.Context, http.ResponseWriter, *http.Request)) { + if w.routes.wrapper.bufferBody { + arr := make([]gin.HandlerFunc, 0, len(w.handlers)+1) + arr = append(arr, BodyBuffer) + arr = append(arr, w.handlers...) + w.handlers = arr + } + + middlewareNames := langext.ArrMap(w.handlers, func(v gin.HandlerFunc) string { return nameOfFunction(v) }) + + w.handlers = append(w.handlers, WrapExtHTTPHandlerFunc(w.routes.wrapper, f)) + + methodName := w.method + + if w.method == "*" { + methodName = "ANY" + for _, method := range anyMethods { + w.routes.routes.Handle(method, w.relPath, w.handlers...) + } + } else { + w.routes.routes.Handle(w.method, w.relPath, w.handlers...) + } + + w.routes.wrapper.routeSpecs = append(w.routes.wrapper.routeSpecs, ginRouteSpec{ + Method: methodName, + URL: w.absPath, + Middlewares: middlewareNames, + Handler: "[HTTPHandlerFunc]", + }) +} + func (w *GinWrapper) NoRoute(handler WHandlerFunc) { handlers := make([]gin.HandlerFunc, 0) diff --git a/goextVersion.go b/goextVersion.go index 7bea854..c92fd81 100644 --- a/goextVersion.go +++ b/goextVersion.go @@ -1,5 +1,5 @@ package goext -const GoextVersion = "0.0.627" +const GoextVersion = "0.0.628" -const GoextVersionTimestamp = "2026-03-14T01:13:07+0100" +const GoextVersionTimestamp = "2026-03-14T01:13:37+0100"