36 lines
738 B
Go
36 lines
738 B
Go
|
|
package handlers
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/gofiber/fiber/v3"
|
||
|
|
)
|
||
|
|
|
||
|
|
type acceptor struct {
|
||
|
|
canAccept func(ctx fiber.Ctx) bool
|
||
|
|
acceptFn func(ctx fiber.Ctx) error
|
||
|
|
}
|
||
|
|
|
||
|
|
func accepts(ctx fiber.Ctx, acceptors ...acceptor) error {
|
||
|
|
for _, a := range acceptors {
|
||
|
|
if a.canAccept(ctx) {
|
||
|
|
return a.acceptFn(ctx)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return fiber.ErrNotFound
|
||
|
|
}
|
||
|
|
|
||
|
|
func json(fn func() any) acceptor {
|
||
|
|
return acceptor{
|
||
|
|
canAccept: func(ctx fiber.Ctx) bool { return ctx.AcceptsJSON() && !ctx.AcceptsHTML() },
|
||
|
|
acceptFn: func(ctx fiber.Ctx) error {
|
||
|
|
return ctx.Status(fiber.StatusOK).JSON(fn())
|
||
|
|
},
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func html(fn func(ctx fiber.Ctx) error) acceptor {
|
||
|
|
return acceptor{
|
||
|
|
canAccept: func(ctx fiber.Ctx) bool { return ctx.AcceptsHTML() },
|
||
|
|
acceptFn: fn,
|
||
|
|
}
|
||
|
|
}
|