Skip to content

Commit e895755

Browse files
Merge pull request #5 from chenmingyong0423/feature/enhancement
支持内嵌的匿名指针结构体属性
2 parents aa14188 + d8e6cee commit e895755

File tree

4 files changed

+63
-2
lines changed

4 files changed

+63
-2
lines changed

example/generic_example.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
package example
1616

17+
//go:generate go run ../cmd/optioner/main.go -type GenericExample
1718
type GenericExample[T any, U comparable, V ~int] struct {
1819
A T `opt:"-"`
1920
B U

example/opt_user_gen.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ import (
1010

1111
type UserOption func(*User)
1212

13-
func NewUser(opts ...UserOption) *User {
14-
user := &User{}
13+
func NewUser(embedded Embedded, embedded2 *Embedded2, e3 Embedded3, e4 *Embedded4, opts ...UserOption) *User {
14+
user := &User{
15+
Embedded: embedded,
16+
Embedded2: embedded2,
17+
E3: e3,
18+
E4: e4,
19+
}
1520

1621
for _, opt := range opts {
1722
opt(user)
@@ -20,6 +25,30 @@ func NewUser(opts ...UserOption) *User {
2025
return user
2126
}
2227

28+
func WithEmbedded5(embedded5 Embedded5) UserOption {
29+
return func(user *User) {
30+
user.Embedded5 = embedded5
31+
}
32+
}
33+
34+
func WithEmbedded6(embedded6 *Embedded6) UserOption {
35+
return func(user *User) {
36+
user.Embedded6 = embedded6
37+
}
38+
}
39+
40+
func WithE7(e7 Embedded7) UserOption {
41+
return func(user *User) {
42+
user.E7 = e7
43+
}
44+
}
45+
46+
func WithE8(e8 *Embedded8) UserOption {
47+
return func(user *User) {
48+
user.E8 = e8
49+
}
50+
}
51+
2352
func WithUsername(username string) UserOption {
2453
return func(user *User) {
2554
user.Username = username

example/user.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,32 @@ import (
1818
"github.com/chenmingyong0423/go-optioner/example/third_party"
1919
)
2020

21+
type Embedded struct{}
22+
23+
type Embedded2 struct{}
24+
25+
type Embedded3 struct{}
26+
27+
type Embedded4 struct{}
28+
29+
type Embedded5 struct{}
30+
31+
type Embedded6 struct{}
32+
33+
type Embedded7 struct{}
34+
35+
type Embedded8 struct{}
36+
37+
//go:generate go run ../cmd/optioner/main.go -type User
2138
type User struct {
39+
Embedded `opt:"-"`
40+
*Embedded2 `opt:"-"`
41+
E3 Embedded3 `opt:"-"`
42+
E4 *Embedded4 `opt:"-"`
43+
Embedded5
44+
*Embedded6
45+
E7 Embedded7
46+
E8 *Embedded8
2247
Username string
2348
Email string
2449
Address // combined struct

options/options_generator.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ func (g *Generator) parseStruct(fileName string) bool {
121121
if len(field.Names) == 0 {
122122
if ident, ok := field.Type.(*ast.Ident); ok { // combined struct
123123
fieldName = ident.Name
124+
} else if starExpr, ok := field.Type.(*ast.StarExpr); ok {
125+
if ident2, ok := starExpr.X.(*ast.Ident); ok { // combined struct
126+
fieldName = ident2.Name
127+
} else {
128+
continue
129+
}
124130
} else {
125131
continue
126132
}

0 commit comments

Comments
 (0)