diff --git a/internal/test/issues/issue609/config.yaml b/internal/test/issues/issue609/config.yaml new file mode 100644 index 0000000000..a9c4b93879 --- /dev/null +++ b/internal/test/issues/issue609/config.yaml @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=../../../../configuration-schema.json +package: issue609 +generate: + models: true +output: issue609.gen.go +output-options: + skip-prune: true diff --git a/internal/test/issues/issue609/generate.go b/internal/test/issues/issue609/generate.go new file mode 100644 index 0000000000..ade5eb92fb --- /dev/null +++ b/internal/test/issues/issue609/generate.go @@ -0,0 +1,3 @@ +package issue609 + +//go:generate go run github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml openapi.yaml diff --git a/internal/test/issues/issue609/issue609.gen.go b/internal/test/issues/issue609/issue609.gen.go new file mode 100644 index 0000000000..a5d76e500d --- /dev/null +++ b/internal/test/issues/issue609/issue609.gen.go @@ -0,0 +1,9 @@ +// Package issue609 provides primitives to interact with the openapi HTTP API. +// +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.0.0-00010101000000-000000000000 DO NOT EDIT. +package issue609 + +// ResponseBody defines model for ResponseBody. +type ResponseBody struct { + Unknown interface{} `json:"unknown,omitempty"` +} diff --git a/internal/test/issues/issue609/openapi.yaml b/internal/test/issues/issue609/openapi.yaml new file mode 100644 index 0000000000..d7dae7fdf3 --- /dev/null +++ b/internal/test/issues/issue609/openapi.yaml @@ -0,0 +1,11 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: "Referencing an optional field, which has no information about the type it is will generate an `interface{}`, without the 'optional pointer'" +paths: +components: + schemas: + ResponseBody: + type: object + properties: + unknown: {} diff --git a/pkg/codegen/schema.go b/pkg/codegen/schema.go index c106538bad..9ca303d91b 100644 --- a/pkg/codegen/schema.go +++ b/pkg/codegen/schema.go @@ -329,6 +329,8 @@ func GenerateGoSchema(sref *openapi3.SchemaRef, path []string) (Schema, error) { // If we don't even have the object designator, we're a completely // generic type. outType = "interface{}" + // this should never have an "optional pointer", as it doesn't make sense to be a `*interface{}` + outSchema.SkipOptionalPointer = true } outSchema.GoType = outType outSchema.DefineViaAlias = true