Skip to content

Commit 89ec6a1

Browse files
prashantvaschepis
authored andcommitted
Use StateFunc when generating hashes for set elements (#3)
1 parent 7ac578c commit 89ec6a1

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
@@ -104,9 +104,13 @@ func SerializeResourceForHash(buf *bytes.Buffer, val interface{}, resource *Reso
104104
continue
105105
}
106106

107+
innerVal := m[k]
108+
if innerSchema.StateFunc != nil {
109+
innerVal = innerSchema.StateFunc(innerVal)
110+
}
111+
107112
buf.WriteString(k)
108113
buf.WriteRune(':')
109-
innerVal := m[k]
110114
SerializeValueForHash(buf, innerVal, innerSchema)
111115
}
112116
}

helper/schema/serialize_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package schema
33
import (
44
"bytes"
55
"testing"
6+
"time"
67
)
78

89
func TestSerializeForHash(t *testing.T) {
@@ -149,6 +150,36 @@ func TestSerializeForHash(t *testing.T) {
149150
Expected: "{woo;hello;};",
150151
},
151152

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

0 commit comments

Comments
 (0)