Skip to content

Commit 5ebadfc

Browse files
authored
generating builders for enabled enum types (#31)
1 parent f624884 commit 5ebadfc

5 files changed

Lines changed: 56 additions & 1 deletion

File tree

pkg/generators/builder/builder.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,11 @@ func (b *BuilderPatternGenerator) generateSettersForType(sw *generator.SnippetWr
187187
case m.Type == types.Bool:
188188
sw.Do(setter.GenerateSetterForBool(m))
189189
default:
190-
sw.Do(setter.GenerateSetterForType(m))
190+
if b.isTypePrimitiveEnabled(m) {
191+
sw.Do(setter.GenerateSetterForTypeEnum(m, b.getEnabledPrimitiveType(m)))
192+
} else {
193+
sw.Do(setter.GenerateSetterForType(m))
194+
}
191195
}
192196
}
193197
}
@@ -222,6 +226,11 @@ func (b *BuilderPatternGenerator) isTypePrimitiveEnabled(t types.Member) bool {
222226
return exists
223227
}
224228

229+
func (b *BuilderPatternGenerator) getEnabledPrimitiveType(t types.Member) *types.Type {
230+
typeName := t.Name
231+
return b.enabledTypes[typeName]
232+
}
233+
225234
func (b *BuilderPatternGenerator) getWrapperType(t *types.Type) *types.Type {
226235
typeName := t.Name.String()
227236
if parent, ok := b.enabledTypes[typeName]; ok {

pkg/generators/snippets/setters.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,23 @@ func (o $.pointer$$.type|raw$) $.funcName$(in $.memberType|raw$) $.pointer$$.typ
3737
return raw, args
3838
}
3939

40+
func (s *Setter) GenerateSetterForTypeEnum(member types.Member, argType *types.Type) (string, generator.Args) {
41+
args := defaultGeneratorArgs(s.Root, s.pointerReceiver)
42+
args["funcName"] = funcName(member)
43+
args["memberAccessor"] = s.memberAccessor(member)
44+
args["argType"] = argType
45+
args["enumType"] = member.Type
46+
47+
raw := `// $.funcName$ is an autogenerated function
48+
func (o $.pointer$$.type|raw$) $.funcName$(in $.argType|raw$) $.pointer$$.type|raw$ {
49+
o.$.memberAccessor$ = $.enumType|raw$(in)
50+
return o
51+
}
52+
53+
`
54+
return raw, args
55+
}
56+
4057
func (s *Setter) GenerateSetterForBool(member types.Member) (string, generator.Args) {
4158
args := defaultGeneratorArgs(s.Root, s.pointerReceiver)
4259
args["funcName"] = funcName(member)

pkg/generators/snippets/setters_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,32 @@ func (o *SomeStruct) WithAlias(in Alias) *SomeStruct {
466466
assert.Equal(t, want, b.String())
467467
}
468468

469+
func TestGenerateSetterForStringEnum(t *testing.T) {
470+
t.Parallel()
471+
472+
ctx, err := newTestGeneratorContext()
473+
require.NoError(t, err)
474+
475+
someStruct := newTestType(t, "SomeStruct")
476+
anEnumType := newTestType(t, "AnEnum")
477+
root := someStruct
478+
member := getMemberFromType(t, someStruct, "SomeStruct", "AnEnum")
479+
parent := getMemberFromType(t, someStruct, "SomeStruct")
480+
want := `// WithAnEnum is an autogenerated function
481+
func (o *SomeStruct) WithAnEnum(in AnEnum) *SomeStruct {
482+
o.SomeStruct.AnEnum = b.AliasOfString(in)
483+
return o
484+
}
485+
486+
`
487+
var b bytes.Buffer
488+
setter := NewSetter(root, parent.Type, true)
489+
sw := generator.NewSnippetWriter(&b, ctx, "$", "$")
490+
sw.Do(setter.GenerateSetterForTypeEnum(member, anEnumType))
491+
assert.NoError(t, sw.Error())
492+
assert.Equal(t, want, b.String())
493+
}
494+
469495
func TestMemberAccessor(t *testing.T) {
470496
t.Parallel()
471497

pkg/generators/snippets/testdata/a/a.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type SomeStruct struct {
1919
Bool bool
2020
PointerBool *bool
2121
Alias *b.AliasOfString
22+
AnEnum b.AliasOfString
2223
}
2324

2425
type AStruct struct {

pkg/generators/snippets/testdata/testdata.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package testdata
22

33
import (
44
"github.com/kanopy-platform/code-generator/pkg/generators/snippets/testdata/a"
5+
"github.com/kanopy-platform/code-generator/pkg/generators/snippets/testdata/b"
56
)
67

78
type SomeStruct struct {
@@ -23,6 +24,7 @@ type ComplexStruct struct {
2324
}
2425

2526
type Alias b.AliasOfString
27+
type AnEnum b.AliasOfString
2628

2729
func (c *ComplexStruct) DeepCopyInto(in *ComplexStruct) {
2830
// not impl test only

0 commit comments

Comments
 (0)