Files
aigrammar/format.go
2024-08-12 04:10:48 +00:00

98 lines
1.9 KiB
Go

package main
import (
"fmt"
"net/http"
"os"
"github.com/labstack/echo/v4"
)
type Response struct {
Ret int `json:"ret"`
Message string `json:"message"`
Data interface{} `json:"data"`
}
func unifiedResponseHandler(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
err := next(c)
if err != nil {
// Let the custom HTTP error handler handle the error
fmt.Fprintf(os.Stderr, "print error: %v", err)
return err
}
// Handle successful responses
ret, _ := c.Get("ret").(int)
msg, _ := c.Get("msg").(string)
response := c.Get("response")
return c.JSON(http.StatusOK, Response{
Ret: ret,
Message: msg,
Data: response,
})
}
}
// Custom HTTP error handler
func customHTTPErrorHandler(err error, c echo.Context) {
var (
code = http.StatusInternalServerError
message = "Internal Server Error"
)
if he, ok := err.(*echo.HTTPError); ok {
code = he.Code
message = he.Message.(string)
}
c.JSON(http.StatusOK, Response{
Ret: code,
Message: message,
Data: nil,
})
}
// Helper function to set the response
func setResponse(c echo.Context, data interface{}) {
c.Set("ret", 0)
c.Set("msg", "success")
c.Set("response", data)
}
// Helper function to set the response
func setErrResponse(c echo.Context, ret int, msg string) {
c.Set("ret", ret)
c.Set("msg", msg)
c.Set("response", nil)
}
/*
func unifiedResponseHandler(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
err := next(c)
if err != nil {
c.Error(err)
}
// Retrieve the response
if he, ok := err.(*echo.HTTPError); ok {
return c.JSON(http.StatusOK, Response{
Ret: he.Code,
Message: he.Message.(string),
Data: nil,
})
}
// Handle successful responses
response := c.Get("response")
return c.JSON(http.StatusOK, Response{
Ret: 0,
Message: "success",
Data: response,
})
}
}
*/