diff --git a/.vscode/launch.json b/.vscode/launch.json index 1008171..cab8a98 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -37,7 +37,7 @@ "args": [ "gen", "route", - "/projects/learn/qq", + "/projects/qvyun/backend", ] } ] diff --git a/pkg/ast/route/render.go b/pkg/ast/route/render.go index 1e40939..3a2d74d 100644 --- a/pkg/ast/route/render.go +++ b/pkg/ast/route/render.go @@ -80,6 +80,12 @@ func Render(path string, routes []RouteDefinition) error { return fmt.Sprintf(`Body[%s]("%s")`, item.Type, item.Name), true case PositionPath: return fmt.Sprintf(`Path[%s]("%s")`, item.Type, item.Name), true + case PositionLocal: + key := item.Name + if item.Key != "" { + key = item.Key + } + return fmt.Sprintf(`Local[%s]("%s")`, item.Type, key), true } return "", false }), diff --git a/pkg/ast/route/route.go b/pkg/ast/route/route.go index 8b6417c..396b705 100644 --- a/pkg/ast/route/route.go +++ b/pkg/ast/route/route.go @@ -53,6 +53,8 @@ func positionFromString(v string) Position { return PositionHeader case "cookie": return PositionCookie + case "local": + return PositionLocal } panic("invalid position: " + v) } @@ -64,6 +66,7 @@ const ( PositionBody Position = "body" PositionHeader Position = "header" PositionCookie Position = "cookie" + PositionLocal Position = "local" ) func ParseFile(file string) []RouteDefinition { @@ -175,11 +178,14 @@ func ParseFile(file string) []RouteDefinition { usedImports[recvType] = append(usedImports[recvType], imports[pkgName[0]]) } - typ = strings.TrimPrefix(typ, "*") - for _, name := range param.Names { for i, bindParam := range bindParams { if bindParam.Name == name.Name { + + if bindParams[i].Position != PositionLocal { + typ = strings.TrimPrefix(typ, "*") + } + bindParams[i].Type = typ break }