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, } }