@@ -2,6 +2,7 @@ package connection
22
33import (
44 "encoding/json"
5+ "math/big"
56 "time"
67
78 "github.com/hashicorp/terraform-plugin-framework/types"
@@ -30,6 +31,9 @@ func (m *connectionResourceModel) Refresh(connection *hookdeck.Connection) {
3031 m .SourceID = types .StringValue (connection .Source .Id )
3132 m .TeamID = types .StringValue (connection .TeamId )
3233 m .UpdatedAt = types .StringValue (connection .UpdatedAt .Format (time .RFC3339 ))
34+ if len (connection .Rules ) > 0 {
35+ m .Rules = refreshRules (connection )
36+ }
3337}
3438
3539func (m * connectionResourceModel ) ToCreatePayload () * hookdeck.ConnectionCreateRequest {
@@ -125,3 +129,79 @@ func transformFilterRuleProperty(property *filterRuleProperty) *hookdeck.FilterR
125129 }
126130 return nil
127131}
132+
133+ func refreshRules (connection * hookdeck.Connection ) []rule {
134+ var rules []rule = []rule {}
135+
136+ for _ , ruleItem := range connection .Rules {
137+ if ruleItem .Delay != nil {
138+ delayRule := delayRule {
139+ Delay : types .Int64Value (int64 (ruleItem .Delay .Delay )),
140+ }
141+ rules = append (rules , rule {DelayRule : & delayRule })
142+ }
143+ if ruleItem .Filter != nil {
144+ filterRule := filterRule {}
145+ if ruleItem .Filter .Body != nil {
146+ filterRule .Body = refreshFilterRuleProperty (ruleItem .Filter .Body )
147+ }
148+ if ruleItem .Filter .Headers != nil {
149+ filterRule .Headers = refreshFilterRuleProperty (ruleItem .Filter .Headers )
150+ }
151+ if ruleItem .Filter .Path != nil {
152+ filterRule .Path = refreshFilterRuleProperty (ruleItem .Filter .Path )
153+ }
154+ if ruleItem .Filter .Query != nil {
155+ filterRule .Query = refreshFilterRuleProperty (ruleItem .Filter .Query )
156+ }
157+ rules = append (rules , rule {FilterRule : & filterRule })
158+ }
159+ if ruleItem .Retry != nil {
160+ retryRule := retryRule {}
161+ if ruleItem .Retry .Count != nil {
162+ retryRule .Count = types .Int64Value (int64 (* ruleItem .Retry .Count ))
163+ }
164+ if ruleItem .Retry .Interval != nil {
165+ retryRule .Interval = types .Int64Value (int64 (* ruleItem .Retry .Interval ))
166+ }
167+ retryRule .Strategy = types .StringValue ((string )(ruleItem .Retry .Strategy ))
168+ rules = append (rules , rule {RetryRule : & retryRule })
169+ }
170+ if ruleItem .Transform != nil {
171+ transformRule := transformRule {
172+ // in this case (refresh), the ID should always exist
173+ // so we don't have to worry the ruleItem.Transform.TransformationId is nil
174+ TransformationID : types .StringValue (* ruleItem .Transform .TransformationId ),
175+ }
176+ rules = append (rules , rule {TransformRule : & transformRule })
177+ }
178+ }
179+
180+ return rules
181+ }
182+
183+ func refreshFilterRuleProperty (property * hookdeck.FilterRuleProperty ) * filterRuleProperty {
184+ if property == nil {
185+ return nil
186+ }
187+
188+ var filterRuleProperty = filterRuleProperty {}
189+
190+ if property .BooleanOptional != nil {
191+ filterRuleProperty .Boolean = types .BoolValue (* property .BooleanOptional )
192+ }
193+ if property .DoubleOptional != nil {
194+ number := new (big.Float )
195+ number .SetFloat64 (* property .DoubleOptional )
196+ filterRuleProperty .Number = types .NumberValue (number )
197+ }
198+ if property .StringOptional != nil {
199+ filterRuleProperty .String = types .StringValue (* property .StringOptional )
200+ }
201+ if property .StringUnknownMapOptional != nil {
202+ marshalledJSON , _ := json .Marshal (property .StringUnknownMapOptional )
203+ filterRuleProperty .JSON = types .StringValue (string (marshalledJSON ))
204+ }
205+
206+ return & filterRuleProperty
207+ }
0 commit comments