Skip to content

Commit 12a6ee0

Browse files
authored
Merge pull request #4 from thnxdev/include-params-in-options
Return URL params in HandlerOptions
2 parents a851a26 + 16ba0fd commit 12a6ee0

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

cmd/happy/main.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,10 @@ func generateHandler(gctx *genContext, eps []endpoint, tree *tree) error {
163163
w.L("return nil")
164164
return
165165
}
166-
w.L("return %#v", ep.directive.options)
166+
w.L("out := %#v", ep.directive.options)
167+
w.L("// Merge url params into options")
168+
w.L("for k, v := range params { out[k] = v }")
169+
w.L("return out")
167170
})
168171
w.L("return nil")
169172
})
@@ -498,23 +501,23 @@ func genEndpoint(gctx *genContext, w *codewriter.Writer, ep endpoint) error {
498501
case implements(param, textUnmarshalerInterface()):
499502
paramName := fmt.Sprintf("param%d", index)
500503
w.L("var %s %s", paramName, ref)
501-
w.L("if err := %s.UnmarshalText([]byte(params[%d])); err != nil {", paramName, index)
504+
w.L(`if err := %s.UnmarshalText([]byte(params[":%s"])); err != nil {`, paramName, param.Name())
502505
w.L(" http.Error(w, \"%s: \" + err.Error(), http.StatusBadRequest)", param.Name())
503506
w.L(" return")
504507
w.L("}")
505508
args = append(args, paramName)
506509

507510
case bt == "string":
508511
if bt != ref {
509-
args = append(args, fmt.Sprintf("%s(params[%d])", ref, index))
512+
args = append(args, fmt.Sprintf(`%s(params[":%s"])`, ref, param.Name()))
510513
} else {
511-
args = append(args, fmt.Sprintf("params[%d]", index))
514+
args = append(args, fmt.Sprintf(`params[":%s"]`, param.Name()))
512515
}
513516

514517
case bt == "int":
515518
paramName := fmt.Sprintf("param%d", index)
516519
w.L("var %s int", paramName)
517-
w.L("%s, err = strconv.Atoi(params[%d])", paramName, index)
520+
w.L(`%s, err = strconv.Atoi(params[":%s"])`, paramName, param.Name())
518521
if bt != ref {
519522
args = append(args, fmt.Sprintf("%s(%s)", ref, paramName))
520523
} else {
@@ -618,7 +621,7 @@ func (t *tree) Write(w *codewriter.Writer, earlyExit string, visitor func(w *cod
618621
w.L(` parts = append(parts, p)`)
619622
w.L(` }`)
620623
w.L(`}`)
621-
w.L(`var params []string`)
624+
w.L(`var params map[string]string = map[string]string{}`)
622625
w.L(`_ = params`)
623626
w.L(`switch parts[0] {`)
624627
t.recursiveWrite(w, 0, visitor, earlyExit)
@@ -632,7 +635,7 @@ func (t *tree) recursiveWrite(w *codewriter.Writer, n int, visitor func(w *codew
632635
w.L(`case "%s":`, t.part)
633636
} else {
634637
w.L(`default: // Parameter %s`, t.part)
635-
w.L(` params = append(params, parts[%d])`, n)
638+
w.L(` params["%s"] = parts[%d]`, t.part, n)
636639
}
637640
w.In(func(w *codewriter.Writer) {
638641
w.In(func(w *codewriter.Writer) {

testdata/main_api.go

Lines changed: 12 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)