diff --git a/internal/test/exclude_package_go_type/cfg.yaml b/internal/test/exclude_package_go_type/cfg.yaml new file mode 100644 index 0000000000..96a21af17b --- /dev/null +++ b/internal/test/exclude_package_go_type/cfg.yaml @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=../../configuration-schema.json +package: exclude_package_go_type +output: exclude_package_go_type.gen.go +generate: + models: true +output-options: + exclude-package-go-type: true diff --git a/internal/test/exclude_package_go_type/doc.go b/internal/test/exclude_package_go_type/doc.go new file mode 100644 index 0000000000..3a20cdf220 --- /dev/null +++ b/internal/test/exclude_package_go_type/doc.go @@ -0,0 +1,3 @@ +package exclude_package_go_type + +//go:generate go run github.com/livesession/oapi-codegen/v2/cmd/oapi-codegen -config cfg.yaml openapi.yaml diff --git a/internal/test/exclude_package_go_type/exclude_package_go_type.gen.go b/internal/test/exclude_package_go_type/exclude_package_go_type.gen.go new file mode 100644 index 0000000000..b57ecfa5ab --- /dev/null +++ b/internal/test/exclude_package_go_type/exclude_package_go_type.gen.go @@ -0,0 +1,9 @@ +// Package exclude_package_go_type provides primitives to interact with the openapi HTTP API. +// +// Code generated by github.com/livesession/oapi-codegen/v2 version v2.0.0-00010101000000-000000000000 DO NOT EDIT. +package exclude_package_go_type + +// ResponsePlaceholder defines model for response.Placeholder. +type ResponsePlaceholder struct { + Name string `json:"name"` +} diff --git a/internal/test/exclude_package_go_type/openapi.yaml b/internal/test/exclude_package_go_type/openapi.yaml new file mode 100644 index 0000000000..4eaa281da8 --- /dev/null +++ b/internal/test/exclude_package_go_type/openapi.yaml @@ -0,0 +1,25 @@ +openapi: "3.0.1" +info: + version: 1.0.0 + title: Tests exclude package go type option +paths: + /placeholder: + get: + operationId: placeholder + responses: + default: + description: placeholder + content: + application/json: + schema: + $ref: "#/components/schemas/response.Placeholder" +components: + schemas: + response.Placeholder: + x-go-embedding: true + x-go-type: Ignored + type: object + required: [name] + properties: + name: + type: string diff --git a/pkg/codegen/configuration.go b/pkg/codegen/configuration.go index 1d9ff3eaea..ca65e5c699 100644 --- a/pkg/codegen/configuration.go +++ b/pkg/codegen/configuration.go @@ -250,6 +250,8 @@ type OutputOptions struct { IncludeTags []string `yaml:"include-tags,omitempty"` // Exclude operations that have one of these tags. Ignored when empty. ExcludeTags []string `yaml:"exclude-tags,omitempty"` + // Exclude package the `x-go-type` extension when generating types from schemas + ExcludePackageGoType bool `yaml:"exclude-package-go-type,omitempty"` // Only include operations that have one of these operation-ids. Ignored when empty. IncludeOperationIDs []string `yaml:"include-operation-ids,omitempty"` // Exclude operations that have one of these operation-ids. Ignored when empty. diff --git a/pkg/codegen/schema.go b/pkg/codegen/schema.go index 1d03fbdd0e..2e9101825c 100644 --- a/pkg/codegen/schema.go +++ b/pkg/codegen/schema.go @@ -316,10 +316,22 @@ func GenerateGoSchema(sref *openapi3.SchemaRef, path []string) (Schema, error) { if err != nil { return outSchema, fmt.Errorf("invalid value for %q: %w", extPropGoType, err) } - outSchema.GoType = typeName - outSchema.DefineViaAlias = true - return outSchema, nil + exludeCurrentPackage := false + currentPackage := globalState.options.PackageName + if globalState.options.OutputOptions.ExcludePackageGoType { + parts := strings.Split(typeName, ".") + if parts[0] == currentPackage { + exludeCurrentPackage = true + } + } + + if !exludeCurrentPackage { + outSchema.GoType = typeName + outSchema.DefineViaAlias = true + + return outSchema, nil + } } // Schema type and format, eg. string / binary