// UnmarshalJSON sets the object from the provided JSON representation
176692
func (x *IntegerExpr) UnmarshalJSON(data []byte) error {
	var v int64
	err := json.Unmarshal(data, &v)
	if err == nil {
		x.Func = nil
		x.Literal = v
		return nil
	}

	// Cloudformation allows int values to be represented as strings
	var strValue string
	if err := json.Unmarshal(data, &strValue); err == nil {
		if v, err := strconv.ParseInt(strValue, 10, 64); err == nil {
			x.Func = nil
			x.Literal = v
			return nil
		}
	}

	// Perhaps we have a serialized function call (like `{"Ref": "Foo"}`)
	// so we'll try to unmarshal it with UnmarshalFunc. Not all Funcs also
	// implement IntegerFunc, so we have to make sure that the referenced
	// function actually works in the intean context
	funcCall, err2 := unmarshalFunc(data)
	if err2 == nil {
		intFunc, ok := funcCall.(IntegerFunc)
		if ok {
			x.Func = intFunc
			return nil
		}
	} else if unknownFunctionErr, ok := err2.(UnknownFunctionError); ok {
		return unknownFunctionErr
	}

	// Return the original error trying to unmarshal the literal expression,
	// which will be the most expressive.
	return err
}
1315996
func (l *EC2SpotFleetInstanceIPv6AddressList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EC2SpotFleetInstanceIPv6Address{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EC2SpotFleetInstanceIPv6AddressList{item}
		return nil
	}
	list := []EC2SpotFleetInstanceIPv6Address{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EC2SpotFleetInstanceIPv6AddressList(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
}
392659
func (l *DynamoDBTableLocalSecondaryIndexList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := DynamoDBTableLocalSecondaryIndex{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = DynamoDBTableLocalSecondaryIndexList{item}
		return nil
	}
	list := []DynamoDBTableLocalSecondaryIndex{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = DynamoDBTableLocalSecondaryIndexList(list)
		return nil
	}
	return err
}
168916
func (l *AutoScalingAutoScalingGroupNotificationConfigurationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingAutoScalingGroupNotificationConfiguration{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingAutoScalingGroupNotificationConfigurationList{item}
		return nil
	}
	list := []AutoScalingAutoScalingGroupNotificationConfiguration{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingAutoScalingGroupNotificationConfigurationList(list)
		return nil
	}
	return err
}
55730
func (l *AppSyncDataSourceLambdaConfigList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AppSyncDataSourceLambdaConfig{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AppSyncDataSourceLambdaConfigList{item}
		return nil
	}
	list := []AppSyncDataSourceLambdaConfig{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AppSyncDataSourceLambdaConfigList(list)
		return nil
	}
	return err
}
84554
func (l *EC2SpotFleetSpotPlacementList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EC2SpotFleetSpotPlacement{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EC2SpotFleetSpotPlacementList{item}
		return nil
	}
	list := []EC2SpotFleetSpotPlacement{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EC2SpotFleetSpotPlacementList(list)
		return nil
	}
	return err
}
83672
func (l *ElasticLoadBalancingV2LoadBalancerSubnetMappingList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := ElasticLoadBalancingV2LoadBalancerSubnetMapping{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = ElasticLoadBalancingV2LoadBalancerSubnetMappingList{item}
		return nil
	}
	list := []ElasticLoadBalancingV2LoadBalancerSubnetMapping{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = ElasticLoadBalancingV2LoadBalancerSubnetMappingList(list)
		return nil
	}
	return err
}
214873
func (l *EC2SpotFleetBlockDeviceMappingList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EC2SpotFleetBlockDeviceMapping{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EC2SpotFleetBlockDeviceMappingList{item}
		return nil
	}
	list := []EC2SpotFleetBlockDeviceMapping{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EC2SpotFleetBlockDeviceMappingList(list)
		return nil
	}
	return err
}
918730
func (l *EMRInstanceGroupConfigCloudWatchAlarmDefinitionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceGroupConfigCloudWatchAlarmDefinition{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceGroupConfigCloudWatchAlarmDefinitionList{item}
		return nil
	}
	list := []EMRInstanceGroupConfigCloudWatchAlarmDefinition{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceGroupConfigCloudWatchAlarmDefinitionList(list)
		return nil
	}
	return err
}
1141280
func (l *EMRInstanceGroupConfigMetricDimensionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRInstanceGroupConfigMetricDimension{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRInstanceGroupConfigMetricDimensionList{item}
		return nil
	}
	list := []EMRInstanceGroupConfigMetricDimension{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRInstanceGroupConfigMetricDimensionList(list)
		return nil
	}
	return err
}
340571
func (l *WAFSizeConstraintSetFieldToMatchList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := WAFSizeConstraintSetFieldToMatch{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = WAFSizeConstraintSetFieldToMatchList{item}
		return nil
	}
	list := []WAFSizeConstraintSetFieldToMatch{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = WAFSizeConstraintSetFieldToMatchList(list)
		return nil
	}
	return err
}
70919
func (l *AutoScalingPlansScalingPlanScalingInstructionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingPlansScalingPlanScalingInstruction{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingPlansScalingPlanScalingInstructionList{item}
		return nil
	}
	list := []AutoScalingPlansScalingPlanScalingInstruction{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingPlansScalingPlanScalingInstructionList(list)
		return nil
	}
	return err
}
419221
func (l *WAFXSSMatchSetXSSMatchTupleList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := WAFXSSMatchSetXSSMatchTuple{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = WAFXSSMatchSetXSSMatchTupleList{item}
		return nil
	}
	list := []WAFXSSMatchSetXSSMatchTuple{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = WAFXSSMatchSetXSSMatchTupleList(list)
		return nil
	}
	return err
}
22455
func (l *EMRClusterApplicationList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := EMRClusterApplication{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = EMRClusterApplicationList{item}
		return nil
	}
	list := []EMRClusterApplication{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = EMRClusterApplicationList(list)
		return nil
	}
	return err
}
662151
func (l *AutoScalingAutoScalingGroupMetricsCollectionList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := AutoScalingAutoScalingGroupMetricsCollection{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = AutoScalingAutoScalingGroupMetricsCollectionList{item}
		return nil
	}
	list := []AutoScalingAutoScalingGroupMetricsCollection{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = AutoScalingAutoScalingGroupMetricsCollectionList(list)
		return nil
	}
	return err
}
6353
func (l *WAFRegionalXSSMatchSetXSSMatchTupleList) UnmarshalJSON(buf []byte) error {
	// Cloudformation allows a single object when a list of objects is expected
	item := WAFRegionalXSSMatchSetXSSMatchTuple{}
	if err := json.Unmarshal(buf, &item); err == nil {
		*l = WAFRegionalXSSMatchSetXSSMatchTupleList{item}
		return nil
	}
	list := []WAFRegionalXSSMatchSetXSSMatchTuple{}
	err := json.Unmarshal(buf, &list)
	if err == nil {
		*l = WAFRegionalXSSMatchSetXSSMatchTupleList(list)
		return nil
	}
	return err
}