// Copyright © 2023 Cisco Systems, Inc. and its affiliates.
// All rights reserved.
//
// Licensed under the Mozilla Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://mozilla.org/MPL/2.0/
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: MPL-2.0

// Code generated by "gen/generator.go"; DO NOT EDIT.

package provider

// Section below is generated&owned by "gen/generator.go". //template:begin imports
import (
	"context"
	"fmt"
	"net/url"
	"reflect"
	"regexp"
	"strconv"
	"strings"

	"github.com/CiscoDevNet/terraform-provider-iosxe/internal/provider/helpers"
	"github.com/hashicorp/terraform-plugin-framework/types"
	"github.com/tidwall/gjson"
	"github.com/tidwall/sjson"
)

// End of section. //template:end imports

// Section below is generated&owned by "gen/generator.go". //template:begin types
type InterfacePortChannelSubinterface struct {
	Device                       types.String                                             `tfsdk:"device"`
	Id                           types.String                                             `tfsdk:"id"`
	DeleteMode                   types.String                                             `tfsdk:"delete_mode"`
	Name                         types.String                                             `tfsdk:"name"`
	EncapsulationDot1qVlanId     types.Int64                                              `tfsdk:"encapsulation_dot1q_vlan_id"`
	Description                  types.String                                             `tfsdk:"description"`
	Shutdown                     types.Bool                                               `tfsdk:"shutdown"`
	IpProxyArp                   types.Bool                                               `tfsdk:"ip_proxy_arp"`
	IpRedirects                  types.Bool                                               `tfsdk:"ip_redirects"`
	IpUnreachables               types.Bool                                               `tfsdk:"ip_unreachables"`
	VrfForwarding                types.String                                             `tfsdk:"vrf_forwarding"`
	Ipv4Address                  types.String                                             `tfsdk:"ipv4_address"`
	Ipv4AddressMask              types.String                                             `tfsdk:"ipv4_address_mask"`
	IpAccessGroupInEnable        types.Bool                                               `tfsdk:"ip_access_group_in_enable"`
	IpAccessGroupIn              types.String                                             `tfsdk:"ip_access_group_in"`
	IpAccessGroupOutEnable       types.Bool                                               `tfsdk:"ip_access_group_out_enable"`
	IpAccessGroupOut             types.String                                             `tfsdk:"ip_access_group_out"`
	AutoQosClassify              types.Bool                                               `tfsdk:"auto_qos_classify"`
	AutoQosClassifyPolice        types.Bool                                               `tfsdk:"auto_qos_classify_police"`
	AutoQosTrust                 types.Bool                                               `tfsdk:"auto_qos_trust"`
	AutoQosTrustCos              types.Bool                                               `tfsdk:"auto_qos_trust_cos"`
	AutoQosTrustDscp             types.Bool                                               `tfsdk:"auto_qos_trust_dscp"`
	AutoQosVideoCts              types.Bool                                               `tfsdk:"auto_qos_video_cts"`
	AutoQosVideoIpCamera         types.Bool                                               `tfsdk:"auto_qos_video_ip_camera"`
	AutoQosVideoMediaPlayer      types.Bool                                               `tfsdk:"auto_qos_video_media_player"`
	AutoQosVoip                  types.Bool                                               `tfsdk:"auto_qos_voip"`
	AutoQosVoipCiscoPhone        types.Bool                                               `tfsdk:"auto_qos_voip_cisco_phone"`
	AutoQosVoipCiscoSoftphone    types.Bool                                               `tfsdk:"auto_qos_voip_cisco_softphone"`
	AutoQosVoipTrust             types.Bool                                               `tfsdk:"auto_qos_voip_trust"`
	TrustDevice                  types.String                                             `tfsdk:"trust_device"`
	HelperAddresses              []InterfacePortChannelSubinterfaceHelperAddresses        `tfsdk:"helper_addresses"`
	BfdTemplate                  types.String                                             `tfsdk:"bfd_template"`
	BfdEnable                    types.Bool                                               `tfsdk:"bfd_enable"`
	BfdLocalAddress              types.String                                             `tfsdk:"bfd_local_address"`
	BfdInterval                  types.Int64                                              `tfsdk:"bfd_interval"`
	BfdIntervalMinRx             types.Int64                                              `tfsdk:"bfd_interval_min_rx"`
	BfdIntervalMultiplier        types.Int64                                              `tfsdk:"bfd_interval_multiplier"`
	BfdEcho                      types.Bool                                               `tfsdk:"bfd_echo"`
	Ipv6Enable                   types.Bool                                               `tfsdk:"ipv6_enable"`
	Ipv6Mtu                      types.Int64                                              `tfsdk:"ipv6_mtu"`
	Ipv6NdRaSuppressAll          types.Bool                                               `tfsdk:"ipv6_nd_ra_suppress_all"`
	Ipv6AddressAutoconfigDefault types.Bool                                               `tfsdk:"ipv6_address_autoconfig_default"`
	Ipv6AddressDhcp              types.Bool                                               `tfsdk:"ipv6_address_dhcp"`
	Ipv6LinkLocalAddresses       []InterfacePortChannelSubinterfaceIpv6LinkLocalAddresses `tfsdk:"ipv6_link_local_addresses"`
	Ipv6Addresses                []InterfacePortChannelSubinterfaceIpv6Addresses          `tfsdk:"ipv6_addresses"`
	ArpTimeout                   types.Int64                                              `tfsdk:"arp_timeout"`
	IpArpInspectionTrust         types.Bool                                               `tfsdk:"ip_arp_inspection_trust"`
	IpArpInspectionLimitRate     types.Int64                                              `tfsdk:"ip_arp_inspection_limit_rate"`
}

type InterfacePortChannelSubinterfaceData struct {
	Device                       types.String                                             `tfsdk:"device"`
	Id                           types.String                                             `tfsdk:"id"`
	Name                         types.String                                             `tfsdk:"name"`
	EncapsulationDot1qVlanId     types.Int64                                              `tfsdk:"encapsulation_dot1q_vlan_id"`
	Description                  types.String                                             `tfsdk:"description"`
	Shutdown                     types.Bool                                               `tfsdk:"shutdown"`
	IpProxyArp                   types.Bool                                               `tfsdk:"ip_proxy_arp"`
	IpRedirects                  types.Bool                                               `tfsdk:"ip_redirects"`
	IpUnreachables               types.Bool                                               `tfsdk:"ip_unreachables"`
	VrfForwarding                types.String                                             `tfsdk:"vrf_forwarding"`
	Ipv4Address                  types.String                                             `tfsdk:"ipv4_address"`
	Ipv4AddressMask              types.String                                             `tfsdk:"ipv4_address_mask"`
	IpAccessGroupInEnable        types.Bool                                               `tfsdk:"ip_access_group_in_enable"`
	IpAccessGroupIn              types.String                                             `tfsdk:"ip_access_group_in"`
	IpAccessGroupOutEnable       types.Bool                                               `tfsdk:"ip_access_group_out_enable"`
	IpAccessGroupOut             types.String                                             `tfsdk:"ip_access_group_out"`
	AutoQosClassify              types.Bool                                               `tfsdk:"auto_qos_classify"`
	AutoQosClassifyPolice        types.Bool                                               `tfsdk:"auto_qos_classify_police"`
	AutoQosTrust                 types.Bool                                               `tfsdk:"auto_qos_trust"`
	AutoQosTrustCos              types.Bool                                               `tfsdk:"auto_qos_trust_cos"`
	AutoQosTrustDscp             types.Bool                                               `tfsdk:"auto_qos_trust_dscp"`
	AutoQosVideoCts              types.Bool                                               `tfsdk:"auto_qos_video_cts"`
	AutoQosVideoIpCamera         types.Bool                                               `tfsdk:"auto_qos_video_ip_camera"`
	AutoQosVideoMediaPlayer      types.Bool                                               `tfsdk:"auto_qos_video_media_player"`
	AutoQosVoip                  types.Bool                                               `tfsdk:"auto_qos_voip"`
	AutoQosVoipCiscoPhone        types.Bool                                               `tfsdk:"auto_qos_voip_cisco_phone"`
	AutoQosVoipCiscoSoftphone    types.Bool                                               `tfsdk:"auto_qos_voip_cisco_softphone"`
	AutoQosVoipTrust             types.Bool                                               `tfsdk:"auto_qos_voip_trust"`
	TrustDevice                  types.String                                             `tfsdk:"trust_device"`
	HelperAddresses              []InterfacePortChannelSubinterfaceHelperAddresses        `tfsdk:"helper_addresses"`
	BfdTemplate                  types.String                                             `tfsdk:"bfd_template"`
	BfdEnable                    types.Bool                                               `tfsdk:"bfd_enable"`
	BfdLocalAddress              types.String                                             `tfsdk:"bfd_local_address"`
	BfdInterval                  types.Int64                                              `tfsdk:"bfd_interval"`
	BfdIntervalMinRx             types.Int64                                              `tfsdk:"bfd_interval_min_rx"`
	BfdIntervalMultiplier        types.Int64                                              `tfsdk:"bfd_interval_multiplier"`
	BfdEcho                      types.Bool                                               `tfsdk:"bfd_echo"`
	Ipv6Enable                   types.Bool                                               `tfsdk:"ipv6_enable"`
	Ipv6Mtu                      types.Int64                                              `tfsdk:"ipv6_mtu"`
	Ipv6NdRaSuppressAll          types.Bool                                               `tfsdk:"ipv6_nd_ra_suppress_all"`
	Ipv6AddressAutoconfigDefault types.Bool                                               `tfsdk:"ipv6_address_autoconfig_default"`
	Ipv6AddressDhcp              types.Bool                                               `tfsdk:"ipv6_address_dhcp"`
	Ipv6LinkLocalAddresses       []InterfacePortChannelSubinterfaceIpv6LinkLocalAddresses `tfsdk:"ipv6_link_local_addresses"`
	Ipv6Addresses                []InterfacePortChannelSubinterfaceIpv6Addresses          `tfsdk:"ipv6_addresses"`
	ArpTimeout                   types.Int64                                              `tfsdk:"arp_timeout"`
	IpArpInspectionTrust         types.Bool                                               `tfsdk:"ip_arp_inspection_trust"`
	IpArpInspectionLimitRate     types.Int64                                              `tfsdk:"ip_arp_inspection_limit_rate"`
}
type InterfacePortChannelSubinterfaceHelperAddresses struct {
	Address types.String `tfsdk:"address"`
	Global  types.Bool   `tfsdk:"global"`
	Vrf     types.String `tfsdk:"vrf"`
}
type InterfacePortChannelSubinterfaceIpv6LinkLocalAddresses struct {
	Address   types.String `tfsdk:"address"`
	LinkLocal types.Bool   `tfsdk:"link_local"`
}
type InterfacePortChannelSubinterfaceIpv6Addresses struct {
	Prefix types.String `tfsdk:"prefix"`
	Eui64  types.Bool   `tfsdk:"eui_64"`
}

// End of section. //template:end types

// Section below is generated&owned by "gen/generator.go". //template:begin getPath

func (data InterfacePortChannelSubinterface) getPath() string {
	return fmt.Sprintf("Cisco-IOS-XE-native:native/interface/Port-channel-subinterface/Port-channel=%v", url.QueryEscape(fmt.Sprintf("%v", data.Name.ValueString())))
}

func (data InterfacePortChannelSubinterfaceData) getPath() string {
	return fmt.Sprintf("Cisco-IOS-XE-native:native/interface/Port-channel-subinterface/Port-channel=%v", url.QueryEscape(fmt.Sprintf("%v", data.Name.ValueString())))
}

// if last path element has a key -> remove it
func (data InterfacePortChannelSubinterface) getPathShort() string {
	path := data.getPath()
	re := regexp.MustCompile(`(.*)=[^\/]*$`)
	matches := re.FindStringSubmatch(path)
	if len(matches) <= 1 {
		return path
	}
	return matches[1]
}

// End of section. //template:end getPath

// Section below is generated&owned by "gen/generator.go". //template:begin toBody

func (data InterfacePortChannelSubinterface) toBody(ctx context.Context) string {
	body := `{"` + helpers.LastElement(data.getPath()) + `":{}}`
	if !data.Name.IsNull() && !data.Name.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"name", data.Name.ValueString())
	}
	if !data.EncapsulationDot1qVlanId.IsNull() && !data.EncapsulationDot1qVlanId.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"encapsulation.dot1Q.vlan-id", strconv.FormatInt(data.EncapsulationDot1qVlanId.ValueInt64(), 10))
	}
	if !data.Description.IsNull() && !data.Description.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"description", data.Description.ValueString())
	}
	if !data.Shutdown.IsNull() && !data.Shutdown.IsUnknown() {
		if data.Shutdown.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"shutdown", map[string]string{})
		}
	}
	if !data.IpProxyArp.IsNull() && !data.IpProxyArp.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.proxy-arp", data.IpProxyArp.ValueBool())
	}
	if !data.IpRedirects.IsNull() && !data.IpRedirects.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.redirects", data.IpRedirects.ValueBool())
	}
	if !data.IpUnreachables.IsNull() && !data.IpUnreachables.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.Cisco-IOS-XE-icmp:unreachables", data.IpUnreachables.ValueBool())
	}
	if !data.VrfForwarding.IsNull() && !data.VrfForwarding.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"vrf.forwarding", data.VrfForwarding.ValueString())
	}
	if !data.Ipv4Address.IsNull() && !data.Ipv4Address.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.address.primary.address", data.Ipv4Address.ValueString())
	}
	if !data.Ipv4AddressMask.IsNull() && !data.Ipv4AddressMask.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.address.primary.mask", data.Ipv4AddressMask.ValueString())
	}
	if !data.IpAccessGroupInEnable.IsNull() && !data.IpAccessGroupInEnable.IsUnknown() {
		if data.IpAccessGroupInEnable.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.access-group.in.acl.in", map[string]string{})
		}
	}
	if !data.IpAccessGroupIn.IsNull() && !data.IpAccessGroupIn.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.access-group.in.acl.acl-name", data.IpAccessGroupIn.ValueString())
	}
	if !data.IpAccessGroupOutEnable.IsNull() && !data.IpAccessGroupOutEnable.IsUnknown() {
		if data.IpAccessGroupOutEnable.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.access-group.out.acl.out", map[string]string{})
		}
	}
	if !data.IpAccessGroupOut.IsNull() && !data.IpAccessGroupOut.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.access-group.out.acl.acl-name", data.IpAccessGroupOut.ValueString())
	}
	if !data.AutoQosClassify.IsNull() && !data.AutoQosClassify.IsUnknown() {
		if data.AutoQosClassify.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.classify", map[string]string{})
		}
	}
	if !data.AutoQosClassifyPolice.IsNull() && !data.AutoQosClassifyPolice.IsUnknown() {
		if data.AutoQosClassifyPolice.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.classify.police", map[string]string{})
		}
	}
	if !data.AutoQosTrust.IsNull() && !data.AutoQosTrust.IsUnknown() {
		if data.AutoQosTrust.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.trust", map[string]string{})
		}
	}
	if !data.AutoQosTrustCos.IsNull() && !data.AutoQosTrustCos.IsUnknown() {
		if data.AutoQosTrustCos.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.trust.cos", map[string]string{})
		}
	}
	if !data.AutoQosTrustDscp.IsNull() && !data.AutoQosTrustDscp.IsUnknown() {
		if data.AutoQosTrustDscp.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.trust.dscp", map[string]string{})
		}
	}
	if !data.AutoQosVideoCts.IsNull() && !data.AutoQosVideoCts.IsUnknown() {
		if data.AutoQosVideoCts.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.video.cts", map[string]string{})
		}
	}
	if !data.AutoQosVideoIpCamera.IsNull() && !data.AutoQosVideoIpCamera.IsUnknown() {
		if data.AutoQosVideoIpCamera.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.video.ip-camera", map[string]string{})
		}
	}
	if !data.AutoQosVideoMediaPlayer.IsNull() && !data.AutoQosVideoMediaPlayer.IsUnknown() {
		if data.AutoQosVideoMediaPlayer.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.video.media-player", map[string]string{})
		}
	}
	if !data.AutoQosVoip.IsNull() && !data.AutoQosVoip.IsUnknown() {
		if data.AutoQosVoip.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.voip", map[string]string{})
		}
	}
	if !data.AutoQosVoipCiscoPhone.IsNull() && !data.AutoQosVoipCiscoPhone.IsUnknown() {
		if data.AutoQosVoipCiscoPhone.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.voip.cisco-phone", map[string]string{})
		}
	}
	if !data.AutoQosVoipCiscoSoftphone.IsNull() && !data.AutoQosVoipCiscoSoftphone.IsUnknown() {
		if data.AutoQosVoipCiscoSoftphone.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.voip.cisco-softphone", map[string]string{})
		}
	}
	if !data.AutoQosVoipTrust.IsNull() && !data.AutoQosVoipTrust.IsUnknown() {
		if data.AutoQosVoipTrust.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"Cisco-IOS-XE-switch:auto.qos.voip.trust", map[string]string{})
		}
	}
	if !data.TrustDevice.IsNull() && !data.TrustDevice.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"trust.device", data.TrustDevice.ValueString())
	}
	if !data.BfdTemplate.IsNull() && !data.BfdTemplate.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"bfd.Cisco-IOS-XE-bfd:template", data.BfdTemplate.ValueString())
	}
	if !data.BfdEnable.IsNull() && !data.BfdEnable.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"bfd.Cisco-IOS-XE-bfd:enable", data.BfdEnable.ValueBool())
	}
	if !data.BfdLocalAddress.IsNull() && !data.BfdLocalAddress.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"bfd.Cisco-IOS-XE-bfd:local-address", data.BfdLocalAddress.ValueString())
	}
	if !data.BfdInterval.IsNull() && !data.BfdInterval.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"bfd.Cisco-IOS-XE-bfd:interval-interface.msecs", strconv.FormatInt(data.BfdInterval.ValueInt64(), 10))
	}
	if !data.BfdIntervalMinRx.IsNull() && !data.BfdIntervalMinRx.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"bfd.Cisco-IOS-XE-bfd:interval-interface.min_rx", strconv.FormatInt(data.BfdIntervalMinRx.ValueInt64(), 10))
	}
	if !data.BfdIntervalMultiplier.IsNull() && !data.BfdIntervalMultiplier.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"bfd.Cisco-IOS-XE-bfd:interval-interface.multiplier", strconv.FormatInt(data.BfdIntervalMultiplier.ValueInt64(), 10))
	}
	if !data.BfdEcho.IsNull() && !data.BfdEcho.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"bfd.Cisco-IOS-XE-bfd:echo", data.BfdEcho.ValueBool())
	}
	if !data.Ipv6Enable.IsNull() && !data.Ipv6Enable.IsUnknown() {
		if data.Ipv6Enable.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.enable", map[string]string{})
		}
	}
	if !data.Ipv6Mtu.IsNull() && !data.Ipv6Mtu.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.mtu", strconv.FormatInt(data.Ipv6Mtu.ValueInt64(), 10))
	}
	if !data.Ipv6NdRaSuppressAll.IsNull() && !data.Ipv6NdRaSuppressAll.IsUnknown() {
		if data.Ipv6NdRaSuppressAll.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.nd.Cisco-IOS-XE-nd:ra.suppress.all", map[string]string{})
		}
	}
	if !data.Ipv6AddressAutoconfigDefault.IsNull() && !data.Ipv6AddressAutoconfigDefault.IsUnknown() {
		if data.Ipv6AddressAutoconfigDefault.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.autoconfig.default", map[string]string{})
		}
	}
	if !data.Ipv6AddressDhcp.IsNull() && !data.Ipv6AddressDhcp.IsUnknown() {
		if data.Ipv6AddressDhcp.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.dhcp", map[string]string{})
		}
	}
	if !data.ArpTimeout.IsNull() && !data.ArpTimeout.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"arp.timeout", strconv.FormatInt(data.ArpTimeout.ValueInt64(), 10))
	}
	if !data.IpArpInspectionTrust.IsNull() && !data.IpArpInspectionTrust.IsUnknown() {
		if data.IpArpInspectionTrust.ValueBool() {
			body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.arp.inspection.trust", map[string]string{})
		}
	}
	if !data.IpArpInspectionLimitRate.IsNull() && !data.IpArpInspectionLimitRate.IsUnknown() {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.arp.inspection.limit.rate", strconv.FormatInt(data.IpArpInspectionLimitRate.ValueInt64(), 10))
	}
	if len(data.HelperAddresses) > 0 {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.helper-address", []interface{}{})
		for index, item := range data.HelperAddresses {
			if !item.Address.IsNull() && !item.Address.IsUnknown() {
				body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.helper-address"+"."+strconv.Itoa(index)+"."+"address", item.Address.ValueString())
			}
			if !item.Global.IsNull() && !item.Global.IsUnknown() {
				if item.Global.ValueBool() {
					body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.helper-address"+"."+strconv.Itoa(index)+"."+"global", map[string]string{})
				}
			}
			if !item.Vrf.IsNull() && !item.Vrf.IsUnknown() {
				body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ip.helper-address"+"."+strconv.Itoa(index)+"."+"vrf", item.Vrf.ValueString())
			}
		}
	}
	if len(data.Ipv6LinkLocalAddresses) > 0 {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.link-local-address", []interface{}{})
		for index, item := range data.Ipv6LinkLocalAddresses {
			if !item.Address.IsNull() && !item.Address.IsUnknown() {
				body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.link-local-address"+"."+strconv.Itoa(index)+"."+"address", item.Address.ValueString())
			}
			if !item.LinkLocal.IsNull() && !item.LinkLocal.IsUnknown() {
				if item.LinkLocal.ValueBool() {
					body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.link-local-address"+"."+strconv.Itoa(index)+"."+"link-local", map[string]string{})
				}
			}
		}
	}
	if len(data.Ipv6Addresses) > 0 {
		body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.prefix-list", []interface{}{})
		for index, item := range data.Ipv6Addresses {
			if !item.Prefix.IsNull() && !item.Prefix.IsUnknown() {
				body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.prefix-list"+"."+strconv.Itoa(index)+"."+"prefix", item.Prefix.ValueString())
			}
			if !item.Eui64.IsNull() && !item.Eui64.IsUnknown() {
				if item.Eui64.ValueBool() {
					body, _ = sjson.Set(body, helpers.LastElement(data.getPath())+"."+"ipv6.address.prefix-list"+"."+strconv.Itoa(index)+"."+"eui-64", map[string]string{})
				}
			}
		}
	}
	return body
}

// End of section. //template:end toBody

// Section below is generated&owned by "gen/generator.go". //template:begin updateFromBody

func (data *InterfacePortChannelSubinterface) updateFromBody(ctx context.Context, res gjson.Result) {
	prefix := helpers.LastElement(data.getPath()) + "."
	if res.Get(helpers.LastElement(data.getPath())).IsArray() {
		prefix += "0."
	}
	if value := res.Get(prefix + "name"); value.Exists() && !data.Name.IsNull() {
		data.Name = types.StringValue(value.String())
	} else {
		data.Name = types.StringNull()
	}
	if value := res.Get(prefix + "encapsulation.dot1Q.vlan-id"); value.Exists() && !data.EncapsulationDot1qVlanId.IsNull() {
		data.EncapsulationDot1qVlanId = types.Int64Value(value.Int())
	} else {
		data.EncapsulationDot1qVlanId = types.Int64Null()
	}
	if value := res.Get(prefix + "description"); value.Exists() && !data.Description.IsNull() {
		data.Description = types.StringValue(value.String())
	} else {
		data.Description = types.StringNull()
	}
	if value := res.Get(prefix + "shutdown"); !data.Shutdown.IsNull() {
		if value.Exists() {
			data.Shutdown = types.BoolValue(true)
		} else {
			data.Shutdown = types.BoolValue(false)
		}
	} else {
		data.Shutdown = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.proxy-arp"); !data.IpProxyArp.IsNull() {
		if value.Exists() {
			data.IpProxyArp = types.BoolValue(value.Bool())
		}
	} else {
		data.IpProxyArp = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.redirects"); !data.IpRedirects.IsNull() {
		if value.Exists() {
			data.IpRedirects = types.BoolValue(value.Bool())
		}
	} else {
		data.IpRedirects = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.Cisco-IOS-XE-icmp:unreachables"); !data.IpUnreachables.IsNull() {
		if value.Exists() {
			data.IpUnreachables = types.BoolValue(value.Bool())
		}
	} else {
		data.IpUnreachables = types.BoolNull()
	}
	if value := res.Get(prefix + "vrf.forwarding"); value.Exists() && !data.VrfForwarding.IsNull() {
		data.VrfForwarding = types.StringValue(value.String())
	} else {
		data.VrfForwarding = types.StringNull()
	}
	if value := res.Get(prefix + "ip.address.primary.address"); value.Exists() && !data.Ipv4Address.IsNull() {
		data.Ipv4Address = types.StringValue(value.String())
	} else {
		data.Ipv4Address = types.StringNull()
	}
	if value := res.Get(prefix + "ip.address.primary.mask"); value.Exists() && !data.Ipv4AddressMask.IsNull() {
		data.Ipv4AddressMask = types.StringValue(value.String())
	} else {
		data.Ipv4AddressMask = types.StringNull()
	}
	if value := res.Get(prefix + "ip.access-group.in.acl.in"); !data.IpAccessGroupInEnable.IsNull() {
		if value.Exists() {
			data.IpAccessGroupInEnable = types.BoolValue(true)
		} else {
			data.IpAccessGroupInEnable = types.BoolValue(false)
		}
	} else {
		data.IpAccessGroupInEnable = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.access-group.in.acl.acl-name"); value.Exists() && !data.IpAccessGroupIn.IsNull() {
		data.IpAccessGroupIn = types.StringValue(value.String())
	} else {
		data.IpAccessGroupIn = types.StringNull()
	}
	if value := res.Get(prefix + "ip.access-group.out.acl.out"); !data.IpAccessGroupOutEnable.IsNull() {
		if value.Exists() {
			data.IpAccessGroupOutEnable = types.BoolValue(true)
		} else {
			data.IpAccessGroupOutEnable = types.BoolValue(false)
		}
	} else {
		data.IpAccessGroupOutEnable = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.access-group.out.acl.acl-name"); value.Exists() && !data.IpAccessGroupOut.IsNull() {
		data.IpAccessGroupOut = types.StringValue(value.String())
	} else {
		data.IpAccessGroupOut = types.StringNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.classify"); !data.AutoQosClassify.IsNull() {
		if value.Exists() {
			data.AutoQosClassify = types.BoolValue(true)
		} else {
			data.AutoQosClassify = types.BoolValue(false)
		}
	} else {
		data.AutoQosClassify = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.classify.police"); !data.AutoQosClassifyPolice.IsNull() {
		if value.Exists() {
			data.AutoQosClassifyPolice = types.BoolValue(true)
		} else {
			data.AutoQosClassifyPolice = types.BoolValue(false)
		}
	} else {
		data.AutoQosClassifyPolice = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust"); !data.AutoQosTrust.IsNull() {
		if value.Exists() {
			data.AutoQosTrust = types.BoolValue(true)
		} else {
			data.AutoQosTrust = types.BoolValue(false)
		}
	} else {
		data.AutoQosTrust = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust.cos"); !data.AutoQosTrustCos.IsNull() {
		if value.Exists() {
			data.AutoQosTrustCos = types.BoolValue(true)
		} else {
			data.AutoQosTrustCos = types.BoolValue(false)
		}
	} else {
		data.AutoQosTrustCos = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust.dscp"); !data.AutoQosTrustDscp.IsNull() {
		if value.Exists() {
			data.AutoQosTrustDscp = types.BoolValue(true)
		} else {
			data.AutoQosTrustDscp = types.BoolValue(false)
		}
	} else {
		data.AutoQosTrustDscp = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.cts"); !data.AutoQosVideoCts.IsNull() {
		if value.Exists() {
			data.AutoQosVideoCts = types.BoolValue(true)
		} else {
			data.AutoQosVideoCts = types.BoolValue(false)
		}
	} else {
		data.AutoQosVideoCts = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.ip-camera"); !data.AutoQosVideoIpCamera.IsNull() {
		if value.Exists() {
			data.AutoQosVideoIpCamera = types.BoolValue(true)
		} else {
			data.AutoQosVideoIpCamera = types.BoolValue(false)
		}
	} else {
		data.AutoQosVideoIpCamera = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.media-player"); !data.AutoQosVideoMediaPlayer.IsNull() {
		if value.Exists() {
			data.AutoQosVideoMediaPlayer = types.BoolValue(true)
		} else {
			data.AutoQosVideoMediaPlayer = types.BoolValue(false)
		}
	} else {
		data.AutoQosVideoMediaPlayer = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip"); !data.AutoQosVoip.IsNull() {
		if value.Exists() {
			data.AutoQosVoip = types.BoolValue(true)
		} else {
			data.AutoQosVoip = types.BoolValue(false)
		}
	} else {
		data.AutoQosVoip = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.cisco-phone"); !data.AutoQosVoipCiscoPhone.IsNull() {
		if value.Exists() {
			data.AutoQosVoipCiscoPhone = types.BoolValue(true)
		} else {
			data.AutoQosVoipCiscoPhone = types.BoolValue(false)
		}
	} else {
		data.AutoQosVoipCiscoPhone = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.cisco-softphone"); !data.AutoQosVoipCiscoSoftphone.IsNull() {
		if value.Exists() {
			data.AutoQosVoipCiscoSoftphone = types.BoolValue(true)
		} else {
			data.AutoQosVoipCiscoSoftphone = types.BoolValue(false)
		}
	} else {
		data.AutoQosVoipCiscoSoftphone = types.BoolNull()
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.trust"); !data.AutoQosVoipTrust.IsNull() {
		if value.Exists() {
			data.AutoQosVoipTrust = types.BoolValue(true)
		} else {
			data.AutoQosVoipTrust = types.BoolValue(false)
		}
	} else {
		data.AutoQosVoipTrust = types.BoolNull()
	}
	if value := res.Get(prefix + "trust.device"); value.Exists() && !data.TrustDevice.IsNull() {
		data.TrustDevice = types.StringValue(value.String())
	} else {
		data.TrustDevice = types.StringNull()
	}
	for i := range data.HelperAddresses {
		keys := [...]string{"address"}
		keyValues := [...]string{data.HelperAddresses[i].Address.ValueString()}

		var r gjson.Result
		res.Get(prefix + "ip.helper-address").ForEach(
			func(_, v gjson.Result) bool {
				found := false
				for ik := range keys {
					if v.Get(keys[ik]).String() == keyValues[ik] {
						found = true
						continue
					}
					found = false
					break
				}
				if found {
					r = v
					return false
				}
				return true
			},
		)
		if value := r.Get("address"); value.Exists() && !data.HelperAddresses[i].Address.IsNull() {
			data.HelperAddresses[i].Address = types.StringValue(value.String())
		} else {
			data.HelperAddresses[i].Address = types.StringNull()
		}
		if value := r.Get("global"); !data.HelperAddresses[i].Global.IsNull() {
			if value.Exists() {
				data.HelperAddresses[i].Global = types.BoolValue(true)
			} else {
				data.HelperAddresses[i].Global = types.BoolValue(false)
			}
		} else {
			data.HelperAddresses[i].Global = types.BoolNull()
		}
		if value := r.Get("vrf"); value.Exists() && !data.HelperAddresses[i].Vrf.IsNull() {
			data.HelperAddresses[i].Vrf = types.StringValue(value.String())
		} else {
			data.HelperAddresses[i].Vrf = types.StringNull()
		}
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:template"); value.Exists() && !data.BfdTemplate.IsNull() {
		data.BfdTemplate = types.StringValue(value.String())
	} else {
		data.BfdTemplate = types.StringNull()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:enable"); !data.BfdEnable.IsNull() {
		if value.Exists() {
			data.BfdEnable = types.BoolValue(value.Bool())
		}
	} else {
		data.BfdEnable = types.BoolNull()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:local-address"); value.Exists() && !data.BfdLocalAddress.IsNull() {
		data.BfdLocalAddress = types.StringValue(value.String())
	} else {
		data.BfdLocalAddress = types.StringNull()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.msecs"); value.Exists() && !data.BfdInterval.IsNull() {
		data.BfdInterval = types.Int64Value(value.Int())
	} else {
		data.BfdInterval = types.Int64Null()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.min_rx"); value.Exists() && !data.BfdIntervalMinRx.IsNull() {
		data.BfdIntervalMinRx = types.Int64Value(value.Int())
	} else {
		data.BfdIntervalMinRx = types.Int64Null()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.multiplier"); value.Exists() && !data.BfdIntervalMultiplier.IsNull() {
		data.BfdIntervalMultiplier = types.Int64Value(value.Int())
	} else {
		data.BfdIntervalMultiplier = types.Int64Null()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:echo"); !data.BfdEcho.IsNull() {
		if value.Exists() {
			data.BfdEcho = types.BoolValue(value.Bool())
		}
	} else {
		data.BfdEcho = types.BoolNull()
	}
	if value := res.Get(prefix + "ipv6.enable"); !data.Ipv6Enable.IsNull() {
		if value.Exists() {
			data.Ipv6Enable = types.BoolValue(true)
		} else {
			data.Ipv6Enable = types.BoolValue(false)
		}
	} else {
		data.Ipv6Enable = types.BoolNull()
	}
	if value := res.Get(prefix + "ipv6.mtu"); value.Exists() && !data.Ipv6Mtu.IsNull() {
		data.Ipv6Mtu = types.Int64Value(value.Int())
	} else {
		data.Ipv6Mtu = types.Int64Null()
	}
	if value := res.Get(prefix + "ipv6.nd.Cisco-IOS-XE-nd:ra.suppress.all"); !data.Ipv6NdRaSuppressAll.IsNull() {
		if value.Exists() {
			data.Ipv6NdRaSuppressAll = types.BoolValue(true)
		} else {
			data.Ipv6NdRaSuppressAll = types.BoolValue(false)
		}
	} else {
		data.Ipv6NdRaSuppressAll = types.BoolNull()
	}
	if value := res.Get(prefix + "ipv6.address.autoconfig.default"); !data.Ipv6AddressAutoconfigDefault.IsNull() {
		if value.Exists() {
			data.Ipv6AddressAutoconfigDefault = types.BoolValue(true)
		} else {
			data.Ipv6AddressAutoconfigDefault = types.BoolValue(false)
		}
	} else {
		data.Ipv6AddressAutoconfigDefault = types.BoolNull()
	}
	if value := res.Get(prefix + "ipv6.address.dhcp"); !data.Ipv6AddressDhcp.IsNull() {
		if value.Exists() {
			data.Ipv6AddressDhcp = types.BoolValue(true)
		} else {
			data.Ipv6AddressDhcp = types.BoolValue(false)
		}
	} else {
		data.Ipv6AddressDhcp = types.BoolNull()
	}
	for i := range data.Ipv6LinkLocalAddresses {
		keys := [...]string{"address"}
		keyValues := [...]string{data.Ipv6LinkLocalAddresses[i].Address.ValueString()}

		var r gjson.Result
		res.Get(prefix + "ipv6.address.link-local-address").ForEach(
			func(_, v gjson.Result) bool {
				found := false
				for ik := range keys {
					if v.Get(keys[ik]).String() == keyValues[ik] {
						found = true
						continue
					}
					found = false
					break
				}
				if found {
					r = v
					return false
				}
				return true
			},
		)
		if value := r.Get("address"); value.Exists() && !data.Ipv6LinkLocalAddresses[i].Address.IsNull() {
			data.Ipv6LinkLocalAddresses[i].Address = types.StringValue(value.String())
		} else {
			data.Ipv6LinkLocalAddresses[i].Address = types.StringNull()
		}
		if value := r.Get("link-local"); !data.Ipv6LinkLocalAddresses[i].LinkLocal.IsNull() {
			if value.Exists() {
				data.Ipv6LinkLocalAddresses[i].LinkLocal = types.BoolValue(true)
			} else {
				data.Ipv6LinkLocalAddresses[i].LinkLocal = types.BoolValue(false)
			}
		} else {
			data.Ipv6LinkLocalAddresses[i].LinkLocal = types.BoolNull()
		}
	}
	for i := range data.Ipv6Addresses {
		keys := [...]string{"prefix"}
		keyValues := [...]string{data.Ipv6Addresses[i].Prefix.ValueString()}

		var r gjson.Result
		res.Get(prefix + "ipv6.address.prefix-list").ForEach(
			func(_, v gjson.Result) bool {
				found := false
				for ik := range keys {
					if v.Get(keys[ik]).String() == keyValues[ik] {
						found = true
						continue
					}
					found = false
					break
				}
				if found {
					r = v
					return false
				}
				return true
			},
		)
		if value := r.Get("prefix"); value.Exists() && !data.Ipv6Addresses[i].Prefix.IsNull() {
			data.Ipv6Addresses[i].Prefix = types.StringValue(value.String())
		} else {
			data.Ipv6Addresses[i].Prefix = types.StringNull()
		}
		if value := r.Get("eui-64"); !data.Ipv6Addresses[i].Eui64.IsNull() {
			if value.Exists() {
				data.Ipv6Addresses[i].Eui64 = types.BoolValue(true)
			} else {
				data.Ipv6Addresses[i].Eui64 = types.BoolValue(false)
			}
		} else {
			data.Ipv6Addresses[i].Eui64 = types.BoolNull()
		}
	}
	if value := res.Get(prefix + "arp.timeout"); value.Exists() && !data.ArpTimeout.IsNull() {
		data.ArpTimeout = types.Int64Value(value.Int())
	} else {
		data.ArpTimeout = types.Int64Null()
	}
	if value := res.Get(prefix + "ip.arp.inspection.trust"); !data.IpArpInspectionTrust.IsNull() {
		if value.Exists() {
			data.IpArpInspectionTrust = types.BoolValue(true)
		} else {
			data.IpArpInspectionTrust = types.BoolValue(false)
		}
	} else {
		data.IpArpInspectionTrust = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.arp.inspection.limit.rate"); value.Exists() && !data.IpArpInspectionLimitRate.IsNull() {
		data.IpArpInspectionLimitRate = types.Int64Value(value.Int())
	} else {
		data.IpArpInspectionLimitRate = types.Int64Null()
	}
}

// End of section. //template:end updateFromBody

// Section below is generated&owned by "gen/generator.go". //template:begin fromBody

func (data *InterfacePortChannelSubinterface) fromBody(ctx context.Context, res gjson.Result) {
	prefix := helpers.LastElement(data.getPath()) + "."
	if res.Get(helpers.LastElement(data.getPath())).IsArray() {
		prefix += "0."
	}
	if value := res.Get(prefix + "encapsulation.dot1Q.vlan-id"); value.Exists() {
		data.EncapsulationDot1qVlanId = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "description"); value.Exists() {
		data.Description = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "shutdown"); value.Exists() {
		data.Shutdown = types.BoolValue(true)
	} else {
		data.Shutdown = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.proxy-arp"); value.Exists() {
		data.IpProxyArp = types.BoolValue(value.Bool())
	} else {
		data.IpProxyArp = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.redirects"); value.Exists() {
		data.IpRedirects = types.BoolValue(value.Bool())
	} else {
		data.IpRedirects = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.Cisco-IOS-XE-icmp:unreachables"); value.Exists() {
		data.IpUnreachables = types.BoolValue(value.Bool())
	} else {
		data.IpUnreachables = types.BoolNull()
	}
	if value := res.Get(prefix + "vrf.forwarding"); value.Exists() {
		data.VrfForwarding = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.address.primary.address"); value.Exists() {
		data.Ipv4Address = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.address.primary.mask"); value.Exists() {
		data.Ipv4AddressMask = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.access-group.in.acl.in"); value.Exists() {
		data.IpAccessGroupInEnable = types.BoolValue(true)
	} else {
		data.IpAccessGroupInEnable = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.access-group.in.acl.acl-name"); value.Exists() {
		data.IpAccessGroupIn = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.access-group.out.acl.out"); value.Exists() {
		data.IpAccessGroupOutEnable = types.BoolValue(true)
	} else {
		data.IpAccessGroupOutEnable = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.access-group.out.acl.acl-name"); value.Exists() {
		data.IpAccessGroupOut = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.classify"); value.Exists() {
		data.AutoQosClassify = types.BoolValue(true)
	} else {
		data.AutoQosClassify = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.classify.police"); value.Exists() {
		data.AutoQosClassifyPolice = types.BoolValue(true)
	} else {
		data.AutoQosClassifyPolice = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust"); value.Exists() {
		data.AutoQosTrust = types.BoolValue(true)
	} else {
		data.AutoQosTrust = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust.cos"); value.Exists() {
		data.AutoQosTrustCos = types.BoolValue(true)
	} else {
		data.AutoQosTrustCos = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust.dscp"); value.Exists() {
		data.AutoQosTrustDscp = types.BoolValue(true)
	} else {
		data.AutoQosTrustDscp = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.cts"); value.Exists() {
		data.AutoQosVideoCts = types.BoolValue(true)
	} else {
		data.AutoQosVideoCts = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.ip-camera"); value.Exists() {
		data.AutoQosVideoIpCamera = types.BoolValue(true)
	} else {
		data.AutoQosVideoIpCamera = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.media-player"); value.Exists() {
		data.AutoQosVideoMediaPlayer = types.BoolValue(true)
	} else {
		data.AutoQosVideoMediaPlayer = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip"); value.Exists() {
		data.AutoQosVoip = types.BoolValue(true)
	} else {
		data.AutoQosVoip = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.cisco-phone"); value.Exists() {
		data.AutoQosVoipCiscoPhone = types.BoolValue(true)
	} else {
		data.AutoQosVoipCiscoPhone = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.cisco-softphone"); value.Exists() {
		data.AutoQosVoipCiscoSoftphone = types.BoolValue(true)
	} else {
		data.AutoQosVoipCiscoSoftphone = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.trust"); value.Exists() {
		data.AutoQosVoipTrust = types.BoolValue(true)
	} else {
		data.AutoQosVoipTrust = types.BoolValue(false)
	}
	if value := res.Get(prefix + "trust.device"); value.Exists() {
		data.TrustDevice = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.helper-address"); value.Exists() {
		data.HelperAddresses = make([]InterfacePortChannelSubinterfaceHelperAddresses, 0)
		value.ForEach(func(k, v gjson.Result) bool {
			item := InterfacePortChannelSubinterfaceHelperAddresses{}
			if cValue := v.Get("address"); cValue.Exists() {
				item.Address = types.StringValue(cValue.String())
			}
			if cValue := v.Get("global"); cValue.Exists() {
				item.Global = types.BoolValue(true)
			} else {
				item.Global = types.BoolValue(false)
			}
			if cValue := v.Get("vrf"); cValue.Exists() {
				item.Vrf = types.StringValue(cValue.String())
			}
			data.HelperAddresses = append(data.HelperAddresses, item)
			return true
		})
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:template"); value.Exists() {
		data.BfdTemplate = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:enable"); value.Exists() {
		data.BfdEnable = types.BoolValue(value.Bool())
	} else {
		data.BfdEnable = types.BoolNull()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:local-address"); value.Exists() {
		data.BfdLocalAddress = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.msecs"); value.Exists() {
		data.BfdInterval = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.min_rx"); value.Exists() {
		data.BfdIntervalMinRx = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.multiplier"); value.Exists() {
		data.BfdIntervalMultiplier = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:echo"); value.Exists() {
		data.BfdEcho = types.BoolValue(value.Bool())
	} else {
		data.BfdEcho = types.BoolNull()
	}
	if value := res.Get(prefix + "ipv6.enable"); value.Exists() {
		data.Ipv6Enable = types.BoolValue(true)
	} else {
		data.Ipv6Enable = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.mtu"); value.Exists() {
		data.Ipv6Mtu = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "ipv6.nd.Cisco-IOS-XE-nd:ra.suppress.all"); value.Exists() {
		data.Ipv6NdRaSuppressAll = types.BoolValue(true)
	} else {
		data.Ipv6NdRaSuppressAll = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.address.autoconfig.default"); value.Exists() {
		data.Ipv6AddressAutoconfigDefault = types.BoolValue(true)
	} else {
		data.Ipv6AddressAutoconfigDefault = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.address.dhcp"); value.Exists() {
		data.Ipv6AddressDhcp = types.BoolValue(true)
	} else {
		data.Ipv6AddressDhcp = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.address.link-local-address"); value.Exists() {
		data.Ipv6LinkLocalAddresses = make([]InterfacePortChannelSubinterfaceIpv6LinkLocalAddresses, 0)
		value.ForEach(func(k, v gjson.Result) bool {
			item := InterfacePortChannelSubinterfaceIpv6LinkLocalAddresses{}
			if cValue := v.Get("address"); cValue.Exists() {
				item.Address = types.StringValue(cValue.String())
			}
			if cValue := v.Get("link-local"); cValue.Exists() {
				item.LinkLocal = types.BoolValue(true)
			} else {
				item.LinkLocal = types.BoolValue(false)
			}
			data.Ipv6LinkLocalAddresses = append(data.Ipv6LinkLocalAddresses, item)
			return true
		})
	}
	if value := res.Get(prefix + "ipv6.address.prefix-list"); value.Exists() {
		data.Ipv6Addresses = make([]InterfacePortChannelSubinterfaceIpv6Addresses, 0)
		value.ForEach(func(k, v gjson.Result) bool {
			item := InterfacePortChannelSubinterfaceIpv6Addresses{}
			if cValue := v.Get("prefix"); cValue.Exists() {
				item.Prefix = types.StringValue(cValue.String())
			}
			if cValue := v.Get("eui-64"); cValue.Exists() {
				item.Eui64 = types.BoolValue(true)
			} else {
				item.Eui64 = types.BoolValue(false)
			}
			data.Ipv6Addresses = append(data.Ipv6Addresses, item)
			return true
		})
	}
	if value := res.Get(prefix + "arp.timeout"); value.Exists() {
		data.ArpTimeout = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "ip.arp.inspection.trust"); value.Exists() {
		data.IpArpInspectionTrust = types.BoolValue(true)
	} else {
		data.IpArpInspectionTrust = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.arp.inspection.limit.rate"); value.Exists() {
		data.IpArpInspectionLimitRate = types.Int64Value(value.Int())
	}
}

// End of section. //template:end fromBody

// Section below is generated&owned by "gen/generator.go". //template:begin fromBodyData

func (data *InterfacePortChannelSubinterfaceData) fromBody(ctx context.Context, res gjson.Result) {
	prefix := helpers.LastElement(data.getPath()) + "."
	if res.Get(helpers.LastElement(data.getPath())).IsArray() {
		prefix += "0."
	}
	if value := res.Get(prefix + "encapsulation.dot1Q.vlan-id"); value.Exists() {
		data.EncapsulationDot1qVlanId = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "description"); value.Exists() {
		data.Description = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "shutdown"); value.Exists() {
		data.Shutdown = types.BoolValue(true)
	} else {
		data.Shutdown = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.proxy-arp"); value.Exists() {
		data.IpProxyArp = types.BoolValue(value.Bool())
	} else {
		data.IpProxyArp = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.redirects"); value.Exists() {
		data.IpRedirects = types.BoolValue(value.Bool())
	} else {
		data.IpRedirects = types.BoolNull()
	}
	if value := res.Get(prefix + "ip.Cisco-IOS-XE-icmp:unreachables"); value.Exists() {
		data.IpUnreachables = types.BoolValue(value.Bool())
	} else {
		data.IpUnreachables = types.BoolNull()
	}
	if value := res.Get(prefix + "vrf.forwarding"); value.Exists() {
		data.VrfForwarding = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.address.primary.address"); value.Exists() {
		data.Ipv4Address = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.address.primary.mask"); value.Exists() {
		data.Ipv4AddressMask = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.access-group.in.acl.in"); value.Exists() {
		data.IpAccessGroupInEnable = types.BoolValue(true)
	} else {
		data.IpAccessGroupInEnable = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.access-group.in.acl.acl-name"); value.Exists() {
		data.IpAccessGroupIn = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.access-group.out.acl.out"); value.Exists() {
		data.IpAccessGroupOutEnable = types.BoolValue(true)
	} else {
		data.IpAccessGroupOutEnable = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.access-group.out.acl.acl-name"); value.Exists() {
		data.IpAccessGroupOut = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.classify"); value.Exists() {
		data.AutoQosClassify = types.BoolValue(true)
	} else {
		data.AutoQosClassify = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.classify.police"); value.Exists() {
		data.AutoQosClassifyPolice = types.BoolValue(true)
	} else {
		data.AutoQosClassifyPolice = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust"); value.Exists() {
		data.AutoQosTrust = types.BoolValue(true)
	} else {
		data.AutoQosTrust = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust.cos"); value.Exists() {
		data.AutoQosTrustCos = types.BoolValue(true)
	} else {
		data.AutoQosTrustCos = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.trust.dscp"); value.Exists() {
		data.AutoQosTrustDscp = types.BoolValue(true)
	} else {
		data.AutoQosTrustDscp = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.cts"); value.Exists() {
		data.AutoQosVideoCts = types.BoolValue(true)
	} else {
		data.AutoQosVideoCts = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.ip-camera"); value.Exists() {
		data.AutoQosVideoIpCamera = types.BoolValue(true)
	} else {
		data.AutoQosVideoIpCamera = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.video.media-player"); value.Exists() {
		data.AutoQosVideoMediaPlayer = types.BoolValue(true)
	} else {
		data.AutoQosVideoMediaPlayer = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip"); value.Exists() {
		data.AutoQosVoip = types.BoolValue(true)
	} else {
		data.AutoQosVoip = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.cisco-phone"); value.Exists() {
		data.AutoQosVoipCiscoPhone = types.BoolValue(true)
	} else {
		data.AutoQosVoipCiscoPhone = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.cisco-softphone"); value.Exists() {
		data.AutoQosVoipCiscoSoftphone = types.BoolValue(true)
	} else {
		data.AutoQosVoipCiscoSoftphone = types.BoolValue(false)
	}
	if value := res.Get(prefix + "Cisco-IOS-XE-switch:auto.qos.voip.trust"); value.Exists() {
		data.AutoQosVoipTrust = types.BoolValue(true)
	} else {
		data.AutoQosVoipTrust = types.BoolValue(false)
	}
	if value := res.Get(prefix + "trust.device"); value.Exists() {
		data.TrustDevice = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "ip.helper-address"); value.Exists() {
		data.HelperAddresses = make([]InterfacePortChannelSubinterfaceHelperAddresses, 0)
		value.ForEach(func(k, v gjson.Result) bool {
			item := InterfacePortChannelSubinterfaceHelperAddresses{}
			if cValue := v.Get("address"); cValue.Exists() {
				item.Address = types.StringValue(cValue.String())
			}
			if cValue := v.Get("global"); cValue.Exists() {
				item.Global = types.BoolValue(true)
			} else {
				item.Global = types.BoolValue(false)
			}
			if cValue := v.Get("vrf"); cValue.Exists() {
				item.Vrf = types.StringValue(cValue.String())
			}
			data.HelperAddresses = append(data.HelperAddresses, item)
			return true
		})
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:template"); value.Exists() {
		data.BfdTemplate = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:enable"); value.Exists() {
		data.BfdEnable = types.BoolValue(value.Bool())
	} else {
		data.BfdEnable = types.BoolNull()
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:local-address"); value.Exists() {
		data.BfdLocalAddress = types.StringValue(value.String())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.msecs"); value.Exists() {
		data.BfdInterval = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.min_rx"); value.Exists() {
		data.BfdIntervalMinRx = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:interval-interface.multiplier"); value.Exists() {
		data.BfdIntervalMultiplier = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "bfd.Cisco-IOS-XE-bfd:echo"); value.Exists() {
		data.BfdEcho = types.BoolValue(value.Bool())
	} else {
		data.BfdEcho = types.BoolNull()
	}
	if value := res.Get(prefix + "ipv6.enable"); value.Exists() {
		data.Ipv6Enable = types.BoolValue(true)
	} else {
		data.Ipv6Enable = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.mtu"); value.Exists() {
		data.Ipv6Mtu = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "ipv6.nd.Cisco-IOS-XE-nd:ra.suppress.all"); value.Exists() {
		data.Ipv6NdRaSuppressAll = types.BoolValue(true)
	} else {
		data.Ipv6NdRaSuppressAll = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.address.autoconfig.default"); value.Exists() {
		data.Ipv6AddressAutoconfigDefault = types.BoolValue(true)
	} else {
		data.Ipv6AddressAutoconfigDefault = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.address.dhcp"); value.Exists() {
		data.Ipv6AddressDhcp = types.BoolValue(true)
	} else {
		data.Ipv6AddressDhcp = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ipv6.address.link-local-address"); value.Exists() {
		data.Ipv6LinkLocalAddresses = make([]InterfacePortChannelSubinterfaceIpv6LinkLocalAddresses, 0)
		value.ForEach(func(k, v gjson.Result) bool {
			item := InterfacePortChannelSubinterfaceIpv6LinkLocalAddresses{}
			if cValue := v.Get("address"); cValue.Exists() {
				item.Address = types.StringValue(cValue.String())
			}
			if cValue := v.Get("link-local"); cValue.Exists() {
				item.LinkLocal = types.BoolValue(true)
			} else {
				item.LinkLocal = types.BoolValue(false)
			}
			data.Ipv6LinkLocalAddresses = append(data.Ipv6LinkLocalAddresses, item)
			return true
		})
	}
	if value := res.Get(prefix + "ipv6.address.prefix-list"); value.Exists() {
		data.Ipv6Addresses = make([]InterfacePortChannelSubinterfaceIpv6Addresses, 0)
		value.ForEach(func(k, v gjson.Result) bool {
			item := InterfacePortChannelSubinterfaceIpv6Addresses{}
			if cValue := v.Get("prefix"); cValue.Exists() {
				item.Prefix = types.StringValue(cValue.String())
			}
			if cValue := v.Get("eui-64"); cValue.Exists() {
				item.Eui64 = types.BoolValue(true)
			} else {
				item.Eui64 = types.BoolValue(false)
			}
			data.Ipv6Addresses = append(data.Ipv6Addresses, item)
			return true
		})
	}
	if value := res.Get(prefix + "arp.timeout"); value.Exists() {
		data.ArpTimeout = types.Int64Value(value.Int())
	}
	if value := res.Get(prefix + "ip.arp.inspection.trust"); value.Exists() {
		data.IpArpInspectionTrust = types.BoolValue(true)
	} else {
		data.IpArpInspectionTrust = types.BoolValue(false)
	}
	if value := res.Get(prefix + "ip.arp.inspection.limit.rate"); value.Exists() {
		data.IpArpInspectionLimitRate = types.Int64Value(value.Int())
	}
}

// End of section. //template:end fromBodyData

// Section below is generated&owned by "gen/generator.go". //template:begin getDeletedItems

func (data *InterfacePortChannelSubinterface) getDeletedItems(ctx context.Context, state InterfacePortChannelSubinterface) []string {
	deletedItems := make([]string, 0)
	if !state.IpArpInspectionLimitRate.IsNull() && data.IpArpInspectionLimitRate.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/arp/inspection/limit/rate", state.getPath()))
	}
	if !state.IpArpInspectionTrust.IsNull() && data.IpArpInspectionTrust.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/arp/inspection/trust", state.getPath()))
	}
	if !state.ArpTimeout.IsNull() && data.ArpTimeout.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/arp/timeout", state.getPath()))
	}
	for i := range state.Ipv6Addresses {
		stateKeyValues := [...]string{state.Ipv6Addresses[i].Prefix.ValueString()}

		emptyKeys := true
		if !reflect.ValueOf(state.Ipv6Addresses[i].Prefix.ValueString()).IsZero() {
			emptyKeys = false
		}
		if emptyKeys {
			continue
		}

		found := false
		for j := range data.Ipv6Addresses {
			found = true
			if state.Ipv6Addresses[i].Prefix.ValueString() != data.Ipv6Addresses[j].Prefix.ValueString() {
				found = false
			}
			if found {
				if !state.Ipv6Addresses[i].Eui64.IsNull() && data.Ipv6Addresses[j].Eui64.IsNull() {
					deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/address/prefix-list=%v/eui-64", state.getPath(), strings.Join(stateKeyValues[:], ",")))
				}
				break
			}
		}
		if !found {
			deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/address/prefix-list=%v", state.getPath(), strings.Join(stateKeyValues[:], ",")))
		}
	}
	for i := range state.Ipv6LinkLocalAddresses {
		stateKeyValues := [...]string{state.Ipv6LinkLocalAddresses[i].Address.ValueString()}

		emptyKeys := true
		if !reflect.ValueOf(state.Ipv6LinkLocalAddresses[i].Address.ValueString()).IsZero() {
			emptyKeys = false
		}
		if emptyKeys {
			continue
		}

		found := false
		for j := range data.Ipv6LinkLocalAddresses {
			found = true
			if state.Ipv6LinkLocalAddresses[i].Address.ValueString() != data.Ipv6LinkLocalAddresses[j].Address.ValueString() {
				found = false
			}
			if found {
				if !state.Ipv6LinkLocalAddresses[i].LinkLocal.IsNull() && data.Ipv6LinkLocalAddresses[j].LinkLocal.IsNull() {
					deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/address/link-local-address=%v/link-local", state.getPath(), strings.Join(stateKeyValues[:], ",")))
				}
				break
			}
		}
		if !found {
			deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/address/link-local-address=%v", state.getPath(), strings.Join(stateKeyValues[:], ",")))
		}
	}
	if !state.Ipv6AddressDhcp.IsNull() && data.Ipv6AddressDhcp.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/address/dhcp", state.getPath()))
	}
	if !state.Ipv6AddressAutoconfigDefault.IsNull() && data.Ipv6AddressAutoconfigDefault.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/address/autoconfig/default", state.getPath()))
	}
	if !state.Ipv6NdRaSuppressAll.IsNull() && data.Ipv6NdRaSuppressAll.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/nd/Cisco-IOS-XE-nd:ra/suppress/all", state.getPath()))
	}
	if !state.Ipv6Mtu.IsNull() && data.Ipv6Mtu.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/mtu", state.getPath()))
	}
	if !state.Ipv6Enable.IsNull() && data.Ipv6Enable.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ipv6/enable", state.getPath()))
	}
	if !state.BfdEcho.IsNull() && data.BfdEcho.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:echo", state.getPath()))
	}
	if !state.BfdIntervalMultiplier.IsNull() && data.BfdIntervalMultiplier.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:interval-interface", state.getPath()))
	}
	if !state.BfdIntervalMinRx.IsNull() && data.BfdIntervalMinRx.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:interval-interface", state.getPath()))
	}
	if !state.BfdInterval.IsNull() && data.BfdInterval.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:interval-interface", state.getPath()))
	}
	if !state.BfdLocalAddress.IsNull() && data.BfdLocalAddress.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:local-address", state.getPath()))
	}
	if !state.BfdEnable.IsNull() && data.BfdEnable.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:enable", state.getPath()))
	}
	if !state.BfdTemplate.IsNull() && data.BfdTemplate.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:template", state.getPath()))
	}
	for i := range state.HelperAddresses {
		stateKeyValues := [...]string{state.HelperAddresses[i].Address.ValueString()}

		emptyKeys := true
		if !reflect.ValueOf(state.HelperAddresses[i].Address.ValueString()).IsZero() {
			emptyKeys = false
		}
		if emptyKeys {
			continue
		}

		found := false
		for j := range data.HelperAddresses {
			found = true
			if state.HelperAddresses[i].Address.ValueString() != data.HelperAddresses[j].Address.ValueString() {
				found = false
			}
			if found {
				if !state.HelperAddresses[i].Vrf.IsNull() && data.HelperAddresses[j].Vrf.IsNull() {
					deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/helper-address=%v/vrf", state.getPath(), strings.Join(stateKeyValues[:], ",")))
				}
				if !state.HelperAddresses[i].Global.IsNull() && data.HelperAddresses[j].Global.IsNull() {
					deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/helper-address=%v/global", state.getPath(), strings.Join(stateKeyValues[:], ",")))
				}
				break
			}
		}
		if !found {
			deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/helper-address=%v", state.getPath(), strings.Join(stateKeyValues[:], ",")))
		}
	}
	if !state.TrustDevice.IsNull() && data.TrustDevice.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/trust/device", state.getPath()))
	}
	if !state.AutoQosVoipTrust.IsNull() && data.AutoQosVoipTrust.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/trust", state.getPath()))
	}
	if !state.AutoQosVoipCiscoSoftphone.IsNull() && data.AutoQosVoipCiscoSoftphone.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/cisco-softphone", state.getPath()))
	}
	if !state.AutoQosVoipCiscoPhone.IsNull() && data.AutoQosVoipCiscoPhone.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/cisco-phone", state.getPath()))
	}
	if !state.AutoQosVoip.IsNull() && data.AutoQosVoip.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip", state.getPath()))
	}
	if !state.AutoQosVideoMediaPlayer.IsNull() && data.AutoQosVideoMediaPlayer.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/media-player", state.getPath()))
	}
	if !state.AutoQosVideoIpCamera.IsNull() && data.AutoQosVideoIpCamera.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/ip-camera", state.getPath()))
	}
	if !state.AutoQosVideoCts.IsNull() && data.AutoQosVideoCts.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/cts", state.getPath()))
	}
	if !state.AutoQosTrustDscp.IsNull() && data.AutoQosTrustDscp.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust/dscp", state.getPath()))
	}
	if !state.AutoQosTrustCos.IsNull() && data.AutoQosTrustCos.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust/cos", state.getPath()))
	}
	if !state.AutoQosTrust.IsNull() && data.AutoQosTrust.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust", state.getPath()))
	}
	if !state.AutoQosClassifyPolice.IsNull() && data.AutoQosClassifyPolice.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/classify/police", state.getPath()))
	}
	if !state.AutoQosClassify.IsNull() && data.AutoQosClassify.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/classify", state.getPath()))
	}
	if !state.IpAccessGroupOut.IsNull() && data.IpAccessGroupOut.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/access-group/out/acl", state.getPath()))
	}
	if !state.IpAccessGroupOutEnable.IsNull() && data.IpAccessGroupOutEnable.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/access-group/out/acl/out", state.getPath()))
	}
	if !state.IpAccessGroupIn.IsNull() && data.IpAccessGroupIn.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/access-group/in/acl", state.getPath()))
	}
	if !state.IpAccessGroupInEnable.IsNull() && data.IpAccessGroupInEnable.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/access-group/in/acl/in", state.getPath()))
	}
	if !state.Ipv4AddressMask.IsNull() && data.Ipv4AddressMask.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/address/primary", state.getPath()))
	}
	if !state.Ipv4Address.IsNull() && data.Ipv4Address.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/address/primary", state.getPath()))
	}
	if !state.VrfForwarding.IsNull() && data.VrfForwarding.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/vrf/forwarding", state.getPath()))
	}
	if !state.IpUnreachables.IsNull() && data.IpUnreachables.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/Cisco-IOS-XE-icmp:unreachables", state.getPath()))
	}
	if !state.IpRedirects.IsNull() && data.IpRedirects.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/redirects", state.getPath()))
	}
	if !state.IpProxyArp.IsNull() && data.IpProxyArp.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/ip/proxy-arp", state.getPath()))
	}
	if !state.Shutdown.IsNull() && data.Shutdown.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/shutdown", state.getPath()))
	}
	if !state.Description.IsNull() && data.Description.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/description", state.getPath()))
	}
	if !state.EncapsulationDot1qVlanId.IsNull() && data.EncapsulationDot1qVlanId.IsNull() {
		deletedItems = append(deletedItems, fmt.Sprintf("%v/encapsulation/dot1Q/vlan-id", state.getPath()))
	}

	return deletedItems
}

// End of section. //template:end getDeletedItems

// Section below is generated&owned by "gen/generator.go". //template:begin getEmptyLeafsDelete

func (data *InterfacePortChannelSubinterface) getEmptyLeafsDelete(ctx context.Context) []string {
	emptyLeafsDelete := make([]string, 0)
	if !data.IpArpInspectionTrust.IsNull() && !data.IpArpInspectionTrust.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ip/arp/inspection/trust", data.getPath()))
	}

	for i := range data.Ipv6Addresses {
		keyValues := [...]string{data.Ipv6Addresses[i].Prefix.ValueString()}
		if !data.Ipv6Addresses[i].Eui64.IsNull() && !data.Ipv6Addresses[i].Eui64.ValueBool() {
			emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ipv6/address/prefix-list=%v/eui-64", data.getPath(), strings.Join(keyValues[:], ",")))
		}
	}

	for i := range data.Ipv6LinkLocalAddresses {
		keyValues := [...]string{data.Ipv6LinkLocalAddresses[i].Address.ValueString()}
		if !data.Ipv6LinkLocalAddresses[i].LinkLocal.IsNull() && !data.Ipv6LinkLocalAddresses[i].LinkLocal.ValueBool() {
			emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ipv6/address/link-local-address=%v/link-local", data.getPath(), strings.Join(keyValues[:], ",")))
		}
	}
	if !data.Ipv6AddressDhcp.IsNull() && !data.Ipv6AddressDhcp.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ipv6/address/dhcp", data.getPath()))
	}
	if !data.Ipv6AddressAutoconfigDefault.IsNull() && !data.Ipv6AddressAutoconfigDefault.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ipv6/address/autoconfig/default", data.getPath()))
	}
	if !data.Ipv6NdRaSuppressAll.IsNull() && !data.Ipv6NdRaSuppressAll.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ipv6/nd/Cisco-IOS-XE-nd:ra/suppress/all", data.getPath()))
	}
	if !data.Ipv6Enable.IsNull() && !data.Ipv6Enable.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ipv6/enable", data.getPath()))
	}

	for i := range data.HelperAddresses {
		keyValues := [...]string{data.HelperAddresses[i].Address.ValueString()}
		if !data.HelperAddresses[i].Global.IsNull() && !data.HelperAddresses[i].Global.ValueBool() {
			emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ip/helper-address=%v/global", data.getPath(), strings.Join(keyValues[:], ",")))
		}
	}
	if !data.AutoQosVoipTrust.IsNull() && !data.AutoQosVoipTrust.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/trust", data.getPath()))
	}
	if !data.AutoQosVoipCiscoSoftphone.IsNull() && !data.AutoQosVoipCiscoSoftphone.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/cisco-softphone", data.getPath()))
	}
	if !data.AutoQosVoipCiscoPhone.IsNull() && !data.AutoQosVoipCiscoPhone.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/cisco-phone", data.getPath()))
	}
	if !data.AutoQosVoip.IsNull() && !data.AutoQosVoip.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip", data.getPath()))
	}
	if !data.AutoQosVideoMediaPlayer.IsNull() && !data.AutoQosVideoMediaPlayer.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/media-player", data.getPath()))
	}
	if !data.AutoQosVideoIpCamera.IsNull() && !data.AutoQosVideoIpCamera.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/ip-camera", data.getPath()))
	}
	if !data.AutoQosVideoCts.IsNull() && !data.AutoQosVideoCts.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/cts", data.getPath()))
	}
	if !data.AutoQosTrustDscp.IsNull() && !data.AutoQosTrustDscp.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust/dscp", data.getPath()))
	}
	if !data.AutoQosTrustCos.IsNull() && !data.AutoQosTrustCos.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust/cos", data.getPath()))
	}
	if !data.AutoQosTrust.IsNull() && !data.AutoQosTrust.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust", data.getPath()))
	}
	if !data.AutoQosClassifyPolice.IsNull() && !data.AutoQosClassifyPolice.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/classify/police", data.getPath()))
	}
	if !data.AutoQosClassify.IsNull() && !data.AutoQosClassify.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/classify", data.getPath()))
	}
	if !data.IpAccessGroupOutEnable.IsNull() && !data.IpAccessGroupOutEnable.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ip/access-group/out/acl/out", data.getPath()))
	}
	if !data.IpAccessGroupInEnable.IsNull() && !data.IpAccessGroupInEnable.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/ip/access-group/in/acl/in", data.getPath()))
	}
	if !data.Shutdown.IsNull() && !data.Shutdown.ValueBool() {
		emptyLeafsDelete = append(emptyLeafsDelete, fmt.Sprintf("%v/shutdown", data.getPath()))
	}

	return emptyLeafsDelete
}

// End of section. //template:end getEmptyLeafsDelete

// Section below is generated&owned by "gen/generator.go". //template:begin getDeletePaths

func (data *InterfacePortChannelSubinterface) getDeletePaths(ctx context.Context) []string {
	var deletePaths []string
	if !data.IpArpInspectionLimitRate.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/arp/inspection/limit/rate", data.getPath()))
	}
	if !data.IpArpInspectionTrust.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/arp/inspection/trust", data.getPath()))
	}
	if !data.ArpTimeout.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/arp/timeout", data.getPath()))
	}
	for i := range data.Ipv6Addresses {
		keyValues := [...]string{data.Ipv6Addresses[i].Prefix.ValueString()}

		deletePaths = append(deletePaths, fmt.Sprintf("%v/ipv6/address/prefix-list=%v", data.getPath(), strings.Join(keyValues[:], ",")))
	}
	for i := range data.Ipv6LinkLocalAddresses {
		keyValues := [...]string{data.Ipv6LinkLocalAddresses[i].Address.ValueString()}

		deletePaths = append(deletePaths, fmt.Sprintf("%v/ipv6/address/link-local-address=%v", data.getPath(), strings.Join(keyValues[:], ",")))
	}
	if !data.Ipv6AddressDhcp.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ipv6/address/dhcp", data.getPath()))
	}
	if !data.Ipv6AddressAutoconfigDefault.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ipv6/address/autoconfig/default", data.getPath()))
	}
	if !data.Ipv6NdRaSuppressAll.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ipv6/nd/Cisco-IOS-XE-nd:ra/suppress/all", data.getPath()))
	}
	if !data.Ipv6Mtu.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ipv6/mtu", data.getPath()))
	}
	if !data.Ipv6Enable.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ipv6/enable", data.getPath()))
	}
	if !data.BfdEcho.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:echo", data.getPath()))
	}
	if !data.BfdIntervalMultiplier.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:interval-interface", data.getPath()))
	}
	if !data.BfdIntervalMinRx.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:interval-interface", data.getPath()))
	}
	if !data.BfdInterval.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:interval-interface", data.getPath()))
	}
	if !data.BfdLocalAddress.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:local-address", data.getPath()))
	}
	if !data.BfdEnable.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:enable", data.getPath()))
	}
	if !data.BfdTemplate.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/bfd/Cisco-IOS-XE-bfd:template", data.getPath()))
	}
	for i := range data.HelperAddresses {
		keyValues := [...]string{data.HelperAddresses[i].Address.ValueString()}

		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/helper-address=%v", data.getPath(), strings.Join(keyValues[:], ",")))
	}
	if !data.TrustDevice.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/trust/device", data.getPath()))
	}
	if !data.AutoQosVoipTrust.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/trust", data.getPath()))
	}
	if !data.AutoQosVoipCiscoSoftphone.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/cisco-softphone", data.getPath()))
	}
	if !data.AutoQosVoipCiscoPhone.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip/cisco-phone", data.getPath()))
	}
	if !data.AutoQosVoip.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/voip", data.getPath()))
	}
	if !data.AutoQosVideoMediaPlayer.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/media-player", data.getPath()))
	}
	if !data.AutoQosVideoIpCamera.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/ip-camera", data.getPath()))
	}
	if !data.AutoQosVideoCts.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/video/cts", data.getPath()))
	}
	if !data.AutoQosTrustDscp.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust/dscp", data.getPath()))
	}
	if !data.AutoQosTrustCos.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust/cos", data.getPath()))
	}
	if !data.AutoQosTrust.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/trust", data.getPath()))
	}
	if !data.AutoQosClassifyPolice.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/classify/police", data.getPath()))
	}
	if !data.AutoQosClassify.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/Cisco-IOS-XE-switch:auto/qos/classify", data.getPath()))
	}
	if !data.IpAccessGroupOut.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/access-group/out/acl", data.getPath()))
	}
	if !data.IpAccessGroupOutEnable.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/access-group/out/acl/out", data.getPath()))
	}
	if !data.IpAccessGroupIn.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/access-group/in/acl", data.getPath()))
	}
	if !data.IpAccessGroupInEnable.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/access-group/in/acl/in", data.getPath()))
	}
	if !data.Ipv4AddressMask.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/address/primary", data.getPath()))
	}
	if !data.Ipv4Address.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/address/primary", data.getPath()))
	}
	if !data.VrfForwarding.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/vrf/forwarding", data.getPath()))
	}
	if !data.IpUnreachables.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/Cisco-IOS-XE-icmp:unreachables", data.getPath()))
	}
	if !data.IpRedirects.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/redirects", data.getPath()))
	}
	if !data.IpProxyArp.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/ip/proxy-arp", data.getPath()))
	}
	if !data.Shutdown.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/shutdown", data.getPath()))
	}
	if !data.Description.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/description", data.getPath()))
	}
	if !data.EncapsulationDot1qVlanId.IsNull() {
		deletePaths = append(deletePaths, fmt.Sprintf("%v/encapsulation/dot1Q/vlan-id", data.getPath()))
	}

	return deletePaths
}

// End of section. //template:end getDeletePaths
