Skip to content

Commit

Permalink
✨ Add option to parse ParseStepOptions along
Browse files Browse the repository at this point in the history
  • Loading branch information
wesen committed Feb 7, 2025
1 parent a5ac19f commit 825a4ed
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 5 deletions.
18 changes: 14 additions & 4 deletions pkg/glazed/handlers/json/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,17 @@ type QueryHandler struct {
middlewares []middlewares.Middleware
// useJSONBody determines whether to use JSON body parsing (POST) or query parameters (GET)
useJSONBody bool
// parseOptions are options passed to parameter parsing
parseOptions []parameters.ParseStepOption
}

type QueryHandlerOption func(*QueryHandler)

func NewQueryHandler(cmd cmds.Command, options ...QueryHandlerOption) *QueryHandler {
h := &QueryHandler{
cmd: cmd,
useJSONBody: false, // default to query parameters
cmd: cmd,
useJSONBody: false, // default to query parameters
parseOptions: []parameters.ParseStepOption{},
}

for _, option := range options {
Expand All @@ -51,6 +54,13 @@ func WithJSONBody() QueryHandlerOption {
}
}

// WithParseOptions adds parameter parse options to the handler
func WithParseOptions(options ...parameters.ParseStepOption) QueryHandlerOption {
return func(handler *QueryHandler) {
handler.parseOptions = append(handler.parseOptions, options...)
}
}

var _ handlers.Handler = (*QueryHandler)(nil)

func (h *QueryHandler) Handle(c echo.Context) error {
Expand All @@ -59,7 +69,7 @@ func (h *QueryHandler) Handle(c echo.Context) error {

var jsonMiddleware *parka_middlewares.JSONBodyMiddleware
if h.useJSONBody {
jsonMiddleware = parka_middlewares.NewJSONBodyMiddleware(c, parameters.WithParseStepSource("json"))
jsonMiddleware = parka_middlewares.NewJSONBodyMiddleware(c, append(h.parseOptions, parameters.WithParseStepSource("json"))...)
defer func() {
if err := jsonMiddleware.Close(); err != nil {
// We can only log this error since we're in a defer
Expand All @@ -73,7 +83,7 @@ func (h *QueryHandler) Handle(c echo.Context) error {
if h.useJSONBody {
middlewares_ = append(middlewares_, jsonMiddleware.Middleware())
} else {
middlewares_ = append(middlewares_, parka_middlewares.UpdateFromQueryParameters(c, parameters.WithParseStepSource("query")))
middlewares_ = append(middlewares_, parka_middlewares.UpdateFromQueryParameters(c, append(h.parseOptions, parameters.WithParseStepSource("query"))...))
}

middlewares_ = append(middlewares_, h.middlewares...)
Expand Down
2 changes: 1 addition & 1 deletion pkg/glazed/middlewares/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func (m *JSONBodyMiddleware) Middleware() middlewares.Middleware {
}
defer f.Close()

parsed, err := p.ParseFromReader(f, filepath.Base(tmpPath))
parsed, err := p.ParseFromReader(f, filepath.Base(tmpPath), m.options...)
if err != nil {
return errors.Wrapf(err, "invalid value for parameter '%s'", p.Name)
}
Expand Down

0 comments on commit 825a4ed

Please sign in to comment.