Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Clean up router imports
Instead of hardcoding each router's framework and strict middleware
imports directly in imports.tmpl with per-router conditional blocks,
compute them in Go code via GenerateOptions.RouterImports() and pass
them to the template as RouterImports. The template now uses a single
range loop over .RouterImports, making it straightforward to add new
routers without touching the template.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
  • Loading branch information
mromaszewicz and claude committed Mar 3, 2026
commit 0a35ba538eef873dc6bdd9ef7e5b891eb4ccacad
2 changes: 2 additions & 0 deletions pkg/codegen/codegen.go
Original file line number Diff line number Diff line change
Expand Up @@ -1038,12 +1038,14 @@ func GenerateImports(t *template.Template, externalImports []string, packageName
ModuleName string
Version string
AdditionalImports []AdditionalImport
RouterImports []AdditionalImport
}{
ExternalImports: externalImports,
PackageName: packageName,
ModuleName: modulePath,
Version: moduleVersion,
AdditionalImports: globalState.options.AdditionalImports,
RouterImports: globalState.options.Generate.RouterImports(),
}

return GenerateTemplates([]string{"imports.tmpl"}, t, context)
Expand Down
48 changes: 48 additions & 0 deletions pkg/codegen/configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,54 @@ type GenerateOptions struct {
ServerURLs bool `yaml:"server-urls,omitempty"`
}

// RouterImports returns the framework-specific and strict middleware imports
// needed based on which server type is selected.
func (g GenerateOptions) RouterImports() []AdditionalImport {
var imports []AdditionalImport

switch {
case g.EchoServer:
imports = append(imports, AdditionalImport{Package: "github.com/labstack/echo/v4"})
if g.Strict {
imports = append(imports, AdditionalImport{Alias: "strictecho", Package: "github.com/oapi-codegen/runtime/strictmiddleware/echo"})
}
case g.Echo5Server:
imports = append(imports, AdditionalImport{Package: "github.com/labstack/echo/v5"})
if g.Strict {
imports = append(imports, AdditionalImport{Alias: "strictecho5", Package: "github.com/oapi-codegen/runtime/strictmiddleware/echo/v5"})
}
case g.ChiServer:
imports = append(imports, AdditionalImport{Package: "github.com/go-chi/chi/v5"})
if g.Strict {
imports = append(imports, AdditionalImport{Alias: "strictnethttp", Package: "github.com/oapi-codegen/runtime/strictmiddleware/nethttp"})
}
case g.GinServer:
imports = append(imports, AdditionalImport{Package: "github.com/gin-gonic/gin"})
if g.Strict {
imports = append(imports, AdditionalImport{Alias: "strictgin", Package: "github.com/oapi-codegen/runtime/strictmiddleware/gin"})
}
case g.GorillaServer:
imports = append(imports, AdditionalImport{Package: "github.com/gorilla/mux"})
if g.Strict {
imports = append(imports, AdditionalImport{Alias: "strictnethttp", Package: "github.com/oapi-codegen/runtime/strictmiddleware/nethttp"})
}
case g.FiberServer:
imports = append(imports, AdditionalImport{Package: "github.com/gofiber/fiber/v2"})
case g.IrisServer:
imports = append(imports, AdditionalImport{Package: "github.com/kataras/iris/v12"})
imports = append(imports, AdditionalImport{Package: "github.com/kataras/iris/v12/core/router"})
if g.Strict {
imports = append(imports, AdditionalImport{Alias: "strictiris", Package: "github.com/oapi-codegen/runtime/strictmiddleware/iris"})
}
case g.StdHTTPServer:
if g.Strict {
imports = append(imports, AdditionalImport{Alias: "strictnethttp", Package: "github.com/oapi-codegen/runtime/strictmiddleware/nethttp"})
}
}

return imports
}

func (oo GenerateOptions) Validate() map[string]string {
return nil
}
Expand Down
30 changes: 3 additions & 27 deletions pkg/codegen/templates/imports.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -28,35 +28,11 @@ import (

"github.com/oapi-codegen/runtime"
"github.com/oapi-codegen/nullable"
strictecho5 "github.com/oapi-codegen/runtime/strictmiddleware/echo/v5"
strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo"
strictgin "github.com/oapi-codegen/runtime/strictmiddleware/gin"
strictiris "github.com/oapi-codegen/runtime/strictmiddleware/iris"
strictnethttp "github.com/oapi-codegen/runtime/strictmiddleware/nethttp"
openapi_types "github.com/oapi-codegen/runtime/types"
"github.com/getkin/kin-openapi/openapi3"
{{- if opts.Generate.ChiServer }}
"github.com/go-chi/chi/v5"
{{- end }}
{{- if opts.Generate.EchoServer }}
"github.com/labstack/echo/v4"
{{- end }}
{{- if opts.Generate.Echo5Server }}
"github.com/labstack/echo/v5"
{{- end }}
{{- if opts.Generate.GinServer }}
"github.com/gin-gonic/gin"
{{- end }}
{{- if opts.Generate.FiberServer }}
"github.com/gofiber/fiber/v2"
{{- end }}
{{- if opts.Generate.IrisServer }}
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/core/router"
{{- end }}
{{- if opts.Generate.GorillaServer }}
"github.com/gorilla/mux"
{{- end }}
{{- range .RouterImports}}
{{if .Alias}}{{.Alias}} {{end}}"{{.Package}}"
{{- end}}
{{- range .ExternalImports}}
{{ . }}
{{- end}}
Expand Down