@@ -5,18 +5,21 @@ import (
55 "math/rand"
66 "reflect"
77 "time"
8+
9+ "github.com/rs/zerolog"
810)
911
1012type faker struct {
1113 maxDepth int
14+ logger zerolog.Logger
1215}
1316
14- type Option func ( * faker )
17+ var errEFaceNotAllowed = fmt . Errorf ( "interface{} not allowed" )
1518
1619func (f faker ) getFakedValue (a interface {}) (reflect.Value , error ) {
1720 t := reflect .TypeOf (a )
1821 if t == nil {
19- return reflect.Value {}, fmt . Errorf ( "interface{} not allowed" )
22+ return reflect.Value {}, errEFaceNotAllowed
2023 }
2124 f .maxDepth --
2225 if f .maxDepth < 0 {
@@ -52,9 +55,12 @@ func (f faker) getFakedValue(a interface{}) (reflect.Value, error) {
5255 }
5356 val , err := f .getFakedValue (v .Field (i ).Interface ())
5457 if err != nil {
55- fmt .Println (err )
58+ if err == errEFaceNotAllowed { // skip empty interfaces
59+ continue
60+ }
61+
62+ f .logger .Err (err ).Str ("field_name" , v .Type ().Field (i ).Name ).Msg ("faker: error while faking struct" )
5663 continue
57- // return reflect.Value{}, err
5864 }
5965 val = val .Convert (v .Field (i ).Type ())
6066 v .Field (i ).Set (val )
@@ -126,6 +132,7 @@ func (f faker) getFakedValue(a interface{}) (reflect.Value, error) {
126132 if err != nil {
127133 return reflect.Value {}, err
128134 }
135+ key = key .Convert (t .Key ())
129136
130137 valueInstance := reflect .New (t .Elem ()).Elem ().Interface ()
131138 val , err := f .getFakedValue (valueInstance )
@@ -142,12 +149,6 @@ func (f faker) getFakedValue(a interface{}) (reflect.Value, error) {
142149 }
143150}
144151
145- func WithMaxDepth (depth int ) Option {
146- return func (f * faker ) {
147- f .maxDepth = depth
148- }
149- }
150-
151152func FakeObject (obj interface {}, opts ... Option ) error {
152153 reflectType := reflect .TypeOf (obj )
153154
@@ -160,6 +161,7 @@ func FakeObject(obj interface{}, opts ...Option) error {
160161 }
161162 f := & faker {
162163 maxDepth : 12 ,
164+ logger : zerolog .Nop (),
163165 }
164166 for _ , o := range opts {
165167 o (f )
0 commit comments