Skip to content

Commit 746449b

Browse files
Merge pull request GoogleCloudPlatform#2292 from gemmahou/gen-mapper
chore: Handle List of enum kind
2 parents 727fcd4 + 0609b10 commit 746449b

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

dev/tools/controllerbuilder/pkg/codegen/mappergenerator.go

+30-7
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ func (v *MapperGenerator) writeMapFunctionsForPair(out io.Writer, pair *typePair
215215
}
216216

217217
if protoField.Cardinality() == protoreflect.Repeated {
218-
useSliceFromProto := ""
218+
useSliceFromProtoFunction := ""
219219
useCustomMethod := false
220220

221221
switch protoField.Kind() {
@@ -225,12 +225,22 @@ func (v *MapperGenerator) writeMapFunctionsForPair(out io.Writer, pair *typePair
225225
krmElemTypeName = strings.TrimPrefix(krmElemTypeName, "[]")
226226

227227
functionName := krmElemTypeName + "_FromProto"
228-
useSliceFromProto = functionName
228+
useSliceFromProtoFunction = functionName
229229
case protoreflect.StringKind:
230230
if krmField.Type != "[]string" {
231231
useCustomMethod = true
232232
// useSliceFromProto = fmt.Sprintf("%s_%s_FromProto", goTypeName, protoFieldName)
233233
}
234+
case protoreflect.EnumKind:
235+
krmElemTypeName := krmField.Type
236+
krmElemTypeName = strings.TrimPrefix(krmElemTypeName, "*")
237+
krmElemTypeName = strings.TrimPrefix(krmElemTypeName, "[]")
238+
239+
functionName := "Enum_FromProto"
240+
useSliceFromProtoFunction = fmt.Sprintf("%s(mapCtx, in.%s)",
241+
functionName,
242+
krmFieldName,
243+
)
234244

235245
case
236246
protoreflect.FloatKind,
@@ -241,7 +251,7 @@ func (v *MapperGenerator) writeMapFunctionsForPair(out io.Writer, pair *typePair
241251
protoreflect.Uint32Kind,
242252
protoreflect.Uint64Kind,
243253
protoreflect.BytesKind:
244-
useSliceFromProto = ""
254+
useSliceFromProtoFunction = ""
245255
default:
246256
klog.Fatalf("unhandled kind %q for repeated field %v", protoField.Kind(), protoField)
247257
}
@@ -251,19 +261,19 @@ func (v *MapperGenerator) writeMapFunctionsForPair(out io.Writer, pair *typePair
251261
keyKind := entryMsg.Fields().ByName("key").Kind()
252262
valueKind := entryMsg.Fields().ByName("value").Kind()
253263
if keyKind == protoreflect.StringKind && valueKind == protoreflect.StringKind {
254-
useSliceFromProto = ""
264+
useSliceFromProtoFunction = ""
255265
} else if keyKind == protoreflect.StringKind && valueKind == protoreflect.Int64Kind {
256-
useSliceFromProto = ""
266+
useSliceFromProtoFunction = ""
257267
} else {
258268
fmt.Fprintf(out, "// TODO: map type %v %v\n", keyKind, valueKind)
259269
}
260270
}
261271

262-
if useSliceFromProto != "" {
272+
if useSliceFromProtoFunction != "" {
263273
fmt.Fprintf(out, "\tout.%s = Slice_FromProto(mapCtx, in.%s, %s)\n",
264274
krmFieldName,
265275
krmFieldName,
266-
useSliceFromProto,
276+
useSliceFromProtoFunction,
267277
)
268278
} else if useCustomMethod {
269279
methodName := fmt.Sprintf("%s_%s_FromProto", goTypeName, protoFieldName)
@@ -362,6 +372,19 @@ func (v *MapperGenerator) writeMapFunctionsForPair(out io.Writer, pair *typePair
362372
//useSliceToProtoFunction = fmt.Sprintf("%s_%s_ToProto", goTypeName, protoFieldName)
363373
}
364374

375+
case protoreflect.EnumKind:
376+
krmElemTypeName := krmField.Type
377+
krmElemTypeName = strings.TrimPrefix(krmElemTypeName, "*")
378+
krmElemTypeName = strings.TrimPrefix(krmElemTypeName, "[]")
379+
380+
protoTypeName := "pb." + protoNameForEnum(protoField.Enum())
381+
functionName := "Enum_ToProto"
382+
useSliceToProtoFunction = fmt.Sprintf("%s[%s](mapCtx, in.%s)",
383+
functionName,
384+
protoTypeName,
385+
krmFieldName,
386+
)
387+
365388
case protoreflect.FloatKind,
366389
protoreflect.DoubleKind,
367390
protoreflect.BoolKind,

0 commit comments

Comments
 (0)