Skip to content

Commit b2dcbd0

Browse files
authored
Merge pull request #145 from ogen-go/feat/nested-enum
feat: add support nested enum as query
2 parents 40c81d8 + 04e2ca2 commit b2dcbd0

File tree

4 files changed

+24
-15
lines changed

4 files changed

+24
-15
lines changed

example/message.proto

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ message Item {
2525
message GetItemsRequest {
2626
int32 limit = 1 [(google.api.field_behavior) = REQUIRED];
2727
int32 offset = 2 [(google.api.field_behavior) = REQUIRED];
28+
NestedEnum.ItemType nested_type = 3 [(google.api.field_behavior) = REQUIRED];
2829
}
2930

3031
message GetItemsResponse {

example/openapi.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ paths:
1313
schema:
1414
type: integer
1515
format: int32
16+
- name: nestedType
17+
in: query
18+
required: true
19+
schema:
20+
$ref: '#/components/schemas/NestedEnum.ItemType'
1621
- name: offset
1722
in: query
1823
required: true

internal/gen/generator.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ func NewGenerator(files []*protogen.File, opts ...GeneratorOption) (*Generator,
3232
}
3333

3434
for _, e := range f.Enums {
35-
if err := g.mkEnum(e); err != nil {
36-
return nil, err
37-
}
35+
g.mkEnum(e)
3836
}
3937

4038
for _, s := range f.Services {
@@ -346,6 +344,10 @@ func (g *Generator) mkQueryParameters(op *ogen.Operation, fields map[string]*pro
346344
delete(seen, msg)
347345
continue
348346
}
347+
case protoreflect.EnumKind:
348+
descName := descriptorName(fd.Enum())
349+
s := mkEnumOgenSchema(fd.Enum())
350+
g.spec.AddSchema(descName, s)
349351
case protoreflect.GroupKind:
350352
return errors.Errorf("unsupported kind: %s", kind)
351353
}

internal/gen/schema.go

+13-12
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,11 @@ import (
1414
"github.com/ogen-go/ogen"
1515
)
1616

17-
func (g *Generator) mkEnum(e *protogen.Enum) error {
18-
s := &ogen.Schema{
19-
Type: "string",
20-
Enum: enum(e.Desc),
21-
}
17+
func (g *Generator) mkEnum(e *protogen.Enum) {
18+
s := mkEnumOgenSchema(e.Desc)
2219

2320
name := descriptorName(e.Desc)
2421
g.spec.AddSchema(name, s)
25-
return nil
2622
}
2723

2824
func enum(ed protoreflect.EnumDescriptor) []json.RawMessage {
@@ -41,6 +37,15 @@ func enum(ed protoreflect.EnumDescriptor) []json.RawMessage {
4137
return enum
4238
}
4339

40+
func mkEnumOgenSchema(ed protoreflect.EnumDescriptor) *ogen.Schema {
41+
s := &ogen.Schema{
42+
Type: "string",
43+
Enum: enum(ed),
44+
}
45+
46+
return s
47+
}
48+
4449
func (g *Generator) mkSchema(msg *protogen.Message) error {
4550
s := ogen.NewSchema().SetType("object")
4651

@@ -59,9 +64,7 @@ func (g *Generator) mkSchema(msg *protogen.Message) error {
5964
}
6065
}
6166
if field.Enum != nil {
62-
if err := g.mkEnum(field.Enum); err != nil {
63-
return err
64-
}
67+
g.mkEnum(field.Enum)
6568
}
6669
}
6770

@@ -72,9 +75,7 @@ func (g *Generator) mkSchema(msg *protogen.Message) error {
7275
}
7376

7477
for _, e := range msg.Enums {
75-
if err := g.mkEnum(e); err != nil {
76-
return err
77-
}
78+
g.mkEnum(e)
7879
}
7980

8081
name := descriptorName(msg.Desc)

0 commit comments

Comments
 (0)