@@ -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 ) {
0 commit comments