@@ -237,7 +237,7 @@ func resourceWebhookSaveState(data *schema.ResourceData, webhook content.Webhook
237237 data .Set ("active" , webhook .Active )
238238 data .Set ("secret" , webhook .Secret )
239239 data .Set ("method" , webhook .Method )
240- data .Set ("filter" , flattenWebhookFilters (webhook .Filters ))
240+ data .Set ("filter" , flattenWebhookFilters (& webhook .Filters ))
241241 data .Set ("custom_payload" , convertCustomPayloadToMap (webhook .CustomPayload ))
242242}
243243
@@ -440,30 +440,47 @@ func resourceWebhookGetCustomPayloadAndValidate(input interface{}) (*content.Web
440440 return & payload , nil
441441}
442442
443- func flattenWebhookFilters (filters []content.WebhookFilter ) []interface {} {
444- result := make ([]interface {}, len (filters ))
445-
446- for _ , filter := range filters {
447- item := make (map [string ]interface {})
448- arguments := make (map [string ]interface {})
449-
450- switch v := filter .(type ) {
451- case content.WebhookFilterEqual :
452- item ["type" ] = "equal"
453- arguments ["json_path" ] = v .JSONPath
454- arguments ["values" ] = []string {v .Value }
455- item ["arguments" ] = arguments
456-
457- case content.WebhookFilterIn :
458- item ["type" ] = "in"
459- arguments ["json_path" ] = v .JSONPath
460- arguments ["values" ] = v .Values
461- item ["arguments" ] = arguments
462- }
443+ func flattenWebhookFilters (filters * []content.WebhookFilter ) []interface {} {
444+ if filters != nil {
445+ fs := make ([]interface {}, len (* filters ), len (* filters ))
446+
447+ for i , filter := range * filters {
448+ f := make (map [string ]interface {})
449+
450+ switch v := filter .(type ) {
451+ case content.WebhookFilterEqual :
452+ f ["type" ] = "equal"
453+ f ["arguments" ] = flattenWebhookFilterEqualArguments (v .Value , v .JSONPath )
454+ fs [i ] = f
463455
456+ case content.WebhookFilterIn :
457+ f ["type" ] = "in"
458+ f ["arguments" ] = flattenWebhookFilterInArguments (v .Values , v .JSONPath )
459+ fs [i ] = f
460+ }
461+ }
462+ return fs
464463 }
465464
466- return result
465+ return make ([]interface {}, 0 )
466+ }
467+
468+ func flattenWebhookFilterEqualArguments (Value string , JSONPath string ) interface {} {
469+ args := make ([]interface {}, 1 , 1 )
470+ argMap := make (map [string ]interface {})
471+ argMap ["json_path" ] = JSONPath
472+ argMap ["value" ] = []string {Value }
473+ args [0 ] = argMap
474+ return args
475+ }
476+
477+ func flattenWebhookFilterInArguments (Values []string , JSONPath string ) interface {} {
478+ args := make ([]interface {}, 1 , 1 )
479+ argMap := make (map [string ]interface {})
480+ argMap ["json_path" ] = JSONPath
481+ argMap ["value" ] = Values
482+ args [0 ] = argMap
483+ return args
467484}
468485
469486func convertCustomPayloadToMap (payload * content.WebhookCustomPayload ) map [string ]string {
0 commit comments