Skip to content

Commit 9d476d4

Browse files
prashantvaschepis
authored andcommitted
Use StateFunc when generating hashes for set elements (#3)
1 parent e6d96b3 commit 9d476d4

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

helper/schema/serialize.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,13 @@ func SerializeResourceForHash(buf *bytes.Buffer, val interface{}, resource *Reso
112112
continue
113113
}
114114

115+
innerVal := m[k]
116+
if innerSchema.StateFunc != nil {
117+
innerVal = innerSchema.StateFunc(innerVal)
118+
}
119+
115120
buf.WriteString(k)
116121
buf.WriteRune(':')
117-
innerVal := m[k]
118122
SerializeValueForHash(buf, innerVal, innerSchema)
119123
}
120124
}

helper/schema/serialize_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package schema
66
import (
77
"bytes"
88
"testing"
9+
"time"
910
)
1011

1112
func TestSerializeForHash(t *testing.T) {
@@ -152,6 +153,36 @@ func TestSerializeForHash(t *testing.T) {
152153
Expected: "{woo;hello;};",
153154
},
154155

156+
{
157+
Schema: &Schema{
158+
Type: TypeSet,
159+
Elem: &Resource{
160+
Schema: map[string]*Schema{
161+
"duration": {
162+
Type: TypeString,
163+
Required: true,
164+
StateFunc: func(v any) string {
165+
d, err := time.ParseDuration(v.(string))
166+
if err != nil {
167+
panic(err)
168+
}
169+
return d.String()
170+
},
171+
},
172+
},
173+
},
174+
},
175+
Value: NewSet(func(v interface{}) int {
176+
d := v.(map[string]interface{})["duration"]
177+
return len(d.(string))
178+
}, []interface{}{
179+
map[string]interface{}{
180+
"duration": "100s",
181+
},
182+
}),
183+
Expected: "{<duration:1m40s;>;};",
184+
},
185+
155186
{
156187
Schema: &Schema{
157188
Type: TypeMap,

0 commit comments

Comments
 (0)