Skip to content

Commit b446ab7

Browse files
Added condition where Flesh.Flesh causes issues with to<Mutagenesis>() calls
1 parent 7fd7e8a commit b446ab7

File tree

3 files changed

+80
-7
lines changed

3 files changed

+80
-7
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v2.0.5
1+
v2.0.6

flesh.go

Lines changed: 76 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,84 @@ import (
88
)
99

1010
func NewFlesh(thing interface{}) Flesh {
11-
return &figFlesh{Flesh: thing}
11+
f := figFlesh{Flesh: thing}
12+
return &f
1213
}
1314

1415
func (flesh *figFlesh) ToString() string {
15-
f, _ := toString(flesh.Flesh)
16+
f, e := toString(flesh.Flesh)
17+
if e != nil {
18+
isFlesh, ok := flesh.Flesh.(*figFlesh)
19+
if ok {
20+
f, e = toString(isFlesh.Flesh)
21+
if e != nil {
22+
return ""
23+
}
24+
}
25+
}
1626
return f
1727
}
1828

1929
func (flesh *figFlesh) ToInt() int {
20-
f, _ := toInt(flesh.Flesh)
30+
f, e := toInt(flesh.Flesh)
31+
if e != nil {
32+
isFlesh, ok := flesh.Flesh.(*figFlesh)
33+
if ok {
34+
f, e = toInt(isFlesh.Flesh)
35+
if e != nil {
36+
return 0
37+
}
38+
}
39+
}
2140
return f
2241
}
2342

2443
func (flesh *figFlesh) ToInt64() int64 {
25-
f, _ := toInt64(flesh.Flesh)
44+
f, e := toInt64(flesh.Flesh)
45+
if e != nil {
46+
isFlesh, ok := flesh.Flesh.(*figFlesh)
47+
if ok {
48+
f, e = toInt64(isFlesh.Flesh)
49+
if e != nil {
50+
return 0
51+
}
52+
}
53+
}
2654
return f
2755
}
2856

2957
func (flesh *figFlesh) ToBool() bool {
30-
f, _ := toBool(flesh.Flesh)
58+
f, e := toBool(flesh.Flesh)
59+
if e != nil {
60+
isFlesh, ok := flesh.Flesh.(*figFlesh)
61+
if ok {
62+
f, e = toBool(isFlesh.Flesh)
63+
if e != nil {
64+
return false
65+
}
66+
}
67+
}
3168
return f
3269
}
3370

3471
func (flesh *figFlesh) ToFloat64() float64 {
35-
f, _ := toFloat64(flesh.Flesh)
72+
f, e := toFloat64(flesh.Flesh)
73+
if e != nil {
74+
isFlesh, ok := flesh.Flesh.(*figFlesh)
75+
if ok {
76+
f, e = toFloat64(isFlesh.Flesh)
77+
if e != nil {
78+
return 0.0
79+
}
80+
}
81+
}
3682
return f
3783
}
3884

3985
func (flesh *figFlesh) ToDuration() time.Duration {
4086
switch f := flesh.Flesh.(type) {
87+
case *figFlesh:
88+
return f.ToDuration()
4189
case time.Duration:
4290
return f
4391
case *time.Duration:
@@ -77,6 +125,8 @@ func (flesh *figFlesh) ToUnitDuration() time.Duration {
77125

78126
func (flesh *figFlesh) ToList() []string {
79127
switch f := flesh.Flesh.(type) {
128+
case *figFlesh:
129+
return f.ToList()
80130
case *ListFlag:
81131
return f.Values()
82132
case []string:
@@ -105,6 +155,8 @@ func (flesh *figFlesh) ToMap() map[string]string {
105155
return f
106156
}
107157
switch ft := flesh.Flesh.(type) {
158+
case *figFlesh:
159+
return ft.ToMap()
108160
case *MapFlag:
109161
// Create a new map and copy the key-value pairs
110162
fu := make(map[string]string, len(*ft.values))
@@ -152,6 +204,8 @@ func (flesh *figFlesh) Is(mutagenesis Mutagenesis) bool {
152204

153205
func (flesh *figFlesh) IsString() bool {
154206
switch f := flesh.Flesh.(type) {
207+
case *figFlesh:
208+
return f.IsString()
155209
case string:
156210
return true
157211
case *string:
@@ -163,6 +217,8 @@ func (flesh *figFlesh) IsString() bool {
163217

164218
func (flesh *figFlesh) IsInt() bool {
165219
switch f := flesh.Flesh.(type) {
220+
case *figFlesh:
221+
return f.IsInt()
166222
case int:
167223
return true
168224
case *int:
@@ -174,6 +230,8 @@ func (flesh *figFlesh) IsInt() bool {
174230

175231
func (flesh *figFlesh) IsInt64() bool {
176232
switch f := flesh.Flesh.(type) {
233+
case *figFlesh:
234+
return f.IsInt64()
177235
case int64:
178236
return true
179237
case *int64:
@@ -185,6 +243,8 @@ func (flesh *figFlesh) IsInt64() bool {
185243

186244
func (flesh *figFlesh) IsBool() bool {
187245
switch f := flesh.Flesh.(type) {
246+
case *figFlesh:
247+
return f.IsBool()
188248
case bool:
189249
return true
190250
case *bool:
@@ -197,6 +257,8 @@ func (flesh *figFlesh) IsBool() bool {
197257

198258
func (flesh *figFlesh) IsFloat64() bool {
199259
switch f := flesh.Flesh.(type) {
260+
case *figFlesh:
261+
return f.IsFloat64()
200262
case float64:
201263
return true
202264
case *float64:
@@ -208,6 +270,8 @@ func (flesh *figFlesh) IsFloat64() bool {
208270

209271
func (flesh *figFlesh) IsDuration() bool {
210272
switch f := flesh.Flesh.(type) {
273+
case *figFlesh:
274+
return f.IsDuration()
211275
case time.Duration:
212276
return true
213277
case *time.Duration:
@@ -220,6 +284,8 @@ func (flesh *figFlesh) IsDuration() bool {
220284

221285
func (flesh *figFlesh) IsUnitDuration() bool {
222286
switch f := flesh.Flesh.(type) {
287+
case *figFlesh:
288+
return f.IsUnitDuration()
223289
case time.Duration:
224290
return true
225291
case *time.Duration:
@@ -232,6 +298,8 @@ func (flesh *figFlesh) IsUnitDuration() bool {
232298

233299
func (flesh *figFlesh) IsList() bool {
234300
switch f := flesh.Flesh.(type) {
301+
case *figFlesh:
302+
return f.IsList()
235303
case *ListFlag:
236304
return true
237305
case ListFlag:
@@ -278,6 +346,8 @@ func (flesh *figFlesh) IsMap() bool {
278346
return ok
279347
}
280348
switch f := flesh.Flesh.(type) {
349+
case *figFlesh:
350+
return f.IsMap()
281351
case *MapFlag:
282352
return true
283353
case MapFlag:

flesh_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ func TestNewFlesh(t *testing.T) {
1313
assert.Equal(t, 0, NewFlesh(t.Name()).ToInt())
1414
assert.Equal(t, map[string]string{}, NewFlesh(t.Name()).ToMap())
1515
assert.Equal(t, []string{t.Name()}, NewFlesh(t.Name()).ToList())
16+
var x interface{}
17+
assert.NotNil(t, NewFlesh(x))
18+
assert.NotNil(t, NewFlesh(x).ToString())
1619
}
1720

1821
func TestFleshInterface(t *testing.T) {

0 commit comments

Comments
 (0)