Wraps HTTP responses in a standardized JSON envelope for consistent API formatting and error handling.
package api
import (
"github.com/gin-gonic/gin"
"net/http"
)
type HandlerFunc func(ctx *gin.Context) *Response
type Response struct {
Code int
Headers http.Header
Data interface{}
JSON bool
}
type ErrorResponse struct {
Error string `json:"error"`
}
func WrapHandler(h HandlerFunc) gin.HandlerFunc {
return func(ctx *gin.Context) {
defer func() {
if err := recover(); err != nil {
ctx.AbortWithStatusJSON(500, ErrorResponse{Error: "Unknown error"})
}
}()
res := h(ctx)
if res == nil {
ctx.Abort()
return
}
for key, values := range res.Headers {
for _, val := range values {
ctx.Writer.Header().Add(key, val)
}
}
if res.JSON && res.Data != nil {
ctx.JSON(res.Code, res.Data)
return
}
ctx.Writer.WriteHeader(res.Code)
if _, o
... (truncated -- full source via MCP)
See the full source, get the GitHub permalink, and search 40K more like it.
Get a free API key