mirror of
https://codeberg.org/VnPower/PixivFE
synced 2024-12-06 19:16:23 +01:00
try typed c.Render
prototype is a success!
This commit is contained in:
@@ -15,11 +15,11 @@ import (
|
||||
|
||||
"codeberg.org/vnpower/pixivfe/v2/config"
|
||||
"codeberg.org/vnpower/pixivfe/v2/pixiv_api"
|
||||
"codeberg.org/vnpower/pixivfe/v2/session"
|
||||
|
||||
"codeberg.org/vnpower/pixivfe/v2/routes"
|
||||
"codeberg.org/vnpower/pixivfe/v2/session"
|
||||
"codeberg.org/vnpower/pixivfe/v2/utils"
|
||||
"codeberg.org/vnpower/pixivfe/v2/utils/kmutex"
|
||||
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/cache"
|
||||
@@ -86,7 +86,7 @@ func main() {
|
||||
|
||||
// Send custom error page
|
||||
c.Status(code)
|
||||
err = c.Render("error", fiber.Map{"Title": "Error", "Error": err})
|
||||
err = routes.Render(c, routes.Data_error{Title: "Error", Error: err})
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("Internal Server Error: %s", err))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"log"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
type Data_error struct {
|
||||
Title string
|
||||
Error error
|
||||
}
|
||||
|
||||
func Render[T interface{}](c *fiber.Ctx, data T) error {
|
||||
route_name, found := strings.CutPrefix(reflect.TypeFor[T]().Name(), "Data_")
|
||||
if !found { log.Panicf("struct name does not start with 'Data_': %s", route_name) }
|
||||
return c.Render(route_name, structToMap(data))
|
||||
}
|
||||
|
||||
func structToMap[T interface{}](data T) map[string]interface{} {
|
||||
result := map[string]interface{}{}
|
||||
Type := reflect.TypeFor[T]()
|
||||
for i := 0; i < Type.NumField(); i += 1 {
|
||||
field := Type.Field(i)
|
||||
result[field.Name] = reflect.ValueOf(data).FieldByName(field.Name).Interface()
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
package routes
|
||||
|
||||
@@ -98,3 +98,6 @@ rules:
|
||||
severity: INFO
|
||||
pattern: |
|
||||
c.Render(...)
|
||||
paths:
|
||||
exclude:
|
||||
- "render_types.go"
|
||||
Reference in New Issue
Block a user