Skip to content

Releases: deepmap/oapi-codegen

v2.1.0: Nullable, external reference improvements, x-order, and many more!

25 Jan 15:02
Compare
Choose a tag to compare

🔊 Notable features

Nullable types

It's possible that you want to be able to determine whether a field isn't sent, is sent as null or has a value.

For instance, if you had the following OpenAPI property:

S:
  type: object
  properties:
    Field:
      type: string
      nullable: true
    required: []

The current behaviour in oapi-codegen is to generate:

type S struct {
	Field *string `json:"field,omitempty"`
}

However, you lose the ability to understand the three cases, as there's no way to distinguish two of the types from each other:

  • is this field not sent? (Can be checked with S.Field == nil)
  • is this field null? (Can be checked with S.Field == nil)
  • does this field have a value? (S.Field != nil && *S.Field == "123")

Therefore, as requested in #1039, this is now possible to represent with the nullable.Nullable type from our new library, oapi-codegen/nullable.

If you configure your generator's Output Options as so:

output-options:
  nullable-type: true

You will now receive the following output:

type S struct {
    Field nullable.Nullable[string] `json:"field,omitempty"`
}

Note that this is opt-in only, due to it being a break in existing signatures and behaviour.

You can find out more about how this works in a blog post with further details.

External references are now handled better

A big change has come in which handling of external references (also called import mappings) is much more resilient and predictable for generated code.

This allows cases where multiple files referencing each other (for instance if you've split your API across multiple files, and join them using $refs) now correctly generate code.

There are a few cases that won't be covered, that we'll complete in #1440 but until then, it hopefully should work better.

Thank you to Ejendomstorvet for sponsoring this work.

🚀 New features and improvements

🐛 Bug fixes

📝 Documentation updates

👻 Maintenance

📦 Dependency updates

New Contributors

v2.0.0: Remove deprecated packages

31 Oct 20:13
Compare
Choose a tag to compare

As announced in oapi-codegen v2 is coming, this is a release to perform some cleanup, drastically reducing the dependency graph for users of the library, and migrating to multi-repo middleware and utility packages that can evolve separately to the code generator itself.

There's more details in https://www.jvt.me/posts/2023/10/23/oapi-codegen-v2-decrease/ in the exact benefits ??, but the key metrics you will be interested in seeing are:

Before (v1.13.0) After (v2.0.0)
Vendored dependency size (MB) 40 6
Direct dependencies 15 6
Indirect dependencies 95 34

Key changes

Full Changelog: v1.16.2...v2.0.0

As a consumer, for the most part you shouldn't have much to do, as if you've been using oapi-codegen v1.15.0 or later, you should be using the new packages.

If you use this as a library or execute it as part of go run you will need to update module import paths:

-//go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml
+//go:generate go run github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml spec.yaml

If you're installing the package via go install, you'll need to run the following instead:

-go install github.com/deepmap/oapi-codegen/cmd/oapi-codegen@latest
+go install github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@latest

Move pkg/testutil to its own package + remove it

Similar to the below changes, we've moved pkg/testutil to its own package, and removed it from the codebase.

The changes for you as a consumer can be seen here.

This is almost a drop in replacement, the key difference is that there is no longer a RequestBuilder.Go method, as it is replaced by the RequestBuilder.GoWithHTTPHandler.

Remove deprecated packages:

For the packages:

  • pkg/chi-middleware
  • pkg/fiber-middleware
  • pkg/gin-middleware
  • pkg/middleware
  • pkg/runtime
  • pkg/types

These have been deprecated because they are now hosted as individual modules at https://github.com/oapi-codegen/. Doing so allows for their dependencies to be separated from each other, so your transitive module dependencies decrease. Any code which you generate using v1.15.0 will already refer to these modules in their new location.

v1.16.2: Further improve documentation notices

24 Oct 12:47
Compare
Choose a tag to compare

What's Changed

Full Changelog: v1.16.1...v1.16.2

v1.16.1: Ensure deprecation comments appear correctly

23 Oct 16:30
Compare
Choose a tag to compare

What's Changed

Full Changelog: v1.16.0...v1.16.1

v1.16.0: Reduce runtime dependencies

23 Oct 16:08
Compare
Choose a tag to compare

As part of the final preparation towards the v2 release, this release finalises the use of the new multi-repo packages, and deprecates all internal packages ahead of next week's release removing them.

Key callouts

Full Changelog: v1.15.0...v1.16.0

v1.15.0: Remove issues with Go 1.21

11 Sep 08:16
Compare
Choose a tag to compare

Go Toolchain issues

As flagged in #1221, folks using Go 1.21 for their local builds - but maybe not targeting Go 1.21, will have been receiving diffs like:

 diff --git a/examples/go.mod b/examples/go.mod
index 4b815bd..929a5b6 100644
--- a/examples/go.mod
+++ b/examples/go.mod
@@ -1,6 +1,8 @@
 module github.com/deepmap/oapi-codegen/examples
 
-go 1.20
+go 1.21
+
+toolchain go1.21.0

This is due to changes in Go 1.21's management of toolchains, and is a side effect of Fiber and Iris targeting Go 1.21.

These dependencies have now been downgraded to requiring 1.20, and we've taken steps as maintainers to reduce the impact in the future, so we should only be targeting the lowest Go version supported by the Go team.

What's Changed

New Contributors

Full Changelog: v1.14.0...v1.15.0

v1.14.0: Iris Support, Go 1.20 requirement, reduction of runtime dependencies, and various other features and fixes

30 Aug 20:07
beb29bb
Compare
Choose a tag to compare

Key callouts

What's Changed

New Contributors

Full Changelog: v1.13.4...v1.14.0

v1.13.4

07 Aug 15:04
Compare
Choose a tag to compare

What's Changed

Full Changelog: v1.13.3...v1.13.4

v1.13.3

03 Aug 09:32
f20166f
Compare
Choose a tag to compare

What's Changed

  • fix: correct marshalling for +json types for strict servers by @reinkrul in #1171

Full Changelog: v1.13.2...v1.13.3

Fix: Allow multiple JSON types to be generated

31 Jul 20:17
4b0df49
Compare
Choose a tag to compare

What's Changed

Full Changelog: v1.13.1...v1.13.2