// UnmarshalJSON sets the object from the provided JSON representation
324462
func (f *IfFunc) UnmarshalJSON(buf []byte) error {
	v := struct {
		FnIf [3]json.RawMessage `json:"Fn::If"`
	}{}
	if err := json.Unmarshal(buf, &v); err != nil {
		return err
	}
	if err := json.Unmarshal(v.FnIf[0], &f.Condition); err != nil {
		return err
	}

	var probeValue interface{}
	if err := json.Unmarshal(v.FnIf[1], &probeValue); err != nil {
		return err
	}

	switch reflect.ValueOf(probeValue).Kind() {
	case reflect.Array:
		f.list = true
	case reflect.String:
		f.list = false
	case reflect.Map:
		expr, err := unmarshalFunc(v.FnIf[1])
		if err == nil {
			if _, ok := expr.(StringListFunc); ok {
				f.list = true
			}
		}
	}

	if f.list {
		f.ValueIfTrue = StringListExpr{}
		f.ValueIfFalse = StringListExpr{}
	} else {
		f.ValueIfTrue = StringExpr{}
		f.ValueIfFalse = StringExpr{}
	}

	if err := json.Unmarshal(v.FnIf[1], &f.ValueIfTrue); err != nil {
		return err
	}

	if err := json.Unmarshal(v.FnIf[2], &f.ValueIfFalse); err != nil {
		return err
	}
	return nil
}
480057
func (l *IoTThingAttributePayloadList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := IoTThingAttributePayload{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = IoTThingAttributePayloadList{item}
		return nil
	}
	list := []IoTThingAttributePayload{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = IoTThingAttributePayloadList(list)
		return nil
	}
	return err
}
803494
func (l *EMRInstanceGroupConfigEbsConfigurationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceGroupConfigEbsConfiguration{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceGroupConfigEbsConfigurationList{item}
		return nil
	}
	list := []EMRInstanceGroupConfigEbsConfiguration{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceGroupConfigEbsConfigurationList(list)
		return nil
	}
	return err
}
37973
func (l *APIGatewayStageMethodSettingList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayStageMethodSetting{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayStageMethodSettingList{item}
		return nil
	}
	list := []APIGatewayStageMethodSetting{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayStageMethodSettingList(list)
		return nil
	}
	return err
}
170874
func (l *APIGatewayMethodMethodResponseList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayMethodMethodResponse{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayMethodMethodResponseList{item}
		return nil
	}
	list := []APIGatewayMethodMethodResponse{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayMethodMethodResponseList(list)
		return nil
	}
	return err
}
330745
func (l *EMRInstanceGroupConfigScalingRuleList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceGroupConfigScalingRule{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceGroupConfigScalingRuleList{item}
		return nil
	}
	list := []EMRInstanceGroupConfigScalingRule{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceGroupConfigScalingRuleList(list)
		return nil
	}
	return err
}
105677
func (l *AutoScalingScalingPolicyMetricDimensionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingScalingPolicyMetricDimension{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingScalingPolicyMetricDimensionList{item}
		return nil
	}
	list := []AutoScalingScalingPolicyMetricDimension{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingScalingPolicyMetricDimensionList(list)
		return nil
	}
	return err
}
217871
func (l *APIGatewayAPIKeyStageKeyList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayAPIKeyStageKey{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayAPIKeyStageKeyList{item}
		return nil
	}
	list := []APIGatewayAPIKeyStageKey{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayAPIKeyStageKeyList(list)
		return nil
	}
	return err
}
1146060
func (l *EMRInstanceGroupConfigEbsBlockDeviceConfigList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceGroupConfigEbsBlockDeviceConfig{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceGroupConfigEbsBlockDeviceConfigList{item}
		return nil
	}
	list := []EMRInstanceGroupConfigEbsBlockDeviceConfig{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceGroupConfigEbsBlockDeviceConfigList(list)
		return nil
	}
	return err
}
475296
func (l *APIGatewayMethodIntegrationResponseList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayMethodIntegrationResponse{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayMethodIntegrationResponseList{item}
		return nil
	}
	list := []APIGatewayMethodIntegrationResponse{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayMethodIntegrationResponseList(list)
		return nil
	}
	return err
}
1337030
func (l *EC2InstanceSsmAssociationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EC2InstanceSsmAssociation{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EC2InstanceSsmAssociationList{item}
		return nil
	}
	list := []EC2InstanceSsmAssociation{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EC2InstanceSsmAssociationList(list)
		return nil
	}
	return err
}
889263
func (l *SSMAssociationTargetList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := SSMAssociationTarget{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = SSMAssociationTargetList{item}
		return nil
	}
	list := []SSMAssociationTarget{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = SSMAssociationTargetList(list)
		return nil
	}
	return err
}
32011
func (l *APIGatewayDocumentationPartLocationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayDocumentationPartLocation{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayDocumentationPartLocationList{item}
		return nil
	}
	list := []APIGatewayDocumentationPartLocation{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayDocumentationPartLocationList(list)
		return nil
	}
	return err
}
477189
func (l *EMRClusterInstanceFleetProvisioningSpecificationsList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRClusterInstanceFleetProvisioningSpecifications{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRClusterInstanceFleetProvisioningSpecificationsList{item}
		return nil
	}
	list := []EMRClusterInstanceFleetProvisioningSpecifications{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRClusterInstanceFleetProvisioningSpecificationsList(list)
		return nil
	}
	return err
}
56199
func (l *APIGatewayUsagePlanAPIStageList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := APIGatewayUsagePlanAPIStage{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = APIGatewayUsagePlanAPIStageList{item}
		return nil
	}
	list := []APIGatewayUsagePlanAPIStage{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = APIGatewayUsagePlanAPIStageList(list)
		return nil
	}
	return err
}
955273
func (l *EMRClusterMetricDimensionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRClusterMetricDimension{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRClusterMetricDimensionList{item}
		return nil
	}
	list := []EMRClusterMetricDimension{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRClusterMetricDimensionList(list)
		return nil
	}
	return err
}
1121859
func (l *AutoScalingPlansScalingPlanPredefinedScalingMetricSpecificationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingPlansScalingPlanPredefinedScalingMetricSpecification{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingPlansScalingPlanPredefinedScalingMetricSpecificationList{item}
		return nil
	}
	list := []AutoScalingPlansScalingPlanPredefinedScalingMetricSpecification{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingPlansScalingPlanPredefinedScalingMetricSpecificationList(list)
		return nil
	}
	return err
}