8000 Update enum generation to generate a map to validate enums. by AndreasAbdi · Pull Request #2181 · oapi-codegen/oapi-codegen · GitHub
[go: up one dir, main page]

Skip to content
< 8000 div class="pr-toolbar d-flex js-toggle-stuck js-observe-sticky-header-height" data-target="diff-layout.diffToolbar">
Open
Show file tree
Hide file tree
Changes from all commits
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
30 changes: 30 additions & 0 deletions examples/extensions/xenumnames/gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions pkg/codegen/codegen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@ type GetTestByNameResponse struct {
assert.Contains(t, code, "type EnumTestEnumNames int")
assert.Contains(t, code, "Two EnumTestEnumNames = 2")
assert.Contains(t, code, "Double EnumTestEnumVarnames = 2")

// Check that enum validation maps are generated:
assert.Contains(t, code, "var EnumTestNumericsValues = map[EnumTestNumerics]struct{}")
assert.Contains(t, code, "var EnumTestEnumNamesValues = map[EnumTestEnumNames]struct{}")
assert.Contains(t, code, "var EnumTestEnumVarnamesValues = map[EnumTestEnumVarnames]struct{}")

// Check that IsValid() methods are generated for each enum:
assert.Contains(t, code, "func (s EnumTestNumerics) IsValid() bool {")
assert.Contains(t, code, "func (s EnumTestEnumNames) IsValid() bool {")
assert.Contains(t, code, "func (s EnumTestEnumVarnames) IsValid() bool {")
}

func TestExtPropGoTypeSkipOptionalPointer(t *testing.T) {
Expand Down
11 changes: 11 additions & 0 deletions pkg/codegen/templates/constants.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,15 @@ const (
{{$name}} {{$Enum.TypeName}} = {{$Enum.ValueWrapper}}{{$value}}{{$Enum.ValueWrapper -}}
{{end}}
)

var {{$Enum.TypeName}}Values = map[{{$Enum.TypeName}}]struct{}{
{{- range $name, $value := $Enum.GetValues}}
{{$name}}: {},
{{- end}}
}

func (s {{$Enum.TypeName}}) IsValid() bool {
_, ok := {{$Enum.TypeName}}Values[s]
return ok
}
{{end}}
Loading
0