[go-experimental] Ensure enum deserialization checks enum values #6315
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This new unmarshalling method for enums ensures that unmarshalling fails if the value is not in the enumeration choices. As the enum type is just a type alias in go, technically any value of the base type can actually be assigned to it - this patch prevents that at least on unmarshalling.
This allows to properly deserialize
oneOf
members that have a common field that has specific distinct choices for each of the members. For example:A
andB
are members ofoneOf
and both have afoo
A
,foo
is an enum with allowed choicesa
,A
B
,foo
is an enum with allowed choicesb
,B
Having this new unmarshalling method ensures that entity with
foo: b
can't get deserialized asA
, but only asB
, hence theoneOf
deserialization works properly.PR checklist
./bin/
(or Windows batch scripts under.\bin\windows
) to update Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit, and these must match the expectations made by your contribution. You only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the code or mustache templates for a language ({LANG}
) (e.g. php, ruby, python, etc).master
,4.3.x
,5.0.x
. Default:master
.@antihax (2017/11) @bvwells (2017/12) @grokify (2018/07) @kemokemo (2018/09) @bkabrda (2019/07)