62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package transformers
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
jsoniter "github.com/json-iterator/go"
|
|
)
|
|
|
|
// Definitions
|
|
|
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
|
|
|
type Transformer struct {
|
|
ModifyRequest func(options any, ctx *fiber.Ctx) error
|
|
ModifyResponse func(options any, ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type TransformerConfig struct {
|
|
Type string `json:"type" toml:"type"`
|
|
Options any `json:"options" toml:"options"`
|
|
}
|
|
|
|
func (v *TransformerConfig) TransformRequest(ctx *fiber.Ctx) error {
|
|
for k, f := range Transformers {
|
|
if k == v.Type {
|
|
if f.ModifyRequest != nil {
|
|
return f.ModifyRequest(v.Options, ctx)
|
|
}
|
|
break
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *TransformerConfig) TransformResponse(ctx *fiber.Ctx) error {
|
|
for k, f := range Transformers {
|
|
if k == v.Type {
|
|
if f.ModifyResponse != nil {
|
|
return f.ModifyResponse(v.Options, ctx)
|
|
}
|
|
break
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Helpers
|
|
|
|
func DeserializeOptions[T any](data any) T {
|
|
var out T
|
|
raw, _ := json.Marshal(data)
|
|
_ = json.Unmarshal(raw, &out)
|
|
return out
|
|
}
|
|
|
|
// Map of Transformers
|
|
// Every transformer need to be mapped here so that they can get work.
|
|
|
|
var Transformers = map[string]Transformer{
|
|
"replacePath": ReplacePath,
|
|
"compressResponse": CompressResponse,
|
|
}
|