Skip to content

Commit c9b5374

Browse files
committed
support embedded structs!!
1 parent 2c27bcd commit c9b5374

File tree

2 files changed

+37
-31
lines changed

2 files changed

+37
-31
lines changed

field.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,7 @@ func (f *Field) setProps(sf reflect.StructField, sft reflect.Type) (ignore bool)
136136
}
137137

138138
if sf.Anonymous {
139-
log.Println("anonymous structs aren't supported, yet.")
140-
return true
139+
log.Println("anonymous:", sf.Name, sf.Type.Kind())
141140
}
142141

143142
var (

s2ts.go

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -71,43 +71,25 @@ func (s *StructToTS) AddWithName(v interface{}, name string) *Struct {
7171
return s.addType(t, name, "")
7272
}
7373

74-
func (s *StructToTS) addType(t reflect.Type, name, prefix string) (out *Struct) {
75-
t = indirect(t)
76-
77-
if out = s.seen[t]; out != nil {
78-
return out
79-
}
80-
81-
if name == "" {
82-
name = t.Name()
83-
if !s.opts.NoCapitalize {
84-
name = capitalize(name)
85-
}
86-
}
87-
88-
out = &Struct{
89-
Name: prefix + name,
90-
Fields: make([]*Field, 0, t.NumField()),
91-
92-
t: t,
93-
}
94-
95-
s.seen[t] = out
96-
74+
func (s *StructToTS) addTypeFields(out *Struct, t reflect.Type) {
9775
for i := 0; i < t.NumField(); i++ {
98-
var (
99-
sf = t.Field(i)
100-
sft = sf.Type
101-
tf Field
102-
k = sft.Kind()
103-
)
76+
sf := t.Field(i)
77+
sft := sf.Type
78+
k := sft.Kind()
79+
var tf Field
10480

10581
if k == reflect.Ptr {
10682
tf.CanBeNull = true
10783
sft = indirect(sft)
10884
k = sft.Kind()
10985
}
11086

87+
if sf.Anonymous && k == reflect.Struct {
88+
log.Println("trying anonymous field:", sft, k)
89+
s.addTypeFields(out, sft)
90+
continue
91+
}
92+
11193
if tf.setProps(sf, sft) {
11294
continue
11395
}
@@ -147,7 +129,32 @@ func (s *StructToTS) addType(t reflect.Type, name, prefix string) (out *Struct)
147129

148130
out.Fields = append(out.Fields, &tf)
149131
}
132+
}
133+
134+
func (s *StructToTS) addType(t reflect.Type, name, prefix string) (out *Struct) {
135+
t = indirect(t)
136+
137+
if out = s.seen[t]; out != nil {
138+
return out
139+
}
140+
141+
if name == "" {
142+
name = t.Name()
143+
if !s.opts.NoCapitalize {
144+
name = capitalize(name)
145+
}
146+
}
147+
148+
out = &Struct{
149+
Name: prefix + name,
150+
Fields: make([]*Field, 0, t.NumField()),
151+
152+
t: t,
153+
}
150154

155+
log.Println("building struct:", out.Name)
156+
s.addTypeFields(out, t)
157+
s.seen[t] = out
151158
s.structs = append(s.structs, out)
152159
return
153160
}

0 commit comments

Comments
 (0)