1package network
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"encoding/json"
23	"github.com/Azure/go-autorest/autorest"
24	"github.com/Azure/go-autorest/autorest/azure"
25	"github.com/Azure/go-autorest/autorest/date"
26	"github.com/Azure/go-autorest/autorest/to"
27	"github.com/Azure/go-autorest/tracing"
28	"net/http"
29)
30
31// The package's fully qualified name.
32const fqdn = "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-08-01/network"
33
34// Access enumerates the values for access.
35type Access string
36
37const (
38	// Allow ...
39	Allow Access = "Allow"
40	// Deny ...
41	Deny Access = "Deny"
42)
43
44// PossibleAccessValues returns an array of possible values for the Access const type.
45func PossibleAccessValues() []Access {
46	return []Access{Allow, Deny}
47}
48
49// ApplicationGatewayBackendHealthServerHealth enumerates the values for application gateway backend health
50// server health.
51type ApplicationGatewayBackendHealthServerHealth string
52
53const (
54	// Down ...
55	Down ApplicationGatewayBackendHealthServerHealth = "Down"
56	// Draining ...
57	Draining ApplicationGatewayBackendHealthServerHealth = "Draining"
58	// Partial ...
59	Partial ApplicationGatewayBackendHealthServerHealth = "Partial"
60	// Unknown ...
61	Unknown ApplicationGatewayBackendHealthServerHealth = "Unknown"
62	// Up ...
63	Up ApplicationGatewayBackendHealthServerHealth = "Up"
64)
65
66// PossibleApplicationGatewayBackendHealthServerHealthValues returns an array of possible values for the ApplicationGatewayBackendHealthServerHealth const type.
67func PossibleApplicationGatewayBackendHealthServerHealthValues() []ApplicationGatewayBackendHealthServerHealth {
68	return []ApplicationGatewayBackendHealthServerHealth{Down, Draining, Partial, Unknown, Up}
69}
70
71// ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity.
72type ApplicationGatewayCookieBasedAffinity string
73
74const (
75	// Disabled ...
76	Disabled ApplicationGatewayCookieBasedAffinity = "Disabled"
77	// Enabled ...
78	Enabled ApplicationGatewayCookieBasedAffinity = "Enabled"
79)
80
81// PossibleApplicationGatewayCookieBasedAffinityValues returns an array of possible values for the ApplicationGatewayCookieBasedAffinity const type.
82func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayCookieBasedAffinity {
83	return []ApplicationGatewayCookieBasedAffinity{Disabled, Enabled}
84}
85
86// ApplicationGatewayCustomErrorStatusCode enumerates the values for application gateway custom error status
87// code.
88type ApplicationGatewayCustomErrorStatusCode string
89
90const (
91	// HTTPStatus403 ...
92	HTTPStatus403 ApplicationGatewayCustomErrorStatusCode = "HttpStatus403"
93	// HTTPStatus502 ...
94	HTTPStatus502 ApplicationGatewayCustomErrorStatusCode = "HttpStatus502"
95)
96
97// PossibleApplicationGatewayCustomErrorStatusCodeValues returns an array of possible values for the ApplicationGatewayCustomErrorStatusCode const type.
98func PossibleApplicationGatewayCustomErrorStatusCodeValues() []ApplicationGatewayCustomErrorStatusCode {
99	return []ApplicationGatewayCustomErrorStatusCode{HTTPStatus403, HTTPStatus502}
100}
101
102// ApplicationGatewayFirewallMode enumerates the values for application gateway firewall mode.
103type ApplicationGatewayFirewallMode string
104
105const (
106	// Detection ...
107	Detection ApplicationGatewayFirewallMode = "Detection"
108	// Prevention ...
109	Prevention ApplicationGatewayFirewallMode = "Prevention"
110)
111
112// PossibleApplicationGatewayFirewallModeValues returns an array of possible values for the ApplicationGatewayFirewallMode const type.
113func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewallMode {
114	return []ApplicationGatewayFirewallMode{Detection, Prevention}
115}
116
117// ApplicationGatewayOperationalState enumerates the values for application gateway operational state.
118type ApplicationGatewayOperationalState string
119
120const (
121	// Running ...
122	Running ApplicationGatewayOperationalState = "Running"
123	// Starting ...
124	Starting ApplicationGatewayOperationalState = "Starting"
125	// Stopped ...
126	Stopped ApplicationGatewayOperationalState = "Stopped"
127	// Stopping ...
128	Stopping ApplicationGatewayOperationalState = "Stopping"
129)
130
131// PossibleApplicationGatewayOperationalStateValues returns an array of possible values for the ApplicationGatewayOperationalState const type.
132func PossibleApplicationGatewayOperationalStateValues() []ApplicationGatewayOperationalState {
133	return []ApplicationGatewayOperationalState{Running, Starting, Stopped, Stopping}
134}
135
136// ApplicationGatewayProtocol enumerates the values for application gateway protocol.
137type ApplicationGatewayProtocol string
138
139const (
140	// HTTP ...
141	HTTP ApplicationGatewayProtocol = "Http"
142	// HTTPS ...
143	HTTPS ApplicationGatewayProtocol = "Https"
144)
145
146// PossibleApplicationGatewayProtocolValues returns an array of possible values for the ApplicationGatewayProtocol const type.
147func PossibleApplicationGatewayProtocolValues() []ApplicationGatewayProtocol {
148	return []ApplicationGatewayProtocol{HTTP, HTTPS}
149}
150
151// ApplicationGatewayRedirectType enumerates the values for application gateway redirect type.
152type ApplicationGatewayRedirectType string
153
154const (
155	// Found ...
156	Found ApplicationGatewayRedirectType = "Found"
157	// Permanent ...
158	Permanent ApplicationGatewayRedirectType = "Permanent"
159	// SeeOther ...
160	SeeOther ApplicationGatewayRedirectType = "SeeOther"
161	// Temporary ...
162	Temporary ApplicationGatewayRedirectType = "Temporary"
163)
164
165// PossibleApplicationGatewayRedirectTypeValues returns an array of possible values for the ApplicationGatewayRedirectType const type.
166func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirectType {
167	return []ApplicationGatewayRedirectType{Found, Permanent, SeeOther, Temporary}
168}
169
170// ApplicationGatewayRequestRoutingRuleType enumerates the values for application gateway request routing rule
171// type.
172type ApplicationGatewayRequestRoutingRuleType string
173
174const (
175	// Basic ...
176	Basic ApplicationGatewayRequestRoutingRuleType = "Basic"
177	// PathBasedRouting ...
178	PathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting"
179)
180
181// PossibleApplicationGatewayRequestRoutingRuleTypeValues returns an array of possible values for the ApplicationGatewayRequestRoutingRuleType const type.
182func PossibleApplicationGatewayRequestRoutingRuleTypeValues() []ApplicationGatewayRequestRoutingRuleType {
183	return []ApplicationGatewayRequestRoutingRuleType{Basic, PathBasedRouting}
184}
185
186// ApplicationGatewaySkuName enumerates the values for application gateway sku name.
187type ApplicationGatewaySkuName string
188
189const (
190	// StandardLarge ...
191	StandardLarge ApplicationGatewaySkuName = "Standard_Large"
192	// StandardMedium ...
193	StandardMedium ApplicationGatewaySkuName = "Standard_Medium"
194	// StandardSmall ...
195	StandardSmall ApplicationGatewaySkuName = "Standard_Small"
196	// StandardV2 ...
197	StandardV2 ApplicationGatewaySkuName = "Standard_v2"
198	// WAFLarge ...
199	WAFLarge ApplicationGatewaySkuName = "WAF_Large"
200	// WAFMedium ...
201	WAFMedium ApplicationGatewaySkuName = "WAF_Medium"
202	// WAFV2 ...
203	WAFV2 ApplicationGatewaySkuName = "WAF_v2"
204)
205
206// PossibleApplicationGatewaySkuNameValues returns an array of possible values for the ApplicationGatewaySkuName const type.
207func PossibleApplicationGatewaySkuNameValues() []ApplicationGatewaySkuName {
208	return []ApplicationGatewaySkuName{StandardLarge, StandardMedium, StandardSmall, StandardV2, WAFLarge, WAFMedium, WAFV2}
209}
210
211// ApplicationGatewaySslCipherSuite enumerates the values for application gateway ssl cipher suite.
212type ApplicationGatewaySslCipherSuite string
213
214const (
215	// TLSDHEDSSWITH3DESEDECBCSHA ...
216	TLSDHEDSSWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
217	// TLSDHEDSSWITHAES128CBCSHA ...
218	TLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
219	// TLSDHEDSSWITHAES128CBCSHA256 ...
220	TLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
221	// TLSDHEDSSWITHAES256CBCSHA ...
222	TLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"
223	// TLSDHEDSSWITHAES256CBCSHA256 ...
224	TLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"
225	// TLSDHERSAWITHAES128CBCSHA ...
226	TLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
227	// TLSDHERSAWITHAES128GCMSHA256 ...
228	TLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
229	// TLSDHERSAWITHAES256CBCSHA ...
230	TLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
231	// TLSDHERSAWITHAES256GCMSHA384 ...
232	TLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"
233	// TLSECDHEECDSAWITHAES128CBCSHA ...
234	TLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
235	// TLSECDHEECDSAWITHAES128CBCSHA256 ...
236	TLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
237	// TLSECDHEECDSAWITHAES128GCMSHA256 ...
238	TLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
239	// TLSECDHEECDSAWITHAES256CBCSHA ...
240	TLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
241	// TLSECDHEECDSAWITHAES256CBCSHA384 ...
242	TLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
243	// TLSECDHEECDSAWITHAES256GCMSHA384 ...
244	TLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
245	// TLSECDHERSAWITHAES128CBCSHA ...
246	TLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
247	// TLSECDHERSAWITHAES128CBCSHA256 ...
248	TLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
249	// TLSECDHERSAWITHAES128GCMSHA256 ...
250	TLSECDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
251	// TLSECDHERSAWITHAES256CBCSHA ...
252	TLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
253	// TLSECDHERSAWITHAES256CBCSHA384 ...
254	TLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
255	// TLSECDHERSAWITHAES256GCMSHA384 ...
256	TLSECDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
257	// TLSRSAWITH3DESEDECBCSHA ...
258	TLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
259	// TLSRSAWITHAES128CBCSHA ...
260	TLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA"
261	// TLSRSAWITHAES128CBCSHA256 ...
262	TLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256"
263	// TLSRSAWITHAES128GCMSHA256 ...
264	TLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256"
265	// TLSRSAWITHAES256CBCSHA ...
266	TLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA"
267	// TLSRSAWITHAES256CBCSHA256 ...
268	TLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256"
269	// TLSRSAWITHAES256GCMSHA384 ...
270	TLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384"
271)
272
273// PossibleApplicationGatewaySslCipherSuiteValues returns an array of possible values for the ApplicationGatewaySslCipherSuite const type.
274func PossibleApplicationGatewaySslCipherSuiteValues() []ApplicationGatewaySslCipherSuite {
275	return []ApplicationGatewaySslCipherSuite{TLSDHEDSSWITH3DESEDECBCSHA, TLSDHEDSSWITHAES128CBCSHA, TLSDHEDSSWITHAES128CBCSHA256, TLSDHEDSSWITHAES256CBCSHA, TLSDHEDSSWITHAES256CBCSHA256, TLSDHERSAWITHAES128CBCSHA, TLSDHERSAWITHAES128GCMSHA256, TLSDHERSAWITHAES256CBCSHA, TLSDHERSAWITHAES256GCMSHA384, TLSECDHEECDSAWITHAES128CBCSHA, TLSECDHEECDSAWITHAES128CBCSHA256, TLSECDHEECDSAWITHAES128GCMSHA256, TLSECDHEECDSAWITHAES256CBCSHA, TLSECDHEECDSAWITHAES256CBCSHA384, TLSECDHEECDSAWITHAES256GCMSHA384, TLSECDHERSAWITHAES128CBCSHA, TLSECDHERSAWITHAES128CBCSHA256, TLSECDHERSAWITHAES128GCMSHA256, TLSECDHERSAWITHAES256CBCSHA, TLSECDHERSAWITHAES256CBCSHA384, TLSECDHERSAWITHAES256GCMSHA384, TLSRSAWITH3DESEDECBCSHA, TLSRSAWITHAES128CBCSHA, TLSRSAWITHAES128CBCSHA256, TLSRSAWITHAES128GCMSHA256, TLSRSAWITHAES256CBCSHA, TLSRSAWITHAES256CBCSHA256, TLSRSAWITHAES256GCMSHA384}
276}
277
278// ApplicationGatewaySslPolicyName enumerates the values for application gateway ssl policy name.
279type ApplicationGatewaySslPolicyName string
280
281const (
282	// AppGwSslPolicy20150501 ...
283	AppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501"
284	// AppGwSslPolicy20170401 ...
285	AppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401"
286	// AppGwSslPolicy20170401S ...
287	AppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S"
288)
289
290// PossibleApplicationGatewaySslPolicyNameValues returns an array of possible values for the ApplicationGatewaySslPolicyName const type.
291func PossibleApplicationGatewaySslPolicyNameValues() []ApplicationGatewaySslPolicyName {
292	return []ApplicationGatewaySslPolicyName{AppGwSslPolicy20150501, AppGwSslPolicy20170401, AppGwSslPolicy20170401S}
293}
294
295// ApplicationGatewaySslPolicyType enumerates the values for application gateway ssl policy type.
296type ApplicationGatewaySslPolicyType string
297
298const (
299	// Custom ...
300	Custom ApplicationGatewaySslPolicyType = "Custom"
301	// Predefined ...
302	Predefined ApplicationGatewaySslPolicyType = "Predefined"
303)
304
305// PossibleApplicationGatewaySslPolicyTypeValues returns an array of possible values for the ApplicationGatewaySslPolicyType const type.
306func PossibleApplicationGatewaySslPolicyTypeValues() []ApplicationGatewaySslPolicyType {
307	return []ApplicationGatewaySslPolicyType{Custom, Predefined}
308}
309
310// ApplicationGatewaySslProtocol enumerates the values for application gateway ssl protocol.
311type ApplicationGatewaySslProtocol string
312
313const (
314	// TLSv10 ...
315	TLSv10 ApplicationGatewaySslProtocol = "TLSv1_0"
316	// TLSv11 ...
317	TLSv11 ApplicationGatewaySslProtocol = "TLSv1_1"
318	// TLSv12 ...
319	TLSv12 ApplicationGatewaySslProtocol = "TLSv1_2"
320)
321
322// PossibleApplicationGatewaySslProtocolValues returns an array of possible values for the ApplicationGatewaySslProtocol const type.
323func PossibleApplicationGatewaySslProtocolValues() []ApplicationGatewaySslProtocol {
324	return []ApplicationGatewaySslProtocol{TLSv10, TLSv11, TLSv12}
325}
326
327// ApplicationGatewayTier enumerates the values for application gateway tier.
328type ApplicationGatewayTier string
329
330const (
331	// ApplicationGatewayTierStandard ...
332	ApplicationGatewayTierStandard ApplicationGatewayTier = "Standard"
333	// ApplicationGatewayTierStandardV2 ...
334	ApplicationGatewayTierStandardV2 ApplicationGatewayTier = "Standard_v2"
335	// ApplicationGatewayTierWAF ...
336	ApplicationGatewayTierWAF ApplicationGatewayTier = "WAF"
337	// ApplicationGatewayTierWAFV2 ...
338	ApplicationGatewayTierWAFV2 ApplicationGatewayTier = "WAF_v2"
339)
340
341// PossibleApplicationGatewayTierValues returns an array of possible values for the ApplicationGatewayTier const type.
342func PossibleApplicationGatewayTierValues() []ApplicationGatewayTier {
343	return []ApplicationGatewayTier{ApplicationGatewayTierStandard, ApplicationGatewayTierStandardV2, ApplicationGatewayTierWAF, ApplicationGatewayTierWAFV2}
344}
345
346// AssociationType enumerates the values for association type.
347type AssociationType string
348
349const (
350	// Associated ...
351	Associated AssociationType = "Associated"
352	// Contains ...
353	Contains AssociationType = "Contains"
354)
355
356// PossibleAssociationTypeValues returns an array of possible values for the AssociationType const type.
357func PossibleAssociationTypeValues() []AssociationType {
358	return []AssociationType{Associated, Contains}
359}
360
361// AuthenticationMethod enumerates the values for authentication method.
362type AuthenticationMethod string
363
364const (
365	// EAPMSCHAPv2 ...
366	EAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2"
367	// EAPTLS ...
368	EAPTLS AuthenticationMethod = "EAPTLS"
369)
370
371// PossibleAuthenticationMethodValues returns an array of possible values for the AuthenticationMethod const type.
372func PossibleAuthenticationMethodValues() []AuthenticationMethod {
373	return []AuthenticationMethod{EAPMSCHAPv2, EAPTLS}
374}
375
376// AuthorizationUseStatus enumerates the values for authorization use status.
377type AuthorizationUseStatus string
378
379const (
380	// Available ...
381	Available AuthorizationUseStatus = "Available"
382	// InUse ...
383	InUse AuthorizationUseStatus = "InUse"
384)
385
386// PossibleAuthorizationUseStatusValues returns an array of possible values for the AuthorizationUseStatus const type.
387func PossibleAuthorizationUseStatusValues() []AuthorizationUseStatus {
388	return []AuthorizationUseStatus{Available, InUse}
389}
390
391// AzureFirewallApplicationRuleProtocolType enumerates the values for azure firewall application rule protocol
392// type.
393type AzureFirewallApplicationRuleProtocolType string
394
395const (
396	// AzureFirewallApplicationRuleProtocolTypeHTTP ...
397	AzureFirewallApplicationRuleProtocolTypeHTTP AzureFirewallApplicationRuleProtocolType = "Http"
398	// AzureFirewallApplicationRuleProtocolTypeHTTPS ...
399	AzureFirewallApplicationRuleProtocolTypeHTTPS AzureFirewallApplicationRuleProtocolType = "Https"
400	// AzureFirewallApplicationRuleProtocolTypeMssql ...
401	AzureFirewallApplicationRuleProtocolTypeMssql AzureFirewallApplicationRuleProtocolType = "Mssql"
402)
403
404// PossibleAzureFirewallApplicationRuleProtocolTypeValues returns an array of possible values for the AzureFirewallApplicationRuleProtocolType const type.
405func PossibleAzureFirewallApplicationRuleProtocolTypeValues() []AzureFirewallApplicationRuleProtocolType {
406	return []AzureFirewallApplicationRuleProtocolType{AzureFirewallApplicationRuleProtocolTypeHTTP, AzureFirewallApplicationRuleProtocolTypeHTTPS, AzureFirewallApplicationRuleProtocolTypeMssql}
407}
408
409// AzureFirewallNatRCActionType enumerates the values for azure firewall nat rc action type.
410type AzureFirewallNatRCActionType string
411
412const (
413	// Dnat ...
414	Dnat AzureFirewallNatRCActionType = "Dnat"
415	// Snat ...
416	Snat AzureFirewallNatRCActionType = "Snat"
417)
418
419// PossibleAzureFirewallNatRCActionTypeValues returns an array of possible values for the AzureFirewallNatRCActionType const type.
420func PossibleAzureFirewallNatRCActionTypeValues() []AzureFirewallNatRCActionType {
421	return []AzureFirewallNatRCActionType{Dnat, Snat}
422}
423
424// AzureFirewallNetworkRuleProtocol enumerates the values for azure firewall network rule protocol.
425type AzureFirewallNetworkRuleProtocol string
426
427const (
428	// Any ...
429	Any AzureFirewallNetworkRuleProtocol = "Any"
430	// ICMP ...
431	ICMP AzureFirewallNetworkRuleProtocol = "ICMP"
432	// TCP ...
433	TCP AzureFirewallNetworkRuleProtocol = "TCP"
434	// UDP ...
435	UDP AzureFirewallNetworkRuleProtocol = "UDP"
436)
437
438// PossibleAzureFirewallNetworkRuleProtocolValues returns an array of possible values for the AzureFirewallNetworkRuleProtocol const type.
439func PossibleAzureFirewallNetworkRuleProtocolValues() []AzureFirewallNetworkRuleProtocol {
440	return []AzureFirewallNetworkRuleProtocol{Any, ICMP, TCP, UDP}
441}
442
443// AzureFirewallRCActionType enumerates the values for azure firewall rc action type.
444type AzureFirewallRCActionType string
445
446const (
447	// AzureFirewallRCActionTypeAllow ...
448	AzureFirewallRCActionTypeAllow AzureFirewallRCActionType = "Allow"
449	// AzureFirewallRCActionTypeDeny ...
450	AzureFirewallRCActionTypeDeny AzureFirewallRCActionType = "Deny"
451)
452
453// PossibleAzureFirewallRCActionTypeValues returns an array of possible values for the AzureFirewallRCActionType const type.
454func PossibleAzureFirewallRCActionTypeValues() []AzureFirewallRCActionType {
455	return []AzureFirewallRCActionType{AzureFirewallRCActionTypeAllow, AzureFirewallRCActionTypeDeny}
456}
457
458// AzureFirewallSkuName enumerates the values for azure firewall sku name.
459type AzureFirewallSkuName string
460
461const (
462	// AZFWHub ...
463	AZFWHub AzureFirewallSkuName = "AZFW_Hub"
464	// AZFWVNet ...
465	AZFWVNet AzureFirewallSkuName = "AZFW_VNet"
466)
467
468// PossibleAzureFirewallSkuNameValues returns an array of possible values for the AzureFirewallSkuName const type.
469func PossibleAzureFirewallSkuNameValues() []AzureFirewallSkuName {
470	return []AzureFirewallSkuName{AZFWHub, AZFWVNet}
471}
472
473// AzureFirewallSkuTier enumerates the values for azure firewall sku tier.
474type AzureFirewallSkuTier string
475
476const (
477	// Standard ...
478	Standard AzureFirewallSkuTier = "Standard"
479)
480
481// PossibleAzureFirewallSkuTierValues returns an array of possible values for the AzureFirewallSkuTier const type.
482func PossibleAzureFirewallSkuTierValues() []AzureFirewallSkuTier {
483	return []AzureFirewallSkuTier{Standard}
484}
485
486// AzureFirewallThreatIntelMode enumerates the values for azure firewall threat intel mode.
487type AzureFirewallThreatIntelMode string
488
489const (
490	// AzureFirewallThreatIntelModeAlert ...
491	AzureFirewallThreatIntelModeAlert AzureFirewallThreatIntelMode = "Alert"
492	// AzureFirewallThreatIntelModeDeny ...
493	AzureFirewallThreatIntelModeDeny AzureFirewallThreatIntelMode = "Deny"
494	// AzureFirewallThreatIntelModeOff ...
495	AzureFirewallThreatIntelModeOff AzureFirewallThreatIntelMode = "Off"
496)
497
498// PossibleAzureFirewallThreatIntelModeValues returns an array of possible values for the AzureFirewallThreatIntelMode const type.
499func PossibleAzureFirewallThreatIntelModeValues() []AzureFirewallThreatIntelMode {
500	return []AzureFirewallThreatIntelMode{AzureFirewallThreatIntelModeAlert, AzureFirewallThreatIntelModeDeny, AzureFirewallThreatIntelModeOff}
501}
502
503// BgpPeerState enumerates the values for bgp peer state.
504type BgpPeerState string
505
506const (
507	// BgpPeerStateConnected ...
508	BgpPeerStateConnected BgpPeerState = "Connected"
509	// BgpPeerStateConnecting ...
510	BgpPeerStateConnecting BgpPeerState = "Connecting"
511	// BgpPeerStateIdle ...
512	BgpPeerStateIdle BgpPeerState = "Idle"
513	// BgpPeerStateStopped ...
514	BgpPeerStateStopped BgpPeerState = "Stopped"
515	// BgpPeerStateUnknown ...
516	BgpPeerStateUnknown BgpPeerState = "Unknown"
517)
518
519// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
520func PossibleBgpPeerStateValues() []BgpPeerState {
521	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
522}
523
524// CircuitConnectionStatus enumerates the values for circuit connection status.
525type CircuitConnectionStatus string
526
527const (
528	// Connected ...
529	Connected CircuitConnectionStatus = "Connected"
530	// Connecting ...
531	Connecting CircuitConnectionStatus = "Connecting"
532	// Disconnected ...
533	Disconnected CircuitConnectionStatus = "Disconnected"
534)
535
536// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
537func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
538	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
539}
540
541// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
542type ConnectionMonitorSourceStatus string
543
544const (
545	// ConnectionMonitorSourceStatusActive ...
546	ConnectionMonitorSourceStatusActive ConnectionMonitorSourceStatus = "Active"
547	// ConnectionMonitorSourceStatusInactive ...
548	ConnectionMonitorSourceStatusInactive ConnectionMonitorSourceStatus = "Inactive"
549	// ConnectionMonitorSourceStatusUnknown ...
550	ConnectionMonitorSourceStatusUnknown ConnectionMonitorSourceStatus = "Unknown"
551)
552
553// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
554func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
555	return []ConnectionMonitorSourceStatus{ConnectionMonitorSourceStatusActive, ConnectionMonitorSourceStatusInactive, ConnectionMonitorSourceStatusUnknown}
556}
557
558// ConnectionState enumerates the values for connection state.
559type ConnectionState string
560
561const (
562	// ConnectionStateReachable ...
563	ConnectionStateReachable ConnectionState = "Reachable"
564	// ConnectionStateUnknown ...
565	ConnectionStateUnknown ConnectionState = "Unknown"
566	// ConnectionStateUnreachable ...
567	ConnectionStateUnreachable ConnectionState = "Unreachable"
568)
569
570// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
571func PossibleConnectionStateValues() []ConnectionState {
572	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
573}
574
575// ConnectionStatus enumerates the values for connection status.
576type ConnectionStatus string
577
578const (
579	// ConnectionStatusConnected ...
580	ConnectionStatusConnected ConnectionStatus = "Connected"
581	// ConnectionStatusDegraded ...
582	ConnectionStatusDegraded ConnectionStatus = "Degraded"
583	// ConnectionStatusDisconnected ...
584	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
585	// ConnectionStatusUnknown ...
586	ConnectionStatusUnknown ConnectionStatus = "Unknown"
587)
588
589// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
590func PossibleConnectionStatusValues() []ConnectionStatus {
591	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
592}
593
594// DdosCustomPolicyProtocol enumerates the values for ddos custom policy protocol.
595type DdosCustomPolicyProtocol string
596
597const (
598	// DdosCustomPolicyProtocolSyn ...
599	DdosCustomPolicyProtocolSyn DdosCustomPolicyProtocol = "Syn"
600	// DdosCustomPolicyProtocolTCP ...
601	DdosCustomPolicyProtocolTCP DdosCustomPolicyProtocol = "Tcp"
602	// DdosCustomPolicyProtocolUDP ...
603	DdosCustomPolicyProtocolUDP DdosCustomPolicyProtocol = "Udp"
604)
605
606// PossibleDdosCustomPolicyProtocolValues returns an array of possible values for the DdosCustomPolicyProtocol const type.
607func PossibleDdosCustomPolicyProtocolValues() []DdosCustomPolicyProtocol {
608	return []DdosCustomPolicyProtocol{DdosCustomPolicyProtocolSyn, DdosCustomPolicyProtocolTCP, DdosCustomPolicyProtocolUDP}
609}
610
611// DdosCustomPolicyTriggerSensitivityOverride enumerates the values for ddos custom policy trigger sensitivity
612// override.
613type DdosCustomPolicyTriggerSensitivityOverride string
614
615const (
616	// Default ...
617	Default DdosCustomPolicyTriggerSensitivityOverride = "Default"
618	// High ...
619	High DdosCustomPolicyTriggerSensitivityOverride = "High"
620	// Low ...
621	Low DdosCustomPolicyTriggerSensitivityOverride = "Low"
622	// Relaxed ...
623	Relaxed DdosCustomPolicyTriggerSensitivityOverride = "Relaxed"
624)
625
626// PossibleDdosCustomPolicyTriggerSensitivityOverrideValues returns an array of possible values for the DdosCustomPolicyTriggerSensitivityOverride const type.
627func PossibleDdosCustomPolicyTriggerSensitivityOverrideValues() []DdosCustomPolicyTriggerSensitivityOverride {
628	return []DdosCustomPolicyTriggerSensitivityOverride{Default, High, Low, Relaxed}
629}
630
631// DdosSettingsProtectionCoverage enumerates the values for ddos settings protection coverage.
632type DdosSettingsProtectionCoverage string
633
634const (
635	// DdosSettingsProtectionCoverageBasic ...
636	DdosSettingsProtectionCoverageBasic DdosSettingsProtectionCoverage = "Basic"
637	// DdosSettingsProtectionCoverageStandard ...
638	DdosSettingsProtectionCoverageStandard DdosSettingsProtectionCoverage = "Standard"
639)
640
641// PossibleDdosSettingsProtectionCoverageValues returns an array of possible values for the DdosSettingsProtectionCoverage const type.
642func PossibleDdosSettingsProtectionCoverageValues() []DdosSettingsProtectionCoverage {
643	return []DdosSettingsProtectionCoverage{DdosSettingsProtectionCoverageBasic, DdosSettingsProtectionCoverageStandard}
644}
645
646// DhGroup enumerates the values for dh group.
647type DhGroup string
648
649const (
650	// DHGroup1 ...
651	DHGroup1 DhGroup = "DHGroup1"
652	// DHGroup14 ...
653	DHGroup14 DhGroup = "DHGroup14"
654	// DHGroup2 ...
655	DHGroup2 DhGroup = "DHGroup2"
656	// DHGroup2048 ...
657	DHGroup2048 DhGroup = "DHGroup2048"
658	// DHGroup24 ...
659	DHGroup24 DhGroup = "DHGroup24"
660	// ECP256 ...
661	ECP256 DhGroup = "ECP256"
662	// ECP384 ...
663	ECP384 DhGroup = "ECP384"
664	// None ...
665	None DhGroup = "None"
666)
667
668// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
669func PossibleDhGroupValues() []DhGroup {
670	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
671}
672
673// Direction enumerates the values for direction.
674type Direction string
675
676const (
677	// Inbound ...
678	Inbound Direction = "Inbound"
679	// Outbound ...
680	Outbound Direction = "Outbound"
681)
682
683// PossibleDirectionValues returns an array of possible values for the Direction const type.
684func PossibleDirectionValues() []Direction {
685	return []Direction{Inbound, Outbound}
686}
687
688// EffectiveRouteSource enumerates the values for effective route source.
689type EffectiveRouteSource string
690
691const (
692	// EffectiveRouteSourceDefault ...
693	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
694	// EffectiveRouteSourceUnknown ...
695	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
696	// EffectiveRouteSourceUser ...
697	EffectiveRouteSourceUser EffectiveRouteSource = "User"
698	// EffectiveRouteSourceVirtualNetworkGateway ...
699	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
700)
701
702// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
703func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
704	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
705}
706
707// EffectiveRouteState enumerates the values for effective route state.
708type EffectiveRouteState string
709
710const (
711	// Active ...
712	Active EffectiveRouteState = "Active"
713	// Invalid ...
714	Invalid EffectiveRouteState = "Invalid"
715)
716
717// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
718func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
719	return []EffectiveRouteState{Active, Invalid}
720}
721
722// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
723type EffectiveSecurityRuleProtocol string
724
725const (
726	// EffectiveSecurityRuleProtocolAll ...
727	EffectiveSecurityRuleProtocolAll EffectiveSecurityRuleProtocol = "All"
728	// EffectiveSecurityRuleProtocolTCP ...
729	EffectiveSecurityRuleProtocolTCP EffectiveSecurityRuleProtocol = "Tcp"
730	// EffectiveSecurityRuleProtocolUDP ...
731	EffectiveSecurityRuleProtocolUDP EffectiveSecurityRuleProtocol = "Udp"
732)
733
734// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
735func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
736	return []EffectiveSecurityRuleProtocol{EffectiveSecurityRuleProtocolAll, EffectiveSecurityRuleProtocolTCP, EffectiveSecurityRuleProtocolUDP}
737}
738
739// EvaluationState enumerates the values for evaluation state.
740type EvaluationState string
741
742const (
743	// Completed ...
744	Completed EvaluationState = "Completed"
745	// InProgress ...
746	InProgress EvaluationState = "InProgress"
747	// NotStarted ...
748	NotStarted EvaluationState = "NotStarted"
749)
750
751// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
752func PossibleEvaluationStateValues() []EvaluationState {
753	return []EvaluationState{Completed, InProgress, NotStarted}
754}
755
756// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
757// peering advertised public prefix state.
758type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
759
760const (
761	// Configured ...
762	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
763	// Configuring ...
764	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
765	// NotConfigured ...
766	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
767	// ValidationNeeded ...
768	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
769)
770
771// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
772func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
773	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
774}
775
776// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
777type ExpressRouteCircuitPeeringState string
778
779const (
780	// ExpressRouteCircuitPeeringStateDisabled ...
781	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
782	// ExpressRouteCircuitPeeringStateEnabled ...
783	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
784)
785
786// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
787func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
788	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
789}
790
791// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
792type ExpressRouteCircuitSkuFamily string
793
794const (
795	// MeteredData ...
796	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
797	// UnlimitedData ...
798	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
799)
800
801// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
802func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
803	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
804}
805
806// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
807type ExpressRouteCircuitSkuTier string
808
809const (
810	// ExpressRouteCircuitSkuTierBasic ...
811	ExpressRouteCircuitSkuTierBasic ExpressRouteCircuitSkuTier = "Basic"
812	// ExpressRouteCircuitSkuTierLocal ...
813	ExpressRouteCircuitSkuTierLocal ExpressRouteCircuitSkuTier = "Local"
814	// ExpressRouteCircuitSkuTierPremium ...
815	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
816	// ExpressRouteCircuitSkuTierStandard ...
817	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
818)
819
820// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
821func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
822	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierBasic, ExpressRouteCircuitSkuTierLocal, ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
823}
824
825// ExpressRouteLinkAdminState enumerates the values for express route link admin state.
826type ExpressRouteLinkAdminState string
827
828const (
829	// ExpressRouteLinkAdminStateDisabled ...
830	ExpressRouteLinkAdminStateDisabled ExpressRouteLinkAdminState = "Disabled"
831	// ExpressRouteLinkAdminStateEnabled ...
832	ExpressRouteLinkAdminStateEnabled ExpressRouteLinkAdminState = "Enabled"
833)
834
835// PossibleExpressRouteLinkAdminStateValues returns an array of possible values for the ExpressRouteLinkAdminState const type.
836func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState {
837	return []ExpressRouteLinkAdminState{ExpressRouteLinkAdminStateDisabled, ExpressRouteLinkAdminStateEnabled}
838}
839
840// ExpressRouteLinkConnectorType enumerates the values for express route link connector type.
841type ExpressRouteLinkConnectorType string
842
843const (
844	// LC ...
845	LC ExpressRouteLinkConnectorType = "LC"
846	// SC ...
847	SC ExpressRouteLinkConnectorType = "SC"
848)
849
850// PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type.
851func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType {
852	return []ExpressRouteLinkConnectorType{LC, SC}
853}
854
855// ExpressRouteLinkMacSecCipher enumerates the values for express route link mac sec cipher.
856type ExpressRouteLinkMacSecCipher string
857
858const (
859	// GcmAes128 ...
860	GcmAes128 ExpressRouteLinkMacSecCipher = "gcm-aes-128"
861	// GcmAes256 ...
862	GcmAes256 ExpressRouteLinkMacSecCipher = "gcm-aes-256"
863)
864
865// PossibleExpressRouteLinkMacSecCipherValues returns an array of possible values for the ExpressRouteLinkMacSecCipher const type.
866func PossibleExpressRouteLinkMacSecCipherValues() []ExpressRouteLinkMacSecCipher {
867	return []ExpressRouteLinkMacSecCipher{GcmAes128, GcmAes256}
868}
869
870// ExpressRoutePeeringState enumerates the values for express route peering state.
871type ExpressRoutePeeringState string
872
873const (
874	// ExpressRoutePeeringStateDisabled ...
875	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
876	// ExpressRoutePeeringStateEnabled ...
877	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
878)
879
880// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
881func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
882	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
883}
884
885// ExpressRoutePeeringType enumerates the values for express route peering type.
886type ExpressRoutePeeringType string
887
888const (
889	// AzurePrivatePeering ...
890	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
891	// AzurePublicPeering ...
892	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
893	// MicrosoftPeering ...
894	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
895)
896
897// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
898func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
899	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
900}
901
902// ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation.
903type ExpressRoutePortsEncapsulation string
904
905const (
906	// Dot1Q ...
907	Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q"
908	// QinQ ...
909	QinQ ExpressRoutePortsEncapsulation = "QinQ"
910)
911
912// PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type.
913func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation {
914	return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ}
915}
916
917// FirewallPolicyFilterRuleActionType enumerates the values for firewall policy filter rule action type.
918type FirewallPolicyFilterRuleActionType string
919
920const (
921	// FirewallPolicyFilterRuleActionTypeAllow ...
922	FirewallPolicyFilterRuleActionTypeAllow FirewallPolicyFilterRuleActionType = "Allow"
923	// FirewallPolicyFilterRuleActionTypeDeny ...
924	FirewallPolicyFilterRuleActionTypeDeny FirewallPolicyFilterRuleActionType = "Deny"
925)
926
927// PossibleFirewallPolicyFilterRuleActionTypeValues returns an array of possible values for the FirewallPolicyFilterRuleActionType const type.
928func PossibleFirewallPolicyFilterRuleActionTypeValues() []FirewallPolicyFilterRuleActionType {
929	return []FirewallPolicyFilterRuleActionType{FirewallPolicyFilterRuleActionTypeAllow, FirewallPolicyFilterRuleActionTypeDeny}
930}
931
932// FirewallPolicyNatRuleActionType enumerates the values for firewall policy nat rule action type.
933type FirewallPolicyNatRuleActionType string
934
935const (
936	// DNAT ...
937	DNAT FirewallPolicyNatRuleActionType = "DNAT"
938)
939
940// PossibleFirewallPolicyNatRuleActionTypeValues returns an array of possible values for the FirewallPolicyNatRuleActionType const type.
941func PossibleFirewallPolicyNatRuleActionTypeValues() []FirewallPolicyNatRuleActionType {
942	return []FirewallPolicyNatRuleActionType{DNAT}
943}
944
945// FirewallPolicyRuleConditionApplicationProtocolType enumerates the values for firewall policy rule condition
946// application protocol type.
947type FirewallPolicyRuleConditionApplicationProtocolType string
948
949const (
950	// FirewallPolicyRuleConditionApplicationProtocolTypeHTTP ...
951	FirewallPolicyRuleConditionApplicationProtocolTypeHTTP FirewallPolicyRuleConditionApplicationProtocolType = "Http"
952	// FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS ...
953	FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS FirewallPolicyRuleConditionApplicationProtocolType = "Https"
954)
955
956// PossibleFirewallPolicyRuleConditionApplicationProtocolTypeValues returns an array of possible values for the FirewallPolicyRuleConditionApplicationProtocolType const type.
957func PossibleFirewallPolicyRuleConditionApplicationProtocolTypeValues() []FirewallPolicyRuleConditionApplicationProtocolType {
958	return []FirewallPolicyRuleConditionApplicationProtocolType{FirewallPolicyRuleConditionApplicationProtocolTypeHTTP, FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS}
959}
960
961// FirewallPolicyRuleConditionNetworkProtocol enumerates the values for firewall policy rule condition network
962// protocol.
963type FirewallPolicyRuleConditionNetworkProtocol string
964
965const (
966	// FirewallPolicyRuleConditionNetworkProtocolAny ...
967	FirewallPolicyRuleConditionNetworkProtocolAny FirewallPolicyRuleConditionNetworkProtocol = "Any"
968	// FirewallPolicyRuleConditionNetworkProtocolICMP ...
969	FirewallPolicyRuleConditionNetworkProtocolICMP FirewallPolicyRuleConditionNetworkProtocol = "ICMP"
970	// FirewallPolicyRuleConditionNetworkProtocolTCP ...
971	FirewallPolicyRuleConditionNetworkProtocolTCP FirewallPolicyRuleConditionNetworkProtocol = "TCP"
972	// FirewallPolicyRuleConditionNetworkProtocolUDP ...
973	FirewallPolicyRuleConditionNetworkProtocolUDP FirewallPolicyRuleConditionNetworkProtocol = "UDP"
974)
975
976// PossibleFirewallPolicyRuleConditionNetworkProtocolValues returns an array of possible values for the FirewallPolicyRuleConditionNetworkProtocol const type.
977func PossibleFirewallPolicyRuleConditionNetworkProtocolValues() []FirewallPolicyRuleConditionNetworkProtocol {
978	return []FirewallPolicyRuleConditionNetworkProtocol{FirewallPolicyRuleConditionNetworkProtocolAny, FirewallPolicyRuleConditionNetworkProtocolICMP, FirewallPolicyRuleConditionNetworkProtocolTCP, FirewallPolicyRuleConditionNetworkProtocolUDP}
979}
980
981// FlowLogFormatType enumerates the values for flow log format type.
982type FlowLogFormatType string
983
984const (
985	// JSON ...
986	JSON FlowLogFormatType = "JSON"
987)
988
989// PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type.
990func PossibleFlowLogFormatTypeValues() []FlowLogFormatType {
991	return []FlowLogFormatType{JSON}
992}
993
994// HTTPMethod enumerates the values for http method.
995type HTTPMethod string
996
997const (
998	// Get ...
999	Get HTTPMethod = "Get"
1000)
1001
1002// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
1003func PossibleHTTPMethodValues() []HTTPMethod {
1004	return []HTTPMethod{Get}
1005}
1006
1007// HubVirtualNetworkConnectionStatus enumerates the values for hub virtual network connection status.
1008type HubVirtualNetworkConnectionStatus string
1009
1010const (
1011	// HubVirtualNetworkConnectionStatusConnected ...
1012	HubVirtualNetworkConnectionStatusConnected HubVirtualNetworkConnectionStatus = "Connected"
1013	// HubVirtualNetworkConnectionStatusConnecting ...
1014	HubVirtualNetworkConnectionStatusConnecting HubVirtualNetworkConnectionStatus = "Connecting"
1015	// HubVirtualNetworkConnectionStatusNotConnected ...
1016	HubVirtualNetworkConnectionStatusNotConnected HubVirtualNetworkConnectionStatus = "NotConnected"
1017	// HubVirtualNetworkConnectionStatusUnknown ...
1018	HubVirtualNetworkConnectionStatusUnknown HubVirtualNetworkConnectionStatus = "Unknown"
1019)
1020
1021// PossibleHubVirtualNetworkConnectionStatusValues returns an array of possible values for the HubVirtualNetworkConnectionStatus const type.
1022func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnectionStatus {
1023	return []HubVirtualNetworkConnectionStatus{HubVirtualNetworkConnectionStatusConnected, HubVirtualNetworkConnectionStatusConnecting, HubVirtualNetworkConnectionStatusNotConnected, HubVirtualNetworkConnectionStatusUnknown}
1024}
1025
1026// IkeEncryption enumerates the values for ike encryption.
1027type IkeEncryption string
1028
1029const (
1030	// AES128 ...
1031	AES128 IkeEncryption = "AES128"
1032	// AES192 ...
1033	AES192 IkeEncryption = "AES192"
1034	// AES256 ...
1035	AES256 IkeEncryption = "AES256"
1036	// DES ...
1037	DES IkeEncryption = "DES"
1038	// DES3 ...
1039	DES3 IkeEncryption = "DES3"
1040	// GCMAES128 ...
1041	GCMAES128 IkeEncryption = "GCMAES128"
1042	// GCMAES256 ...
1043	GCMAES256 IkeEncryption = "GCMAES256"
1044)
1045
1046// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
1047func PossibleIkeEncryptionValues() []IkeEncryption {
1048	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
1049}
1050
1051// IkeIntegrity enumerates the values for ike integrity.
1052type IkeIntegrity string
1053
1054const (
1055	// IkeIntegrityGCMAES128 ...
1056	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
1057	// IkeIntegrityGCMAES256 ...
1058	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
1059	// IkeIntegrityMD5 ...
1060	IkeIntegrityMD5 IkeIntegrity = "MD5"
1061	// IkeIntegritySHA1 ...
1062	IkeIntegritySHA1 IkeIntegrity = "SHA1"
1063	// IkeIntegritySHA256 ...
1064	IkeIntegritySHA256 IkeIntegrity = "SHA256"
1065	// IkeIntegritySHA384 ...
1066	IkeIntegritySHA384 IkeIntegrity = "SHA384"
1067)
1068
1069// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
1070func PossibleIkeIntegrityValues() []IkeIntegrity {
1071	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
1072}
1073
1074// IPAllocationMethod enumerates the values for ip allocation method.
1075type IPAllocationMethod string
1076
1077const (
1078	// Dynamic ...
1079	Dynamic IPAllocationMethod = "Dynamic"
1080	// Static ...
1081	Static IPAllocationMethod = "Static"
1082)
1083
1084// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
1085func PossibleIPAllocationMethodValues() []IPAllocationMethod {
1086	return []IPAllocationMethod{Dynamic, Static}
1087}
1088
1089// IPFlowProtocol enumerates the values for ip flow protocol.
1090type IPFlowProtocol string
1091
1092const (
1093	// IPFlowProtocolTCP ...
1094	IPFlowProtocolTCP IPFlowProtocol = "TCP"
1095	// IPFlowProtocolUDP ...
1096	IPFlowProtocolUDP IPFlowProtocol = "UDP"
1097)
1098
1099// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
1100func PossibleIPFlowProtocolValues() []IPFlowProtocol {
1101	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
1102}
1103
1104// IpsecEncryption enumerates the values for ipsec encryption.
1105type IpsecEncryption string
1106
1107const (
1108	// IpsecEncryptionAES128 ...
1109	IpsecEncryptionAES128 IpsecEncryption = "AES128"
1110	// IpsecEncryptionAES192 ...
1111	IpsecEncryptionAES192 IpsecEncryption = "AES192"
1112	// IpsecEncryptionAES256 ...
1113	IpsecEncryptionAES256 IpsecEncryption = "AES256"
1114	// IpsecEncryptionDES ...
1115	IpsecEncryptionDES IpsecEncryption = "DES"
1116	// IpsecEncryptionDES3 ...
1117	IpsecEncryptionDES3 IpsecEncryption = "DES3"
1118	// IpsecEncryptionGCMAES128 ...
1119	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
1120	// IpsecEncryptionGCMAES192 ...
1121	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
1122	// IpsecEncryptionGCMAES256 ...
1123	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
1124	// IpsecEncryptionNone ...
1125	IpsecEncryptionNone IpsecEncryption = "None"
1126)
1127
1128// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
1129func PossibleIpsecEncryptionValues() []IpsecEncryption {
1130	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
1131}
1132
1133// IpsecIntegrity enumerates the values for ipsec integrity.
1134type IpsecIntegrity string
1135
1136const (
1137	// IpsecIntegrityGCMAES128 ...
1138	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
1139	// IpsecIntegrityGCMAES192 ...
1140	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
1141	// IpsecIntegrityGCMAES256 ...
1142	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
1143	// IpsecIntegrityMD5 ...
1144	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
1145	// IpsecIntegritySHA1 ...
1146	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
1147	// IpsecIntegritySHA256 ...
1148	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
1149)
1150
1151// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
1152func PossibleIpsecIntegrityValues() []IpsecIntegrity {
1153	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
1154}
1155
1156// IPVersion enumerates the values for ip version.
1157type IPVersion string
1158
1159const (
1160	// IPv4 ...
1161	IPv4 IPVersion = "IPv4"
1162	// IPv6 ...
1163	IPv6 IPVersion = "IPv6"
1164)
1165
1166// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
1167func PossibleIPVersionValues() []IPVersion {
1168	return []IPVersion{IPv4, IPv6}
1169}
1170
1171// IssueType enumerates the values for issue type.
1172type IssueType string
1173
1174const (
1175	// IssueTypeAgentStopped ...
1176	IssueTypeAgentStopped IssueType = "AgentStopped"
1177	// IssueTypeDNSResolution ...
1178	IssueTypeDNSResolution IssueType = "DnsResolution"
1179	// IssueTypeGuestFirewall ...
1180	IssueTypeGuestFirewall IssueType = "GuestFirewall"
1181	// IssueTypeNetworkSecurityRule ...
1182	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
1183	// IssueTypePlatform ...
1184	IssueTypePlatform IssueType = "Platform"
1185	// IssueTypePortThrottled ...
1186	IssueTypePortThrottled IssueType = "PortThrottled"
1187	// IssueTypeSocketBind ...
1188	IssueTypeSocketBind IssueType = "SocketBind"
1189	// IssueTypeUnknown ...
1190	IssueTypeUnknown IssueType = "Unknown"
1191	// IssueTypeUserDefinedRoute ...
1192	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
1193)
1194
1195// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
1196func PossibleIssueTypeValues() []IssueType {
1197	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
1198}
1199
1200// LoadBalancerOutboundRuleProtocol enumerates the values for load balancer outbound rule protocol.
1201type LoadBalancerOutboundRuleProtocol string
1202
1203const (
1204	// LoadBalancerOutboundRuleProtocolAll ...
1205	LoadBalancerOutboundRuleProtocolAll LoadBalancerOutboundRuleProtocol = "All"
1206	// LoadBalancerOutboundRuleProtocolTCP ...
1207	LoadBalancerOutboundRuleProtocolTCP LoadBalancerOutboundRuleProtocol = "Tcp"
1208	// LoadBalancerOutboundRuleProtocolUDP ...
1209	LoadBalancerOutboundRuleProtocolUDP LoadBalancerOutboundRuleProtocol = "Udp"
1210)
1211
1212// PossibleLoadBalancerOutboundRuleProtocolValues returns an array of possible values for the LoadBalancerOutboundRuleProtocol const type.
1213func PossibleLoadBalancerOutboundRuleProtocolValues() []LoadBalancerOutboundRuleProtocol {
1214	return []LoadBalancerOutboundRuleProtocol{LoadBalancerOutboundRuleProtocolAll, LoadBalancerOutboundRuleProtocolTCP, LoadBalancerOutboundRuleProtocolUDP}
1215}
1216
1217// LoadBalancerSkuName enumerates the values for load balancer sku name.
1218type LoadBalancerSkuName string
1219
1220const (
1221	// LoadBalancerSkuNameBasic ...
1222	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
1223	// LoadBalancerSkuNameStandard ...
1224	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
1225)
1226
1227// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
1228func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
1229	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
1230}
1231
1232// LoadDistribution enumerates the values for load distribution.
1233type LoadDistribution string
1234
1235const (
1236	// LoadDistributionDefault ...
1237	LoadDistributionDefault LoadDistribution = "Default"
1238	// LoadDistributionSourceIP ...
1239	LoadDistributionSourceIP LoadDistribution = "SourceIP"
1240	// LoadDistributionSourceIPProtocol ...
1241	LoadDistributionSourceIPProtocol LoadDistribution = "SourceIPProtocol"
1242)
1243
1244// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
1245func PossibleLoadDistributionValues() []LoadDistribution {
1246	return []LoadDistribution{LoadDistributionDefault, LoadDistributionSourceIP, LoadDistributionSourceIPProtocol}
1247}
1248
1249// ManagedRuleEnabledState enumerates the values for managed rule enabled state.
1250type ManagedRuleEnabledState string
1251
1252const (
1253	// ManagedRuleEnabledStateDisabled ...
1254	ManagedRuleEnabledStateDisabled ManagedRuleEnabledState = "Disabled"
1255)
1256
1257// PossibleManagedRuleEnabledStateValues returns an array of possible values for the ManagedRuleEnabledState const type.
1258func PossibleManagedRuleEnabledStateValues() []ManagedRuleEnabledState {
1259	return []ManagedRuleEnabledState{ManagedRuleEnabledStateDisabled}
1260}
1261
1262// NatGatewaySkuName enumerates the values for nat gateway sku name.
1263type NatGatewaySkuName string
1264
1265const (
1266	// NatGatewaySkuNameStandard ...
1267	NatGatewaySkuNameStandard NatGatewaySkuName = "Standard"
1268)
1269
1270// PossibleNatGatewaySkuNameValues returns an array of possible values for the NatGatewaySkuName const type.
1271func PossibleNatGatewaySkuNameValues() []NatGatewaySkuName {
1272	return []NatGatewaySkuName{NatGatewaySkuNameStandard}
1273}
1274
1275// NextHopType enumerates the values for next hop type.
1276type NextHopType string
1277
1278const (
1279	// NextHopTypeHyperNetGateway ...
1280	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
1281	// NextHopTypeInternet ...
1282	NextHopTypeInternet NextHopType = "Internet"
1283	// NextHopTypeNone ...
1284	NextHopTypeNone NextHopType = "None"
1285	// NextHopTypeVirtualAppliance ...
1286	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
1287	// NextHopTypeVirtualNetworkGateway ...
1288	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
1289	// NextHopTypeVnetLocal ...
1290	NextHopTypeVnetLocal NextHopType = "VnetLocal"
1291)
1292
1293// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
1294func PossibleNextHopTypeValues() []NextHopType {
1295	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
1296}
1297
1298// OfficeTrafficCategory enumerates the values for office traffic category.
1299type OfficeTrafficCategory string
1300
1301const (
1302	// OfficeTrafficCategoryAll ...
1303	OfficeTrafficCategoryAll OfficeTrafficCategory = "All"
1304	// OfficeTrafficCategoryNone ...
1305	OfficeTrafficCategoryNone OfficeTrafficCategory = "None"
1306	// OfficeTrafficCategoryOptimize ...
1307	OfficeTrafficCategoryOptimize OfficeTrafficCategory = "Optimize"
1308	// OfficeTrafficCategoryOptimizeAndAllow ...
1309	OfficeTrafficCategoryOptimizeAndAllow OfficeTrafficCategory = "OptimizeAndAllow"
1310)
1311
1312// PossibleOfficeTrafficCategoryValues returns an array of possible values for the OfficeTrafficCategory const type.
1313func PossibleOfficeTrafficCategoryValues() []OfficeTrafficCategory {
1314	return []OfficeTrafficCategory{OfficeTrafficCategoryAll, OfficeTrafficCategoryNone, OfficeTrafficCategoryOptimize, OfficeTrafficCategoryOptimizeAndAllow}
1315}
1316
1317// OperationStatus enumerates the values for operation status.
1318type OperationStatus string
1319
1320const (
1321	// OperationStatusFailed ...
1322	OperationStatusFailed OperationStatus = "Failed"
1323	// OperationStatusInProgress ...
1324	OperationStatusInProgress OperationStatus = "InProgress"
1325	// OperationStatusSucceeded ...
1326	OperationStatusSucceeded OperationStatus = "Succeeded"
1327)
1328
1329// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
1330func PossibleOperationStatusValues() []OperationStatus {
1331	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
1332}
1333
1334// Origin enumerates the values for origin.
1335type Origin string
1336
1337const (
1338	// OriginInbound ...
1339	OriginInbound Origin = "Inbound"
1340	// OriginLocal ...
1341	OriginLocal Origin = "Local"
1342	// OriginOutbound ...
1343	OriginOutbound Origin = "Outbound"
1344)
1345
1346// PossibleOriginValues returns an array of possible values for the Origin const type.
1347func PossibleOriginValues() []Origin {
1348	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
1349}
1350
1351// OwaspCrsExclusionEntryMatchVariable enumerates the values for owasp crs exclusion entry match variable.
1352type OwaspCrsExclusionEntryMatchVariable string
1353
1354const (
1355	// RequestArgNames ...
1356	RequestArgNames OwaspCrsExclusionEntryMatchVariable = "RequestArgNames"
1357	// RequestCookieNames ...
1358	RequestCookieNames OwaspCrsExclusionEntryMatchVariable = "RequestCookieNames"
1359	// RequestHeaderNames ...
1360	RequestHeaderNames OwaspCrsExclusionEntryMatchVariable = "RequestHeaderNames"
1361)
1362
1363// PossibleOwaspCrsExclusionEntryMatchVariableValues returns an array of possible values for the OwaspCrsExclusionEntryMatchVariable const type.
1364func PossibleOwaspCrsExclusionEntryMatchVariableValues() []OwaspCrsExclusionEntryMatchVariable {
1365	return []OwaspCrsExclusionEntryMatchVariable{RequestArgNames, RequestCookieNames, RequestHeaderNames}
1366}
1367
1368// OwaspCrsExclusionEntrySelectorMatchOperator enumerates the values for owasp crs exclusion entry selector
1369// match operator.
1370type OwaspCrsExclusionEntrySelectorMatchOperator string
1371
1372const (
1373	// OwaspCrsExclusionEntrySelectorMatchOperatorContains ...
1374	OwaspCrsExclusionEntrySelectorMatchOperatorContains OwaspCrsExclusionEntrySelectorMatchOperator = "Contains"
1375	// OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith ...
1376	OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith OwaspCrsExclusionEntrySelectorMatchOperator = "EndsWith"
1377	// OwaspCrsExclusionEntrySelectorMatchOperatorEquals ...
1378	OwaspCrsExclusionEntrySelectorMatchOperatorEquals OwaspCrsExclusionEntrySelectorMatchOperator = "Equals"
1379	// OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny ...
1380	OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny OwaspCrsExclusionEntrySelectorMatchOperator = "EqualsAny"
1381	// OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith ...
1382	OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith OwaspCrsExclusionEntrySelectorMatchOperator = "StartsWith"
1383)
1384
1385// PossibleOwaspCrsExclusionEntrySelectorMatchOperatorValues returns an array of possible values for the OwaspCrsExclusionEntrySelectorMatchOperator const type.
1386func PossibleOwaspCrsExclusionEntrySelectorMatchOperatorValues() []OwaspCrsExclusionEntrySelectorMatchOperator {
1387	return []OwaspCrsExclusionEntrySelectorMatchOperator{OwaspCrsExclusionEntrySelectorMatchOperatorContains, OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith, OwaspCrsExclusionEntrySelectorMatchOperatorEquals, OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny, OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith}
1388}
1389
1390// PcError enumerates the values for pc error.
1391type PcError string
1392
1393const (
1394	// AgentStopped ...
1395	AgentStopped PcError = "AgentStopped"
1396	// CaptureFailed ...
1397	CaptureFailed PcError = "CaptureFailed"
1398	// InternalError ...
1399	InternalError PcError = "InternalError"
1400	// LocalFileFailed ...
1401	LocalFileFailed PcError = "LocalFileFailed"
1402	// StorageFailed ...
1403	StorageFailed PcError = "StorageFailed"
1404)
1405
1406// PossiblePcErrorValues returns an array of possible values for the PcError const type.
1407func PossiblePcErrorValues() []PcError {
1408	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
1409}
1410
1411// PcProtocol enumerates the values for pc protocol.
1412type PcProtocol string
1413
1414const (
1415	// PcProtocolAny ...
1416	PcProtocolAny PcProtocol = "Any"
1417	// PcProtocolTCP ...
1418	PcProtocolTCP PcProtocol = "TCP"
1419	// PcProtocolUDP ...
1420	PcProtocolUDP PcProtocol = "UDP"
1421)
1422
1423// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
1424func PossiblePcProtocolValues() []PcProtocol {
1425	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
1426}
1427
1428// PcStatus enumerates the values for pc status.
1429type PcStatus string
1430
1431const (
1432	// PcStatusError ...
1433	PcStatusError PcStatus = "Error"
1434	// PcStatusNotStarted ...
1435	PcStatusNotStarted PcStatus = "NotStarted"
1436	// PcStatusRunning ...
1437	PcStatusRunning PcStatus = "Running"
1438	// PcStatusStopped ...
1439	PcStatusStopped PcStatus = "Stopped"
1440	// PcStatusUnknown ...
1441	PcStatusUnknown PcStatus = "Unknown"
1442)
1443
1444// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
1445func PossiblePcStatusValues() []PcStatus {
1446	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
1447}
1448
1449// PfsGroup enumerates the values for pfs group.
1450type PfsGroup string
1451
1452const (
1453	// PfsGroupECP256 ...
1454	PfsGroupECP256 PfsGroup = "ECP256"
1455	// PfsGroupECP384 ...
1456	PfsGroupECP384 PfsGroup = "ECP384"
1457	// PfsGroupNone ...
1458	PfsGroupNone PfsGroup = "None"
1459	// PfsGroupPFS1 ...
1460	PfsGroupPFS1 PfsGroup = "PFS1"
1461	// PfsGroupPFS14 ...
1462	PfsGroupPFS14 PfsGroup = "PFS14"
1463	// PfsGroupPFS2 ...
1464	PfsGroupPFS2 PfsGroup = "PFS2"
1465	// PfsGroupPFS2048 ...
1466	PfsGroupPFS2048 PfsGroup = "PFS2048"
1467	// PfsGroupPFS24 ...
1468	PfsGroupPFS24 PfsGroup = "PFS24"
1469	// PfsGroupPFSMM ...
1470	PfsGroupPFSMM PfsGroup = "PFSMM"
1471)
1472
1473// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1474func PossiblePfsGroupValues() []PfsGroup {
1475	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1476}
1477
1478// ProbeProtocol enumerates the values for probe protocol.
1479type ProbeProtocol string
1480
1481const (
1482	// ProbeProtocolHTTP ...
1483	ProbeProtocolHTTP ProbeProtocol = "Http"
1484	// ProbeProtocolHTTPS ...
1485	ProbeProtocolHTTPS ProbeProtocol = "Https"
1486	// ProbeProtocolTCP ...
1487	ProbeProtocolTCP ProbeProtocol = "Tcp"
1488)
1489
1490// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1491func PossibleProbeProtocolValues() []ProbeProtocol {
1492	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1493}
1494
1495// ProcessorArchitecture enumerates the values for processor architecture.
1496type ProcessorArchitecture string
1497
1498const (
1499	// Amd64 ...
1500	Amd64 ProcessorArchitecture = "Amd64"
1501	// X86 ...
1502	X86 ProcessorArchitecture = "X86"
1503)
1504
1505// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1506func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1507	return []ProcessorArchitecture{Amd64, X86}
1508}
1509
1510// Protocol enumerates the values for protocol.
1511type Protocol string
1512
1513const (
1514	// ProtocolHTTP ...
1515	ProtocolHTTP Protocol = "Http"
1516	// ProtocolHTTPS ...
1517	ProtocolHTTPS Protocol = "Https"
1518	// ProtocolIcmp ...
1519	ProtocolIcmp Protocol = "Icmp"
1520	// ProtocolTCP ...
1521	ProtocolTCP Protocol = "Tcp"
1522)
1523
1524// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1525func PossibleProtocolValues() []Protocol {
1526	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1527}
1528
1529// ProvisioningState enumerates the values for provisioning state.
1530type ProvisioningState string
1531
1532const (
1533	// Deleting ...
1534	Deleting ProvisioningState = "Deleting"
1535	// Failed ...
1536	Failed ProvisioningState = "Failed"
1537	// Succeeded ...
1538	Succeeded ProvisioningState = "Succeeded"
1539	// Updating ...
1540	Updating ProvisioningState = "Updating"
1541)
1542
1543// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1544func PossibleProvisioningStateValues() []ProvisioningState {
1545	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1546}
1547
1548// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1549type PublicIPAddressSkuName string
1550
1551const (
1552	// PublicIPAddressSkuNameBasic ...
1553	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1554	// PublicIPAddressSkuNameStandard ...
1555	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1556)
1557
1558// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1559func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1560	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1561}
1562
1563// PublicIPPrefixSkuName enumerates the values for public ip prefix sku name.
1564type PublicIPPrefixSkuName string
1565
1566const (
1567	// PublicIPPrefixSkuNameStandard ...
1568	PublicIPPrefixSkuNameStandard PublicIPPrefixSkuName = "Standard"
1569)
1570
1571// PossiblePublicIPPrefixSkuNameValues returns an array of possible values for the PublicIPPrefixSkuName const type.
1572func PossiblePublicIPPrefixSkuNameValues() []PublicIPPrefixSkuName {
1573	return []PublicIPPrefixSkuName{PublicIPPrefixSkuNameStandard}
1574}
1575
1576// ResourceIdentityType enumerates the values for resource identity type.
1577type ResourceIdentityType string
1578
1579const (
1580	// ResourceIdentityTypeNone ...
1581	ResourceIdentityTypeNone ResourceIdentityType = "None"
1582	// ResourceIdentityTypeSystemAssigned ...
1583	ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned"
1584	// ResourceIdentityTypeSystemAssignedUserAssigned ...
1585	ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned"
1586	// ResourceIdentityTypeUserAssigned ...
1587	ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned"
1588)
1589
1590// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type.
1591func PossibleResourceIdentityTypeValues() []ResourceIdentityType {
1592	return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned}
1593}
1594
1595// RouteNextHopType enumerates the values for route next hop type.
1596type RouteNextHopType string
1597
1598const (
1599	// RouteNextHopTypeInternet ...
1600	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1601	// RouteNextHopTypeNone ...
1602	RouteNextHopTypeNone RouteNextHopType = "None"
1603	// RouteNextHopTypeVirtualAppliance ...
1604	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1605	// RouteNextHopTypeVirtualNetworkGateway ...
1606	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1607	// RouteNextHopTypeVnetLocal ...
1608	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1609)
1610
1611// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1612func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1613	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1614}
1615
1616// RuleConditionType enumerates the values for rule condition type.
1617type RuleConditionType string
1618
1619const (
1620	// RuleConditionTypeApplicationRuleCondition ...
1621	RuleConditionTypeApplicationRuleCondition RuleConditionType = "ApplicationRuleCondition"
1622	// RuleConditionTypeFirewallPolicyRuleCondition ...
1623	RuleConditionTypeFirewallPolicyRuleCondition RuleConditionType = "FirewallPolicyRuleCondition"
1624	// RuleConditionTypeNetworkRuleCondition ...
1625	RuleConditionTypeNetworkRuleCondition RuleConditionType = "NetworkRuleCondition"
1626)
1627
1628// PossibleRuleConditionTypeValues returns an array of possible values for the RuleConditionType const type.
1629func PossibleRuleConditionTypeValues() []RuleConditionType {
1630	return []RuleConditionType{RuleConditionTypeApplicationRuleCondition, RuleConditionTypeFirewallPolicyRuleCondition, RuleConditionTypeNetworkRuleCondition}
1631}
1632
1633// RuleType enumerates the values for rule type.
1634type RuleType string
1635
1636const (
1637	// RuleTypeFirewallPolicyFilterRule ...
1638	RuleTypeFirewallPolicyFilterRule RuleType = "FirewallPolicyFilterRule"
1639	// RuleTypeFirewallPolicyNatRule ...
1640	RuleTypeFirewallPolicyNatRule RuleType = "FirewallPolicyNatRule"
1641	// RuleTypeFirewallPolicyRule ...
1642	RuleTypeFirewallPolicyRule RuleType = "FirewallPolicyRule"
1643)
1644
1645// PossibleRuleTypeValues returns an array of possible values for the RuleType const type.
1646func PossibleRuleTypeValues() []RuleType {
1647	return []RuleType{RuleTypeFirewallPolicyFilterRule, RuleTypeFirewallPolicyNatRule, RuleTypeFirewallPolicyRule}
1648}
1649
1650// SecurityRuleAccess enumerates the values for security rule access.
1651type SecurityRuleAccess string
1652
1653const (
1654	// SecurityRuleAccessAllow ...
1655	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1656	// SecurityRuleAccessDeny ...
1657	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1658)
1659
1660// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1661func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1662	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1663}
1664
1665// SecurityRuleDirection enumerates the values for security rule direction.
1666type SecurityRuleDirection string
1667
1668const (
1669	// SecurityRuleDirectionInbound ...
1670	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1671	// SecurityRuleDirectionOutbound ...
1672	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1673)
1674
1675// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1676func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1677	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1678}
1679
1680// SecurityRuleProtocol enumerates the values for security rule protocol.
1681type SecurityRuleProtocol string
1682
1683const (
1684	// SecurityRuleProtocolAh ...
1685	SecurityRuleProtocolAh SecurityRuleProtocol = "Ah"
1686	// SecurityRuleProtocolAsterisk ...
1687	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1688	// SecurityRuleProtocolEsp ...
1689	SecurityRuleProtocolEsp SecurityRuleProtocol = "Esp"
1690	// SecurityRuleProtocolIcmp ...
1691	SecurityRuleProtocolIcmp SecurityRuleProtocol = "Icmp"
1692	// SecurityRuleProtocolTCP ...
1693	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1694	// SecurityRuleProtocolUDP ...
1695	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1696)
1697
1698// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1699func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1700	return []SecurityRuleProtocol{SecurityRuleProtocolAh, SecurityRuleProtocolAsterisk, SecurityRuleProtocolEsp, SecurityRuleProtocolIcmp, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1701}
1702
1703// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1704type ServiceProviderProvisioningState string
1705
1706const (
1707	// Deprovisioning ...
1708	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1709	// NotProvisioned ...
1710	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1711	// Provisioned ...
1712	Provisioned ServiceProviderProvisioningState = "Provisioned"
1713	// Provisioning ...
1714	Provisioning ServiceProviderProvisioningState = "Provisioning"
1715)
1716
1717// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1718func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1719	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1720}
1721
1722// Severity enumerates the values for severity.
1723type Severity string
1724
1725const (
1726	// SeverityError ...
1727	SeverityError Severity = "Error"
1728	// SeverityWarning ...
1729	SeverityWarning Severity = "Warning"
1730)
1731
1732// PossibleSeverityValues returns an array of possible values for the Severity const type.
1733func PossibleSeverityValues() []Severity {
1734	return []Severity{SeverityError, SeverityWarning}
1735}
1736
1737// TransportProtocol enumerates the values for transport protocol.
1738type TransportProtocol string
1739
1740const (
1741	// TransportProtocolAll ...
1742	TransportProtocolAll TransportProtocol = "All"
1743	// TransportProtocolTCP ...
1744	TransportProtocolTCP TransportProtocol = "Tcp"
1745	// TransportProtocolUDP ...
1746	TransportProtocolUDP TransportProtocol = "Udp"
1747)
1748
1749// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1750func PossibleTransportProtocolValues() []TransportProtocol {
1751	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1752}
1753
1754// TunnelConnectionStatus enumerates the values for tunnel connection status.
1755type TunnelConnectionStatus string
1756
1757const (
1758	// TunnelConnectionStatusConnected ...
1759	TunnelConnectionStatusConnected TunnelConnectionStatus = "Connected"
1760	// TunnelConnectionStatusConnecting ...
1761	TunnelConnectionStatusConnecting TunnelConnectionStatus = "Connecting"
1762	// TunnelConnectionStatusNotConnected ...
1763	TunnelConnectionStatusNotConnected TunnelConnectionStatus = "NotConnected"
1764	// TunnelConnectionStatusUnknown ...
1765	TunnelConnectionStatusUnknown TunnelConnectionStatus = "Unknown"
1766)
1767
1768// PossibleTunnelConnectionStatusValues returns an array of possible values for the TunnelConnectionStatus const type.
1769func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus {
1770	return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown}
1771}
1772
1773// VerbosityLevel enumerates the values for verbosity level.
1774type VerbosityLevel string
1775
1776const (
1777	// Full ...
1778	Full VerbosityLevel = "Full"
1779	// Minimum ...
1780	Minimum VerbosityLevel = "Minimum"
1781	// Normal ...
1782	Normal VerbosityLevel = "Normal"
1783)
1784
1785// PossibleVerbosityLevelValues returns an array of possible values for the VerbosityLevel const type.
1786func PossibleVerbosityLevelValues() []VerbosityLevel {
1787	return []VerbosityLevel{Full, Minimum, Normal}
1788}
1789
1790// VirtualNetworkGatewayConnectionProtocol enumerates the values for virtual network gateway connection
1791// protocol.
1792type VirtualNetworkGatewayConnectionProtocol string
1793
1794const (
1795	// IKEv1 ...
1796	IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1"
1797	// IKEv2 ...
1798	IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2"
1799)
1800
1801// PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type.
1802func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol {
1803	return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2}
1804}
1805
1806// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1807type VirtualNetworkGatewayConnectionStatus string
1808
1809const (
1810	// VirtualNetworkGatewayConnectionStatusConnected ...
1811	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1812	// VirtualNetworkGatewayConnectionStatusConnecting ...
1813	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1814	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1815	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1816	// VirtualNetworkGatewayConnectionStatusUnknown ...
1817	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1818)
1819
1820// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1821func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1822	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1823}
1824
1825// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1826type VirtualNetworkGatewayConnectionType string
1827
1828const (
1829	// ExpressRoute ...
1830	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1831	// IPsec ...
1832	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1833	// Vnet2Vnet ...
1834	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1835	// VPNClient ...
1836	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1837)
1838
1839// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1840func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1841	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1842}
1843
1844// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1845type VirtualNetworkGatewaySkuName string
1846
1847const (
1848	// VirtualNetworkGatewaySkuNameBasic ...
1849	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1850	// VirtualNetworkGatewaySkuNameErGw1AZ ...
1851	VirtualNetworkGatewaySkuNameErGw1AZ VirtualNetworkGatewaySkuName = "ErGw1AZ"
1852	// VirtualNetworkGatewaySkuNameErGw2AZ ...
1853	VirtualNetworkGatewaySkuNameErGw2AZ VirtualNetworkGatewaySkuName = "ErGw2AZ"
1854	// VirtualNetworkGatewaySkuNameErGw3AZ ...
1855	VirtualNetworkGatewaySkuNameErGw3AZ VirtualNetworkGatewaySkuName = "ErGw3AZ"
1856	// VirtualNetworkGatewaySkuNameHighPerformance ...
1857	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1858	// VirtualNetworkGatewaySkuNameStandard ...
1859	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1860	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1861	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1862	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1863	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1864	// VirtualNetworkGatewaySkuNameVpnGw1AZ ...
1865	VirtualNetworkGatewaySkuNameVpnGw1AZ VirtualNetworkGatewaySkuName = "VpnGw1AZ"
1866	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1867	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1868	// VirtualNetworkGatewaySkuNameVpnGw2AZ ...
1869	VirtualNetworkGatewaySkuNameVpnGw2AZ VirtualNetworkGatewaySkuName = "VpnGw2AZ"
1870	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1871	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1872	// VirtualNetworkGatewaySkuNameVpnGw3AZ ...
1873	VirtualNetworkGatewaySkuNameVpnGw3AZ VirtualNetworkGatewaySkuName = "VpnGw3AZ"
1874	// VirtualNetworkGatewaySkuNameVpnGw4 ...
1875	VirtualNetworkGatewaySkuNameVpnGw4 VirtualNetworkGatewaySkuName = "VpnGw4"
1876	// VirtualNetworkGatewaySkuNameVpnGw4AZ ...
1877	VirtualNetworkGatewaySkuNameVpnGw4AZ VirtualNetworkGatewaySkuName = "VpnGw4AZ"
1878	// VirtualNetworkGatewaySkuNameVpnGw5 ...
1879	VirtualNetworkGatewaySkuNameVpnGw5 VirtualNetworkGatewaySkuName = "VpnGw5"
1880	// VirtualNetworkGatewaySkuNameVpnGw5AZ ...
1881	VirtualNetworkGatewaySkuNameVpnGw5AZ VirtualNetworkGatewaySkuName = "VpnGw5AZ"
1882)
1883
1884// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
1885func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
1886	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameErGw1AZ, VirtualNetworkGatewaySkuNameErGw2AZ, VirtualNetworkGatewaySkuNameErGw3AZ, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw1AZ, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw2AZ, VirtualNetworkGatewaySkuNameVpnGw3, VirtualNetworkGatewaySkuNameVpnGw3AZ, VirtualNetworkGatewaySkuNameVpnGw4, VirtualNetworkGatewaySkuNameVpnGw4AZ, VirtualNetworkGatewaySkuNameVpnGw5, VirtualNetworkGatewaySkuNameVpnGw5AZ}
1887}
1888
1889// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
1890type VirtualNetworkGatewaySkuTier string
1891
1892const (
1893	// VirtualNetworkGatewaySkuTierBasic ...
1894	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
1895	// VirtualNetworkGatewaySkuTierErGw1AZ ...
1896	VirtualNetworkGatewaySkuTierErGw1AZ VirtualNetworkGatewaySkuTier = "ErGw1AZ"
1897	// VirtualNetworkGatewaySkuTierErGw2AZ ...
1898	VirtualNetworkGatewaySkuTierErGw2AZ VirtualNetworkGatewaySkuTier = "ErGw2AZ"
1899	// VirtualNetworkGatewaySkuTierErGw3AZ ...
1900	VirtualNetworkGatewaySkuTierErGw3AZ VirtualNetworkGatewaySkuTier = "ErGw3AZ"
1901	// VirtualNetworkGatewaySkuTierHighPerformance ...
1902	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
1903	// VirtualNetworkGatewaySkuTierStandard ...
1904	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
1905	// VirtualNetworkGatewaySkuTierUltraPerformance ...
1906	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
1907	// VirtualNetworkGatewaySkuTierVpnGw1 ...
1908	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
1909	// VirtualNetworkGatewaySkuTierVpnGw1AZ ...
1910	VirtualNetworkGatewaySkuTierVpnGw1AZ VirtualNetworkGatewaySkuTier = "VpnGw1AZ"
1911	// VirtualNetworkGatewaySkuTierVpnGw2 ...
1912	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
1913	// VirtualNetworkGatewaySkuTierVpnGw2AZ ...
1914	VirtualNetworkGatewaySkuTierVpnGw2AZ VirtualNetworkGatewaySkuTier = "VpnGw2AZ"
1915	// VirtualNetworkGatewaySkuTierVpnGw3 ...
1916	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
1917	// VirtualNetworkGatewaySkuTierVpnGw3AZ ...
1918	VirtualNetworkGatewaySkuTierVpnGw3AZ VirtualNetworkGatewaySkuTier = "VpnGw3AZ"
1919	// VirtualNetworkGatewaySkuTierVpnGw4 ...
1920	VirtualNetworkGatewaySkuTierVpnGw4 VirtualNetworkGatewaySkuTier = "VpnGw4"
1921	// VirtualNetworkGatewaySkuTierVpnGw4AZ ...
1922	VirtualNetworkGatewaySkuTierVpnGw4AZ VirtualNetworkGatewaySkuTier = "VpnGw4AZ"
1923	// VirtualNetworkGatewaySkuTierVpnGw5 ...
1924	VirtualNetworkGatewaySkuTierVpnGw5 VirtualNetworkGatewaySkuTier = "VpnGw5"
1925	// VirtualNetworkGatewaySkuTierVpnGw5AZ ...
1926	VirtualNetworkGatewaySkuTierVpnGw5AZ VirtualNetworkGatewaySkuTier = "VpnGw5AZ"
1927)
1928
1929// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
1930func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
1931	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierErGw1AZ, VirtualNetworkGatewaySkuTierErGw2AZ, VirtualNetworkGatewaySkuTierErGw3AZ, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw1AZ, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw2AZ, VirtualNetworkGatewaySkuTierVpnGw3, VirtualNetworkGatewaySkuTierVpnGw3AZ, VirtualNetworkGatewaySkuTierVpnGw4, VirtualNetworkGatewaySkuTierVpnGw4AZ, VirtualNetworkGatewaySkuTierVpnGw5, VirtualNetworkGatewaySkuTierVpnGw5AZ}
1932}
1933
1934// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
1935type VirtualNetworkGatewayType string
1936
1937const (
1938	// VirtualNetworkGatewayTypeExpressRoute ...
1939	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
1940	// VirtualNetworkGatewayTypeVpn ...
1941	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
1942)
1943
1944// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
1945func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
1946	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
1947}
1948
1949// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
1950type VirtualNetworkPeeringState string
1951
1952const (
1953	// VirtualNetworkPeeringStateConnected ...
1954	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
1955	// VirtualNetworkPeeringStateDisconnected ...
1956	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
1957	// VirtualNetworkPeeringStateInitiated ...
1958	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
1959)
1960
1961// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
1962func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
1963	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
1964}
1965
1966// VirtualWanSecurityProviderType enumerates the values for virtual wan security provider type.
1967type VirtualWanSecurityProviderType string
1968
1969const (
1970	// External ...
1971	External VirtualWanSecurityProviderType = "External"
1972	// Native ...
1973	Native VirtualWanSecurityProviderType = "Native"
1974)
1975
1976// PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type.
1977func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType {
1978	return []VirtualWanSecurityProviderType{External, Native}
1979}
1980
1981// VpnAuthenticationType enumerates the values for vpn authentication type.
1982type VpnAuthenticationType string
1983
1984const (
1985	// AAD ...
1986	AAD VpnAuthenticationType = "AAD"
1987	// Certificate ...
1988	Certificate VpnAuthenticationType = "Certificate"
1989	// Radius ...
1990	Radius VpnAuthenticationType = "Radius"
1991)
1992
1993// PossibleVpnAuthenticationTypeValues returns an array of possible values for the VpnAuthenticationType const type.
1994func PossibleVpnAuthenticationTypeValues() []VpnAuthenticationType {
1995	return []VpnAuthenticationType{AAD, Certificate, Radius}
1996}
1997
1998// VpnClientProtocol enumerates the values for vpn client protocol.
1999type VpnClientProtocol string
2000
2001const (
2002	// IkeV2 ...
2003	IkeV2 VpnClientProtocol = "IkeV2"
2004	// OpenVPN ...
2005	OpenVPN VpnClientProtocol = "OpenVPN"
2006	// SSTP ...
2007	SSTP VpnClientProtocol = "SSTP"
2008)
2009
2010// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
2011func PossibleVpnClientProtocolValues() []VpnClientProtocol {
2012	return []VpnClientProtocol{IkeV2, OpenVPN, SSTP}
2013}
2014
2015// VpnConnectionStatus enumerates the values for vpn connection status.
2016type VpnConnectionStatus string
2017
2018const (
2019	// VpnConnectionStatusConnected ...
2020	VpnConnectionStatusConnected VpnConnectionStatus = "Connected"
2021	// VpnConnectionStatusConnecting ...
2022	VpnConnectionStatusConnecting VpnConnectionStatus = "Connecting"
2023	// VpnConnectionStatusNotConnected ...
2024	VpnConnectionStatusNotConnected VpnConnectionStatus = "NotConnected"
2025	// VpnConnectionStatusUnknown ...
2026	VpnConnectionStatusUnknown VpnConnectionStatus = "Unknown"
2027)
2028
2029// PossibleVpnConnectionStatusValues returns an array of possible values for the VpnConnectionStatus const type.
2030func PossibleVpnConnectionStatusValues() []VpnConnectionStatus {
2031	return []VpnConnectionStatus{VpnConnectionStatusConnected, VpnConnectionStatusConnecting, VpnConnectionStatusNotConnected, VpnConnectionStatusUnknown}
2032}
2033
2034// VpnGatewayGeneration enumerates the values for vpn gateway generation.
2035type VpnGatewayGeneration string
2036
2037const (
2038	// VpnGatewayGenerationGeneration1 ...
2039	VpnGatewayGenerationGeneration1 VpnGatewayGeneration = "Generation1"
2040	// VpnGatewayGenerationGeneration2 ...
2041	VpnGatewayGenerationGeneration2 VpnGatewayGeneration = "Generation2"
2042	// VpnGatewayGenerationNone ...
2043	VpnGatewayGenerationNone VpnGatewayGeneration = "None"
2044)
2045
2046// PossibleVpnGatewayGenerationValues returns an array of possible values for the VpnGatewayGeneration const type.
2047func PossibleVpnGatewayGenerationValues() []VpnGatewayGeneration {
2048	return []VpnGatewayGeneration{VpnGatewayGenerationGeneration1, VpnGatewayGenerationGeneration2, VpnGatewayGenerationNone}
2049}
2050
2051// VpnGatewayTunnelingProtocol enumerates the values for vpn gateway tunneling protocol.
2052type VpnGatewayTunnelingProtocol string
2053
2054const (
2055	// VpnGatewayTunnelingProtocolIkeV2 ...
2056	VpnGatewayTunnelingProtocolIkeV2 VpnGatewayTunnelingProtocol = "IkeV2"
2057	// VpnGatewayTunnelingProtocolOpenVPN ...
2058	VpnGatewayTunnelingProtocolOpenVPN VpnGatewayTunnelingProtocol = "OpenVPN"
2059)
2060
2061// PossibleVpnGatewayTunnelingProtocolValues returns an array of possible values for the VpnGatewayTunnelingProtocol const type.
2062func PossibleVpnGatewayTunnelingProtocolValues() []VpnGatewayTunnelingProtocol {
2063	return []VpnGatewayTunnelingProtocol{VpnGatewayTunnelingProtocolIkeV2, VpnGatewayTunnelingProtocolOpenVPN}
2064}
2065
2066// VpnType enumerates the values for vpn type.
2067type VpnType string
2068
2069const (
2070	// PolicyBased ...
2071	PolicyBased VpnType = "PolicyBased"
2072	// RouteBased ...
2073	RouteBased VpnType = "RouteBased"
2074)
2075
2076// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
2077func PossibleVpnTypeValues() []VpnType {
2078	return []VpnType{PolicyBased, RouteBased}
2079}
2080
2081// WebApplicationFirewallAction enumerates the values for web application firewall action.
2082type WebApplicationFirewallAction string
2083
2084const (
2085	// WebApplicationFirewallActionAllow ...
2086	WebApplicationFirewallActionAllow WebApplicationFirewallAction = "Allow"
2087	// WebApplicationFirewallActionBlock ...
2088	WebApplicationFirewallActionBlock WebApplicationFirewallAction = "Block"
2089	// WebApplicationFirewallActionLog ...
2090	WebApplicationFirewallActionLog WebApplicationFirewallAction = "Log"
2091)
2092
2093// PossibleWebApplicationFirewallActionValues returns an array of possible values for the WebApplicationFirewallAction const type.
2094func PossibleWebApplicationFirewallActionValues() []WebApplicationFirewallAction {
2095	return []WebApplicationFirewallAction{WebApplicationFirewallActionAllow, WebApplicationFirewallActionBlock, WebApplicationFirewallActionLog}
2096}
2097
2098// WebApplicationFirewallEnabledState enumerates the values for web application firewall enabled state.
2099type WebApplicationFirewallEnabledState string
2100
2101const (
2102	// WebApplicationFirewallEnabledStateDisabled ...
2103	WebApplicationFirewallEnabledStateDisabled WebApplicationFirewallEnabledState = "Disabled"
2104	// WebApplicationFirewallEnabledStateEnabled ...
2105	WebApplicationFirewallEnabledStateEnabled WebApplicationFirewallEnabledState = "Enabled"
2106)
2107
2108// PossibleWebApplicationFirewallEnabledStateValues returns an array of possible values for the WebApplicationFirewallEnabledState const type.
2109func PossibleWebApplicationFirewallEnabledStateValues() []WebApplicationFirewallEnabledState {
2110	return []WebApplicationFirewallEnabledState{WebApplicationFirewallEnabledStateDisabled, WebApplicationFirewallEnabledStateEnabled}
2111}
2112
2113// WebApplicationFirewallMatchVariable enumerates the values for web application firewall match variable.
2114type WebApplicationFirewallMatchVariable string
2115
2116const (
2117	// PostArgs ...
2118	PostArgs WebApplicationFirewallMatchVariable = "PostArgs"
2119	// QueryString ...
2120	QueryString WebApplicationFirewallMatchVariable = "QueryString"
2121	// RemoteAddr ...
2122	RemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr"
2123	// RequestBody ...
2124	RequestBody WebApplicationFirewallMatchVariable = "RequestBody"
2125	// RequestCookies ...
2126	RequestCookies WebApplicationFirewallMatchVariable = "RequestCookies"
2127	// RequestHeaders ...
2128	RequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders"
2129	// RequestMethod ...
2130	RequestMethod WebApplicationFirewallMatchVariable = "RequestMethod"
2131	// RequestURI ...
2132	RequestURI WebApplicationFirewallMatchVariable = "RequestUri"
2133)
2134
2135// PossibleWebApplicationFirewallMatchVariableValues returns an array of possible values for the WebApplicationFirewallMatchVariable const type.
2136func PossibleWebApplicationFirewallMatchVariableValues() []WebApplicationFirewallMatchVariable {
2137	return []WebApplicationFirewallMatchVariable{PostArgs, QueryString, RemoteAddr, RequestBody, RequestCookies, RequestHeaders, RequestMethod, RequestURI}
2138}
2139
2140// WebApplicationFirewallMode enumerates the values for web application firewall mode.
2141type WebApplicationFirewallMode string
2142
2143const (
2144	// WebApplicationFirewallModeDetection ...
2145	WebApplicationFirewallModeDetection WebApplicationFirewallMode = "Detection"
2146	// WebApplicationFirewallModePrevention ...
2147	WebApplicationFirewallModePrevention WebApplicationFirewallMode = "Prevention"
2148)
2149
2150// PossibleWebApplicationFirewallModeValues returns an array of possible values for the WebApplicationFirewallMode const type.
2151func PossibleWebApplicationFirewallModeValues() []WebApplicationFirewallMode {
2152	return []WebApplicationFirewallMode{WebApplicationFirewallModeDetection, WebApplicationFirewallModePrevention}
2153}
2154
2155// WebApplicationFirewallOperator enumerates the values for web application firewall operator.
2156type WebApplicationFirewallOperator string
2157
2158const (
2159	// WebApplicationFirewallOperatorBeginsWith ...
2160	WebApplicationFirewallOperatorBeginsWith WebApplicationFirewallOperator = "BeginsWith"
2161	// WebApplicationFirewallOperatorContains ...
2162	WebApplicationFirewallOperatorContains WebApplicationFirewallOperator = "Contains"
2163	// WebApplicationFirewallOperatorEndsWith ...
2164	WebApplicationFirewallOperatorEndsWith WebApplicationFirewallOperator = "EndsWith"
2165	// WebApplicationFirewallOperatorEqual ...
2166	WebApplicationFirewallOperatorEqual WebApplicationFirewallOperator = "Equal"
2167	// WebApplicationFirewallOperatorGreaterThan ...
2168	WebApplicationFirewallOperatorGreaterThan WebApplicationFirewallOperator = "GreaterThan"
2169	// WebApplicationFirewallOperatorGreaterThanOrEqual ...
2170	WebApplicationFirewallOperatorGreaterThanOrEqual WebApplicationFirewallOperator = "GreaterThanOrEqual"
2171	// WebApplicationFirewallOperatorIPMatch ...
2172	WebApplicationFirewallOperatorIPMatch WebApplicationFirewallOperator = "IPMatch"
2173	// WebApplicationFirewallOperatorLessThan ...
2174	WebApplicationFirewallOperatorLessThan WebApplicationFirewallOperator = "LessThan"
2175	// WebApplicationFirewallOperatorLessThanOrEqual ...
2176	WebApplicationFirewallOperatorLessThanOrEqual WebApplicationFirewallOperator = "LessThanOrEqual"
2177	// WebApplicationFirewallOperatorRegex ...
2178	WebApplicationFirewallOperatorRegex WebApplicationFirewallOperator = "Regex"
2179)
2180
2181// PossibleWebApplicationFirewallOperatorValues returns an array of possible values for the WebApplicationFirewallOperator const type.
2182func PossibleWebApplicationFirewallOperatorValues() []WebApplicationFirewallOperator {
2183	return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex}
2184}
2185
2186// WebApplicationFirewallPolicyResourceState enumerates the values for web application firewall policy resource
2187// state.
2188type WebApplicationFirewallPolicyResourceState string
2189
2190const (
2191	// WebApplicationFirewallPolicyResourceStateCreating ...
2192	WebApplicationFirewallPolicyResourceStateCreating WebApplicationFirewallPolicyResourceState = "Creating"
2193	// WebApplicationFirewallPolicyResourceStateDeleting ...
2194	WebApplicationFirewallPolicyResourceStateDeleting WebApplicationFirewallPolicyResourceState = "Deleting"
2195	// WebApplicationFirewallPolicyResourceStateDisabled ...
2196	WebApplicationFirewallPolicyResourceStateDisabled WebApplicationFirewallPolicyResourceState = "Disabled"
2197	// WebApplicationFirewallPolicyResourceStateDisabling ...
2198	WebApplicationFirewallPolicyResourceStateDisabling WebApplicationFirewallPolicyResourceState = "Disabling"
2199	// WebApplicationFirewallPolicyResourceStateEnabled ...
2200	WebApplicationFirewallPolicyResourceStateEnabled WebApplicationFirewallPolicyResourceState = "Enabled"
2201	// WebApplicationFirewallPolicyResourceStateEnabling ...
2202	WebApplicationFirewallPolicyResourceStateEnabling WebApplicationFirewallPolicyResourceState = "Enabling"
2203)
2204
2205// PossibleWebApplicationFirewallPolicyResourceStateValues returns an array of possible values for the WebApplicationFirewallPolicyResourceState const type.
2206func PossibleWebApplicationFirewallPolicyResourceStateValues() []WebApplicationFirewallPolicyResourceState {
2207	return []WebApplicationFirewallPolicyResourceState{WebApplicationFirewallPolicyResourceStateCreating, WebApplicationFirewallPolicyResourceStateDeleting, WebApplicationFirewallPolicyResourceStateDisabled, WebApplicationFirewallPolicyResourceStateDisabling, WebApplicationFirewallPolicyResourceStateEnabled, WebApplicationFirewallPolicyResourceStateEnabling}
2208}
2209
2210// WebApplicationFirewallRuleType enumerates the values for web application firewall rule type.
2211type WebApplicationFirewallRuleType string
2212
2213const (
2214	// WebApplicationFirewallRuleTypeInvalid ...
2215	WebApplicationFirewallRuleTypeInvalid WebApplicationFirewallRuleType = "Invalid"
2216	// WebApplicationFirewallRuleTypeMatchRule ...
2217	WebApplicationFirewallRuleTypeMatchRule WebApplicationFirewallRuleType = "MatchRule"
2218)
2219
2220// PossibleWebApplicationFirewallRuleTypeValues returns an array of possible values for the WebApplicationFirewallRuleType const type.
2221func PossibleWebApplicationFirewallRuleTypeValues() []WebApplicationFirewallRuleType {
2222	return []WebApplicationFirewallRuleType{WebApplicationFirewallRuleTypeInvalid, WebApplicationFirewallRuleTypeMatchRule}
2223}
2224
2225// WebApplicationFirewallTransform enumerates the values for web application firewall transform.
2226type WebApplicationFirewallTransform string
2227
2228const (
2229	// HTMLEntityDecode ...
2230	HTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode"
2231	// Lowercase ...
2232	Lowercase WebApplicationFirewallTransform = "Lowercase"
2233	// RemoveNulls ...
2234	RemoveNulls WebApplicationFirewallTransform = "RemoveNulls"
2235	// Trim ...
2236	Trim WebApplicationFirewallTransform = "Trim"
2237	// URLDecode ...
2238	URLDecode WebApplicationFirewallTransform = "UrlDecode"
2239	// URLEncode ...
2240	URLEncode WebApplicationFirewallTransform = "UrlEncode"
2241)
2242
2243// PossibleWebApplicationFirewallTransformValues returns an array of possible values for the WebApplicationFirewallTransform const type.
2244func PossibleWebApplicationFirewallTransformValues() []WebApplicationFirewallTransform {
2245	return []WebApplicationFirewallTransform{HTMLEntityDecode, Lowercase, RemoveNulls, Trim, URLDecode, URLEncode}
2246}
2247
2248// AadAuthenticationParameters AAD Vpn authentication type related parameters.
2249type AadAuthenticationParameters struct {
2250	// AadTenant - AAD Vpn authentication parameter AAD tenant.
2251	AadTenant *string `json:"aadTenant,omitempty"`
2252	// AadAudience - AAD Vpn authentication parameter AAD audience.
2253	AadAudience *string `json:"aadAudience,omitempty"`
2254	// AadIssuer - AAD Vpn authentication parameter AAD issuer.
2255	AadIssuer *string `json:"aadIssuer,omitempty"`
2256}
2257
2258// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
2259// virtual network.
2260type AddressSpace struct {
2261	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
2262	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
2263}
2264
2265// ApplicationGateway application gateway resource.
2266type ApplicationGateway struct {
2267	autorest.Response `json:"-"`
2268	// ApplicationGatewayPropertiesFormat - Properties of the application gateway.
2269	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
2270	// Etag - A unique read-only string that changes whenever the resource is updated.
2271	Etag *string `json:"etag,omitempty"`
2272	// Zones - A list of availability zones denoting where the resource needs to come from.
2273	Zones *[]string `json:"zones,omitempty"`
2274	// Identity - The identity of the application gateway, if configured.
2275	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
2276	// ID - Resource ID.
2277	ID *string `json:"id,omitempty"`
2278	// Name - READ-ONLY; Resource name.
2279	Name *string `json:"name,omitempty"`
2280	// Type - READ-ONLY; Resource type.
2281	Type *string `json:"type,omitempty"`
2282	// Location - Resource location.
2283	Location *string `json:"location,omitempty"`
2284	// Tags - Resource tags.
2285	Tags map[string]*string `json:"tags"`
2286}
2287
2288// MarshalJSON is the custom marshaler for ApplicationGateway.
2289func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
2290	objectMap := make(map[string]interface{})
2291	if ag.ApplicationGatewayPropertiesFormat != nil {
2292		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
2293	}
2294	if ag.Etag != nil {
2295		objectMap["etag"] = ag.Etag
2296	}
2297	if ag.Zones != nil {
2298		objectMap["zones"] = ag.Zones
2299	}
2300	if ag.Identity != nil {
2301		objectMap["identity"] = ag.Identity
2302	}
2303	if ag.ID != nil {
2304		objectMap["id"] = ag.ID
2305	}
2306	if ag.Location != nil {
2307		objectMap["location"] = ag.Location
2308	}
2309	if ag.Tags != nil {
2310		objectMap["tags"] = ag.Tags
2311	}
2312	return json.Marshal(objectMap)
2313}
2314
2315// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
2316func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
2317	var m map[string]*json.RawMessage
2318	err := json.Unmarshal(body, &m)
2319	if err != nil {
2320		return err
2321	}
2322	for k, v := range m {
2323		switch k {
2324		case "properties":
2325			if v != nil {
2326				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
2327				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
2328				if err != nil {
2329					return err
2330				}
2331				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
2332			}
2333		case "etag":
2334			if v != nil {
2335				var etag string
2336				err = json.Unmarshal(*v, &etag)
2337				if err != nil {
2338					return err
2339				}
2340				ag.Etag = &etag
2341			}
2342		case "zones":
2343			if v != nil {
2344				var zones []string
2345				err = json.Unmarshal(*v, &zones)
2346				if err != nil {
2347					return err
2348				}
2349				ag.Zones = &zones
2350			}
2351		case "identity":
2352			if v != nil {
2353				var identity ManagedServiceIdentity
2354				err = json.Unmarshal(*v, &identity)
2355				if err != nil {
2356					return err
2357				}
2358				ag.Identity = &identity
2359			}
2360		case "id":
2361			if v != nil {
2362				var ID string
2363				err = json.Unmarshal(*v, &ID)
2364				if err != nil {
2365					return err
2366				}
2367				ag.ID = &ID
2368			}
2369		case "name":
2370			if v != nil {
2371				var name string
2372				err = json.Unmarshal(*v, &name)
2373				if err != nil {
2374					return err
2375				}
2376				ag.Name = &name
2377			}
2378		case "type":
2379			if v != nil {
2380				var typeVar string
2381				err = json.Unmarshal(*v, &typeVar)
2382				if err != nil {
2383					return err
2384				}
2385				ag.Type = &typeVar
2386			}
2387		case "location":
2388			if v != nil {
2389				var location string
2390				err = json.Unmarshal(*v, &location)
2391				if err != nil {
2392					return err
2393				}
2394				ag.Location = &location
2395			}
2396		case "tags":
2397			if v != nil {
2398				var tags map[string]*string
2399				err = json.Unmarshal(*v, &tags)
2400				if err != nil {
2401					return err
2402				}
2403				ag.Tags = tags
2404			}
2405		}
2406	}
2407
2408	return nil
2409}
2410
2411// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
2412type ApplicationGatewayAuthenticationCertificate struct {
2413	// ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate.
2414	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
2415	// Name - Name of the authentication certificate that is unique within an Application Gateway.
2416	Name *string `json:"name,omitempty"`
2417	// Etag - A unique read-only string that changes whenever the resource is updated.
2418	Etag *string `json:"etag,omitempty"`
2419	// Type - Type of the resource.
2420	Type *string `json:"type,omitempty"`
2421	// ID - Resource ID.
2422	ID *string `json:"id,omitempty"`
2423}
2424
2425// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
2426func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
2427	objectMap := make(map[string]interface{})
2428	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
2429		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
2430	}
2431	if agac.Name != nil {
2432		objectMap["name"] = agac.Name
2433	}
2434	if agac.Etag != nil {
2435		objectMap["etag"] = agac.Etag
2436	}
2437	if agac.Type != nil {
2438		objectMap["type"] = agac.Type
2439	}
2440	if agac.ID != nil {
2441		objectMap["id"] = agac.ID
2442	}
2443	return json.Marshal(objectMap)
2444}
2445
2446// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
2447func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
2448	var m map[string]*json.RawMessage
2449	err := json.Unmarshal(body, &m)
2450	if err != nil {
2451		return err
2452	}
2453	for k, v := range m {
2454		switch k {
2455		case "properties":
2456			if v != nil {
2457				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
2458				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
2459				if err != nil {
2460					return err
2461				}
2462				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
2463			}
2464		case "name":
2465			if v != nil {
2466				var name string
2467				err = json.Unmarshal(*v, &name)
2468				if err != nil {
2469					return err
2470				}
2471				agac.Name = &name
2472			}
2473		case "etag":
2474			if v != nil {
2475				var etag string
2476				err = json.Unmarshal(*v, &etag)
2477				if err != nil {
2478					return err
2479				}
2480				agac.Etag = &etag
2481			}
2482		case "type":
2483			if v != nil {
2484				var typeVar string
2485				err = json.Unmarshal(*v, &typeVar)
2486				if err != nil {
2487					return err
2488				}
2489				agac.Type = &typeVar
2490			}
2491		case "id":
2492			if v != nil {
2493				var ID string
2494				err = json.Unmarshal(*v, &ID)
2495				if err != nil {
2496					return err
2497				}
2498				agac.ID = &ID
2499			}
2500		}
2501	}
2502
2503	return nil
2504}
2505
2506// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
2507// application gateway.
2508type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
2509	// Data - Certificate public data.
2510	Data *string `json:"data,omitempty"`
2511	// ProvisioningState - The provisioning state of the authentication certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
2512	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
2513}
2514
2515// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
2516type ApplicationGatewayAutoscaleConfiguration struct {
2517	// MinCapacity - Lower bound on number of Application Gateway capacity.
2518	MinCapacity *int32 `json:"minCapacity,omitempty"`
2519	// MaxCapacity - Upper bound on number of Application Gateway capacity.
2520	MaxCapacity *int32 `json:"maxCapacity,omitempty"`
2521}
2522
2523// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
2524// call.
2525type ApplicationGatewayAvailableSslOptions struct {
2526	autorest.Response `json:"-"`
2527	// ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options.
2528	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
2529	// ID - Resource ID.
2530	ID *string `json:"id,omitempty"`
2531	// Name - READ-ONLY; Resource name.
2532	Name *string `json:"name,omitempty"`
2533	// Type - READ-ONLY; Resource type.
2534	Type *string `json:"type,omitempty"`
2535	// Location - Resource location.
2536	Location *string `json:"location,omitempty"`
2537	// Tags - Resource tags.
2538	Tags map[string]*string `json:"tags"`
2539}
2540
2541// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
2542func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
2543	objectMap := make(map[string]interface{})
2544	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
2545		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
2546	}
2547	if agaso.ID != nil {
2548		objectMap["id"] = agaso.ID
2549	}
2550	if agaso.Location != nil {
2551		objectMap["location"] = agaso.Location
2552	}
2553	if agaso.Tags != nil {
2554		objectMap["tags"] = agaso.Tags
2555	}
2556	return json.Marshal(objectMap)
2557}
2558
2559// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
2560func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
2561	var m map[string]*json.RawMessage
2562	err := json.Unmarshal(body, &m)
2563	if err != nil {
2564		return err
2565	}
2566	for k, v := range m {
2567		switch k {
2568		case "properties":
2569			if v != nil {
2570				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
2571				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
2572				if err != nil {
2573					return err
2574				}
2575				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
2576			}
2577		case "id":
2578			if v != nil {
2579				var ID string
2580				err = json.Unmarshal(*v, &ID)
2581				if err != nil {
2582					return err
2583				}
2584				agaso.ID = &ID
2585			}
2586		case "name":
2587			if v != nil {
2588				var name string
2589				err = json.Unmarshal(*v, &name)
2590				if err != nil {
2591					return err
2592				}
2593				agaso.Name = &name
2594			}
2595		case "type":
2596			if v != nil {
2597				var typeVar string
2598				err = json.Unmarshal(*v, &typeVar)
2599				if err != nil {
2600					return err
2601				}
2602				agaso.Type = &typeVar
2603			}
2604		case "location":
2605			if v != nil {
2606				var location string
2607				err = json.Unmarshal(*v, &location)
2608				if err != nil {
2609					return err
2610				}
2611				agaso.Location = &location
2612			}
2613		case "tags":
2614			if v != nil {
2615				var tags map[string]*string
2616				err = json.Unmarshal(*v, &tags)
2617				if err != nil {
2618					return err
2619				}
2620				agaso.Tags = tags
2621			}
2622		}
2623	}
2624
2625	return nil
2626}
2627
2628// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
2629// ApplicationGatewayAvailableSslOptions.
2630type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
2631	// PredefinedPolicies - List of available Ssl predefined policy.
2632	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
2633	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
2634	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
2635	// AvailableCipherSuites - List of available Ssl cipher suites.
2636	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
2637	// AvailableProtocols - List of available Ssl protocols.
2638	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
2639}
2640
2641// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
2642// service call.
2643type ApplicationGatewayAvailableSslPredefinedPolicies struct {
2644	autorest.Response `json:"-"`
2645	// Value - List of available Ssl predefined policy.
2646	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
2647	// NextLink - URL to get the next set of results.
2648	NextLink *string `json:"nextLink,omitempty"`
2649}
2650
2651// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
2652// ApplicationGatewaySslPredefinedPolicy values.
2653type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
2654	i    int
2655	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
2656}
2657
2658// NextWithContext advances to the next value.  If there was an error making
2659// the request the iterator does not advance and the error is returned.
2660func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
2661	if tracing.IsEnabled() {
2662		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
2663		defer func() {
2664			sc := -1
2665			if iter.Response().Response.Response != nil {
2666				sc = iter.Response().Response.Response.StatusCode
2667			}
2668			tracing.EndSpan(ctx, sc, err)
2669		}()
2670	}
2671	iter.i++
2672	if iter.i < len(iter.page.Values()) {
2673		return nil
2674	}
2675	err = iter.page.NextWithContext(ctx)
2676	if err != nil {
2677		iter.i--
2678		return err
2679	}
2680	iter.i = 0
2681	return nil
2682}
2683
2684// Next advances to the next value.  If there was an error making
2685// the request the iterator does not advance and the error is returned.
2686// Deprecated: Use NextWithContext() instead.
2687func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
2688	return iter.NextWithContext(context.Background())
2689}
2690
2691// NotDone returns true if the enumeration should be started or is not yet complete.
2692func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
2693	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2694}
2695
2696// Response returns the raw server response from the last page request.
2697func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2698	return iter.page.Response()
2699}
2700
2701// Value returns the current value or a zero-initialized value if the
2702// iterator has advanced beyond the end of the collection.
2703func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
2704	if !iter.page.NotDone() {
2705		return ApplicationGatewaySslPredefinedPolicy{}
2706	}
2707	return iter.page.Values()[iter.i]
2708}
2709
2710// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
2711func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
2712	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
2713}
2714
2715// IsEmpty returns true if the ListResult contains no values.
2716func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
2717	return agaspp.Value == nil || len(*agaspp.Value) == 0
2718}
2719
2720// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
2721// It returns nil if no more results exist.
2722func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
2723	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
2724		return nil, nil
2725	}
2726	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2727		autorest.AsJSON(),
2728		autorest.AsGet(),
2729		autorest.WithBaseURL(to.String(agaspp.NextLink)))
2730}
2731
2732// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
2733// ApplicationGatewaySslPredefinedPolicy values.
2734type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
2735	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
2736	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
2737}
2738
2739// NextWithContext advances to the next page of values.  If there was an error making
2740// the request the page does not advance and the error is returned.
2741func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
2742	if tracing.IsEnabled() {
2743		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
2744		defer func() {
2745			sc := -1
2746			if page.Response().Response.Response != nil {
2747				sc = page.Response().Response.Response.StatusCode
2748			}
2749			tracing.EndSpan(ctx, sc, err)
2750		}()
2751	}
2752	next, err := page.fn(ctx, page.agaspp)
2753	if err != nil {
2754		return err
2755	}
2756	page.agaspp = next
2757	return nil
2758}
2759
2760// Next advances to the next page of values.  If there was an error making
2761// the request the page does not advance and the error is returned.
2762// Deprecated: Use NextWithContext() instead.
2763func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
2764	return page.NextWithContext(context.Background())
2765}
2766
2767// NotDone returns true if the page enumeration should be started or is not yet complete.
2768func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
2769	return !page.agaspp.IsEmpty()
2770}
2771
2772// Response returns the raw server response from the last page request.
2773func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2774	return page.agaspp
2775}
2776
2777// Values returns the slice of values for the current page or nil if there are no values.
2778func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
2779	if page.agaspp.IsEmpty() {
2780		return nil
2781	}
2782	return *page.agaspp.Value
2783}
2784
2785// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
2786func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
2787	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
2788}
2789
2790// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
2791// service call.
2792type ApplicationGatewayAvailableWafRuleSetsResult struct {
2793	autorest.Response `json:"-"`
2794	// Value - The list of application gateway rule sets.
2795	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
2796}
2797
2798// ApplicationGatewayBackendAddress backend address of an application gateway.
2799type ApplicationGatewayBackendAddress struct {
2800	// Fqdn - Fully qualified domain name (FQDN).
2801	Fqdn *string `json:"fqdn,omitempty"`
2802	// IPAddress - IP address.
2803	IPAddress *string `json:"ipAddress,omitempty"`
2804}
2805
2806// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
2807type ApplicationGatewayBackendAddressPool struct {
2808	// ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool.
2809	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
2810	// Name - Name of the backend address pool that is unique within an Application Gateway.
2811	Name *string `json:"name,omitempty"`
2812	// Etag - A unique read-only string that changes whenever the resource is updated.
2813	Etag *string `json:"etag,omitempty"`
2814	// Type - Type of the resource.
2815	Type *string `json:"type,omitempty"`
2816	// ID - Resource ID.
2817	ID *string `json:"id,omitempty"`
2818}
2819
2820// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
2821func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
2822	objectMap := make(map[string]interface{})
2823	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
2824		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
2825	}
2826	if agbap.Name != nil {
2827		objectMap["name"] = agbap.Name
2828	}
2829	if agbap.Etag != nil {
2830		objectMap["etag"] = agbap.Etag
2831	}
2832	if agbap.Type != nil {
2833		objectMap["type"] = agbap.Type
2834	}
2835	if agbap.ID != nil {
2836		objectMap["id"] = agbap.ID
2837	}
2838	return json.Marshal(objectMap)
2839}
2840
2841// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
2842func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
2843	var m map[string]*json.RawMessage
2844	err := json.Unmarshal(body, &m)
2845	if err != nil {
2846		return err
2847	}
2848	for k, v := range m {
2849		switch k {
2850		case "properties":
2851			if v != nil {
2852				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
2853				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
2854				if err != nil {
2855					return err
2856				}
2857				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
2858			}
2859		case "name":
2860			if v != nil {
2861				var name string
2862				err = json.Unmarshal(*v, &name)
2863				if err != nil {
2864					return err
2865				}
2866				agbap.Name = &name
2867			}
2868		case "etag":
2869			if v != nil {
2870				var etag string
2871				err = json.Unmarshal(*v, &etag)
2872				if err != nil {
2873					return err
2874				}
2875				agbap.Etag = &etag
2876			}
2877		case "type":
2878			if v != nil {
2879				var typeVar string
2880				err = json.Unmarshal(*v, &typeVar)
2881				if err != nil {
2882					return err
2883				}
2884				agbap.Type = &typeVar
2885			}
2886		case "id":
2887			if v != nil {
2888				var ID string
2889				err = json.Unmarshal(*v, &ID)
2890				if err != nil {
2891					return err
2892				}
2893				agbap.ID = &ID
2894			}
2895		}
2896	}
2897
2898	return nil
2899}
2900
2901// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
2902// application gateway.
2903type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
2904	// BackendIPConfigurations - Collection of references to IPs defined in network interfaces.
2905	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
2906	// BackendAddresses - Backend addresses.
2907	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
2908	// ProvisioningState - The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
2909	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
2910}
2911
2912// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call.
2913type ApplicationGatewayBackendHealth struct {
2914	autorest.Response `json:"-"`
2915	// BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources.
2916	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
2917}
2918
2919// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
2920type ApplicationGatewayBackendHealthHTTPSettings struct {
2921	// BackendHTTPSettings - Reference of an ApplicationGatewayBackendHttpSettings resource.
2922	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
2923	// Servers - List of ApplicationGatewayBackendHealthServer resources.
2924	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
2925}
2926
2927// ApplicationGatewayBackendHealthOnDemand result of on demand test probe.
2928type ApplicationGatewayBackendHealthOnDemand struct {
2929	autorest.Response `json:"-"`
2930	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2931	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2932	// BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings.
2933	BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"`
2934}
2935
2936// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
2937type ApplicationGatewayBackendHealthPool struct {
2938	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2939	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2940	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
2941	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
2942}
2943
2944// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
2945type ApplicationGatewayBackendHealthServer struct {
2946	// Address - IP address or FQDN of backend server.
2947	Address *string `json:"address,omitempty"`
2948	// IPConfiguration - Reference of IP configuration of backend server.
2949	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
2950	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
2951	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
2952	// HealthProbeLog - Health Probe Log.
2953	HealthProbeLog *string `json:"healthProbeLog,omitempty"`
2954}
2955
2956// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
2957type ApplicationGatewayBackendHTTPSettings struct {
2958	// ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings.
2959	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
2960	// Name - Name of the backend http settings that is unique within an Application Gateway.
2961	Name *string `json:"name,omitempty"`
2962	// Etag - A unique read-only string that changes whenever the resource is updated.
2963	Etag *string `json:"etag,omitempty"`
2964	// Type - Type of the resource.
2965	Type *string `json:"type,omitempty"`
2966	// ID - Resource ID.
2967	ID *string `json:"id,omitempty"`
2968}
2969
2970// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
2971func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
2972	objectMap := make(map[string]interface{})
2973	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
2974		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2975	}
2976	if agbhs.Name != nil {
2977		objectMap["name"] = agbhs.Name
2978	}
2979	if agbhs.Etag != nil {
2980		objectMap["etag"] = agbhs.Etag
2981	}
2982	if agbhs.Type != nil {
2983		objectMap["type"] = agbhs.Type
2984	}
2985	if agbhs.ID != nil {
2986		objectMap["id"] = agbhs.ID
2987	}
2988	return json.Marshal(objectMap)
2989}
2990
2991// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
2992func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
2993	var m map[string]*json.RawMessage
2994	err := json.Unmarshal(body, &m)
2995	if err != nil {
2996		return err
2997	}
2998	for k, v := range m {
2999		switch k {
3000		case "properties":
3001			if v != nil {
3002				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
3003				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
3004				if err != nil {
3005					return err
3006				}
3007				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
3008			}
3009		case "name":
3010			if v != nil {
3011				var name string
3012				err = json.Unmarshal(*v, &name)
3013				if err != nil {
3014					return err
3015				}
3016				agbhs.Name = &name
3017			}
3018		case "etag":
3019			if v != nil {
3020				var etag string
3021				err = json.Unmarshal(*v, &etag)
3022				if err != nil {
3023					return err
3024				}
3025				agbhs.Etag = &etag
3026			}
3027		case "type":
3028			if v != nil {
3029				var typeVar string
3030				err = json.Unmarshal(*v, &typeVar)
3031				if err != nil {
3032					return err
3033				}
3034				agbhs.Type = &typeVar
3035			}
3036		case "id":
3037			if v != nil {
3038				var ID string
3039				err = json.Unmarshal(*v, &ID)
3040				if err != nil {
3041					return err
3042				}
3043				agbhs.ID = &ID
3044			}
3045		}
3046	}
3047
3048	return nil
3049}
3050
3051// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
3052// application gateway.
3053type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
3054	// Port - The destination port on the backend.
3055	Port *int32 `json:"port,omitempty"`
3056	// Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS'
3057	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3058	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
3059	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
3060	// RequestTimeout - Request timeout in seconds. Application Gateway will fail the request if response is not received within RequestTimeout. Acceptable values are from 1 second to 86400 seconds.
3061	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
3062	// Probe - Probe resource of an application gateway.
3063	Probe *SubResource `json:"probe,omitempty"`
3064	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
3065	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
3066	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
3067	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
3068	// ConnectionDraining - Connection draining of the backend http settings resource.
3069	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
3070	// HostName - Host header to be sent to the backend servers.
3071	HostName *string `json:"hostName,omitempty"`
3072	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
3073	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
3074	// AffinityCookieName - Cookie name to use for the affinity cookie.
3075	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
3076	// ProbeEnabled - Whether the probe is enabled. Default value is false.
3077	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
3078	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
3079	Path *string `json:"path,omitempty"`
3080	// ProvisioningState - The provisioning state of the backend HTTP settings resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3081	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3082}
3083
3084// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
3085// be active for a specified time after the backend server got removed from the configuration.
3086type ApplicationGatewayConnectionDraining struct {
3087	// Enabled - Whether connection draining is enabled or not.
3088	Enabled *bool `json:"enabled,omitempty"`
3089	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
3090	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
3091}
3092
3093// ApplicationGatewayCustomError customer error of an application gateway.
3094type ApplicationGatewayCustomError struct {
3095	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
3096	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
3097	// CustomErrorPageURL - Error page URL of the application gateway customer error.
3098	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
3099}
3100
3101// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
3102// rule group.
3103type ApplicationGatewayFirewallDisabledRuleGroup struct {
3104	// RuleGroupName - The name of the rule group that will be disabled.
3105	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3106	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
3107	Rules *[]int32 `json:"rules,omitempty"`
3108}
3109
3110// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
3111// check.
3112type ApplicationGatewayFirewallExclusion struct {
3113	// MatchVariable - The variable to be excluded.
3114	MatchVariable *string `json:"matchVariable,omitempty"`
3115	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
3116	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
3117	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
3118	Selector *string `json:"selector,omitempty"`
3119}
3120
3121// ApplicationGatewayFirewallRule a web application firewall rule.
3122type ApplicationGatewayFirewallRule struct {
3123	// RuleID - The identifier of the web application firewall rule.
3124	RuleID *int32 `json:"ruleId,omitempty"`
3125	// Description - The description of the web application firewall rule.
3126	Description *string `json:"description,omitempty"`
3127}
3128
3129// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
3130type ApplicationGatewayFirewallRuleGroup struct {
3131	// RuleGroupName - The name of the web application firewall rule group.
3132	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3133	// Description - The description of the web application firewall rule group.
3134	Description *string `json:"description,omitempty"`
3135	// Rules - The rules of the web application firewall rule group.
3136	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
3137}
3138
3139// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
3140type ApplicationGatewayFirewallRuleSet struct {
3141	// ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set.
3142	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
3143	// ID - Resource ID.
3144	ID *string `json:"id,omitempty"`
3145	// Name - READ-ONLY; Resource name.
3146	Name *string `json:"name,omitempty"`
3147	// Type - READ-ONLY; Resource type.
3148	Type *string `json:"type,omitempty"`
3149	// Location - Resource location.
3150	Location *string `json:"location,omitempty"`
3151	// Tags - Resource tags.
3152	Tags map[string]*string `json:"tags"`
3153}
3154
3155// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
3156func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
3157	objectMap := make(map[string]interface{})
3158	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
3159		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
3160	}
3161	if agfrs.ID != nil {
3162		objectMap["id"] = agfrs.ID
3163	}
3164	if agfrs.Location != nil {
3165		objectMap["location"] = agfrs.Location
3166	}
3167	if agfrs.Tags != nil {
3168		objectMap["tags"] = agfrs.Tags
3169	}
3170	return json.Marshal(objectMap)
3171}
3172
3173// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
3174func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
3175	var m map[string]*json.RawMessage
3176	err := json.Unmarshal(body, &m)
3177	if err != nil {
3178		return err
3179	}
3180	for k, v := range m {
3181		switch k {
3182		case "properties":
3183			if v != nil {
3184				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
3185				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
3186				if err != nil {
3187					return err
3188				}
3189				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
3190			}
3191		case "id":
3192			if v != nil {
3193				var ID string
3194				err = json.Unmarshal(*v, &ID)
3195				if err != nil {
3196					return err
3197				}
3198				agfrs.ID = &ID
3199			}
3200		case "name":
3201			if v != nil {
3202				var name string
3203				err = json.Unmarshal(*v, &name)
3204				if err != nil {
3205					return err
3206				}
3207				agfrs.Name = &name
3208			}
3209		case "type":
3210			if v != nil {
3211				var typeVar string
3212				err = json.Unmarshal(*v, &typeVar)
3213				if err != nil {
3214					return err
3215				}
3216				agfrs.Type = &typeVar
3217			}
3218		case "location":
3219			if v != nil {
3220				var location string
3221				err = json.Unmarshal(*v, &location)
3222				if err != nil {
3223					return err
3224				}
3225				agfrs.Location = &location
3226			}
3227		case "tags":
3228			if v != nil {
3229				var tags map[string]*string
3230				err = json.Unmarshal(*v, &tags)
3231				if err != nil {
3232					return err
3233				}
3234				agfrs.Tags = tags
3235			}
3236		}
3237	}
3238
3239	return nil
3240}
3241
3242// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
3243type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
3244	// ProvisioningState - The provisioning state of the web application firewall rule set. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3245	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3246	// RuleSetType - The type of the web application firewall rule set.
3247	RuleSetType *string `json:"ruleSetType,omitempty"`
3248	// RuleSetVersion - The version of the web application firewall rule set type.
3249	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
3250	// RuleGroups - The rule groups of the web application firewall rule set.
3251	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
3252}
3253
3254// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
3255type ApplicationGatewayFrontendIPConfiguration struct {
3256	// ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration.
3257	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3258	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
3259	Name *string `json:"name,omitempty"`
3260	// Etag - A unique read-only string that changes whenever the resource is updated.
3261	Etag *string `json:"etag,omitempty"`
3262	// Type - Type of the resource.
3263	Type *string `json:"type,omitempty"`
3264	// ID - Resource ID.
3265	ID *string `json:"id,omitempty"`
3266}
3267
3268// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
3269func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
3270	objectMap := make(map[string]interface{})
3271	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
3272		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3273	}
3274	if agfic.Name != nil {
3275		objectMap["name"] = agfic.Name
3276	}
3277	if agfic.Etag != nil {
3278		objectMap["etag"] = agfic.Etag
3279	}
3280	if agfic.Type != nil {
3281		objectMap["type"] = agfic.Type
3282	}
3283	if agfic.ID != nil {
3284		objectMap["id"] = agfic.ID
3285	}
3286	return json.Marshal(objectMap)
3287}
3288
3289// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
3290func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
3291	var m map[string]*json.RawMessage
3292	err := json.Unmarshal(body, &m)
3293	if err != nil {
3294		return err
3295	}
3296	for k, v := range m {
3297		switch k {
3298		case "properties":
3299			if v != nil {
3300				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3301				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
3302				if err != nil {
3303					return err
3304				}
3305				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
3306			}
3307		case "name":
3308			if v != nil {
3309				var name string
3310				err = json.Unmarshal(*v, &name)
3311				if err != nil {
3312					return err
3313				}
3314				agfic.Name = &name
3315			}
3316		case "etag":
3317			if v != nil {
3318				var etag string
3319				err = json.Unmarshal(*v, &etag)
3320				if err != nil {
3321					return err
3322				}
3323				agfic.Etag = &etag
3324			}
3325		case "type":
3326			if v != nil {
3327				var typeVar string
3328				err = json.Unmarshal(*v, &typeVar)
3329				if err != nil {
3330					return err
3331				}
3332				agfic.Type = &typeVar
3333			}
3334		case "id":
3335			if v != nil {
3336				var ID string
3337				err = json.Unmarshal(*v, &ID)
3338				if err != nil {
3339					return err
3340				}
3341				agfic.ID = &ID
3342			}
3343		}
3344	}
3345
3346	return nil
3347}
3348
3349// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
3350// application gateway.
3351type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
3352	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
3353	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
3354	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
3355	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
3356	// Subnet - Reference of the subnet resource.
3357	Subnet *SubResource `json:"subnet,omitempty"`
3358	// PublicIPAddress - Reference of the PublicIP resource.
3359	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
3360	// ProvisioningState - The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3361	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3362}
3363
3364// ApplicationGatewayFrontendPort frontend port of an application gateway.
3365type ApplicationGatewayFrontendPort struct {
3366	// ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port.
3367	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
3368	// Name - Name of the frontend port that is unique within an Application Gateway.
3369	Name *string `json:"name,omitempty"`
3370	// Etag - A unique read-only string that changes whenever the resource is updated.
3371	Etag *string `json:"etag,omitempty"`
3372	// Type - Type of the resource.
3373	Type *string `json:"type,omitempty"`
3374	// ID - Resource ID.
3375	ID *string `json:"id,omitempty"`
3376}
3377
3378// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
3379func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
3380	objectMap := make(map[string]interface{})
3381	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
3382		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
3383	}
3384	if agfp.Name != nil {
3385		objectMap["name"] = agfp.Name
3386	}
3387	if agfp.Etag != nil {
3388		objectMap["etag"] = agfp.Etag
3389	}
3390	if agfp.Type != nil {
3391		objectMap["type"] = agfp.Type
3392	}
3393	if agfp.ID != nil {
3394		objectMap["id"] = agfp.ID
3395	}
3396	return json.Marshal(objectMap)
3397}
3398
3399// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
3400func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
3401	var m map[string]*json.RawMessage
3402	err := json.Unmarshal(body, &m)
3403	if err != nil {
3404		return err
3405	}
3406	for k, v := range m {
3407		switch k {
3408		case "properties":
3409			if v != nil {
3410				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
3411				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
3412				if err != nil {
3413					return err
3414				}
3415				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
3416			}
3417		case "name":
3418			if v != nil {
3419				var name string
3420				err = json.Unmarshal(*v, &name)
3421				if err != nil {
3422					return err
3423				}
3424				agfp.Name = &name
3425			}
3426		case "etag":
3427			if v != nil {
3428				var etag string
3429				err = json.Unmarshal(*v, &etag)
3430				if err != nil {
3431					return err
3432				}
3433				agfp.Etag = &etag
3434			}
3435		case "type":
3436			if v != nil {
3437				var typeVar string
3438				err = json.Unmarshal(*v, &typeVar)
3439				if err != nil {
3440					return err
3441				}
3442				agfp.Type = &typeVar
3443			}
3444		case "id":
3445			if v != nil {
3446				var ID string
3447				err = json.Unmarshal(*v, &ID)
3448				if err != nil {
3449					return err
3450				}
3451				agfp.ID = &ID
3452			}
3453		}
3454	}
3455
3456	return nil
3457}
3458
3459// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
3460type ApplicationGatewayFrontendPortPropertiesFormat struct {
3461	// Port - Frontend port.
3462	Port *int32 `json:"port,omitempty"`
3463	// ProvisioningState - The provisioning state of the frontend port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3464	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3465}
3466
3467// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
3468type ApplicationGatewayHeaderConfiguration struct {
3469	// HeaderName - Header name of the header configuration.
3470	HeaderName *string `json:"headerName,omitempty"`
3471	// HeaderValue - Header value of the header configuration.
3472	HeaderValue *string `json:"headerValue,omitempty"`
3473}
3474
3475// ApplicationGatewayHTTPListener http listener of an application gateway.
3476type ApplicationGatewayHTTPListener struct {
3477	// ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener.
3478	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
3479	// Name - Name of the HTTP listener that is unique within an Application Gateway.
3480	Name *string `json:"name,omitempty"`
3481	// Etag - A unique read-only string that changes whenever the resource is updated.
3482	Etag *string `json:"etag,omitempty"`
3483	// Type - Type of the resource.
3484	Type *string `json:"type,omitempty"`
3485	// ID - Resource ID.
3486	ID *string `json:"id,omitempty"`
3487}
3488
3489// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
3490func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
3491	objectMap := make(map[string]interface{})
3492	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
3493		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
3494	}
3495	if aghl.Name != nil {
3496		objectMap["name"] = aghl.Name
3497	}
3498	if aghl.Etag != nil {
3499		objectMap["etag"] = aghl.Etag
3500	}
3501	if aghl.Type != nil {
3502		objectMap["type"] = aghl.Type
3503	}
3504	if aghl.ID != nil {
3505		objectMap["id"] = aghl.ID
3506	}
3507	return json.Marshal(objectMap)
3508}
3509
3510// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
3511func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
3512	var m map[string]*json.RawMessage
3513	err := json.Unmarshal(body, &m)
3514	if err != nil {
3515		return err
3516	}
3517	for k, v := range m {
3518		switch k {
3519		case "properties":
3520			if v != nil {
3521				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
3522				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
3523				if err != nil {
3524					return err
3525				}
3526				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
3527			}
3528		case "name":
3529			if v != nil {
3530				var name string
3531				err = json.Unmarshal(*v, &name)
3532				if err != nil {
3533					return err
3534				}
3535				aghl.Name = &name
3536			}
3537		case "etag":
3538			if v != nil {
3539				var etag string
3540				err = json.Unmarshal(*v, &etag)
3541				if err != nil {
3542					return err
3543				}
3544				aghl.Etag = &etag
3545			}
3546		case "type":
3547			if v != nil {
3548				var typeVar string
3549				err = json.Unmarshal(*v, &typeVar)
3550				if err != nil {
3551					return err
3552				}
3553				aghl.Type = &typeVar
3554			}
3555		case "id":
3556			if v != nil {
3557				var ID string
3558				err = json.Unmarshal(*v, &ID)
3559				if err != nil {
3560					return err
3561				}
3562				aghl.ID = &ID
3563			}
3564		}
3565	}
3566
3567	return nil
3568}
3569
3570// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
3571type ApplicationGatewayHTTPListenerPropertiesFormat struct {
3572	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
3573	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
3574	// FrontendPort - Frontend port resource of an application gateway.
3575	FrontendPort *SubResource `json:"frontendPort,omitempty"`
3576	// Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS'
3577	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3578	// HostName - Host name of HTTP listener.
3579	HostName *string `json:"hostName,omitempty"`
3580	// SslCertificate - SSL certificate resource of an application gateway.
3581	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
3582	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
3583	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
3584	// ProvisioningState - The provisioning state of the HTTP listener resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3585	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3586	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
3587	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3588}
3589
3590// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
3591// private IP configuration is allowed.
3592type ApplicationGatewayIPConfiguration struct {
3593	// ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration.
3594	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3595	// Name - Name of the IP configuration that is unique within an Application Gateway.
3596	Name *string `json:"name,omitempty"`
3597	// Etag - A unique read-only string that changes whenever the resource is updated.
3598	Etag *string `json:"etag,omitempty"`
3599	// Type - Type of the resource.
3600	Type *string `json:"type,omitempty"`
3601	// ID - Resource ID.
3602	ID *string `json:"id,omitempty"`
3603}
3604
3605// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
3606func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
3607	objectMap := make(map[string]interface{})
3608	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
3609		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
3610	}
3611	if agic.Name != nil {
3612		objectMap["name"] = agic.Name
3613	}
3614	if agic.Etag != nil {
3615		objectMap["etag"] = agic.Etag
3616	}
3617	if agic.Type != nil {
3618		objectMap["type"] = agic.Type
3619	}
3620	if agic.ID != nil {
3621		objectMap["id"] = agic.ID
3622	}
3623	return json.Marshal(objectMap)
3624}
3625
3626// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
3627func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
3628	var m map[string]*json.RawMessage
3629	err := json.Unmarshal(body, &m)
3630	if err != nil {
3631		return err
3632	}
3633	for k, v := range m {
3634		switch k {
3635		case "properties":
3636			if v != nil {
3637				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
3638				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
3639				if err != nil {
3640					return err
3641				}
3642				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
3643			}
3644		case "name":
3645			if v != nil {
3646				var name string
3647				err = json.Unmarshal(*v, &name)
3648				if err != nil {
3649					return err
3650				}
3651				agic.Name = &name
3652			}
3653		case "etag":
3654			if v != nil {
3655				var etag string
3656				err = json.Unmarshal(*v, &etag)
3657				if err != nil {
3658					return err
3659				}
3660				agic.Etag = &etag
3661			}
3662		case "type":
3663			if v != nil {
3664				var typeVar string
3665				err = json.Unmarshal(*v, &typeVar)
3666				if err != nil {
3667					return err
3668				}
3669				agic.Type = &typeVar
3670			}
3671		case "id":
3672			if v != nil {
3673				var ID string
3674				err = json.Unmarshal(*v, &ID)
3675				if err != nil {
3676					return err
3677				}
3678				agic.ID = &ID
3679			}
3680		}
3681	}
3682
3683	return nil
3684}
3685
3686// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
3687// gateway.
3688type ApplicationGatewayIPConfigurationPropertiesFormat struct {
3689	// Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address.
3690	Subnet *SubResource `json:"subnet,omitempty"`
3691	// ProvisioningState - The provisioning state of the application gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3692	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3693}
3694
3695// ApplicationGatewayListResult response for ListApplicationGateways API service call.
3696type ApplicationGatewayListResult struct {
3697	autorest.Response `json:"-"`
3698	// Value - List of an application gateways in a resource group.
3699	Value *[]ApplicationGateway `json:"value,omitempty"`
3700	// NextLink - URL to get the next set of results.
3701	NextLink *string `json:"nextLink,omitempty"`
3702}
3703
3704// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
3705type ApplicationGatewayListResultIterator struct {
3706	i    int
3707	page ApplicationGatewayListResultPage
3708}
3709
3710// NextWithContext advances to the next value.  If there was an error making
3711// the request the iterator does not advance and the error is returned.
3712func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
3713	if tracing.IsEnabled() {
3714		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
3715		defer func() {
3716			sc := -1
3717			if iter.Response().Response.Response != nil {
3718				sc = iter.Response().Response.Response.StatusCode
3719			}
3720			tracing.EndSpan(ctx, sc, err)
3721		}()
3722	}
3723	iter.i++
3724	if iter.i < len(iter.page.Values()) {
3725		return nil
3726	}
3727	err = iter.page.NextWithContext(ctx)
3728	if err != nil {
3729		iter.i--
3730		return err
3731	}
3732	iter.i = 0
3733	return nil
3734}
3735
3736// Next advances to the next value.  If there was an error making
3737// the request the iterator does not advance and the error is returned.
3738// Deprecated: Use NextWithContext() instead.
3739func (iter *ApplicationGatewayListResultIterator) Next() error {
3740	return iter.NextWithContext(context.Background())
3741}
3742
3743// NotDone returns true if the enumeration should be started or is not yet complete.
3744func (iter ApplicationGatewayListResultIterator) NotDone() bool {
3745	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3746}
3747
3748// Response returns the raw server response from the last page request.
3749func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
3750	return iter.page.Response()
3751}
3752
3753// Value returns the current value or a zero-initialized value if the
3754// iterator has advanced beyond the end of the collection.
3755func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
3756	if !iter.page.NotDone() {
3757		return ApplicationGateway{}
3758	}
3759	return iter.page.Values()[iter.i]
3760}
3761
3762// Creates a new instance of the ApplicationGatewayListResultIterator type.
3763func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
3764	return ApplicationGatewayListResultIterator{page: page}
3765}
3766
3767// IsEmpty returns true if the ListResult contains no values.
3768func (aglr ApplicationGatewayListResult) IsEmpty() bool {
3769	return aglr.Value == nil || len(*aglr.Value) == 0
3770}
3771
3772// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
3773// It returns nil if no more results exist.
3774func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
3775	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
3776		return nil, nil
3777	}
3778	return autorest.Prepare((&http.Request{}).WithContext(ctx),
3779		autorest.AsJSON(),
3780		autorest.AsGet(),
3781		autorest.WithBaseURL(to.String(aglr.NextLink)))
3782}
3783
3784// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
3785type ApplicationGatewayListResultPage struct {
3786	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
3787	aglr ApplicationGatewayListResult
3788}
3789
3790// NextWithContext advances to the next page of values.  If there was an error making
3791// the request the page does not advance and the error is returned.
3792func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
3793	if tracing.IsEnabled() {
3794		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
3795		defer func() {
3796			sc := -1
3797			if page.Response().Response.Response != nil {
3798				sc = page.Response().Response.Response.StatusCode
3799			}
3800			tracing.EndSpan(ctx, sc, err)
3801		}()
3802	}
3803	next, err := page.fn(ctx, page.aglr)
3804	if err != nil {
3805		return err
3806	}
3807	page.aglr = next
3808	return nil
3809}
3810
3811// Next advances to the next page of values.  If there was an error making
3812// the request the page does not advance and the error is returned.
3813// Deprecated: Use NextWithContext() instead.
3814func (page *ApplicationGatewayListResultPage) Next() error {
3815	return page.NextWithContext(context.Background())
3816}
3817
3818// NotDone returns true if the page enumeration should be started or is not yet complete.
3819func (page ApplicationGatewayListResultPage) NotDone() bool {
3820	return !page.aglr.IsEmpty()
3821}
3822
3823// Response returns the raw server response from the last page request.
3824func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
3825	return page.aglr
3826}
3827
3828// Values returns the slice of values for the current page or nil if there are no values.
3829func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
3830	if page.aglr.IsEmpty() {
3831		return nil
3832	}
3833	return *page.aglr.Value
3834}
3835
3836// Creates a new instance of the ApplicationGatewayListResultPage type.
3837func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
3838	return ApplicationGatewayListResultPage{fn: getNextPage}
3839}
3840
3841// ApplicationGatewayOnDemandProbe details of on demand test probe request.
3842type ApplicationGatewayOnDemandProbe struct {
3843	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3844	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3845	// Host - Host name to send the probe to.
3846	Host *string `json:"host,omitempty"`
3847	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
3848	Path *string `json:"path,omitempty"`
3849	// Timeout - The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout period. Acceptable values are from 1 second to 86400 seconds.
3850	Timeout *int32 `json:"timeout,omitempty"`
3851	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3852	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3853	// Match - Criterion for classifying a healthy probe response.
3854	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3855	// BackendAddressPool - Reference of backend pool of application gateway to which probe request will be sent.
3856	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3857	// BackendHTTPSettings - Reference of backend http setting of application gateway to be used for test probe.
3858	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3859}
3860
3861// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
3862type ApplicationGatewayPathRule struct {
3863	// ApplicationGatewayPathRulePropertiesFormat - Properties of the application gateway path rule.
3864	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
3865	// Name - Name of the path rule that is unique within an Application Gateway.
3866	Name *string `json:"name,omitempty"`
3867	// Etag - A unique read-only string that changes whenever the resource is updated.
3868	Etag *string `json:"etag,omitempty"`
3869	// Type - Type of the resource.
3870	Type *string `json:"type,omitempty"`
3871	// ID - Resource ID.
3872	ID *string `json:"id,omitempty"`
3873}
3874
3875// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
3876func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
3877	objectMap := make(map[string]interface{})
3878	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
3879		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
3880	}
3881	if agpr.Name != nil {
3882		objectMap["name"] = agpr.Name
3883	}
3884	if agpr.Etag != nil {
3885		objectMap["etag"] = agpr.Etag
3886	}
3887	if agpr.Type != nil {
3888		objectMap["type"] = agpr.Type
3889	}
3890	if agpr.ID != nil {
3891		objectMap["id"] = agpr.ID
3892	}
3893	return json.Marshal(objectMap)
3894}
3895
3896// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
3897func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
3898	var m map[string]*json.RawMessage
3899	err := json.Unmarshal(body, &m)
3900	if err != nil {
3901		return err
3902	}
3903	for k, v := range m {
3904		switch k {
3905		case "properties":
3906			if v != nil {
3907				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
3908				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
3909				if err != nil {
3910					return err
3911				}
3912				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
3913			}
3914		case "name":
3915			if v != nil {
3916				var name string
3917				err = json.Unmarshal(*v, &name)
3918				if err != nil {
3919					return err
3920				}
3921				agpr.Name = &name
3922			}
3923		case "etag":
3924			if v != nil {
3925				var etag string
3926				err = json.Unmarshal(*v, &etag)
3927				if err != nil {
3928					return err
3929				}
3930				agpr.Etag = &etag
3931			}
3932		case "type":
3933			if v != nil {
3934				var typeVar string
3935				err = json.Unmarshal(*v, &typeVar)
3936				if err != nil {
3937					return err
3938				}
3939				agpr.Type = &typeVar
3940			}
3941		case "id":
3942			if v != nil {
3943				var ID string
3944				err = json.Unmarshal(*v, &ID)
3945				if err != nil {
3946					return err
3947				}
3948				agpr.ID = &ID
3949			}
3950		}
3951	}
3952
3953	return nil
3954}
3955
3956// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
3957type ApplicationGatewayPathRulePropertiesFormat struct {
3958	// Paths - Path rules of URL path map.
3959	Paths *[]string `json:"paths,omitempty"`
3960	// BackendAddressPool - Backend address pool resource of URL path map path rule.
3961	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3962	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
3963	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3964	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
3965	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3966	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
3967	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
3968	// ProvisioningState - The provisioning state of the path rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3969	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3970}
3971
3972// ApplicationGatewayProbe probe of the application gateway.
3973type ApplicationGatewayProbe struct {
3974	// ApplicationGatewayProbePropertiesFormat - Properties of the application gateway probe.
3975	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
3976	// Name - Name of the probe that is unique within an Application Gateway.
3977	Name *string `json:"name,omitempty"`
3978	// Etag - A unique read-only string that changes whenever the resource is updated.
3979	Etag *string `json:"etag,omitempty"`
3980	// Type - Type of the resource.
3981	Type *string `json:"type,omitempty"`
3982	// ID - Resource ID.
3983	ID *string `json:"id,omitempty"`
3984}
3985
3986// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
3987func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
3988	objectMap := make(map[string]interface{})
3989	if agp.ApplicationGatewayProbePropertiesFormat != nil {
3990		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
3991	}
3992	if agp.Name != nil {
3993		objectMap["name"] = agp.Name
3994	}
3995	if agp.Etag != nil {
3996		objectMap["etag"] = agp.Etag
3997	}
3998	if agp.Type != nil {
3999		objectMap["type"] = agp.Type
4000	}
4001	if agp.ID != nil {
4002		objectMap["id"] = agp.ID
4003	}
4004	return json.Marshal(objectMap)
4005}
4006
4007// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
4008func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
4009	var m map[string]*json.RawMessage
4010	err := json.Unmarshal(body, &m)
4011	if err != nil {
4012		return err
4013	}
4014	for k, v := range m {
4015		switch k {
4016		case "properties":
4017			if v != nil {
4018				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
4019				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
4020				if err != nil {
4021					return err
4022				}
4023				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
4024			}
4025		case "name":
4026			if v != nil {
4027				var name string
4028				err = json.Unmarshal(*v, &name)
4029				if err != nil {
4030					return err
4031				}
4032				agp.Name = &name
4033			}
4034		case "etag":
4035			if v != nil {
4036				var etag string
4037				err = json.Unmarshal(*v, &etag)
4038				if err != nil {
4039					return err
4040				}
4041				agp.Etag = &etag
4042			}
4043		case "type":
4044			if v != nil {
4045				var typeVar string
4046				err = json.Unmarshal(*v, &typeVar)
4047				if err != nil {
4048					return err
4049				}
4050				agp.Type = &typeVar
4051			}
4052		case "id":
4053			if v != nil {
4054				var ID string
4055				err = json.Unmarshal(*v, &ID)
4056				if err != nil {
4057					return err
4058				}
4059				agp.ID = &ID
4060			}
4061		}
4062	}
4063
4064	return nil
4065}
4066
4067// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match.
4068type ApplicationGatewayProbeHealthResponseMatch struct {
4069	// Body - Body that must be contained in the health response. Default value is empty.
4070	Body *string `json:"body,omitempty"`
4071	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
4072	StatusCodes *[]string `json:"statusCodes,omitempty"`
4073}
4074
4075// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
4076type ApplicationGatewayProbePropertiesFormat struct {
4077	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
4078	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
4079	// Host - Host name to send the probe to.
4080	Host *string `json:"host,omitempty"`
4081	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
4082	Path *string `json:"path,omitempty"`
4083	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
4084	Interval *int32 `json:"interval,omitempty"`
4085	// Timeout - The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout period. Acceptable values are from 1 second to 86400 seconds.
4086	Timeout *int32 `json:"timeout,omitempty"`
4087	// UnhealthyThreshold - The probe retry count. Backend server is marked down after consecutive probe failure count reaches UnhealthyThreshold. Acceptable values are from 1 second to 20.
4088	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
4089	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
4090	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
4091	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
4092	MinServers *int32 `json:"minServers,omitempty"`
4093	// Match - Criterion for classifying a healthy probe response.
4094	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
4095	// ProvisioningState - The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4096	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4097	// Port - Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case not set, port from http settings will be used. This property is valid for Standard_v2 and WAF_v2 only.
4098	Port *int32 `json:"port,omitempty"`
4099}
4100
4101// ApplicationGatewayPropertiesFormat properties of the application gateway.
4102type ApplicationGatewayPropertiesFormat struct {
4103	// Sku - SKU of the application gateway resource.
4104	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
4105	// SslPolicy - SSL policy of the application gateway resource.
4106	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
4107	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
4108	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
4109	// GatewayIPConfigurations - Subnets of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4110	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
4111	// AuthenticationCertificates - Authentication certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4112	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
4113	// TrustedRootCertificates - Trusted Root certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4114	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
4115	// SslCertificates - SSL certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4116	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
4117	// FrontendIPConfigurations - Frontend IP addresses of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4118	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
4119	// FrontendPorts - Frontend ports of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4120	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
4121	// Probes - Probes of the application gateway resource.
4122	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
4123	// BackendAddressPools - Backend address pool of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4124	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
4125	// BackendHTTPSettingsCollection - Backend http settings of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4126	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
4127	// HTTPListeners - Http listeners of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4128	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
4129	// URLPathMaps - URL path map of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4130	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
4131	// RequestRoutingRules - Request routing rules of the application gateway resource.
4132	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
4133	// RewriteRuleSets - Rewrite rules for the application gateway resource.
4134	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
4135	// RedirectConfigurations - Redirect configurations of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
4136	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
4137	// WebApplicationFirewallConfiguration - Web application firewall configuration.
4138	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
4139	// FirewallPolicy - Reference of the FirewallPolicy resource.
4140	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
4141	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
4142	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
4143	// EnableFips - Whether FIPS is enabled on the application gateway resource.
4144	EnableFips *bool `json:"enableFips,omitempty"`
4145	// AutoscaleConfiguration - Autoscale Configuration.
4146	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
4147	// ResourceGUID - The resource GUID property of the application gateway resource.
4148	ResourceGUID *string `json:"resourceGuid,omitempty"`
4149	// ProvisioningState - The provisioning state of the application gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4150	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4151	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
4152	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
4153}
4154
4155// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
4156type ApplicationGatewayRedirectConfiguration struct {
4157	// ApplicationGatewayRedirectConfigurationPropertiesFormat - Properties of the application gateway redirect configuration.
4158	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
4159	// Name - Name of the redirect configuration that is unique within an Application Gateway.
4160	Name *string `json:"name,omitempty"`
4161	// Etag - A unique read-only string that changes whenever the resource is updated.
4162	Etag *string `json:"etag,omitempty"`
4163	// Type - Type of the resource.
4164	Type *string `json:"type,omitempty"`
4165	// ID - Resource ID.
4166	ID *string `json:"id,omitempty"`
4167}
4168
4169// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
4170func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
4171	objectMap := make(map[string]interface{})
4172	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
4173		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
4174	}
4175	if agrc.Name != nil {
4176		objectMap["name"] = agrc.Name
4177	}
4178	if agrc.Etag != nil {
4179		objectMap["etag"] = agrc.Etag
4180	}
4181	if agrc.Type != nil {
4182		objectMap["type"] = agrc.Type
4183	}
4184	if agrc.ID != nil {
4185		objectMap["id"] = agrc.ID
4186	}
4187	return json.Marshal(objectMap)
4188}
4189
4190// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
4191func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
4192	var m map[string]*json.RawMessage
4193	err := json.Unmarshal(body, &m)
4194	if err != nil {
4195		return err
4196	}
4197	for k, v := range m {
4198		switch k {
4199		case "properties":
4200			if v != nil {
4201				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
4202				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
4203				if err != nil {
4204					return err
4205				}
4206				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
4207			}
4208		case "name":
4209			if v != nil {
4210				var name string
4211				err = json.Unmarshal(*v, &name)
4212				if err != nil {
4213					return err
4214				}
4215				agrc.Name = &name
4216			}
4217		case "etag":
4218			if v != nil {
4219				var etag string
4220				err = json.Unmarshal(*v, &etag)
4221				if err != nil {
4222					return err
4223				}
4224				agrc.Etag = &etag
4225			}
4226		case "type":
4227			if v != nil {
4228				var typeVar string
4229				err = json.Unmarshal(*v, &typeVar)
4230				if err != nil {
4231					return err
4232				}
4233				agrc.Type = &typeVar
4234			}
4235		case "id":
4236			if v != nil {
4237				var ID string
4238				err = json.Unmarshal(*v, &ID)
4239				if err != nil {
4240					return err
4241				}
4242				agrc.ID = &ID
4243			}
4244		}
4245	}
4246
4247	return nil
4248}
4249
4250// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
4251// application gateway.
4252type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
4253	// RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
4254	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
4255	// TargetListener - Reference to a listener to redirect the request to.
4256	TargetListener *SubResource `json:"targetListener,omitempty"`
4257	// TargetURL - Url to redirect the request to.
4258	TargetURL *string `json:"targetUrl,omitempty"`
4259	// IncludePath - Include path in the redirected url.
4260	IncludePath *bool `json:"includePath,omitempty"`
4261	// IncludeQueryString - Include query string in the redirected url.
4262	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
4263	// RequestRoutingRules - Request routing specifying redirect configuration.
4264	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
4265	// URLPathMaps - Url path maps specifying default redirect configuration.
4266	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
4267	// PathRules - Path rules specifying redirect configuration.
4268	PathRules *[]SubResource `json:"pathRules,omitempty"`
4269}
4270
4271// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
4272type ApplicationGatewayRequestRoutingRule struct {
4273	// ApplicationGatewayRequestRoutingRulePropertiesFormat - Properties of the application gateway request routing rule.
4274	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
4275	// Name - Name of the request routing rule that is unique within an Application Gateway.
4276	Name *string `json:"name,omitempty"`
4277	// Etag - A unique read-only string that changes whenever the resource is updated.
4278	Etag *string `json:"etag,omitempty"`
4279	// Type - Type of the resource.
4280	Type *string `json:"type,omitempty"`
4281	// ID - Resource ID.
4282	ID *string `json:"id,omitempty"`
4283}
4284
4285// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
4286func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
4287	objectMap := make(map[string]interface{})
4288	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
4289		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
4290	}
4291	if agrrr.Name != nil {
4292		objectMap["name"] = agrrr.Name
4293	}
4294	if agrrr.Etag != nil {
4295		objectMap["etag"] = agrrr.Etag
4296	}
4297	if agrrr.Type != nil {
4298		objectMap["type"] = agrrr.Type
4299	}
4300	if agrrr.ID != nil {
4301		objectMap["id"] = agrrr.ID
4302	}
4303	return json.Marshal(objectMap)
4304}
4305
4306// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
4307func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
4308	var m map[string]*json.RawMessage
4309	err := json.Unmarshal(body, &m)
4310	if err != nil {
4311		return err
4312	}
4313	for k, v := range m {
4314		switch k {
4315		case "properties":
4316			if v != nil {
4317				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
4318				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
4319				if err != nil {
4320					return err
4321				}
4322				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
4323			}
4324		case "name":
4325			if v != nil {
4326				var name string
4327				err = json.Unmarshal(*v, &name)
4328				if err != nil {
4329					return err
4330				}
4331				agrrr.Name = &name
4332			}
4333		case "etag":
4334			if v != nil {
4335				var etag string
4336				err = json.Unmarshal(*v, &etag)
4337				if err != nil {
4338					return err
4339				}
4340				agrrr.Etag = &etag
4341			}
4342		case "type":
4343			if v != nil {
4344				var typeVar string
4345				err = json.Unmarshal(*v, &typeVar)
4346				if err != nil {
4347					return err
4348				}
4349				agrrr.Type = &typeVar
4350			}
4351		case "id":
4352			if v != nil {
4353				var ID string
4354				err = json.Unmarshal(*v, &ID)
4355				if err != nil {
4356					return err
4357				}
4358				agrrr.ID = &ID
4359			}
4360		}
4361	}
4362
4363	return nil
4364}
4365
4366// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
4367// application gateway.
4368type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
4369	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
4370	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
4371	// Priority - Priority of the request routing rule.
4372	Priority *int32 `json:"priority,omitempty"`
4373	// BackendAddressPool - Backend address pool resource of the application gateway.
4374	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4375	// BackendHTTPSettings - Backend http settings resource of the application gateway.
4376	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4377	// HTTPListener - Http listener resource of the application gateway.
4378	HTTPListener *SubResource `json:"httpListener,omitempty"`
4379	// URLPathMap - URL path map resource of the application gateway.
4380	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
4381	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
4382	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
4383	// RedirectConfiguration - Redirect configuration resource of the application gateway.
4384	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
4385	// ProvisioningState - The provisioning state of the request routing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4386	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4387}
4388
4389// ApplicationGatewayRewriteRule rewrite rule of an application gateway.
4390type ApplicationGatewayRewriteRule struct {
4391	// Name - Name of the rewrite rule that is unique within an Application Gateway.
4392	Name *string `json:"name,omitempty"`
4393	// RuleSequence - Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a RewriteRuleSet.
4394	RuleSequence *int32 `json:"ruleSequence,omitempty"`
4395	// Conditions - Conditions based on which the action set execution will be evaluated.
4396	Conditions *[]ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`
4397	// ActionSet - Set of actions to be done as part of the rewrite Rule.
4398	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
4399}
4400
4401// ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
4402type ApplicationGatewayRewriteRuleActionSet struct {
4403	// RequestHeaderConfigurations - Request Header Actions in the Action Set.
4404	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
4405	// ResponseHeaderConfigurations - Response Header Actions in the Action Set.
4406	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
4407}
4408
4409// ApplicationGatewayRewriteRuleCondition set of conditions in the Rewrite Rule in Application Gateway.
4410type ApplicationGatewayRewriteRuleCondition struct {
4411	// Variable - The condition parameter of the RewriteRuleCondition.
4412	Variable *string `json:"variable,omitempty"`
4413	// Pattern - The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
4414	Pattern *string `json:"pattern,omitempty"`
4415	// IgnoreCase - Setting this paramter to truth value with force the pattern to do a case in-sensitive comparison.
4416	IgnoreCase *bool `json:"ignoreCase,omitempty"`
4417	// Negate - Setting this value as truth will force to check the negation of the condition given by the user.
4418	Negate *bool `json:"negate,omitempty"`
4419}
4420
4421// ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
4422type ApplicationGatewayRewriteRuleSet struct {
4423	// ApplicationGatewayRewriteRuleSetPropertiesFormat - Properties of the application gateway rewrite rule set.
4424	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
4425	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
4426	Name *string `json:"name,omitempty"`
4427	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4428	Etag *string `json:"etag,omitempty"`
4429	// ID - Resource ID.
4430	ID *string `json:"id,omitempty"`
4431}
4432
4433// MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
4434func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
4435	objectMap := make(map[string]interface{})
4436	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
4437		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
4438	}
4439	if agrrs.Name != nil {
4440		objectMap["name"] = agrrs.Name
4441	}
4442	if agrrs.ID != nil {
4443		objectMap["id"] = agrrs.ID
4444	}
4445	return json.Marshal(objectMap)
4446}
4447
4448// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
4449func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
4450	var m map[string]*json.RawMessage
4451	err := json.Unmarshal(body, &m)
4452	if err != nil {
4453		return err
4454	}
4455	for k, v := range m {
4456		switch k {
4457		case "properties":
4458			if v != nil {
4459				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
4460				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
4461				if err != nil {
4462					return err
4463				}
4464				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
4465			}
4466		case "name":
4467			if v != nil {
4468				var name string
4469				err = json.Unmarshal(*v, &name)
4470				if err != nil {
4471					return err
4472				}
4473				agrrs.Name = &name
4474			}
4475		case "etag":
4476			if v != nil {
4477				var etag string
4478				err = json.Unmarshal(*v, &etag)
4479				if err != nil {
4480					return err
4481				}
4482				agrrs.Etag = &etag
4483			}
4484		case "id":
4485			if v != nil {
4486				var ID string
4487				err = json.Unmarshal(*v, &ID)
4488				if err != nil {
4489					return err
4490				}
4491				agrrs.ID = &ID
4492			}
4493		}
4494	}
4495
4496	return nil
4497}
4498
4499// ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
4500// gateway.
4501type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
4502	// RewriteRules - Rewrite rules in the rewrite rule set.
4503	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
4504	// ProvisioningState - READ-ONLY; The provisioning state of the rewrite rule set resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4505	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4506}
4507
4508// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
4509// long-running operation.
4510type ApplicationGatewaysBackendHealthFuture struct {
4511	azure.Future
4512}
4513
4514// Result returns the result of the asynchronous operation.
4515// If the operation has not completed it will return an error.
4516func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
4517	var done bool
4518	done, err = future.DoneWithContext(context.Background(), client)
4519	if err != nil {
4520		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
4521		return
4522	}
4523	if !done {
4524		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
4525		return
4526	}
4527	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4528	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
4529		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
4530		if err != nil {
4531			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
4532		}
4533	}
4534	return
4535}
4536
4537// ApplicationGatewaysBackendHealthOnDemandFuture an abstraction for monitoring and retrieving the results
4538// of a long-running operation.
4539type ApplicationGatewaysBackendHealthOnDemandFuture struct {
4540	azure.Future
4541}
4542
4543// Result returns the result of the asynchronous operation.
4544// If the operation has not completed it will return an error.
4545func (future *ApplicationGatewaysBackendHealthOnDemandFuture) Result(client ApplicationGatewaysClient) (agbhod ApplicationGatewayBackendHealthOnDemand, err error) {
4546	var done bool
4547	done, err = future.DoneWithContext(context.Background(), client)
4548	if err != nil {
4549		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", future.Response(), "Polling failure")
4550		return
4551	}
4552	if !done {
4553		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthOnDemandFuture")
4554		return
4555	}
4556	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4557	if agbhod.Response.Response, err = future.GetResult(sender); err == nil && agbhod.Response.Response.StatusCode != http.StatusNoContent {
4558		agbhod, err = client.BackendHealthOnDemandResponder(agbhod.Response.Response)
4559		if err != nil {
4560			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", agbhod.Response.Response, "Failure responding to request")
4561		}
4562	}
4563	return
4564}
4565
4566// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
4567// long-running operation.
4568type ApplicationGatewaysCreateOrUpdateFuture struct {
4569	azure.Future
4570}
4571
4572// Result returns the result of the asynchronous operation.
4573// If the operation has not completed it will return an error.
4574func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4575	var done bool
4576	done, err = future.DoneWithContext(context.Background(), client)
4577	if err != nil {
4578		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4579		return
4580	}
4581	if !done {
4582		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
4583		return
4584	}
4585	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4586	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4587		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
4588		if err != nil {
4589			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
4590		}
4591	}
4592	return
4593}
4594
4595// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
4596// long-running operation.
4597type ApplicationGatewaysDeleteFuture struct {
4598	azure.Future
4599}
4600
4601// Result returns the result of the asynchronous operation.
4602// If the operation has not completed it will return an error.
4603func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4604	var done bool
4605	done, err = future.DoneWithContext(context.Background(), client)
4606	if err != nil {
4607		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
4608		return
4609	}
4610	if !done {
4611		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
4612		return
4613	}
4614	ar.Response = future.Response()
4615	return
4616}
4617
4618// ApplicationGatewaySku SKU of an application gateway.
4619type ApplicationGatewaySku struct {
4620	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
4621	Name ApplicationGatewaySkuName `json:"name,omitempty"`
4622	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
4623	Tier ApplicationGatewayTier `json:"tier,omitempty"`
4624	// Capacity - Capacity (instance count) of an application gateway.
4625	Capacity *int32 `json:"capacity,omitempty"`
4626}
4627
4628// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
4629type ApplicationGatewaySslCertificate struct {
4630	// ApplicationGatewaySslCertificatePropertiesFormat - Properties of the application gateway SSL certificate.
4631	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
4632	// Name - Name of the SSL certificate that is unique within an Application Gateway.
4633	Name *string `json:"name,omitempty"`
4634	// Etag - A unique read-only string that changes whenever the resource is updated.
4635	Etag *string `json:"etag,omitempty"`
4636	// Type - Type of the resource.
4637	Type *string `json:"type,omitempty"`
4638	// ID - Resource ID.
4639	ID *string `json:"id,omitempty"`
4640}
4641
4642// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
4643func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
4644	objectMap := make(map[string]interface{})
4645	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
4646		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
4647	}
4648	if agsc.Name != nil {
4649		objectMap["name"] = agsc.Name
4650	}
4651	if agsc.Etag != nil {
4652		objectMap["etag"] = agsc.Etag
4653	}
4654	if agsc.Type != nil {
4655		objectMap["type"] = agsc.Type
4656	}
4657	if agsc.ID != nil {
4658		objectMap["id"] = agsc.ID
4659	}
4660	return json.Marshal(objectMap)
4661}
4662
4663// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
4664func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
4665	var m map[string]*json.RawMessage
4666	err := json.Unmarshal(body, &m)
4667	if err != nil {
4668		return err
4669	}
4670	for k, v := range m {
4671		switch k {
4672		case "properties":
4673			if v != nil {
4674				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
4675				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
4676				if err != nil {
4677					return err
4678				}
4679				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
4680			}
4681		case "name":
4682			if v != nil {
4683				var name string
4684				err = json.Unmarshal(*v, &name)
4685				if err != nil {
4686					return err
4687				}
4688				agsc.Name = &name
4689			}
4690		case "etag":
4691			if v != nil {
4692				var etag string
4693				err = json.Unmarshal(*v, &etag)
4694				if err != nil {
4695					return err
4696				}
4697				agsc.Etag = &etag
4698			}
4699		case "type":
4700			if v != nil {
4701				var typeVar string
4702				err = json.Unmarshal(*v, &typeVar)
4703				if err != nil {
4704					return err
4705				}
4706				agsc.Type = &typeVar
4707			}
4708		case "id":
4709			if v != nil {
4710				var ID string
4711				err = json.Unmarshal(*v, &ID)
4712				if err != nil {
4713					return err
4714				}
4715				agsc.ID = &ID
4716			}
4717		}
4718	}
4719
4720	return nil
4721}
4722
4723// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
4724// gateway.
4725type ApplicationGatewaySslCertificatePropertiesFormat struct {
4726	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
4727	Data *string `json:"data,omitempty"`
4728	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
4729	Password *string `json:"password,omitempty"`
4730	// PublicCertData - Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
4731	PublicCertData *string `json:"publicCertData,omitempty"`
4732	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4733	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4734	// ProvisioningState - The provisioning state of the SSL certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4735	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4736}
4737
4738// ApplicationGatewaySslPolicy application Gateway Ssl policy.
4739type ApplicationGatewaySslPolicy struct {
4740	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
4741	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
4742	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
4743	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
4744	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
4745	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
4746	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
4747	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4748	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4749	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4750}
4751
4752// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy.
4753type ApplicationGatewaySslPredefinedPolicy struct {
4754	autorest.Response `json:"-"`
4755	// Name - Name of the Ssl predefined policy.
4756	Name *string `json:"name,omitempty"`
4757	// ApplicationGatewaySslPredefinedPolicyPropertiesFormat - Properties of the application gateway SSL predefined policy.
4758	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
4759	// ID - Resource ID.
4760	ID *string `json:"id,omitempty"`
4761}
4762
4763// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
4764func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
4765	objectMap := make(map[string]interface{})
4766	if agspp.Name != nil {
4767		objectMap["name"] = agspp.Name
4768	}
4769	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
4770		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4771	}
4772	if agspp.ID != nil {
4773		objectMap["id"] = agspp.ID
4774	}
4775	return json.Marshal(objectMap)
4776}
4777
4778// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
4779func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
4780	var m map[string]*json.RawMessage
4781	err := json.Unmarshal(body, &m)
4782	if err != nil {
4783		return err
4784	}
4785	for k, v := range m {
4786		switch k {
4787		case "name":
4788			if v != nil {
4789				var name string
4790				err = json.Unmarshal(*v, &name)
4791				if err != nil {
4792					return err
4793				}
4794				agspp.Name = &name
4795			}
4796		case "properties":
4797			if v != nil {
4798				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4799				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
4800				if err != nil {
4801					return err
4802				}
4803				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
4804			}
4805		case "id":
4806			if v != nil {
4807				var ID string
4808				err = json.Unmarshal(*v, &ID)
4809				if err != nil {
4810					return err
4811				}
4812				agspp.ID = &ID
4813			}
4814		}
4815	}
4816
4817	return nil
4818}
4819
4820// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
4821// ApplicationGatewaySslPredefinedPolicy.
4822type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
4823	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
4824	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4825	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4826	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4827}
4828
4829// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
4830// long-running operation.
4831type ApplicationGatewaysStartFuture struct {
4832	azure.Future
4833}
4834
4835// Result returns the result of the asynchronous operation.
4836// If the operation has not completed it will return an error.
4837func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4838	var done bool
4839	done, err = future.DoneWithContext(context.Background(), client)
4840	if err != nil {
4841		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
4842		return
4843	}
4844	if !done {
4845		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
4846		return
4847	}
4848	ar.Response = future.Response()
4849	return
4850}
4851
4852// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
4853// operation.
4854type ApplicationGatewaysStopFuture struct {
4855	azure.Future
4856}
4857
4858// Result returns the result of the asynchronous operation.
4859// If the operation has not completed it will return an error.
4860func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4861	var done bool
4862	done, err = future.DoneWithContext(context.Background(), client)
4863	if err != nil {
4864		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
4865		return
4866	}
4867	if !done {
4868		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
4869		return
4870	}
4871	ar.Response = future.Response()
4872	return
4873}
4874
4875// ApplicationGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
4876// long-running operation.
4877type ApplicationGatewaysUpdateTagsFuture struct {
4878	azure.Future
4879}
4880
4881// Result returns the result of the asynchronous operation.
4882// If the operation has not completed it will return an error.
4883func (future *ApplicationGatewaysUpdateTagsFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4884	var done bool
4885	done, err = future.DoneWithContext(context.Background(), client)
4886	if err != nil {
4887		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
4888		return
4889	}
4890	if !done {
4891		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysUpdateTagsFuture")
4892		return
4893	}
4894	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4895	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4896		ag, err = client.UpdateTagsResponder(ag.Response.Response)
4897		if err != nil {
4898			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", ag.Response.Response, "Failure responding to request")
4899		}
4900	}
4901	return
4902}
4903
4904// ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
4905type ApplicationGatewayTrustedRootCertificate struct {
4906	// ApplicationGatewayTrustedRootCertificatePropertiesFormat - Properties of the application gateway trusted root certificate.
4907	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
4908	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
4909	Name *string `json:"name,omitempty"`
4910	// Etag - A unique read-only string that changes whenever the resource is updated.
4911	Etag *string `json:"etag,omitempty"`
4912	// Type - Type of the resource.
4913	Type *string `json:"type,omitempty"`
4914	// ID - Resource ID.
4915	ID *string `json:"id,omitempty"`
4916}
4917
4918// MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
4919func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
4920	objectMap := make(map[string]interface{})
4921	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
4922		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
4923	}
4924	if agtrc.Name != nil {
4925		objectMap["name"] = agtrc.Name
4926	}
4927	if agtrc.Etag != nil {
4928		objectMap["etag"] = agtrc.Etag
4929	}
4930	if agtrc.Type != nil {
4931		objectMap["type"] = agtrc.Type
4932	}
4933	if agtrc.ID != nil {
4934		objectMap["id"] = agtrc.ID
4935	}
4936	return json.Marshal(objectMap)
4937}
4938
4939// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
4940func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
4941	var m map[string]*json.RawMessage
4942	err := json.Unmarshal(body, &m)
4943	if err != nil {
4944		return err
4945	}
4946	for k, v := range m {
4947		switch k {
4948		case "properties":
4949			if v != nil {
4950				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
4951				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
4952				if err != nil {
4953					return err
4954				}
4955				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
4956			}
4957		case "name":
4958			if v != nil {
4959				var name string
4960				err = json.Unmarshal(*v, &name)
4961				if err != nil {
4962					return err
4963				}
4964				agtrc.Name = &name
4965			}
4966		case "etag":
4967			if v != nil {
4968				var etag string
4969				err = json.Unmarshal(*v, &etag)
4970				if err != nil {
4971					return err
4972				}
4973				agtrc.Etag = &etag
4974			}
4975		case "type":
4976			if v != nil {
4977				var typeVar string
4978				err = json.Unmarshal(*v, &typeVar)
4979				if err != nil {
4980					return err
4981				}
4982				agtrc.Type = &typeVar
4983			}
4984		case "id":
4985			if v != nil {
4986				var ID string
4987				err = json.Unmarshal(*v, &ID)
4988				if err != nil {
4989					return err
4990				}
4991				agtrc.ID = &ID
4992			}
4993		}
4994	}
4995
4996	return nil
4997}
4998
4999// ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
5000// application gateway.
5001type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
5002	// Data - Certificate public data.
5003	Data *string `json:"data,omitempty"`
5004	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
5005	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
5006	// ProvisioningState - The provisioning state of the trusted root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5007	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5008}
5009
5010// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
5011// PathBasedRouting.
5012type ApplicationGatewayURLPathMap struct {
5013	// ApplicationGatewayURLPathMapPropertiesFormat - Properties of the application gateway URL path map.
5014	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
5015	// Name - Name of the URL path map that is unique within an Application Gateway.
5016	Name *string `json:"name,omitempty"`
5017	// Etag - A unique read-only string that changes whenever the resource is updated.
5018	Etag *string `json:"etag,omitempty"`
5019	// Type - Type of the resource.
5020	Type *string `json:"type,omitempty"`
5021	// ID - Resource ID.
5022	ID *string `json:"id,omitempty"`
5023}
5024
5025// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
5026func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
5027	objectMap := make(map[string]interface{})
5028	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
5029		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
5030	}
5031	if agupm.Name != nil {
5032		objectMap["name"] = agupm.Name
5033	}
5034	if agupm.Etag != nil {
5035		objectMap["etag"] = agupm.Etag
5036	}
5037	if agupm.Type != nil {
5038		objectMap["type"] = agupm.Type
5039	}
5040	if agupm.ID != nil {
5041		objectMap["id"] = agupm.ID
5042	}
5043	return json.Marshal(objectMap)
5044}
5045
5046// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
5047func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
5048	var m map[string]*json.RawMessage
5049	err := json.Unmarshal(body, &m)
5050	if err != nil {
5051		return err
5052	}
5053	for k, v := range m {
5054		switch k {
5055		case "properties":
5056			if v != nil {
5057				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
5058				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
5059				if err != nil {
5060					return err
5061				}
5062				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
5063			}
5064		case "name":
5065			if v != nil {
5066				var name string
5067				err = json.Unmarshal(*v, &name)
5068				if err != nil {
5069					return err
5070				}
5071				agupm.Name = &name
5072			}
5073		case "etag":
5074			if v != nil {
5075				var etag string
5076				err = json.Unmarshal(*v, &etag)
5077				if err != nil {
5078					return err
5079				}
5080				agupm.Etag = &etag
5081			}
5082		case "type":
5083			if v != nil {
5084				var typeVar string
5085				err = json.Unmarshal(*v, &typeVar)
5086				if err != nil {
5087					return err
5088				}
5089				agupm.Type = &typeVar
5090			}
5091		case "id":
5092			if v != nil {
5093				var ID string
5094				err = json.Unmarshal(*v, &ID)
5095				if err != nil {
5096					return err
5097				}
5098				agupm.ID = &ID
5099			}
5100		}
5101	}
5102
5103	return nil
5104}
5105
5106// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
5107type ApplicationGatewayURLPathMapPropertiesFormat struct {
5108	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
5109	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
5110	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
5111	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
5112	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
5113	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
5114	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
5115	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
5116	// PathRules - Path rule of URL path map resource.
5117	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
5118	// ProvisioningState - The provisioning state of the URL path map resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5119	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5120}
5121
5122// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
5123// configuration.
5124type ApplicationGatewayWebApplicationFirewallConfiguration struct {
5125	// Enabled - Whether the web application firewall is enabled or not.
5126	Enabled *bool `json:"enabled,omitempty"`
5127	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
5128	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
5129	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
5130	RuleSetType *string `json:"ruleSetType,omitempty"`
5131	// RuleSetVersion - The version of the rule set type.
5132	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
5133	// DisabledRuleGroups - The disabled rule groups.
5134	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
5135	// RequestBodyCheck - Whether allow WAF to check request Body.
5136	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
5137	// MaxRequestBodySize - Maximum request body size for WAF.
5138	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
5139	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
5140	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
5141	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
5142	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
5143	// Exclusions - The exclusion list.
5144	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
5145}
5146
5147// ApplicationRuleCondition rule condition of type application.
5148type ApplicationRuleCondition struct {
5149	// SourceAddresses - List of source IP addresses for this rule.
5150	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
5151	// DestinationAddresses - List of destination IP addresses or Service Tags.
5152	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
5153	// Protocols - Array of Application Protocols.
5154	Protocols *[]FirewallPolicyRuleConditionApplicationProtocol `json:"protocols,omitempty"`
5155	// TargetFqdns - List of FQDNs for this rule condition.
5156	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
5157	// FqdnTags - List of FQDN Tags for this rule condition.
5158	FqdnTags *[]string `json:"fqdnTags,omitempty"`
5159	// Name - Name of the rule condition.
5160	Name *string `json:"name,omitempty"`
5161	// Description - Description of the rule condition.
5162	Description *string `json:"description,omitempty"`
5163	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
5164	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
5165}
5166
5167// MarshalJSON is the custom marshaler for ApplicationRuleCondition.
5168func (arc ApplicationRuleCondition) MarshalJSON() ([]byte, error) {
5169	arc.RuleConditionType = RuleConditionTypeApplicationRuleCondition
5170	objectMap := make(map[string]interface{})
5171	if arc.SourceAddresses != nil {
5172		objectMap["sourceAddresses"] = arc.SourceAddresses
5173	}
5174	if arc.DestinationAddresses != nil {
5175		objectMap["destinationAddresses"] = arc.DestinationAddresses
5176	}
5177	if arc.Protocols != nil {
5178		objectMap["protocols"] = arc.Protocols
5179	}
5180	if arc.TargetFqdns != nil {
5181		objectMap["targetFqdns"] = arc.TargetFqdns
5182	}
5183	if arc.FqdnTags != nil {
5184		objectMap["fqdnTags"] = arc.FqdnTags
5185	}
5186	if arc.Name != nil {
5187		objectMap["name"] = arc.Name
5188	}
5189	if arc.Description != nil {
5190		objectMap["description"] = arc.Description
5191	}
5192	if arc.RuleConditionType != "" {
5193		objectMap["ruleConditionType"] = arc.RuleConditionType
5194	}
5195	return json.Marshal(objectMap)
5196}
5197
5198// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5199func (arc ApplicationRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
5200	return &arc, true
5201}
5202
5203// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5204func (arc ApplicationRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
5205	return nil, false
5206}
5207
5208// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5209func (arc ApplicationRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
5210	return nil, false
5211}
5212
5213// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5214func (arc ApplicationRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
5215	return &arc, true
5216}
5217
5218// ApplicationSecurityGroup an application security group in a resource group.
5219type ApplicationSecurityGroup struct {
5220	autorest.Response `json:"-"`
5221	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
5222	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
5223	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5224	Etag *string `json:"etag,omitempty"`
5225	// ID - Resource ID.
5226	ID *string `json:"id,omitempty"`
5227	// Name - READ-ONLY; Resource name.
5228	Name *string `json:"name,omitempty"`
5229	// Type - READ-ONLY; Resource type.
5230	Type *string `json:"type,omitempty"`
5231	// Location - Resource location.
5232	Location *string `json:"location,omitempty"`
5233	// Tags - Resource tags.
5234	Tags map[string]*string `json:"tags"`
5235}
5236
5237// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
5238func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
5239	objectMap := make(map[string]interface{})
5240	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
5241		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
5242	}
5243	if asg.ID != nil {
5244		objectMap["id"] = asg.ID
5245	}
5246	if asg.Location != nil {
5247		objectMap["location"] = asg.Location
5248	}
5249	if asg.Tags != nil {
5250		objectMap["tags"] = asg.Tags
5251	}
5252	return json.Marshal(objectMap)
5253}
5254
5255// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
5256func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
5257	var m map[string]*json.RawMessage
5258	err := json.Unmarshal(body, &m)
5259	if err != nil {
5260		return err
5261	}
5262	for k, v := range m {
5263		switch k {
5264		case "properties":
5265			if v != nil {
5266				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
5267				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
5268				if err != nil {
5269					return err
5270				}
5271				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
5272			}
5273		case "etag":
5274			if v != nil {
5275				var etag string
5276				err = json.Unmarshal(*v, &etag)
5277				if err != nil {
5278					return err
5279				}
5280				asg.Etag = &etag
5281			}
5282		case "id":
5283			if v != nil {
5284				var ID string
5285				err = json.Unmarshal(*v, &ID)
5286				if err != nil {
5287					return err
5288				}
5289				asg.ID = &ID
5290			}
5291		case "name":
5292			if v != nil {
5293				var name string
5294				err = json.Unmarshal(*v, &name)
5295				if err != nil {
5296					return err
5297				}
5298				asg.Name = &name
5299			}
5300		case "type":
5301			if v != nil {
5302				var typeVar string
5303				err = json.Unmarshal(*v, &typeVar)
5304				if err != nil {
5305					return err
5306				}
5307				asg.Type = &typeVar
5308			}
5309		case "location":
5310			if v != nil {
5311				var location string
5312				err = json.Unmarshal(*v, &location)
5313				if err != nil {
5314					return err
5315				}
5316				asg.Location = &location
5317			}
5318		case "tags":
5319			if v != nil {
5320				var tags map[string]*string
5321				err = json.Unmarshal(*v, &tags)
5322				if err != nil {
5323					return err
5324				}
5325				asg.Tags = tags
5326			}
5327		}
5328	}
5329
5330	return nil
5331}
5332
5333// ApplicationSecurityGroupListResult a list of application security groups.
5334type ApplicationSecurityGroupListResult struct {
5335	autorest.Response `json:"-"`
5336	// Value - A list of application security groups.
5337	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
5338	// NextLink - READ-ONLY; The URL to get the next set of results.
5339	NextLink *string `json:"nextLink,omitempty"`
5340}
5341
5342// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
5343// ApplicationSecurityGroup values.
5344type ApplicationSecurityGroupListResultIterator struct {
5345	i    int
5346	page ApplicationSecurityGroupListResultPage
5347}
5348
5349// NextWithContext advances to the next value.  If there was an error making
5350// the request the iterator does not advance and the error is returned.
5351func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
5352	if tracing.IsEnabled() {
5353		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
5354		defer func() {
5355			sc := -1
5356			if iter.Response().Response.Response != nil {
5357				sc = iter.Response().Response.Response.StatusCode
5358			}
5359			tracing.EndSpan(ctx, sc, err)
5360		}()
5361	}
5362	iter.i++
5363	if iter.i < len(iter.page.Values()) {
5364		return nil
5365	}
5366	err = iter.page.NextWithContext(ctx)
5367	if err != nil {
5368		iter.i--
5369		return err
5370	}
5371	iter.i = 0
5372	return nil
5373}
5374
5375// Next advances to the next value.  If there was an error making
5376// the request the iterator does not advance and the error is returned.
5377// Deprecated: Use NextWithContext() instead.
5378func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
5379	return iter.NextWithContext(context.Background())
5380}
5381
5382// NotDone returns true if the enumeration should be started or is not yet complete.
5383func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
5384	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5385}
5386
5387// Response returns the raw server response from the last page request.
5388func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
5389	return iter.page.Response()
5390}
5391
5392// Value returns the current value or a zero-initialized value if the
5393// iterator has advanced beyond the end of the collection.
5394func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
5395	if !iter.page.NotDone() {
5396		return ApplicationSecurityGroup{}
5397	}
5398	return iter.page.Values()[iter.i]
5399}
5400
5401// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
5402func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
5403	return ApplicationSecurityGroupListResultIterator{page: page}
5404}
5405
5406// IsEmpty returns true if the ListResult contains no values.
5407func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
5408	return asglr.Value == nil || len(*asglr.Value) == 0
5409}
5410
5411// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
5412// It returns nil if no more results exist.
5413func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
5414	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
5415		return nil, nil
5416	}
5417	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5418		autorest.AsJSON(),
5419		autorest.AsGet(),
5420		autorest.WithBaseURL(to.String(asglr.NextLink)))
5421}
5422
5423// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
5424type ApplicationSecurityGroupListResultPage struct {
5425	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
5426	asglr ApplicationSecurityGroupListResult
5427}
5428
5429// NextWithContext advances to the next page of values.  If there was an error making
5430// the request the page does not advance and the error is returned.
5431func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
5432	if tracing.IsEnabled() {
5433		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
5434		defer func() {
5435			sc := -1
5436			if page.Response().Response.Response != nil {
5437				sc = page.Response().Response.Response.StatusCode
5438			}
5439			tracing.EndSpan(ctx, sc, err)
5440		}()
5441	}
5442	next, err := page.fn(ctx, page.asglr)
5443	if err != nil {
5444		return err
5445	}
5446	page.asglr = next
5447	return nil
5448}
5449
5450// Next advances to the next page of values.  If there was an error making
5451// the request the page does not advance and the error is returned.
5452// Deprecated: Use NextWithContext() instead.
5453func (page *ApplicationSecurityGroupListResultPage) Next() error {
5454	return page.NextWithContext(context.Background())
5455}
5456
5457// NotDone returns true if the page enumeration should be started or is not yet complete.
5458func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
5459	return !page.asglr.IsEmpty()
5460}
5461
5462// Response returns the raw server response from the last page request.
5463func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
5464	return page.asglr
5465}
5466
5467// Values returns the slice of values for the current page or nil if there are no values.
5468func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
5469	if page.asglr.IsEmpty() {
5470		return nil
5471	}
5472	return *page.asglr.Value
5473}
5474
5475// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
5476func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
5477	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
5478}
5479
5480// ApplicationSecurityGroupPropertiesFormat application security group properties.
5481type ApplicationSecurityGroupPropertiesFormat struct {
5482	// ResourceGUID - READ-ONLY; The resource GUID property of the application security group resource. It uniquely identifies a resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
5483	ResourceGUID *string `json:"resourceGuid,omitempty"`
5484	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5485	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5486}
5487
5488// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
5489// of a long-running operation.
5490type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
5491	azure.Future
5492}
5493
5494// Result returns the result of the asynchronous operation.
5495// If the operation has not completed it will return an error.
5496func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5497	var done bool
5498	done, err = future.DoneWithContext(context.Background(), client)
5499	if err != nil {
5500		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5501		return
5502	}
5503	if !done {
5504		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
5505		return
5506	}
5507	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5508	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5509		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
5510		if err != nil {
5511			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
5512		}
5513	}
5514	return
5515}
5516
5517// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
5518// long-running operation.
5519type ApplicationSecurityGroupsDeleteFuture struct {
5520	azure.Future
5521}
5522
5523// Result returns the result of the asynchronous operation.
5524// If the operation has not completed it will return an error.
5525func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
5526	var done bool
5527	done, err = future.DoneWithContext(context.Background(), client)
5528	if err != nil {
5529		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
5530		return
5531	}
5532	if !done {
5533		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
5534		return
5535	}
5536	ar.Response = future.Response()
5537	return
5538}
5539
5540// ApplicationSecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
5541// long-running operation.
5542type ApplicationSecurityGroupsUpdateTagsFuture struct {
5543	azure.Future
5544}
5545
5546// Result returns the result of the asynchronous operation.
5547// If the operation has not completed it will return an error.
5548func (future *ApplicationSecurityGroupsUpdateTagsFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5549	var done bool
5550	done, err = future.DoneWithContext(context.Background(), client)
5551	if err != nil {
5552		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
5553		return
5554	}
5555	if !done {
5556		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsUpdateTagsFuture")
5557		return
5558	}
5559	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5560	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5561		asg, err = client.UpdateTagsResponder(asg.Response.Response)
5562		if err != nil {
5563			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", asg.Response.Response, "Failure responding to request")
5564		}
5565	}
5566	return
5567}
5568
5569// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
5570// that belongs to an ExpressRouteCircuit.
5571type AuthorizationListResult struct {
5572	autorest.Response `json:"-"`
5573	// Value - The authorizations in an ExpressRoute Circuit.
5574	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
5575	// NextLink - The URL to get the next set of results.
5576	NextLink *string `json:"nextLink,omitempty"`
5577}
5578
5579// AuthorizationListResultIterator provides access to a complete listing of
5580// ExpressRouteCircuitAuthorization values.
5581type AuthorizationListResultIterator struct {
5582	i    int
5583	page AuthorizationListResultPage
5584}
5585
5586// NextWithContext advances to the next value.  If there was an error making
5587// the request the iterator does not advance and the error is returned.
5588func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
5589	if tracing.IsEnabled() {
5590		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
5591		defer func() {
5592			sc := -1
5593			if iter.Response().Response.Response != nil {
5594				sc = iter.Response().Response.Response.StatusCode
5595			}
5596			tracing.EndSpan(ctx, sc, err)
5597		}()
5598	}
5599	iter.i++
5600	if iter.i < len(iter.page.Values()) {
5601		return nil
5602	}
5603	err = iter.page.NextWithContext(ctx)
5604	if err != nil {
5605		iter.i--
5606		return err
5607	}
5608	iter.i = 0
5609	return nil
5610}
5611
5612// Next advances to the next value.  If there was an error making
5613// the request the iterator does not advance and the error is returned.
5614// Deprecated: Use NextWithContext() instead.
5615func (iter *AuthorizationListResultIterator) Next() error {
5616	return iter.NextWithContext(context.Background())
5617}
5618
5619// NotDone returns true if the enumeration should be started or is not yet complete.
5620func (iter AuthorizationListResultIterator) NotDone() bool {
5621	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5622}
5623
5624// Response returns the raw server response from the last page request.
5625func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
5626	return iter.page.Response()
5627}
5628
5629// Value returns the current value or a zero-initialized value if the
5630// iterator has advanced beyond the end of the collection.
5631func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
5632	if !iter.page.NotDone() {
5633		return ExpressRouteCircuitAuthorization{}
5634	}
5635	return iter.page.Values()[iter.i]
5636}
5637
5638// Creates a new instance of the AuthorizationListResultIterator type.
5639func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
5640	return AuthorizationListResultIterator{page: page}
5641}
5642
5643// IsEmpty returns true if the ListResult contains no values.
5644func (alr AuthorizationListResult) IsEmpty() bool {
5645	return alr.Value == nil || len(*alr.Value) == 0
5646}
5647
5648// authorizationListResultPreparer prepares a request to retrieve the next set of results.
5649// It returns nil if no more results exist.
5650func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
5651	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
5652		return nil, nil
5653	}
5654	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5655		autorest.AsJSON(),
5656		autorest.AsGet(),
5657		autorest.WithBaseURL(to.String(alr.NextLink)))
5658}
5659
5660// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
5661type AuthorizationListResultPage struct {
5662	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
5663	alr AuthorizationListResult
5664}
5665
5666// NextWithContext advances to the next page of values.  If there was an error making
5667// the request the page does not advance and the error is returned.
5668func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
5669	if tracing.IsEnabled() {
5670		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
5671		defer func() {
5672			sc := -1
5673			if page.Response().Response.Response != nil {
5674				sc = page.Response().Response.Response.StatusCode
5675			}
5676			tracing.EndSpan(ctx, sc, err)
5677		}()
5678	}
5679	next, err := page.fn(ctx, page.alr)
5680	if err != nil {
5681		return err
5682	}
5683	page.alr = next
5684	return nil
5685}
5686
5687// Next advances to the next page of values.  If there was an error making
5688// the request the page does not advance and the error is returned.
5689// Deprecated: Use NextWithContext() instead.
5690func (page *AuthorizationListResultPage) Next() error {
5691	return page.NextWithContext(context.Background())
5692}
5693
5694// NotDone returns true if the page enumeration should be started or is not yet complete.
5695func (page AuthorizationListResultPage) NotDone() bool {
5696	return !page.alr.IsEmpty()
5697}
5698
5699// Response returns the raw server response from the last page request.
5700func (page AuthorizationListResultPage) Response() AuthorizationListResult {
5701	return page.alr
5702}
5703
5704// Values returns the slice of values for the current page or nil if there are no values.
5705func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
5706	if page.alr.IsEmpty() {
5707		return nil
5708	}
5709	return *page.alr.Value
5710}
5711
5712// Creates a new instance of the AuthorizationListResultPage type.
5713func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
5714	return AuthorizationListResultPage{fn: getNextPage}
5715}
5716
5717// AuthorizationPropertiesFormat properties of ExpressRouteCircuitAuthorization.
5718type AuthorizationPropertiesFormat struct {
5719	// AuthorizationKey - The authorization key.
5720	AuthorizationKey *string `json:"authorizationKey,omitempty"`
5721	// AuthorizationUseStatus - The authorization use status. Possible values include: 'Available', 'InUse'
5722	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
5723	// ProvisioningState - The provisioning state of the authorization resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5724	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5725}
5726
5727// AutoApprovedPrivateLinkService the information of an AutoApprovedPrivateLinkService.
5728type AutoApprovedPrivateLinkService struct {
5729	// PrivateLinkService - The id of the private link service resource.
5730	PrivateLinkService *string `json:"privateLinkService,omitempty"`
5731}
5732
5733// AutoApprovedPrivateLinkServicesResult an array of private link service id that can be linked to a
5734// private end point with auto approved.
5735type AutoApprovedPrivateLinkServicesResult struct {
5736	autorest.Response `json:"-"`
5737	// Value - An array of auto approved private link service.
5738	Value *[]AutoApprovedPrivateLinkService `json:"value,omitempty"`
5739	// NextLink - READ-ONLY; The URL to get the next set of results.
5740	NextLink *string `json:"nextLink,omitempty"`
5741}
5742
5743// AutoApprovedPrivateLinkServicesResultIterator provides access to a complete listing of
5744// AutoApprovedPrivateLinkService values.
5745type AutoApprovedPrivateLinkServicesResultIterator struct {
5746	i    int
5747	page AutoApprovedPrivateLinkServicesResultPage
5748}
5749
5750// NextWithContext advances to the next value.  If there was an error making
5751// the request the iterator does not advance and the error is returned.
5752func (iter *AutoApprovedPrivateLinkServicesResultIterator) NextWithContext(ctx context.Context) (err error) {
5753	if tracing.IsEnabled() {
5754		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultIterator.NextWithContext")
5755		defer func() {
5756			sc := -1
5757			if iter.Response().Response.Response != nil {
5758				sc = iter.Response().Response.Response.StatusCode
5759			}
5760			tracing.EndSpan(ctx, sc, err)
5761		}()
5762	}
5763	iter.i++
5764	if iter.i < len(iter.page.Values()) {
5765		return nil
5766	}
5767	err = iter.page.NextWithContext(ctx)
5768	if err != nil {
5769		iter.i--
5770		return err
5771	}
5772	iter.i = 0
5773	return nil
5774}
5775
5776// Next advances to the next value.  If there was an error making
5777// the request the iterator does not advance and the error is returned.
5778// Deprecated: Use NextWithContext() instead.
5779func (iter *AutoApprovedPrivateLinkServicesResultIterator) Next() error {
5780	return iter.NextWithContext(context.Background())
5781}
5782
5783// NotDone returns true if the enumeration should be started or is not yet complete.
5784func (iter AutoApprovedPrivateLinkServicesResultIterator) NotDone() bool {
5785	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5786}
5787
5788// Response returns the raw server response from the last page request.
5789func (iter AutoApprovedPrivateLinkServicesResultIterator) Response() AutoApprovedPrivateLinkServicesResult {
5790	return iter.page.Response()
5791}
5792
5793// Value returns the current value or a zero-initialized value if the
5794// iterator has advanced beyond the end of the collection.
5795func (iter AutoApprovedPrivateLinkServicesResultIterator) Value() AutoApprovedPrivateLinkService {
5796	if !iter.page.NotDone() {
5797		return AutoApprovedPrivateLinkService{}
5798	}
5799	return iter.page.Values()[iter.i]
5800}
5801
5802// Creates a new instance of the AutoApprovedPrivateLinkServicesResultIterator type.
5803func NewAutoApprovedPrivateLinkServicesResultIterator(page AutoApprovedPrivateLinkServicesResultPage) AutoApprovedPrivateLinkServicesResultIterator {
5804	return AutoApprovedPrivateLinkServicesResultIterator{page: page}
5805}
5806
5807// IsEmpty returns true if the ListResult contains no values.
5808func (aaplsr AutoApprovedPrivateLinkServicesResult) IsEmpty() bool {
5809	return aaplsr.Value == nil || len(*aaplsr.Value) == 0
5810}
5811
5812// autoApprovedPrivateLinkServicesResultPreparer prepares a request to retrieve the next set of results.
5813// It returns nil if no more results exist.
5814func (aaplsr AutoApprovedPrivateLinkServicesResult) autoApprovedPrivateLinkServicesResultPreparer(ctx context.Context) (*http.Request, error) {
5815	if aaplsr.NextLink == nil || len(to.String(aaplsr.NextLink)) < 1 {
5816		return nil, nil
5817	}
5818	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5819		autorest.AsJSON(),
5820		autorest.AsGet(),
5821		autorest.WithBaseURL(to.String(aaplsr.NextLink)))
5822}
5823
5824// AutoApprovedPrivateLinkServicesResultPage contains a page of AutoApprovedPrivateLinkService values.
5825type AutoApprovedPrivateLinkServicesResultPage struct {
5826	fn     func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)
5827	aaplsr AutoApprovedPrivateLinkServicesResult
5828}
5829
5830// NextWithContext advances to the next page of values.  If there was an error making
5831// the request the page does not advance and the error is returned.
5832func (page *AutoApprovedPrivateLinkServicesResultPage) NextWithContext(ctx context.Context) (err error) {
5833	if tracing.IsEnabled() {
5834		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultPage.NextWithContext")
5835		defer func() {
5836			sc := -1
5837			if page.Response().Response.Response != nil {
5838				sc = page.Response().Response.Response.StatusCode
5839			}
5840			tracing.EndSpan(ctx, sc, err)
5841		}()
5842	}
5843	next, err := page.fn(ctx, page.aaplsr)
5844	if err != nil {
5845		return err
5846	}
5847	page.aaplsr = next
5848	return nil
5849}
5850
5851// Next advances to the next page of values.  If there was an error making
5852// the request the page does not advance and the error is returned.
5853// Deprecated: Use NextWithContext() instead.
5854func (page *AutoApprovedPrivateLinkServicesResultPage) Next() error {
5855	return page.NextWithContext(context.Background())
5856}
5857
5858// NotDone returns true if the page enumeration should be started or is not yet complete.
5859func (page AutoApprovedPrivateLinkServicesResultPage) NotDone() bool {
5860	return !page.aaplsr.IsEmpty()
5861}
5862
5863// Response returns the raw server response from the last page request.
5864func (page AutoApprovedPrivateLinkServicesResultPage) Response() AutoApprovedPrivateLinkServicesResult {
5865	return page.aaplsr
5866}
5867
5868// Values returns the slice of values for the current page or nil if there are no values.
5869func (page AutoApprovedPrivateLinkServicesResultPage) Values() []AutoApprovedPrivateLinkService {
5870	if page.aaplsr.IsEmpty() {
5871		return nil
5872	}
5873	return *page.aaplsr.Value
5874}
5875
5876// Creates a new instance of the AutoApprovedPrivateLinkServicesResultPage type.
5877func NewAutoApprovedPrivateLinkServicesResultPage(getNextPage func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)) AutoApprovedPrivateLinkServicesResultPage {
5878	return AutoApprovedPrivateLinkServicesResultPage{fn: getNextPage}
5879}
5880
5881// Availability availability of the metric.
5882type Availability struct {
5883	// TimeGrain - The time grain of the availability.
5884	TimeGrain *string `json:"timeGrain,omitempty"`
5885	// Retention - The retention of the availability.
5886	Retention *string `json:"retention,omitempty"`
5887	// BlobDuration - Duration of the availability blob.
5888	BlobDuration *string `json:"blobDuration,omitempty"`
5889}
5890
5891// AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
5892// subnet.
5893type AvailableDelegation struct {
5894	// Name - The name of the AvailableDelegation resource.
5895	Name *string `json:"name,omitempty"`
5896	// ID - A unique identifier of the AvailableDelegation resource.
5897	ID *string `json:"id,omitempty"`
5898	// Type - Resource type.
5899	Type *string `json:"type,omitempty"`
5900	// ServiceName - The name of the service and resource.
5901	ServiceName *string `json:"serviceName,omitempty"`
5902	// Actions - Describes the actions permitted to the service upon delegation.
5903	Actions *[]string `json:"actions,omitempty"`
5904}
5905
5906// AvailableDelegationsResult an array of available delegations.
5907type AvailableDelegationsResult struct {
5908	autorest.Response `json:"-"`
5909	// Value - An array of available delegations.
5910	Value *[]AvailableDelegation `json:"value,omitempty"`
5911	// NextLink - READ-ONLY; The URL to get the next set of results.
5912	NextLink *string `json:"nextLink,omitempty"`
5913}
5914
5915// AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
5916type AvailableDelegationsResultIterator struct {
5917	i    int
5918	page AvailableDelegationsResultPage
5919}
5920
5921// NextWithContext advances to the next value.  If there was an error making
5922// the request the iterator does not advance and the error is returned.
5923func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
5924	if tracing.IsEnabled() {
5925		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
5926		defer func() {
5927			sc := -1
5928			if iter.Response().Response.Response != nil {
5929				sc = iter.Response().Response.Response.StatusCode
5930			}
5931			tracing.EndSpan(ctx, sc, err)
5932		}()
5933	}
5934	iter.i++
5935	if iter.i < len(iter.page.Values()) {
5936		return nil
5937	}
5938	err = iter.page.NextWithContext(ctx)
5939	if err != nil {
5940		iter.i--
5941		return err
5942	}
5943	iter.i = 0
5944	return nil
5945}
5946
5947// Next advances to the next value.  If there was an error making
5948// the request the iterator does not advance and the error is returned.
5949// Deprecated: Use NextWithContext() instead.
5950func (iter *AvailableDelegationsResultIterator) Next() error {
5951	return iter.NextWithContext(context.Background())
5952}
5953
5954// NotDone returns true if the enumeration should be started or is not yet complete.
5955func (iter AvailableDelegationsResultIterator) NotDone() bool {
5956	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5957}
5958
5959// Response returns the raw server response from the last page request.
5960func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
5961	return iter.page.Response()
5962}
5963
5964// Value returns the current value or a zero-initialized value if the
5965// iterator has advanced beyond the end of the collection.
5966func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
5967	if !iter.page.NotDone() {
5968		return AvailableDelegation{}
5969	}
5970	return iter.page.Values()[iter.i]
5971}
5972
5973// Creates a new instance of the AvailableDelegationsResultIterator type.
5974func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
5975	return AvailableDelegationsResultIterator{page: page}
5976}
5977
5978// IsEmpty returns true if the ListResult contains no values.
5979func (adr AvailableDelegationsResult) IsEmpty() bool {
5980	return adr.Value == nil || len(*adr.Value) == 0
5981}
5982
5983// availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
5984// It returns nil if no more results exist.
5985func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
5986	if adr.NextLink == nil || len(to.String(adr.NextLink)) < 1 {
5987		return nil, nil
5988	}
5989	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5990		autorest.AsJSON(),
5991		autorest.AsGet(),
5992		autorest.WithBaseURL(to.String(adr.NextLink)))
5993}
5994
5995// AvailableDelegationsResultPage contains a page of AvailableDelegation values.
5996type AvailableDelegationsResultPage struct {
5997	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
5998	adr AvailableDelegationsResult
5999}
6000
6001// NextWithContext advances to the next page of values.  If there was an error making
6002// the request the page does not advance and the error is returned.
6003func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
6004	if tracing.IsEnabled() {
6005		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
6006		defer func() {
6007			sc := -1
6008			if page.Response().Response.Response != nil {
6009				sc = page.Response().Response.Response.StatusCode
6010			}
6011			tracing.EndSpan(ctx, sc, err)
6012		}()
6013	}
6014	next, err := page.fn(ctx, page.adr)
6015	if err != nil {
6016		return err
6017	}
6018	page.adr = next
6019	return nil
6020}
6021
6022// Next advances to the next page of values.  If there was an error making
6023// the request the page does not advance and the error is returned.
6024// Deprecated: Use NextWithContext() instead.
6025func (page *AvailableDelegationsResultPage) Next() error {
6026	return page.NextWithContext(context.Background())
6027}
6028
6029// NotDone returns true if the page enumeration should be started or is not yet complete.
6030func (page AvailableDelegationsResultPage) NotDone() bool {
6031	return !page.adr.IsEmpty()
6032}
6033
6034// Response returns the raw server response from the last page request.
6035func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
6036	return page.adr
6037}
6038
6039// Values returns the slice of values for the current page or nil if there are no values.
6040func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
6041	if page.adr.IsEmpty() {
6042		return nil
6043	}
6044	return *page.adr.Value
6045}
6046
6047// Creates a new instance of the AvailableDelegationsResultPage type.
6048func NewAvailableDelegationsResultPage(getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
6049	return AvailableDelegationsResultPage{fn: getNextPage}
6050}
6051
6052// AvailablePrivateEndpointType the information of an AvailablePrivateEndpointType.
6053type AvailablePrivateEndpointType struct {
6054	// Name - The name of the service and resource.
6055	Name *string `json:"name,omitempty"`
6056	// ID - A unique identifier of the AvailablePrivateEndpoint Type resource.
6057	ID *string `json:"id,omitempty"`
6058	// Type - Resource type.
6059	Type *string `json:"type,omitempty"`
6060	// ResourceName - The name of the service and resource.
6061	ResourceName *string `json:"resourceName,omitempty"`
6062}
6063
6064// AvailablePrivateEndpointTypesResult an array of available PrivateEndpoint types.
6065type AvailablePrivateEndpointTypesResult struct {
6066	autorest.Response `json:"-"`
6067	// Value - An array of available privateEndpoint type.
6068	Value *[]AvailablePrivateEndpointType `json:"value,omitempty"`
6069	// NextLink - READ-ONLY; The URL to get the next set of results.
6070	NextLink *string `json:"nextLink,omitempty"`
6071}
6072
6073// AvailablePrivateEndpointTypesResultIterator provides access to a complete listing of
6074// AvailablePrivateEndpointType values.
6075type AvailablePrivateEndpointTypesResultIterator struct {
6076	i    int
6077	page AvailablePrivateEndpointTypesResultPage
6078}
6079
6080// NextWithContext advances to the next value.  If there was an error making
6081// the request the iterator does not advance and the error is returned.
6082func (iter *AvailablePrivateEndpointTypesResultIterator) NextWithContext(ctx context.Context) (err error) {
6083	if tracing.IsEnabled() {
6084		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultIterator.NextWithContext")
6085		defer func() {
6086			sc := -1
6087			if iter.Response().Response.Response != nil {
6088				sc = iter.Response().Response.Response.StatusCode
6089			}
6090			tracing.EndSpan(ctx, sc, err)
6091		}()
6092	}
6093	iter.i++
6094	if iter.i < len(iter.page.Values()) {
6095		return nil
6096	}
6097	err = iter.page.NextWithContext(ctx)
6098	if err != nil {
6099		iter.i--
6100		return err
6101	}
6102	iter.i = 0
6103	return nil
6104}
6105
6106// Next advances to the next value.  If there was an error making
6107// the request the iterator does not advance and the error is returned.
6108// Deprecated: Use NextWithContext() instead.
6109func (iter *AvailablePrivateEndpointTypesResultIterator) Next() error {
6110	return iter.NextWithContext(context.Background())
6111}
6112
6113// NotDone returns true if the enumeration should be started or is not yet complete.
6114func (iter AvailablePrivateEndpointTypesResultIterator) NotDone() bool {
6115	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6116}
6117
6118// Response returns the raw server response from the last page request.
6119func (iter AvailablePrivateEndpointTypesResultIterator) Response() AvailablePrivateEndpointTypesResult {
6120	return iter.page.Response()
6121}
6122
6123// Value returns the current value or a zero-initialized value if the
6124// iterator has advanced beyond the end of the collection.
6125func (iter AvailablePrivateEndpointTypesResultIterator) Value() AvailablePrivateEndpointType {
6126	if !iter.page.NotDone() {
6127		return AvailablePrivateEndpointType{}
6128	}
6129	return iter.page.Values()[iter.i]
6130}
6131
6132// Creates a new instance of the AvailablePrivateEndpointTypesResultIterator type.
6133func NewAvailablePrivateEndpointTypesResultIterator(page AvailablePrivateEndpointTypesResultPage) AvailablePrivateEndpointTypesResultIterator {
6134	return AvailablePrivateEndpointTypesResultIterator{page: page}
6135}
6136
6137// IsEmpty returns true if the ListResult contains no values.
6138func (apetr AvailablePrivateEndpointTypesResult) IsEmpty() bool {
6139	return apetr.Value == nil || len(*apetr.Value) == 0
6140}
6141
6142// availablePrivateEndpointTypesResultPreparer prepares a request to retrieve the next set of results.
6143// It returns nil if no more results exist.
6144func (apetr AvailablePrivateEndpointTypesResult) availablePrivateEndpointTypesResultPreparer(ctx context.Context) (*http.Request, error) {
6145	if apetr.NextLink == nil || len(to.String(apetr.NextLink)) < 1 {
6146		return nil, nil
6147	}
6148	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6149		autorest.AsJSON(),
6150		autorest.AsGet(),
6151		autorest.WithBaseURL(to.String(apetr.NextLink)))
6152}
6153
6154// AvailablePrivateEndpointTypesResultPage contains a page of AvailablePrivateEndpointType values.
6155type AvailablePrivateEndpointTypesResultPage struct {
6156	fn    func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)
6157	apetr AvailablePrivateEndpointTypesResult
6158}
6159
6160// NextWithContext advances to the next page of values.  If there was an error making
6161// the request the page does not advance and the error is returned.
6162func (page *AvailablePrivateEndpointTypesResultPage) NextWithContext(ctx context.Context) (err error) {
6163	if tracing.IsEnabled() {
6164		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultPage.NextWithContext")
6165		defer func() {
6166			sc := -1
6167			if page.Response().Response.Response != nil {
6168				sc = page.Response().Response.Response.StatusCode
6169			}
6170			tracing.EndSpan(ctx, sc, err)
6171		}()
6172	}
6173	next, err := page.fn(ctx, page.apetr)
6174	if err != nil {
6175		return err
6176	}
6177	page.apetr = next
6178	return nil
6179}
6180
6181// Next advances to the next page of values.  If there was an error making
6182// the request the page does not advance and the error is returned.
6183// Deprecated: Use NextWithContext() instead.
6184func (page *AvailablePrivateEndpointTypesResultPage) Next() error {
6185	return page.NextWithContext(context.Background())
6186}
6187
6188// NotDone returns true if the page enumeration should be started or is not yet complete.
6189func (page AvailablePrivateEndpointTypesResultPage) NotDone() bool {
6190	return !page.apetr.IsEmpty()
6191}
6192
6193// Response returns the raw server response from the last page request.
6194func (page AvailablePrivateEndpointTypesResultPage) Response() AvailablePrivateEndpointTypesResult {
6195	return page.apetr
6196}
6197
6198// Values returns the slice of values for the current page or nil if there are no values.
6199func (page AvailablePrivateEndpointTypesResultPage) Values() []AvailablePrivateEndpointType {
6200	if page.apetr.IsEmpty() {
6201		return nil
6202	}
6203	return *page.apetr.Value
6204}
6205
6206// Creates a new instance of the AvailablePrivateEndpointTypesResultPage type.
6207func NewAvailablePrivateEndpointTypesResultPage(getNextPage func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)) AvailablePrivateEndpointTypesResultPage {
6208	return AvailablePrivateEndpointTypesResultPage{fn: getNextPage}
6209}
6210
6211// AvailableProvidersList list of available countries with details.
6212type AvailableProvidersList struct {
6213	autorest.Response `json:"-"`
6214	// Countries - List of available countries.
6215	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
6216}
6217
6218// AvailableProvidersListCity city or town details.
6219type AvailableProvidersListCity struct {
6220	// CityName - The city or town name.
6221	CityName *string `json:"cityName,omitempty"`
6222	// Providers - A list of Internet service providers.
6223	Providers *[]string `json:"providers,omitempty"`
6224}
6225
6226// AvailableProvidersListCountry country details.
6227type AvailableProvidersListCountry struct {
6228	// CountryName - The country name.
6229	CountryName *string `json:"countryName,omitempty"`
6230	// Providers - A list of Internet service providers.
6231	Providers *[]string `json:"providers,omitempty"`
6232	// States - List of available states in the country.
6233	States *[]AvailableProvidersListState `json:"states,omitempty"`
6234}
6235
6236// AvailableProvidersListParameters constraints that determine the list of available Internet service
6237// providers.
6238type AvailableProvidersListParameters struct {
6239	// AzureLocations - A list of Azure regions.
6240	AzureLocations *[]string `json:"azureLocations,omitempty"`
6241	// Country - The country for available providers list.
6242	Country *string `json:"country,omitempty"`
6243	// State - The state for available providers list.
6244	State *string `json:"state,omitempty"`
6245	// City - The city or town for available providers list.
6246	City *string `json:"city,omitempty"`
6247}
6248
6249// AvailableProvidersListState state details.
6250type AvailableProvidersListState struct {
6251	// StateName - The state name.
6252	StateName *string `json:"stateName,omitempty"`
6253	// Providers - A list of Internet service providers.
6254	Providers *[]string `json:"providers,omitempty"`
6255	// Cities - List of available cities or towns in the state.
6256	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
6257}
6258
6259// AvailableServiceAlias the available service alias.
6260type AvailableServiceAlias struct {
6261	// Name - The name of the service alias.
6262	Name *string `json:"name,omitempty"`
6263	// ID - The ID of the service alias.
6264	ID *string `json:"id,omitempty"`
6265	// Type - The type of the resource.
6266	Type *string `json:"type,omitempty"`
6267	// ResourceName - The resource name of the service alias.
6268	ResourceName *string `json:"resourceName,omitempty"`
6269}
6270
6271// AvailableServiceAliasesResult an array of available service aliases.
6272type AvailableServiceAliasesResult struct {
6273	autorest.Response `json:"-"`
6274	// Value - An array of available service aliases.
6275	Value *[]AvailableServiceAlias `json:"value,omitempty"`
6276	// NextLink - READ-ONLY; The URL to get the next set of results.
6277	NextLink *string `json:"nextLink,omitempty"`
6278}
6279
6280// AvailableServiceAliasesResultIterator provides access to a complete listing of AvailableServiceAlias
6281// values.
6282type AvailableServiceAliasesResultIterator struct {
6283	i    int
6284	page AvailableServiceAliasesResultPage
6285}
6286
6287// NextWithContext advances to the next value.  If there was an error making
6288// the request the iterator does not advance and the error is returned.
6289func (iter *AvailableServiceAliasesResultIterator) NextWithContext(ctx context.Context) (err error) {
6290	if tracing.IsEnabled() {
6291		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultIterator.NextWithContext")
6292		defer func() {
6293			sc := -1
6294			if iter.Response().Response.Response != nil {
6295				sc = iter.Response().Response.Response.StatusCode
6296			}
6297			tracing.EndSpan(ctx, sc, err)
6298		}()
6299	}
6300	iter.i++
6301	if iter.i < len(iter.page.Values()) {
6302		return nil
6303	}
6304	err = iter.page.NextWithContext(ctx)
6305	if err != nil {
6306		iter.i--
6307		return err
6308	}
6309	iter.i = 0
6310	return nil
6311}
6312
6313// Next advances to the next value.  If there was an error making
6314// the request the iterator does not advance and the error is returned.
6315// Deprecated: Use NextWithContext() instead.
6316func (iter *AvailableServiceAliasesResultIterator) Next() error {
6317	return iter.NextWithContext(context.Background())
6318}
6319
6320// NotDone returns true if the enumeration should be started or is not yet complete.
6321func (iter AvailableServiceAliasesResultIterator) NotDone() bool {
6322	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6323}
6324
6325// Response returns the raw server response from the last page request.
6326func (iter AvailableServiceAliasesResultIterator) Response() AvailableServiceAliasesResult {
6327	return iter.page.Response()
6328}
6329
6330// Value returns the current value or a zero-initialized value if the
6331// iterator has advanced beyond the end of the collection.
6332func (iter AvailableServiceAliasesResultIterator) Value() AvailableServiceAlias {
6333	if !iter.page.NotDone() {
6334		return AvailableServiceAlias{}
6335	}
6336	return iter.page.Values()[iter.i]
6337}
6338
6339// Creates a new instance of the AvailableServiceAliasesResultIterator type.
6340func NewAvailableServiceAliasesResultIterator(page AvailableServiceAliasesResultPage) AvailableServiceAliasesResultIterator {
6341	return AvailableServiceAliasesResultIterator{page: page}
6342}
6343
6344// IsEmpty returns true if the ListResult contains no values.
6345func (asar AvailableServiceAliasesResult) IsEmpty() bool {
6346	return asar.Value == nil || len(*asar.Value) == 0
6347}
6348
6349// availableServiceAliasesResultPreparer prepares a request to retrieve the next set of results.
6350// It returns nil if no more results exist.
6351func (asar AvailableServiceAliasesResult) availableServiceAliasesResultPreparer(ctx context.Context) (*http.Request, error) {
6352	if asar.NextLink == nil || len(to.String(asar.NextLink)) < 1 {
6353		return nil, nil
6354	}
6355	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6356		autorest.AsJSON(),
6357		autorest.AsGet(),
6358		autorest.WithBaseURL(to.String(asar.NextLink)))
6359}
6360
6361// AvailableServiceAliasesResultPage contains a page of AvailableServiceAlias values.
6362type AvailableServiceAliasesResultPage struct {
6363	fn   func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)
6364	asar AvailableServiceAliasesResult
6365}
6366
6367// NextWithContext advances to the next page of values.  If there was an error making
6368// the request the page does not advance and the error is returned.
6369func (page *AvailableServiceAliasesResultPage) NextWithContext(ctx context.Context) (err error) {
6370	if tracing.IsEnabled() {
6371		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultPage.NextWithContext")
6372		defer func() {
6373			sc := -1
6374			if page.Response().Response.Response != nil {
6375				sc = page.Response().Response.Response.StatusCode
6376			}
6377			tracing.EndSpan(ctx, sc, err)
6378		}()
6379	}
6380	next, err := page.fn(ctx, page.asar)
6381	if err != nil {
6382		return err
6383	}
6384	page.asar = next
6385	return nil
6386}
6387
6388// Next advances to the next page of values.  If there was an error making
6389// the request the page does not advance and the error is returned.
6390// Deprecated: Use NextWithContext() instead.
6391func (page *AvailableServiceAliasesResultPage) Next() error {
6392	return page.NextWithContext(context.Background())
6393}
6394
6395// NotDone returns true if the page enumeration should be started or is not yet complete.
6396func (page AvailableServiceAliasesResultPage) NotDone() bool {
6397	return !page.asar.IsEmpty()
6398}
6399
6400// Response returns the raw server response from the last page request.
6401func (page AvailableServiceAliasesResultPage) Response() AvailableServiceAliasesResult {
6402	return page.asar
6403}
6404
6405// Values returns the slice of values for the current page or nil if there are no values.
6406func (page AvailableServiceAliasesResultPage) Values() []AvailableServiceAlias {
6407	if page.asar.IsEmpty() {
6408		return nil
6409	}
6410	return *page.asar.Value
6411}
6412
6413// Creates a new instance of the AvailableServiceAliasesResultPage type.
6414func NewAvailableServiceAliasesResultPage(getNextPage func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)) AvailableServiceAliasesResultPage {
6415	return AvailableServiceAliasesResultPage{fn: getNextPage}
6416}
6417
6418// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
6419// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
6420// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
6421// operation succeeded, the response body includes the HTTP status code for the successful request. If the
6422// asynchronous operation failed, the response body includes the HTTP status code for the failed request
6423// and error information regarding the failure.
6424type AzureAsyncOperationResult struct {
6425	// Status - Status of the Azure async operation. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
6426	Status OperationStatus `json:"status,omitempty"`
6427	// Error - Details of the error occurred during specified asynchronous operation.
6428	Error *Error `json:"error,omitempty"`
6429}
6430
6431// AzureFirewall azure Firewall resource.
6432type AzureFirewall struct {
6433	autorest.Response `json:"-"`
6434	// AzureFirewallPropertiesFormat - Properties of the azure firewall.
6435	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
6436	// Zones - A list of availability zones denoting where the resource needs to come from.
6437	Zones *[]string `json:"zones,omitempty"`
6438	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6439	Etag *string `json:"etag,omitempty"`
6440	// ID - Resource ID.
6441	ID *string `json:"id,omitempty"`
6442	// Name - READ-ONLY; Resource name.
6443	Name *string `json:"name,omitempty"`
6444	// Type - READ-ONLY; Resource type.
6445	Type *string `json:"type,omitempty"`
6446	// Location - Resource location.
6447	Location *string `json:"location,omitempty"`
6448	// Tags - Resource tags.
6449	Tags map[string]*string `json:"tags"`
6450}
6451
6452// MarshalJSON is the custom marshaler for AzureFirewall.
6453func (af AzureFirewall) MarshalJSON() ([]byte, error) {
6454	objectMap := make(map[string]interface{})
6455	if af.AzureFirewallPropertiesFormat != nil {
6456		objectMap["properties"] = af.AzureFirewallPropertiesFormat
6457	}
6458	if af.Zones != nil {
6459		objectMap["zones"] = af.Zones
6460	}
6461	if af.ID != nil {
6462		objectMap["id"] = af.ID
6463	}
6464	if af.Location != nil {
6465		objectMap["location"] = af.Location
6466	}
6467	if af.Tags != nil {
6468		objectMap["tags"] = af.Tags
6469	}
6470	return json.Marshal(objectMap)
6471}
6472
6473// UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
6474func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
6475	var m map[string]*json.RawMessage
6476	err := json.Unmarshal(body, &m)
6477	if err != nil {
6478		return err
6479	}
6480	for k, v := range m {
6481		switch k {
6482		case "properties":
6483			if v != nil {
6484				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
6485				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
6486				if err != nil {
6487					return err
6488				}
6489				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
6490			}
6491		case "zones":
6492			if v != nil {
6493				var zones []string
6494				err = json.Unmarshal(*v, &zones)
6495				if err != nil {
6496					return err
6497				}
6498				af.Zones = &zones
6499			}
6500		case "etag":
6501			if v != nil {
6502				var etag string
6503				err = json.Unmarshal(*v, &etag)
6504				if err != nil {
6505					return err
6506				}
6507				af.Etag = &etag
6508			}
6509		case "id":
6510			if v != nil {
6511				var ID string
6512				err = json.Unmarshal(*v, &ID)
6513				if err != nil {
6514					return err
6515				}
6516				af.ID = &ID
6517			}
6518		case "name":
6519			if v != nil {
6520				var name string
6521				err = json.Unmarshal(*v, &name)
6522				if err != nil {
6523					return err
6524				}
6525				af.Name = &name
6526			}
6527		case "type":
6528			if v != nil {
6529				var typeVar string
6530				err = json.Unmarshal(*v, &typeVar)
6531				if err != nil {
6532					return err
6533				}
6534				af.Type = &typeVar
6535			}
6536		case "location":
6537			if v != nil {
6538				var location string
6539				err = json.Unmarshal(*v, &location)
6540				if err != nil {
6541					return err
6542				}
6543				af.Location = &location
6544			}
6545		case "tags":
6546			if v != nil {
6547				var tags map[string]*string
6548				err = json.Unmarshal(*v, &tags)
6549				if err != nil {
6550					return err
6551				}
6552				af.Tags = tags
6553			}
6554		}
6555	}
6556
6557	return nil
6558}
6559
6560// AzureFirewallApplicationRule properties of an application rule.
6561type AzureFirewallApplicationRule struct {
6562	// Name - Name of the application rule.
6563	Name *string `json:"name,omitempty"`
6564	// Description - Description of the rule.
6565	Description *string `json:"description,omitempty"`
6566	// SourceAddresses - List of source IP addresses for this rule.
6567	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6568	// Protocols - Array of ApplicationRuleProtocols.
6569	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
6570	// TargetFqdns - List of FQDNs for this rule.
6571	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
6572	// FqdnTags - List of FQDN Tags for this rule.
6573	FqdnTags *[]string `json:"fqdnTags,omitempty"`
6574}
6575
6576// AzureFirewallApplicationRuleCollection application rule collection resource.
6577type AzureFirewallApplicationRuleCollection struct {
6578	// AzureFirewallApplicationRuleCollectionPropertiesFormat - Properties of the azure firewall application rule collection.
6579	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
6580	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
6581	Name *string `json:"name,omitempty"`
6582	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6583	Etag *string `json:"etag,omitempty"`
6584	// ID - Resource ID.
6585	ID *string `json:"id,omitempty"`
6586}
6587
6588// MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
6589func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
6590	objectMap := make(map[string]interface{})
6591	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
6592		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
6593	}
6594	if afarc.Name != nil {
6595		objectMap["name"] = afarc.Name
6596	}
6597	if afarc.ID != nil {
6598		objectMap["id"] = afarc.ID
6599	}
6600	return json.Marshal(objectMap)
6601}
6602
6603// UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
6604func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
6605	var m map[string]*json.RawMessage
6606	err := json.Unmarshal(body, &m)
6607	if err != nil {
6608		return err
6609	}
6610	for k, v := range m {
6611		switch k {
6612		case "properties":
6613			if v != nil {
6614				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
6615				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
6616				if err != nil {
6617					return err
6618				}
6619				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
6620			}
6621		case "name":
6622			if v != nil {
6623				var name string
6624				err = json.Unmarshal(*v, &name)
6625				if err != nil {
6626					return err
6627				}
6628				afarc.Name = &name
6629			}
6630		case "etag":
6631			if v != nil {
6632				var etag string
6633				err = json.Unmarshal(*v, &etag)
6634				if err != nil {
6635					return err
6636				}
6637				afarc.Etag = &etag
6638			}
6639		case "id":
6640			if v != nil {
6641				var ID string
6642				err = json.Unmarshal(*v, &ID)
6643				if err != nil {
6644					return err
6645				}
6646				afarc.ID = &ID
6647			}
6648		}
6649	}
6650
6651	return nil
6652}
6653
6654// AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
6655type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
6656	// Priority - Priority of the application rule collection resource.
6657	Priority *int32 `json:"priority,omitempty"`
6658	// Action - The action type of a rule collection.
6659	Action *AzureFirewallRCAction `json:"action,omitempty"`
6660	// Rules - Collection of rules used by a application rule collection.
6661	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
6662	// ProvisioningState - The provisioning state of the application rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6663	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6664}
6665
6666// AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
6667type AzureFirewallApplicationRuleProtocol struct {
6668	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS', 'AzureFirewallApplicationRuleProtocolTypeMssql'
6669	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
6670	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
6671	Port *int32 `json:"port,omitempty"`
6672}
6673
6674// AzureFirewallFqdnTag azure Firewall FQDN Tag Resource.
6675type AzureFirewallFqdnTag struct {
6676	// AzureFirewallFqdnTagPropertiesFormat - Properties of the azure firewall FQDN tag.
6677	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
6678	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6679	Etag *string `json:"etag,omitempty"`
6680	// ID - Resource ID.
6681	ID *string `json:"id,omitempty"`
6682	// Name - READ-ONLY; Resource name.
6683	Name *string `json:"name,omitempty"`
6684	// Type - READ-ONLY; Resource type.
6685	Type *string `json:"type,omitempty"`
6686	// Location - Resource location.
6687	Location *string `json:"location,omitempty"`
6688	// Tags - Resource tags.
6689	Tags map[string]*string `json:"tags"`
6690}
6691
6692// MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
6693func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
6694	objectMap := make(map[string]interface{})
6695	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
6696		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
6697	}
6698	if afft.ID != nil {
6699		objectMap["id"] = afft.ID
6700	}
6701	if afft.Location != nil {
6702		objectMap["location"] = afft.Location
6703	}
6704	if afft.Tags != nil {
6705		objectMap["tags"] = afft.Tags
6706	}
6707	return json.Marshal(objectMap)
6708}
6709
6710// UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
6711func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
6712	var m map[string]*json.RawMessage
6713	err := json.Unmarshal(body, &m)
6714	if err != nil {
6715		return err
6716	}
6717	for k, v := range m {
6718		switch k {
6719		case "properties":
6720			if v != nil {
6721				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
6722				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
6723				if err != nil {
6724					return err
6725				}
6726				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
6727			}
6728		case "etag":
6729			if v != nil {
6730				var etag string
6731				err = json.Unmarshal(*v, &etag)
6732				if err != nil {
6733					return err
6734				}
6735				afft.Etag = &etag
6736			}
6737		case "id":
6738			if v != nil {
6739				var ID string
6740				err = json.Unmarshal(*v, &ID)
6741				if err != nil {
6742					return err
6743				}
6744				afft.ID = &ID
6745			}
6746		case "name":
6747			if v != nil {
6748				var name string
6749				err = json.Unmarshal(*v, &name)
6750				if err != nil {
6751					return err
6752				}
6753				afft.Name = &name
6754			}
6755		case "type":
6756			if v != nil {
6757				var typeVar string
6758				err = json.Unmarshal(*v, &typeVar)
6759				if err != nil {
6760					return err
6761				}
6762				afft.Type = &typeVar
6763			}
6764		case "location":
6765			if v != nil {
6766				var location string
6767				err = json.Unmarshal(*v, &location)
6768				if err != nil {
6769					return err
6770				}
6771				afft.Location = &location
6772			}
6773		case "tags":
6774			if v != nil {
6775				var tags map[string]*string
6776				err = json.Unmarshal(*v, &tags)
6777				if err != nil {
6778					return err
6779				}
6780				afft.Tags = tags
6781			}
6782		}
6783	}
6784
6785	return nil
6786}
6787
6788// AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
6789type AzureFirewallFqdnTagListResult struct {
6790	autorest.Response `json:"-"`
6791	// Value - List of Azure Firewall FQDN Tags in a resource group.
6792	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
6793	// NextLink - URL to get the next set of results.
6794	NextLink *string `json:"nextLink,omitempty"`
6795}
6796
6797// AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
6798// values.
6799type AzureFirewallFqdnTagListResultIterator struct {
6800	i    int
6801	page AzureFirewallFqdnTagListResultPage
6802}
6803
6804// NextWithContext advances to the next value.  If there was an error making
6805// the request the iterator does not advance and the error is returned.
6806func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
6807	if tracing.IsEnabled() {
6808		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
6809		defer func() {
6810			sc := -1
6811			if iter.Response().Response.Response != nil {
6812				sc = iter.Response().Response.Response.StatusCode
6813			}
6814			tracing.EndSpan(ctx, sc, err)
6815		}()
6816	}
6817	iter.i++
6818	if iter.i < len(iter.page.Values()) {
6819		return nil
6820	}
6821	err = iter.page.NextWithContext(ctx)
6822	if err != nil {
6823		iter.i--
6824		return err
6825	}
6826	iter.i = 0
6827	return nil
6828}
6829
6830// Next advances to the next value.  If there was an error making
6831// the request the iterator does not advance and the error is returned.
6832// Deprecated: Use NextWithContext() instead.
6833func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
6834	return iter.NextWithContext(context.Background())
6835}
6836
6837// NotDone returns true if the enumeration should be started or is not yet complete.
6838func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
6839	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6840}
6841
6842// Response returns the raw server response from the last page request.
6843func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
6844	return iter.page.Response()
6845}
6846
6847// Value returns the current value or a zero-initialized value if the
6848// iterator has advanced beyond the end of the collection.
6849func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
6850	if !iter.page.NotDone() {
6851		return AzureFirewallFqdnTag{}
6852	}
6853	return iter.page.Values()[iter.i]
6854}
6855
6856// Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
6857func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
6858	return AzureFirewallFqdnTagListResultIterator{page: page}
6859}
6860
6861// IsEmpty returns true if the ListResult contains no values.
6862func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
6863	return afftlr.Value == nil || len(*afftlr.Value) == 0
6864}
6865
6866// azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
6867// It returns nil if no more results exist.
6868func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
6869	if afftlr.NextLink == nil || len(to.String(afftlr.NextLink)) < 1 {
6870		return nil, nil
6871	}
6872	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6873		autorest.AsJSON(),
6874		autorest.AsGet(),
6875		autorest.WithBaseURL(to.String(afftlr.NextLink)))
6876}
6877
6878// AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
6879type AzureFirewallFqdnTagListResultPage struct {
6880	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
6881	afftlr AzureFirewallFqdnTagListResult
6882}
6883
6884// NextWithContext advances to the next page of values.  If there was an error making
6885// the request the page does not advance and the error is returned.
6886func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
6887	if tracing.IsEnabled() {
6888		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
6889		defer func() {
6890			sc := -1
6891			if page.Response().Response.Response != nil {
6892				sc = page.Response().Response.Response.StatusCode
6893			}
6894			tracing.EndSpan(ctx, sc, err)
6895		}()
6896	}
6897	next, err := page.fn(ctx, page.afftlr)
6898	if err != nil {
6899		return err
6900	}
6901	page.afftlr = next
6902	return nil
6903}
6904
6905// Next advances to the next page of values.  If there was an error making
6906// the request the page does not advance and the error is returned.
6907// Deprecated: Use NextWithContext() instead.
6908func (page *AzureFirewallFqdnTagListResultPage) Next() error {
6909	return page.NextWithContext(context.Background())
6910}
6911
6912// NotDone returns true if the page enumeration should be started or is not yet complete.
6913func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
6914	return !page.afftlr.IsEmpty()
6915}
6916
6917// Response returns the raw server response from the last page request.
6918func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
6919	return page.afftlr
6920}
6921
6922// Values returns the slice of values for the current page or nil if there are no values.
6923func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
6924	if page.afftlr.IsEmpty() {
6925		return nil
6926	}
6927	return *page.afftlr.Value
6928}
6929
6930// Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
6931func NewAzureFirewallFqdnTagListResultPage(getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
6932	return AzureFirewallFqdnTagListResultPage{fn: getNextPage}
6933}
6934
6935// AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties.
6936type AzureFirewallFqdnTagPropertiesFormat struct {
6937	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall FQDN tag resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6938	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6939	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
6940	FqdnTagName *string `json:"fqdnTagName,omitempty"`
6941}
6942
6943// AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
6944type AzureFirewallIPConfiguration struct {
6945	// AzureFirewallIPConfigurationPropertiesFormat - Properties of the azure firewall IP configuration.
6946	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
6947	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
6948	Name *string `json:"name,omitempty"`
6949	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6950	Etag *string `json:"etag,omitempty"`
6951	// ID - Resource ID.
6952	ID *string `json:"id,omitempty"`
6953}
6954
6955// MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
6956func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
6957	objectMap := make(map[string]interface{})
6958	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
6959		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
6960	}
6961	if afic.Name != nil {
6962		objectMap["name"] = afic.Name
6963	}
6964	if afic.ID != nil {
6965		objectMap["id"] = afic.ID
6966	}
6967	return json.Marshal(objectMap)
6968}
6969
6970// UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
6971func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
6972	var m map[string]*json.RawMessage
6973	err := json.Unmarshal(body, &m)
6974	if err != nil {
6975		return err
6976	}
6977	for k, v := range m {
6978		switch k {
6979		case "properties":
6980			if v != nil {
6981				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
6982				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
6983				if err != nil {
6984					return err
6985				}
6986				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
6987			}
6988		case "name":
6989			if v != nil {
6990				var name string
6991				err = json.Unmarshal(*v, &name)
6992				if err != nil {
6993					return err
6994				}
6995				afic.Name = &name
6996			}
6997		case "etag":
6998			if v != nil {
6999				var etag string
7000				err = json.Unmarshal(*v, &etag)
7001				if err != nil {
7002					return err
7003				}
7004				afic.Etag = &etag
7005			}
7006		case "id":
7007			if v != nil {
7008				var ID string
7009				err = json.Unmarshal(*v, &ID)
7010				if err != nil {
7011					return err
7012				}
7013				afic.ID = &ID
7014			}
7015		}
7016	}
7017
7018	return nil
7019}
7020
7021// AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
7022type AzureFirewallIPConfigurationPropertiesFormat struct {
7023	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
7024	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
7025	// Subnet - Reference of the subnet resource. This resource must be named 'AzureFirewallSubnet'.
7026	Subnet *SubResource `json:"subnet,omitempty"`
7027	// PublicIPAddress - Reference of the PublicIP resource. This field is a mandatory input if subnet is not null.
7028	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
7029	// ProvisioningState - The provisioning state of the Azure firewall IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7030	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7031}
7032
7033// AzureFirewallListResult response for ListAzureFirewalls API service call.
7034type AzureFirewallListResult struct {
7035	autorest.Response `json:"-"`
7036	// Value - List of Azure Firewalls in a resource group.
7037	Value *[]AzureFirewall `json:"value,omitempty"`
7038	// NextLink - URL to get the next set of results.
7039	NextLink *string `json:"nextLink,omitempty"`
7040}
7041
7042// AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
7043type AzureFirewallListResultIterator struct {
7044	i    int
7045	page AzureFirewallListResultPage
7046}
7047
7048// NextWithContext advances to the next value.  If there was an error making
7049// the request the iterator does not advance and the error is returned.
7050func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
7051	if tracing.IsEnabled() {
7052		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
7053		defer func() {
7054			sc := -1
7055			if iter.Response().Response.Response != nil {
7056				sc = iter.Response().Response.Response.StatusCode
7057			}
7058			tracing.EndSpan(ctx, sc, err)
7059		}()
7060	}
7061	iter.i++
7062	if iter.i < len(iter.page.Values()) {
7063		return nil
7064	}
7065	err = iter.page.NextWithContext(ctx)
7066	if err != nil {
7067		iter.i--
7068		return err
7069	}
7070	iter.i = 0
7071	return nil
7072}
7073
7074// Next advances to the next value.  If there was an error making
7075// the request the iterator does not advance and the error is returned.
7076// Deprecated: Use NextWithContext() instead.
7077func (iter *AzureFirewallListResultIterator) Next() error {
7078	return iter.NextWithContext(context.Background())
7079}
7080
7081// NotDone returns true if the enumeration should be started or is not yet complete.
7082func (iter AzureFirewallListResultIterator) NotDone() bool {
7083	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7084}
7085
7086// Response returns the raw server response from the last page request.
7087func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
7088	return iter.page.Response()
7089}
7090
7091// Value returns the current value or a zero-initialized value if the
7092// iterator has advanced beyond the end of the collection.
7093func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
7094	if !iter.page.NotDone() {
7095		return AzureFirewall{}
7096	}
7097	return iter.page.Values()[iter.i]
7098}
7099
7100// Creates a new instance of the AzureFirewallListResultIterator type.
7101func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
7102	return AzureFirewallListResultIterator{page: page}
7103}
7104
7105// IsEmpty returns true if the ListResult contains no values.
7106func (aflr AzureFirewallListResult) IsEmpty() bool {
7107	return aflr.Value == nil || len(*aflr.Value) == 0
7108}
7109
7110// azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
7111// It returns nil if no more results exist.
7112func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
7113	if aflr.NextLink == nil || len(to.String(aflr.NextLink)) < 1 {
7114		return nil, nil
7115	}
7116	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7117		autorest.AsJSON(),
7118		autorest.AsGet(),
7119		autorest.WithBaseURL(to.String(aflr.NextLink)))
7120}
7121
7122// AzureFirewallListResultPage contains a page of AzureFirewall values.
7123type AzureFirewallListResultPage struct {
7124	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
7125	aflr AzureFirewallListResult
7126}
7127
7128// NextWithContext advances to the next page of values.  If there was an error making
7129// the request the page does not advance and the error is returned.
7130func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
7131	if tracing.IsEnabled() {
7132		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
7133		defer func() {
7134			sc := -1
7135			if page.Response().Response.Response != nil {
7136				sc = page.Response().Response.Response.StatusCode
7137			}
7138			tracing.EndSpan(ctx, sc, err)
7139		}()
7140	}
7141	next, err := page.fn(ctx, page.aflr)
7142	if err != nil {
7143		return err
7144	}
7145	page.aflr = next
7146	return nil
7147}
7148
7149// Next advances to the next page of values.  If there was an error making
7150// the request the page does not advance and the error is returned.
7151// Deprecated: Use NextWithContext() instead.
7152func (page *AzureFirewallListResultPage) Next() error {
7153	return page.NextWithContext(context.Background())
7154}
7155
7156// NotDone returns true if the page enumeration should be started or is not yet complete.
7157func (page AzureFirewallListResultPage) NotDone() bool {
7158	return !page.aflr.IsEmpty()
7159}
7160
7161// Response returns the raw server response from the last page request.
7162func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
7163	return page.aflr
7164}
7165
7166// Values returns the slice of values for the current page or nil if there are no values.
7167func (page AzureFirewallListResultPage) Values() []AzureFirewall {
7168	if page.aflr.IsEmpty() {
7169		return nil
7170	}
7171	return *page.aflr.Value
7172}
7173
7174// Creates a new instance of the AzureFirewallListResultPage type.
7175func NewAzureFirewallListResultPage(getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
7176	return AzureFirewallListResultPage{fn: getNextPage}
7177}
7178
7179// AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
7180type AzureFirewallNatRCAction struct {
7181	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
7182	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
7183}
7184
7185// AzureFirewallNatRule properties of a NAT rule.
7186type AzureFirewallNatRule struct {
7187	// Name - Name of the NAT rule.
7188	Name *string `json:"name,omitempty"`
7189	// Description - Description of the rule.
7190	Description *string `json:"description,omitempty"`
7191	// SourceAddresses - List of source IP addresses for this rule.
7192	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
7193	// DestinationAddresses - List of destination IP addresses for this rule. Supports IP ranges, prefixes, and service tags.
7194	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
7195	// DestinationPorts - List of destination ports.
7196	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
7197	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
7198	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
7199	// TranslatedAddress - The translated address for this NAT rule.
7200	TranslatedAddress *string `json:"translatedAddress,omitempty"`
7201	// TranslatedPort - The translated port for this NAT rule.
7202	TranslatedPort *string `json:"translatedPort,omitempty"`
7203}
7204
7205// AzureFirewallNatRuleCollection NAT rule collection resource.
7206type AzureFirewallNatRuleCollection struct {
7207	// AzureFirewallNatRuleCollectionProperties - Properties of the azure firewall NAT rule collection.
7208	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
7209	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
7210	Name *string `json:"name,omitempty"`
7211	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7212	Etag *string `json:"etag,omitempty"`
7213	// ID - Resource ID.
7214	ID *string `json:"id,omitempty"`
7215}
7216
7217// MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
7218func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
7219	objectMap := make(map[string]interface{})
7220	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
7221		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
7222	}
7223	if afnrc.Name != nil {
7224		objectMap["name"] = afnrc.Name
7225	}
7226	if afnrc.ID != nil {
7227		objectMap["id"] = afnrc.ID
7228	}
7229	return json.Marshal(objectMap)
7230}
7231
7232// UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
7233func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
7234	var m map[string]*json.RawMessage
7235	err := json.Unmarshal(body, &m)
7236	if err != nil {
7237		return err
7238	}
7239	for k, v := range m {
7240		switch k {
7241		case "properties":
7242			if v != nil {
7243				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
7244				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
7245				if err != nil {
7246					return err
7247				}
7248				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
7249			}
7250		case "name":
7251			if v != nil {
7252				var name string
7253				err = json.Unmarshal(*v, &name)
7254				if err != nil {
7255					return err
7256				}
7257				afnrc.Name = &name
7258			}
7259		case "etag":
7260			if v != nil {
7261				var etag string
7262				err = json.Unmarshal(*v, &etag)
7263				if err != nil {
7264					return err
7265				}
7266				afnrc.Etag = &etag
7267			}
7268		case "id":
7269			if v != nil {
7270				var ID string
7271				err = json.Unmarshal(*v, &ID)
7272				if err != nil {
7273					return err
7274				}
7275				afnrc.ID = &ID
7276			}
7277		}
7278	}
7279
7280	return nil
7281}
7282
7283// AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
7284type AzureFirewallNatRuleCollectionProperties struct {
7285	// Priority - Priority of the NAT rule collection resource.
7286	Priority *int32 `json:"priority,omitempty"`
7287	// Action - The action type of a NAT rule collection.
7288	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
7289	// Rules - Collection of rules used by a NAT rule collection.
7290	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
7291	// ProvisioningState - The provisioning state of the NAT rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7292	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7293}
7294
7295// AzureFirewallNetworkRule properties of the network rule.
7296type AzureFirewallNetworkRule struct {
7297	// Name - Name of the network rule.
7298	Name *string `json:"name,omitempty"`
7299	// Description - Description of the rule.
7300	Description *string `json:"description,omitempty"`
7301	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
7302	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
7303	// SourceAddresses - List of source IP addresses for this rule.
7304	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
7305	// DestinationAddresses - List of destination IP addresses.
7306	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
7307	// DestinationPorts - List of destination ports.
7308	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
7309}
7310
7311// AzureFirewallNetworkRuleCollection network rule collection resource.
7312type AzureFirewallNetworkRuleCollection struct {
7313	// AzureFirewallNetworkRuleCollectionPropertiesFormat - Properties of the azure firewall network rule collection.
7314	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
7315	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
7316	Name *string `json:"name,omitempty"`
7317	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7318	Etag *string `json:"etag,omitempty"`
7319	// ID - Resource ID.
7320	ID *string `json:"id,omitempty"`
7321}
7322
7323// MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
7324func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
7325	objectMap := make(map[string]interface{})
7326	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
7327		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
7328	}
7329	if afnrc.Name != nil {
7330		objectMap["name"] = afnrc.Name
7331	}
7332	if afnrc.ID != nil {
7333		objectMap["id"] = afnrc.ID
7334	}
7335	return json.Marshal(objectMap)
7336}
7337
7338// UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
7339func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
7340	var m map[string]*json.RawMessage
7341	err := json.Unmarshal(body, &m)
7342	if err != nil {
7343		return err
7344	}
7345	for k, v := range m {
7346		switch k {
7347		case "properties":
7348			if v != nil {
7349				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
7350				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
7351				if err != nil {
7352					return err
7353				}
7354				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
7355			}
7356		case "name":
7357			if v != nil {
7358				var name string
7359				err = json.Unmarshal(*v, &name)
7360				if err != nil {
7361					return err
7362				}
7363				afnrc.Name = &name
7364			}
7365		case "etag":
7366			if v != nil {
7367				var etag string
7368				err = json.Unmarshal(*v, &etag)
7369				if err != nil {
7370					return err
7371				}
7372				afnrc.Etag = &etag
7373			}
7374		case "id":
7375			if v != nil {
7376				var ID string
7377				err = json.Unmarshal(*v, &ID)
7378				if err != nil {
7379					return err
7380				}
7381				afnrc.ID = &ID
7382			}
7383		}
7384	}
7385
7386	return nil
7387}
7388
7389// AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
7390type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
7391	// Priority - Priority of the network rule collection resource.
7392	Priority *int32 `json:"priority,omitempty"`
7393	// Action - The action type of a rule collection.
7394	Action *AzureFirewallRCAction `json:"action,omitempty"`
7395	// Rules - Collection of rules used by a network rule collection.
7396	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
7397	// ProvisioningState - The provisioning state of the network rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7398	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7399}
7400
7401// AzureFirewallPropertiesFormat properties of the Azure Firewall.
7402type AzureFirewallPropertiesFormat struct {
7403	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
7404	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
7405	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
7406	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
7407	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
7408	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
7409	// IPConfigurations - IP configuration of the Azure Firewall resource.
7410	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
7411	// ProvisioningState - The provisioning state of the Azure firewall resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7412	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7413	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
7414	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
7415	// VirtualHub - The virtualHub to which the firewall belongs.
7416	VirtualHub *SubResource `json:"virtualHub,omitempty"`
7417	// FirewallPolicy - The firewallPolicy associated with this azure firewall.
7418	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
7419	// HubIPAddresses - READ-ONLY; IP addresses associated with AzureFirewall.
7420	HubIPAddresses *HubIPAddresses `json:"hubIpAddresses,omitempty"`
7421	// Sku - The Azure Firewall Resource SKU.
7422	Sku *AzureFirewallSku `json:"sku,omitempty"`
7423}
7424
7425// AzureFirewallPublicIPAddress public IP Address associated with azure firewall.
7426type AzureFirewallPublicIPAddress struct {
7427	// Address - Public IP Address value.
7428	Address *string `json:"address,omitempty"`
7429}
7430
7431// AzureFirewallRCAction properties of the AzureFirewallRCAction.
7432type AzureFirewallRCAction struct {
7433	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
7434	Type AzureFirewallRCActionType `json:"type,omitempty"`
7435}
7436
7437// AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7438// long-running operation.
7439type AzureFirewallsCreateOrUpdateFuture struct {
7440	azure.Future
7441}
7442
7443// Result returns the result of the asynchronous operation.
7444// If the operation has not completed it will return an error.
7445func (future *AzureFirewallsCreateOrUpdateFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
7446	var done bool
7447	done, err = future.DoneWithContext(context.Background(), client)
7448	if err != nil {
7449		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7450		return
7451	}
7452	if !done {
7453		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
7454		return
7455	}
7456	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7457	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
7458		af, err = client.CreateOrUpdateResponder(af.Response.Response)
7459		if err != nil {
7460			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
7461		}
7462	}
7463	return
7464}
7465
7466// AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
7467// operation.
7468type AzureFirewallsDeleteFuture struct {
7469	azure.Future
7470}
7471
7472// Result returns the result of the asynchronous operation.
7473// If the operation has not completed it will return an error.
7474func (future *AzureFirewallsDeleteFuture) Result(client AzureFirewallsClient) (ar autorest.Response, err error) {
7475	var done bool
7476	done, err = future.DoneWithContext(context.Background(), client)
7477	if err != nil {
7478		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
7479		return
7480	}
7481	if !done {
7482		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
7483		return
7484	}
7485	ar.Response = future.Response()
7486	return
7487}
7488
7489// AzureFirewallSku SKU of an Azure Firewall.
7490type AzureFirewallSku struct {
7491	// Name - Name of an Azure Firewall SKU. Possible values include: 'AZFWVNet', 'AZFWHub'
7492	Name AzureFirewallSkuName `json:"name,omitempty"`
7493	// Tier - Tier of an Azure Firewall. Possible values include: 'Standard'
7494	Tier AzureFirewallSkuTier `json:"tier,omitempty"`
7495}
7496
7497// AzureReachabilityReport azure reachability report details.
7498type AzureReachabilityReport struct {
7499	autorest.Response `json:"-"`
7500	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
7501	AggregationLevel *string `json:"aggregationLevel,omitempty"`
7502	// ProviderLocation - Parameters that define a geographic location.
7503	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
7504	// ReachabilityReport - List of Azure reachability report items.
7505	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
7506}
7507
7508// AzureReachabilityReportItem azure reachability report details for a given provider location.
7509type AzureReachabilityReportItem struct {
7510	// Provider - The Internet service provider.
7511	Provider *string `json:"provider,omitempty"`
7512	// AzureLocation - The Azure region.
7513	AzureLocation *string `json:"azureLocation,omitempty"`
7514	// Latencies - List of latency details for each of the time series.
7515	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
7516}
7517
7518// AzureReachabilityReportLatencyInfo details on latency for a time series.
7519type AzureReachabilityReportLatencyInfo struct {
7520	// TimeStamp - The time stamp.
7521	TimeStamp *date.Time `json:"timeStamp,omitempty"`
7522	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
7523	Score *int32 `json:"score,omitempty"`
7524}
7525
7526// AzureReachabilityReportLocation parameters that define a geographic location.
7527type AzureReachabilityReportLocation struct {
7528	// Country - The name of the country.
7529	Country *string `json:"country,omitempty"`
7530	// State - The name of the state.
7531	State *string `json:"state,omitempty"`
7532	// City - The name of the city or town.
7533	City *string `json:"city,omitempty"`
7534}
7535
7536// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
7537type AzureReachabilityReportParameters struct {
7538	// ProviderLocation - Parameters that define a geographic location.
7539	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
7540	// Providers - List of Internet service providers.
7541	Providers *[]string `json:"providers,omitempty"`
7542	// AzureLocations - Optional Azure regions to scope the query to.
7543	AzureLocations *[]string `json:"azureLocations,omitempty"`
7544	// StartTime - The start time for the Azure reachability report.
7545	StartTime *date.Time `json:"startTime,omitempty"`
7546	// EndTime - The end time for the Azure reachability report.
7547	EndTime *date.Time `json:"endTime,omitempty"`
7548}
7549
7550// BackendAddressPool pool of backend IP addresses.
7551type BackendAddressPool struct {
7552	autorest.Response `json:"-"`
7553	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
7554	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
7555	// Name - The name of the resource that is unique within the set of backend address pools used by the load balancer. This name can be used to access the resource.
7556	Name *string `json:"name,omitempty"`
7557	// Etag - A unique read-only string that changes whenever the resource is updated.
7558	Etag *string `json:"etag,omitempty"`
7559	// Type - READ-ONLY; Type of the resource.
7560	Type *string `json:"type,omitempty"`
7561	// ID - Resource ID.
7562	ID *string `json:"id,omitempty"`
7563}
7564
7565// MarshalJSON is the custom marshaler for BackendAddressPool.
7566func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
7567	objectMap := make(map[string]interface{})
7568	if bap.BackendAddressPoolPropertiesFormat != nil {
7569		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
7570	}
7571	if bap.Name != nil {
7572		objectMap["name"] = bap.Name
7573	}
7574	if bap.Etag != nil {
7575		objectMap["etag"] = bap.Etag
7576	}
7577	if bap.ID != nil {
7578		objectMap["id"] = bap.ID
7579	}
7580	return json.Marshal(objectMap)
7581}
7582
7583// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
7584func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
7585	var m map[string]*json.RawMessage
7586	err := json.Unmarshal(body, &m)
7587	if err != nil {
7588		return err
7589	}
7590	for k, v := range m {
7591		switch k {
7592		case "properties":
7593			if v != nil {
7594				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
7595				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
7596				if err != nil {
7597					return err
7598				}
7599				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
7600			}
7601		case "name":
7602			if v != nil {
7603				var name string
7604				err = json.Unmarshal(*v, &name)
7605				if err != nil {
7606					return err
7607				}
7608				bap.Name = &name
7609			}
7610		case "etag":
7611			if v != nil {
7612				var etag string
7613				err = json.Unmarshal(*v, &etag)
7614				if err != nil {
7615					return err
7616				}
7617				bap.Etag = &etag
7618			}
7619		case "type":
7620			if v != nil {
7621				var typeVar string
7622				err = json.Unmarshal(*v, &typeVar)
7623				if err != nil {
7624					return err
7625				}
7626				bap.Type = &typeVar
7627			}
7628		case "id":
7629			if v != nil {
7630				var ID string
7631				err = json.Unmarshal(*v, &ID)
7632				if err != nil {
7633					return err
7634				}
7635				bap.ID = &ID
7636			}
7637		}
7638	}
7639
7640	return nil
7641}
7642
7643// BackendAddressPoolPropertiesFormat properties of the backend address pool.
7644type BackendAddressPoolPropertiesFormat struct {
7645	// BackendIPConfigurations - READ-ONLY; An array of references to IP addresses defined in network interfaces.
7646	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
7647	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this backend address pool.
7648	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
7649	// OutboundRule - READ-ONLY; A reference to an outbound rule that uses this backend address pool.
7650	OutboundRule *SubResource `json:"outboundRule,omitempty"`
7651	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this backend address pool.
7652	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
7653	// ProvisioningState - The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7654	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7655}
7656
7657// BastionHost bastion Host resource.
7658type BastionHost struct {
7659	autorest.Response `json:"-"`
7660	// BastionHostPropertiesFormat - Represents the bastion host resource.
7661	*BastionHostPropertiesFormat `json:"properties,omitempty"`
7662	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7663	Etag *string `json:"etag,omitempty"`
7664	// ID - Resource ID.
7665	ID *string `json:"id,omitempty"`
7666	// Name - READ-ONLY; Resource name.
7667	Name *string `json:"name,omitempty"`
7668	// Type - READ-ONLY; Resource type.
7669	Type *string `json:"type,omitempty"`
7670	// Location - Resource location.
7671	Location *string `json:"location,omitempty"`
7672	// Tags - Resource tags.
7673	Tags map[string]*string `json:"tags"`
7674}
7675
7676// MarshalJSON is the custom marshaler for BastionHost.
7677func (bh BastionHost) MarshalJSON() ([]byte, error) {
7678	objectMap := make(map[string]interface{})
7679	if bh.BastionHostPropertiesFormat != nil {
7680		objectMap["properties"] = bh.BastionHostPropertiesFormat
7681	}
7682	if bh.ID != nil {
7683		objectMap["id"] = bh.ID
7684	}
7685	if bh.Location != nil {
7686		objectMap["location"] = bh.Location
7687	}
7688	if bh.Tags != nil {
7689		objectMap["tags"] = bh.Tags
7690	}
7691	return json.Marshal(objectMap)
7692}
7693
7694// UnmarshalJSON is the custom unmarshaler for BastionHost struct.
7695func (bh *BastionHost) UnmarshalJSON(body []byte) error {
7696	var m map[string]*json.RawMessage
7697	err := json.Unmarshal(body, &m)
7698	if err != nil {
7699		return err
7700	}
7701	for k, v := range m {
7702		switch k {
7703		case "properties":
7704			if v != nil {
7705				var bastionHostPropertiesFormat BastionHostPropertiesFormat
7706				err = json.Unmarshal(*v, &bastionHostPropertiesFormat)
7707				if err != nil {
7708					return err
7709				}
7710				bh.BastionHostPropertiesFormat = &bastionHostPropertiesFormat
7711			}
7712		case "etag":
7713			if v != nil {
7714				var etag string
7715				err = json.Unmarshal(*v, &etag)
7716				if err != nil {
7717					return err
7718				}
7719				bh.Etag = &etag
7720			}
7721		case "id":
7722			if v != nil {
7723				var ID string
7724				err = json.Unmarshal(*v, &ID)
7725				if err != nil {
7726					return err
7727				}
7728				bh.ID = &ID
7729			}
7730		case "name":
7731			if v != nil {
7732				var name string
7733				err = json.Unmarshal(*v, &name)
7734				if err != nil {
7735					return err
7736				}
7737				bh.Name = &name
7738			}
7739		case "type":
7740			if v != nil {
7741				var typeVar string
7742				err = json.Unmarshal(*v, &typeVar)
7743				if err != nil {
7744					return err
7745				}
7746				bh.Type = &typeVar
7747			}
7748		case "location":
7749			if v != nil {
7750				var location string
7751				err = json.Unmarshal(*v, &location)
7752				if err != nil {
7753					return err
7754				}
7755				bh.Location = &location
7756			}
7757		case "tags":
7758			if v != nil {
7759				var tags map[string]*string
7760				err = json.Unmarshal(*v, &tags)
7761				if err != nil {
7762					return err
7763				}
7764				bh.Tags = tags
7765			}
7766		}
7767	}
7768
7769	return nil
7770}
7771
7772// BastionHostIPConfiguration IP configuration of an Bastion Host.
7773type BastionHostIPConfiguration struct {
7774	// BastionHostIPConfigurationPropertiesFormat - Represents the ip configuration associated with the resource.
7775	*BastionHostIPConfigurationPropertiesFormat `json:"properties,omitempty"`
7776	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
7777	Name *string `json:"name,omitempty"`
7778	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7779	Etag *string `json:"etag,omitempty"`
7780	// Type - READ-ONLY; Ip configuration type.
7781	Type *string `json:"type,omitempty"`
7782	// ID - Resource ID.
7783	ID *string `json:"id,omitempty"`
7784}
7785
7786// MarshalJSON is the custom marshaler for BastionHostIPConfiguration.
7787func (bhic BastionHostIPConfiguration) MarshalJSON() ([]byte, error) {
7788	objectMap := make(map[string]interface{})
7789	if bhic.BastionHostIPConfigurationPropertiesFormat != nil {
7790		objectMap["properties"] = bhic.BastionHostIPConfigurationPropertiesFormat
7791	}
7792	if bhic.Name != nil {
7793		objectMap["name"] = bhic.Name
7794	}
7795	if bhic.ID != nil {
7796		objectMap["id"] = bhic.ID
7797	}
7798	return json.Marshal(objectMap)
7799}
7800
7801// UnmarshalJSON is the custom unmarshaler for BastionHostIPConfiguration struct.
7802func (bhic *BastionHostIPConfiguration) UnmarshalJSON(body []byte) error {
7803	var m map[string]*json.RawMessage
7804	err := json.Unmarshal(body, &m)
7805	if err != nil {
7806		return err
7807	}
7808	for k, v := range m {
7809		switch k {
7810		case "properties":
7811			if v != nil {
7812				var bastionHostIPConfigurationPropertiesFormat BastionHostIPConfigurationPropertiesFormat
7813				err = json.Unmarshal(*v, &bastionHostIPConfigurationPropertiesFormat)
7814				if err != nil {
7815					return err
7816				}
7817				bhic.BastionHostIPConfigurationPropertiesFormat = &bastionHostIPConfigurationPropertiesFormat
7818			}
7819		case "name":
7820			if v != nil {
7821				var name string
7822				err = json.Unmarshal(*v, &name)
7823				if err != nil {
7824					return err
7825				}
7826				bhic.Name = &name
7827			}
7828		case "etag":
7829			if v != nil {
7830				var etag string
7831				err = json.Unmarshal(*v, &etag)
7832				if err != nil {
7833					return err
7834				}
7835				bhic.Etag = &etag
7836			}
7837		case "type":
7838			if v != nil {
7839				var typeVar string
7840				err = json.Unmarshal(*v, &typeVar)
7841				if err != nil {
7842					return err
7843				}
7844				bhic.Type = &typeVar
7845			}
7846		case "id":
7847			if v != nil {
7848				var ID string
7849				err = json.Unmarshal(*v, &ID)
7850				if err != nil {
7851					return err
7852				}
7853				bhic.ID = &ID
7854			}
7855		}
7856	}
7857
7858	return nil
7859}
7860
7861// BastionHostIPConfigurationPropertiesFormat properties of IP configuration of an Bastion Host.
7862type BastionHostIPConfigurationPropertiesFormat struct {
7863	// Subnet - Reference of the subnet resource.
7864	Subnet *SubResource `json:"subnet,omitempty"`
7865	// PublicIPAddress - Reference of the PublicIP resource.
7866	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
7867	// ProvisioningState - The provisioning state of the bastion host IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7868	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7869	// PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'Static', 'Dynamic'
7870	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
7871}
7872
7873// BastionHostListResult response for ListBastionHosts API service call.
7874type BastionHostListResult struct {
7875	autorest.Response `json:"-"`
7876	// Value - List of Bastion Hosts in a resource group.
7877	Value *[]BastionHost `json:"value,omitempty"`
7878	// NextLink - URL to get the next set of results.
7879	NextLink *string `json:"nextLink,omitempty"`
7880}
7881
7882// BastionHostListResultIterator provides access to a complete listing of BastionHost values.
7883type BastionHostListResultIterator struct {
7884	i    int
7885	page BastionHostListResultPage
7886}
7887
7888// NextWithContext advances to the next value.  If there was an error making
7889// the request the iterator does not advance and the error is returned.
7890func (iter *BastionHostListResultIterator) NextWithContext(ctx context.Context) (err error) {
7891	if tracing.IsEnabled() {
7892		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultIterator.NextWithContext")
7893		defer func() {
7894			sc := -1
7895			if iter.Response().Response.Response != nil {
7896				sc = iter.Response().Response.Response.StatusCode
7897			}
7898			tracing.EndSpan(ctx, sc, err)
7899		}()
7900	}
7901	iter.i++
7902	if iter.i < len(iter.page.Values()) {
7903		return nil
7904	}
7905	err = iter.page.NextWithContext(ctx)
7906	if err != nil {
7907		iter.i--
7908		return err
7909	}
7910	iter.i = 0
7911	return nil
7912}
7913
7914// Next advances to the next value.  If there was an error making
7915// the request the iterator does not advance and the error is returned.
7916// Deprecated: Use NextWithContext() instead.
7917func (iter *BastionHostListResultIterator) Next() error {
7918	return iter.NextWithContext(context.Background())
7919}
7920
7921// NotDone returns true if the enumeration should be started or is not yet complete.
7922func (iter BastionHostListResultIterator) NotDone() bool {
7923	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7924}
7925
7926// Response returns the raw server response from the last page request.
7927func (iter BastionHostListResultIterator) Response() BastionHostListResult {
7928	return iter.page.Response()
7929}
7930
7931// Value returns the current value or a zero-initialized value if the
7932// iterator has advanced beyond the end of the collection.
7933func (iter BastionHostListResultIterator) Value() BastionHost {
7934	if !iter.page.NotDone() {
7935		return BastionHost{}
7936	}
7937	return iter.page.Values()[iter.i]
7938}
7939
7940// Creates a new instance of the BastionHostListResultIterator type.
7941func NewBastionHostListResultIterator(page BastionHostListResultPage) BastionHostListResultIterator {
7942	return BastionHostListResultIterator{page: page}
7943}
7944
7945// IsEmpty returns true if the ListResult contains no values.
7946func (bhlr BastionHostListResult) IsEmpty() bool {
7947	return bhlr.Value == nil || len(*bhlr.Value) == 0
7948}
7949
7950// bastionHostListResultPreparer prepares a request to retrieve the next set of results.
7951// It returns nil if no more results exist.
7952func (bhlr BastionHostListResult) bastionHostListResultPreparer(ctx context.Context) (*http.Request, error) {
7953	if bhlr.NextLink == nil || len(to.String(bhlr.NextLink)) < 1 {
7954		return nil, nil
7955	}
7956	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7957		autorest.AsJSON(),
7958		autorest.AsGet(),
7959		autorest.WithBaseURL(to.String(bhlr.NextLink)))
7960}
7961
7962// BastionHostListResultPage contains a page of BastionHost values.
7963type BastionHostListResultPage struct {
7964	fn   func(context.Context, BastionHostListResult) (BastionHostListResult, error)
7965	bhlr BastionHostListResult
7966}
7967
7968// NextWithContext advances to the next page of values.  If there was an error making
7969// the request the page does not advance and the error is returned.
7970func (page *BastionHostListResultPage) NextWithContext(ctx context.Context) (err error) {
7971	if tracing.IsEnabled() {
7972		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultPage.NextWithContext")
7973		defer func() {
7974			sc := -1
7975			if page.Response().Response.Response != nil {
7976				sc = page.Response().Response.Response.StatusCode
7977			}
7978			tracing.EndSpan(ctx, sc, err)
7979		}()
7980	}
7981	next, err := page.fn(ctx, page.bhlr)
7982	if err != nil {
7983		return err
7984	}
7985	page.bhlr = next
7986	return nil
7987}
7988
7989// Next advances to the next page of values.  If there was an error making
7990// the request the page does not advance and the error is returned.
7991// Deprecated: Use NextWithContext() instead.
7992func (page *BastionHostListResultPage) Next() error {
7993	return page.NextWithContext(context.Background())
7994}
7995
7996// NotDone returns true if the page enumeration should be started or is not yet complete.
7997func (page BastionHostListResultPage) NotDone() bool {
7998	return !page.bhlr.IsEmpty()
7999}
8000
8001// Response returns the raw server response from the last page request.
8002func (page BastionHostListResultPage) Response() BastionHostListResult {
8003	return page.bhlr
8004}
8005
8006// Values returns the slice of values for the current page or nil if there are no values.
8007func (page BastionHostListResultPage) Values() []BastionHost {
8008	if page.bhlr.IsEmpty() {
8009		return nil
8010	}
8011	return *page.bhlr.Value
8012}
8013
8014// Creates a new instance of the BastionHostListResultPage type.
8015func NewBastionHostListResultPage(getNextPage func(context.Context, BastionHostListResult) (BastionHostListResult, error)) BastionHostListResultPage {
8016	return BastionHostListResultPage{fn: getNextPage}
8017}
8018
8019// BastionHostPropertiesFormat properties of the Bastion Host.
8020type BastionHostPropertiesFormat struct {
8021	// IPConfigurations - IP configuration of the Bastion Host resource.
8022	IPConfigurations *[]BastionHostIPConfiguration `json:"ipConfigurations,omitempty"`
8023	// DNSName - FQDN for the endpoint on which bastion host is accessible.
8024	DNSName *string `json:"dnsName,omitempty"`
8025	// ProvisioningState - The provisioning state of the bastion host resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8026	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8027}
8028
8029// BastionHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8030// long-running operation.
8031type BastionHostsCreateOrUpdateFuture struct {
8032	azure.Future
8033}
8034
8035// Result returns the result of the asynchronous operation.
8036// If the operation has not completed it will return an error.
8037func (future *BastionHostsCreateOrUpdateFuture) Result(client BastionHostsClient) (bh BastionHost, err error) {
8038	var done bool
8039	done, err = future.DoneWithContext(context.Background(), client)
8040	if err != nil {
8041		err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8042		return
8043	}
8044	if !done {
8045		err = azure.NewAsyncOpIncompleteError("network.BastionHostsCreateOrUpdateFuture")
8046		return
8047	}
8048	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8049	if bh.Response.Response, err = future.GetResult(sender); err == nil && bh.Response.Response.StatusCode != http.StatusNoContent {
8050		bh, err = client.CreateOrUpdateResponder(bh.Response.Response)
8051		if err != nil {
8052			err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", bh.Response.Response, "Failure responding to request")
8053		}
8054	}
8055	return
8056}
8057
8058// BastionHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
8059// operation.
8060type BastionHostsDeleteFuture struct {
8061	azure.Future
8062}
8063
8064// Result returns the result of the asynchronous operation.
8065// If the operation has not completed it will return an error.
8066func (future *BastionHostsDeleteFuture) Result(client BastionHostsClient) (ar autorest.Response, err error) {
8067	var done bool
8068	done, err = future.DoneWithContext(context.Background(), client)
8069	if err != nil {
8070		err = autorest.NewErrorWithError(err, "network.BastionHostsDeleteFuture", "Result", future.Response(), "Polling failure")
8071		return
8072	}
8073	if !done {
8074		err = azure.NewAsyncOpIncompleteError("network.BastionHostsDeleteFuture")
8075		return
8076	}
8077	ar.Response = future.Response()
8078	return
8079}
8080
8081// BGPCommunity contains bgp community information offered in Service Community resources.
8082type BGPCommunity struct {
8083	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
8084	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
8085	// CommunityName - The name of the bgp community. e.g. Skype.
8086	CommunityName *string `json:"communityName,omitempty"`
8087	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
8088	CommunityValue *string `json:"communityValue,omitempty"`
8089	// CommunityPrefixes - The prefixes that the bgp community contains.
8090	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
8091	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
8092	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
8093	// ServiceGroup - The service group of the bgp community contains.
8094	ServiceGroup *string `json:"serviceGroup,omitempty"`
8095}
8096
8097// BgpPeerStatus BGP peer status details.
8098type BgpPeerStatus struct {
8099	// LocalAddress - READ-ONLY; The virtual network gateway's local address.
8100	LocalAddress *string `json:"localAddress,omitempty"`
8101	// Neighbor - READ-ONLY; The remote BGP peer.
8102	Neighbor *string `json:"neighbor,omitempty"`
8103	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer.
8104	Asn *int32 `json:"asn,omitempty"`
8105	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
8106	State BgpPeerState `json:"state,omitempty"`
8107	// ConnectedDuration - READ-ONLY; For how long the peering has been up.
8108	ConnectedDuration *string `json:"connectedDuration,omitempty"`
8109	// RoutesReceived - READ-ONLY; The number of routes learned from this peer.
8110	RoutesReceived *int64 `json:"routesReceived,omitempty"`
8111	// MessagesSent - READ-ONLY; The number of BGP messages sent.
8112	MessagesSent *int64 `json:"messagesSent,omitempty"`
8113	// MessagesReceived - READ-ONLY; The number of BGP messages received.
8114	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
8115}
8116
8117// BgpPeerStatusListResult response for list BGP peer status API service call.
8118type BgpPeerStatusListResult struct {
8119	autorest.Response `json:"-"`
8120	// Value - List of BGP peers.
8121	Value *[]BgpPeerStatus `json:"value,omitempty"`
8122}
8123
8124// BgpServiceCommunity service Community Properties.
8125type BgpServiceCommunity struct {
8126	// BgpServiceCommunityPropertiesFormat - Properties of the BGP service community.
8127	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
8128	// ID - Resource ID.
8129	ID *string `json:"id,omitempty"`
8130	// Name - READ-ONLY; Resource name.
8131	Name *string `json:"name,omitempty"`
8132	// Type - READ-ONLY; Resource type.
8133	Type *string `json:"type,omitempty"`
8134	// Location - Resource location.
8135	Location *string `json:"location,omitempty"`
8136	// Tags - Resource tags.
8137	Tags map[string]*string `json:"tags"`
8138}
8139
8140// MarshalJSON is the custom marshaler for BgpServiceCommunity.
8141func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
8142	objectMap := make(map[string]interface{})
8143	if bsc.BgpServiceCommunityPropertiesFormat != nil {
8144		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
8145	}
8146	if bsc.ID != nil {
8147		objectMap["id"] = bsc.ID
8148	}
8149	if bsc.Location != nil {
8150		objectMap["location"] = bsc.Location
8151	}
8152	if bsc.Tags != nil {
8153		objectMap["tags"] = bsc.Tags
8154	}
8155	return json.Marshal(objectMap)
8156}
8157
8158// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
8159func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
8160	var m map[string]*json.RawMessage
8161	err := json.Unmarshal(body, &m)
8162	if err != nil {
8163		return err
8164	}
8165	for k, v := range m {
8166		switch k {
8167		case "properties":
8168			if v != nil {
8169				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
8170				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
8171				if err != nil {
8172					return err
8173				}
8174				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
8175			}
8176		case "id":
8177			if v != nil {
8178				var ID string
8179				err = json.Unmarshal(*v, &ID)
8180				if err != nil {
8181					return err
8182				}
8183				bsc.ID = &ID
8184			}
8185		case "name":
8186			if v != nil {
8187				var name string
8188				err = json.Unmarshal(*v, &name)
8189				if err != nil {
8190					return err
8191				}
8192				bsc.Name = &name
8193			}
8194		case "type":
8195			if v != nil {
8196				var typeVar string
8197				err = json.Unmarshal(*v, &typeVar)
8198				if err != nil {
8199					return err
8200				}
8201				bsc.Type = &typeVar
8202			}
8203		case "location":
8204			if v != nil {
8205				var location string
8206				err = json.Unmarshal(*v, &location)
8207				if err != nil {
8208					return err
8209				}
8210				bsc.Location = &location
8211			}
8212		case "tags":
8213			if v != nil {
8214				var tags map[string]*string
8215				err = json.Unmarshal(*v, &tags)
8216				if err != nil {
8217					return err
8218				}
8219				bsc.Tags = tags
8220			}
8221		}
8222	}
8223
8224	return nil
8225}
8226
8227// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
8228type BgpServiceCommunityListResult struct {
8229	autorest.Response `json:"-"`
8230	// Value - A list of service community resources.
8231	Value *[]BgpServiceCommunity `json:"value,omitempty"`
8232	// NextLink - The URL to get the next set of results.
8233	NextLink *string `json:"nextLink,omitempty"`
8234}
8235
8236// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
8237// values.
8238type BgpServiceCommunityListResultIterator struct {
8239	i    int
8240	page BgpServiceCommunityListResultPage
8241}
8242
8243// NextWithContext advances to the next value.  If there was an error making
8244// the request the iterator does not advance and the error is returned.
8245func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
8246	if tracing.IsEnabled() {
8247		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
8248		defer func() {
8249			sc := -1
8250			if iter.Response().Response.Response != nil {
8251				sc = iter.Response().Response.Response.StatusCode
8252			}
8253			tracing.EndSpan(ctx, sc, err)
8254		}()
8255	}
8256	iter.i++
8257	if iter.i < len(iter.page.Values()) {
8258		return nil
8259	}
8260	err = iter.page.NextWithContext(ctx)
8261	if err != nil {
8262		iter.i--
8263		return err
8264	}
8265	iter.i = 0
8266	return nil
8267}
8268
8269// Next advances to the next value.  If there was an error making
8270// the request the iterator does not advance and the error is returned.
8271// Deprecated: Use NextWithContext() instead.
8272func (iter *BgpServiceCommunityListResultIterator) Next() error {
8273	return iter.NextWithContext(context.Background())
8274}
8275
8276// NotDone returns true if the enumeration should be started or is not yet complete.
8277func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
8278	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8279}
8280
8281// Response returns the raw server response from the last page request.
8282func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
8283	return iter.page.Response()
8284}
8285
8286// Value returns the current value or a zero-initialized value if the
8287// iterator has advanced beyond the end of the collection.
8288func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
8289	if !iter.page.NotDone() {
8290		return BgpServiceCommunity{}
8291	}
8292	return iter.page.Values()[iter.i]
8293}
8294
8295// Creates a new instance of the BgpServiceCommunityListResultIterator type.
8296func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
8297	return BgpServiceCommunityListResultIterator{page: page}
8298}
8299
8300// IsEmpty returns true if the ListResult contains no values.
8301func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
8302	return bsclr.Value == nil || len(*bsclr.Value) == 0
8303}
8304
8305// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
8306// It returns nil if no more results exist.
8307func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
8308	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
8309		return nil, nil
8310	}
8311	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8312		autorest.AsJSON(),
8313		autorest.AsGet(),
8314		autorest.WithBaseURL(to.String(bsclr.NextLink)))
8315}
8316
8317// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
8318type BgpServiceCommunityListResultPage struct {
8319	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
8320	bsclr BgpServiceCommunityListResult
8321}
8322
8323// NextWithContext advances to the next page of values.  If there was an error making
8324// the request the page does not advance and the error is returned.
8325func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
8326	if tracing.IsEnabled() {
8327		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
8328		defer func() {
8329			sc := -1
8330			if page.Response().Response.Response != nil {
8331				sc = page.Response().Response.Response.StatusCode
8332			}
8333			tracing.EndSpan(ctx, sc, err)
8334		}()
8335	}
8336	next, err := page.fn(ctx, page.bsclr)
8337	if err != nil {
8338		return err
8339	}
8340	page.bsclr = next
8341	return nil
8342}
8343
8344// Next advances to the next page of values.  If there was an error making
8345// the request the page does not advance and the error is returned.
8346// Deprecated: Use NextWithContext() instead.
8347func (page *BgpServiceCommunityListResultPage) Next() error {
8348	return page.NextWithContext(context.Background())
8349}
8350
8351// NotDone returns true if the page enumeration should be started or is not yet complete.
8352func (page BgpServiceCommunityListResultPage) NotDone() bool {
8353	return !page.bsclr.IsEmpty()
8354}
8355
8356// Response returns the raw server response from the last page request.
8357func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
8358	return page.bsclr
8359}
8360
8361// Values returns the slice of values for the current page or nil if there are no values.
8362func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
8363	if page.bsclr.IsEmpty() {
8364		return nil
8365	}
8366	return *page.bsclr.Value
8367}
8368
8369// Creates a new instance of the BgpServiceCommunityListResultPage type.
8370func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
8371	return BgpServiceCommunityListResultPage{fn: getNextPage}
8372}
8373
8374// BgpServiceCommunityPropertiesFormat properties of Service Community.
8375type BgpServiceCommunityPropertiesFormat struct {
8376	// ServiceName - The name of the bgp community. e.g. Skype.
8377	ServiceName *string `json:"serviceName,omitempty"`
8378	// BgpCommunities - A list of bgp communities.
8379	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
8380}
8381
8382// BgpSettings BGP settings details.
8383type BgpSettings struct {
8384	// Asn - The BGP speaker's ASN.
8385	Asn *int64 `json:"asn,omitempty"`
8386	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
8387	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
8388	// PeerWeight - The weight added to routes learned from this BGP speaker.
8389	PeerWeight *int32 `json:"peerWeight,omitempty"`
8390}
8391
8392// CheckPrivateLinkServiceVisibilityRequest request body of the CheckPrivateLinkServiceVisibility API
8393// service call.
8394type CheckPrivateLinkServiceVisibilityRequest struct {
8395	// PrivateLinkServiceAlias - The alias of the private link service.
8396	PrivateLinkServiceAlias *string `json:"privateLinkServiceAlias,omitempty"`
8397}
8398
8399// CloudError an error response from the Batch service.
8400type CloudError struct {
8401	// Error - Cloud error body.
8402	Error *CloudErrorBody `json:"error,omitempty"`
8403}
8404
8405// CloudErrorBody an error response from the Batch service.
8406type CloudErrorBody struct {
8407	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
8408	Code *string `json:"code,omitempty"`
8409	// Message - A message describing the error, intended to be suitable for display in a user interface.
8410	Message *string `json:"message,omitempty"`
8411	// Target - The target of the particular error. For example, the name of the property in error.
8412	Target *string `json:"target,omitempty"`
8413	// Details - A list of additional details about the error.
8414	Details *[]CloudErrorBody `json:"details,omitempty"`
8415}
8416
8417// ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
8418type ConfigurationDiagnosticParameters struct {
8419	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
8420	TargetResourceID *string `json:"targetResourceId,omitempty"`
8421	// VerbosityLevel - Verbosity level. Possible values include: 'Normal', 'Minimum', 'Full'
8422	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
8423	// Profiles - List of network configuration diagnostic profiles.
8424	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
8425}
8426
8427// ConfigurationDiagnosticProfile parameters to compare with network configuration.
8428type ConfigurationDiagnosticProfile struct {
8429	// Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound'
8430	Direction Direction `json:"direction,omitempty"`
8431	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
8432	Protocol *string `json:"protocol,omitempty"`
8433	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
8434	Source *string `json:"source,omitempty"`
8435	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
8436	Destination *string `json:"destination,omitempty"`
8437	// DestinationPort - Traffic destination port. Accepted values are '*', port (for example, 3389) and port range (for example, 80-100).
8438	DestinationPort *string `json:"destinationPort,omitempty"`
8439}
8440
8441// ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
8442type ConfigurationDiagnosticResponse struct {
8443	autorest.Response `json:"-"`
8444	// Results - READ-ONLY; List of network configuration diagnostic results.
8445	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
8446}
8447
8448// ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
8449// query.
8450type ConfigurationDiagnosticResult struct {
8451	// Profile - Network configuration diagnostic profile.
8452	Profile *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
8453	// NetworkSecurityGroupResult - Network security group result.
8454	NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"`
8455}
8456
8457// ConnectionMonitor parameters that define the operation to create a connection monitor.
8458type ConnectionMonitor struct {
8459	// Location - Connection monitor location.
8460	Location *string `json:"location,omitempty"`
8461	// Tags - Connection monitor tags.
8462	Tags map[string]*string `json:"tags"`
8463	// ConnectionMonitorParameters - Properties of the connection monitor.
8464	*ConnectionMonitorParameters `json:"properties,omitempty"`
8465}
8466
8467// MarshalJSON is the custom marshaler for ConnectionMonitor.
8468func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
8469	objectMap := make(map[string]interface{})
8470	if cm.Location != nil {
8471		objectMap["location"] = cm.Location
8472	}
8473	if cm.Tags != nil {
8474		objectMap["tags"] = cm.Tags
8475	}
8476	if cm.ConnectionMonitorParameters != nil {
8477		objectMap["properties"] = cm.ConnectionMonitorParameters
8478	}
8479	return json.Marshal(objectMap)
8480}
8481
8482// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
8483func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
8484	var m map[string]*json.RawMessage
8485	err := json.Unmarshal(body, &m)
8486	if err != nil {
8487		return err
8488	}
8489	for k, v := range m {
8490		switch k {
8491		case "location":
8492			if v != nil {
8493				var location string
8494				err = json.Unmarshal(*v, &location)
8495				if err != nil {
8496					return err
8497				}
8498				cm.Location = &location
8499			}
8500		case "tags":
8501			if v != nil {
8502				var tags map[string]*string
8503				err = json.Unmarshal(*v, &tags)
8504				if err != nil {
8505					return err
8506				}
8507				cm.Tags = tags
8508			}
8509		case "properties":
8510			if v != nil {
8511				var connectionMonitorParameters ConnectionMonitorParameters
8512				err = json.Unmarshal(*v, &connectionMonitorParameters)
8513				if err != nil {
8514					return err
8515				}
8516				cm.ConnectionMonitorParameters = &connectionMonitorParameters
8517			}
8518		}
8519	}
8520
8521	return nil
8522}
8523
8524// ConnectionMonitorDestination describes the destination of connection monitor.
8525type ConnectionMonitorDestination struct {
8526	// ResourceID - The ID of the resource used as the destination by connection monitor.
8527	ResourceID *string `json:"resourceId,omitempty"`
8528	// Address - Address of the connection monitor destination (IP or domain name).
8529	Address *string `json:"address,omitempty"`
8530	// Port - The destination port used by connection monitor.
8531	Port *int32 `json:"port,omitempty"`
8532}
8533
8534// ConnectionMonitorListResult list of connection monitors.
8535type ConnectionMonitorListResult struct {
8536	autorest.Response `json:"-"`
8537	// Value - Information about connection monitors.
8538	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
8539}
8540
8541// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
8542type ConnectionMonitorParameters struct {
8543	// Source - Describes the source of connection monitor.
8544	Source *ConnectionMonitorSource `json:"source,omitempty"`
8545	// Destination - Describes the destination of connection monitor.
8546	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
8547	// AutoStart - Determines if the connection monitor will start automatically once created.
8548	AutoStart *bool `json:"autoStart,omitempty"`
8549	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
8550	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
8551}
8552
8553// ConnectionMonitorQueryResult list of connection states snapshots.
8554type ConnectionMonitorQueryResult struct {
8555	autorest.Response `json:"-"`
8556	// SourceStatus - Status of connection monitor source. Possible values include: 'ConnectionMonitorSourceStatusUnknown', 'ConnectionMonitorSourceStatusActive', 'ConnectionMonitorSourceStatusInactive'
8557	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
8558	// States - Information about connection states.
8559	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
8560}
8561
8562// ConnectionMonitorResult information about the connection monitor.
8563type ConnectionMonitorResult struct {
8564	autorest.Response `json:"-"`
8565	// Name - READ-ONLY; Name of the connection monitor.
8566	Name *string `json:"name,omitempty"`
8567	// ID - READ-ONLY; ID of the connection monitor.
8568	ID *string `json:"id,omitempty"`
8569	// Etag - A unique read-only string that changes whenever the resource is updated.
8570	Etag *string `json:"etag,omitempty"`
8571	// Type - READ-ONLY; Connection monitor type.
8572	Type *string `json:"type,omitempty"`
8573	// Location - Connection monitor location.
8574	Location *string `json:"location,omitempty"`
8575	// Tags - Connection monitor tags.
8576	Tags map[string]*string `json:"tags"`
8577	// ConnectionMonitorResultProperties - Properties of the connection monitor result.
8578	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
8579}
8580
8581// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
8582func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
8583	objectMap := make(map[string]interface{})
8584	if cmr.Etag != nil {
8585		objectMap["etag"] = cmr.Etag
8586	}
8587	if cmr.Location != nil {
8588		objectMap["location"] = cmr.Location
8589	}
8590	if cmr.Tags != nil {
8591		objectMap["tags"] = cmr.Tags
8592	}
8593	if cmr.ConnectionMonitorResultProperties != nil {
8594		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
8595	}
8596	return json.Marshal(objectMap)
8597}
8598
8599// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
8600func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
8601	var m map[string]*json.RawMessage
8602	err := json.Unmarshal(body, &m)
8603	if err != nil {
8604		return err
8605	}
8606	for k, v := range m {
8607		switch k {
8608		case "name":
8609			if v != nil {
8610				var name string
8611				err = json.Unmarshal(*v, &name)
8612				if err != nil {
8613					return err
8614				}
8615				cmr.Name = &name
8616			}
8617		case "id":
8618			if v != nil {
8619				var ID string
8620				err = json.Unmarshal(*v, &ID)
8621				if err != nil {
8622					return err
8623				}
8624				cmr.ID = &ID
8625			}
8626		case "etag":
8627			if v != nil {
8628				var etag string
8629				err = json.Unmarshal(*v, &etag)
8630				if err != nil {
8631					return err
8632				}
8633				cmr.Etag = &etag
8634			}
8635		case "type":
8636			if v != nil {
8637				var typeVar string
8638				err = json.Unmarshal(*v, &typeVar)
8639				if err != nil {
8640					return err
8641				}
8642				cmr.Type = &typeVar
8643			}
8644		case "location":
8645			if v != nil {
8646				var location string
8647				err = json.Unmarshal(*v, &location)
8648				if err != nil {
8649					return err
8650				}
8651				cmr.Location = &location
8652			}
8653		case "tags":
8654			if v != nil {
8655				var tags map[string]*string
8656				err = json.Unmarshal(*v, &tags)
8657				if err != nil {
8658					return err
8659				}
8660				cmr.Tags = tags
8661			}
8662		case "properties":
8663			if v != nil {
8664				var connectionMonitorResultProperties ConnectionMonitorResultProperties
8665				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
8666				if err != nil {
8667					return err
8668				}
8669				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
8670			}
8671		}
8672	}
8673
8674	return nil
8675}
8676
8677// ConnectionMonitorResultProperties describes the properties of a connection monitor.
8678type ConnectionMonitorResultProperties struct {
8679	// ProvisioningState - The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8680	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8681	// StartTime - The date and time when the connection monitor was started.
8682	StartTime *date.Time `json:"startTime,omitempty"`
8683	// MonitoringStatus - The monitoring status of the connection monitor.
8684	MonitoringStatus *string `json:"monitoringStatus,omitempty"`
8685	// Source - Describes the source of connection monitor.
8686	Source *ConnectionMonitorSource `json:"source,omitempty"`
8687	// Destination - Describes the destination of connection monitor.
8688	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
8689	// AutoStart - Determines if the connection monitor will start automatically once created.
8690	AutoStart *bool `json:"autoStart,omitempty"`
8691	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
8692	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
8693}
8694
8695// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8696// long-running operation.
8697type ConnectionMonitorsCreateOrUpdateFuture struct {
8698	azure.Future
8699}
8700
8701// Result returns the result of the asynchronous operation.
8702// If the operation has not completed it will return an error.
8703func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
8704	var done bool
8705	done, err = future.DoneWithContext(context.Background(), client)
8706	if err != nil {
8707		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8708		return
8709	}
8710	if !done {
8711		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
8712		return
8713	}
8714	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8715	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
8716		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
8717		if err != nil {
8718			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
8719		}
8720	}
8721	return
8722}
8723
8724// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
8725// long-running operation.
8726type ConnectionMonitorsDeleteFuture struct {
8727	azure.Future
8728}
8729
8730// Result returns the result of the asynchronous operation.
8731// If the operation has not completed it will return an error.
8732func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8733	var done bool
8734	done, err = future.DoneWithContext(context.Background(), client)
8735	if err != nil {
8736		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
8737		return
8738	}
8739	if !done {
8740		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
8741		return
8742	}
8743	ar.Response = future.Response()
8744	return
8745}
8746
8747// ConnectionMonitorSource describes the source of connection monitor.
8748type ConnectionMonitorSource struct {
8749	// ResourceID - The ID of the resource used as the source by connection monitor.
8750	ResourceID *string `json:"resourceId,omitempty"`
8751	// Port - The source port used by connection monitor.
8752	Port *int32 `json:"port,omitempty"`
8753}
8754
8755// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
8756// operation.
8757type ConnectionMonitorsQueryFuture struct {
8758	azure.Future
8759}
8760
8761// Result returns the result of the asynchronous operation.
8762// If the operation has not completed it will return an error.
8763func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
8764	var done bool
8765	done, err = future.DoneWithContext(context.Background(), client)
8766	if err != nil {
8767		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
8768		return
8769	}
8770	if !done {
8771		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
8772		return
8773	}
8774	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8775	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
8776		cmqr, err = client.QueryResponder(cmqr.Response.Response)
8777		if err != nil {
8778			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
8779		}
8780	}
8781	return
8782}
8783
8784// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
8785// operation.
8786type ConnectionMonitorsStartFuture struct {
8787	azure.Future
8788}
8789
8790// Result returns the result of the asynchronous operation.
8791// If the operation has not completed it will return an error.
8792func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8793	var done bool
8794	done, err = future.DoneWithContext(context.Background(), client)
8795	if err != nil {
8796		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
8797		return
8798	}
8799	if !done {
8800		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
8801		return
8802	}
8803	ar.Response = future.Response()
8804	return
8805}
8806
8807// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
8808// operation.
8809type ConnectionMonitorsStopFuture struct {
8810	azure.Future
8811}
8812
8813// Result returns the result of the asynchronous operation.
8814// If the operation has not completed it will return an error.
8815func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8816	var done bool
8817	done, err = future.DoneWithContext(context.Background(), client)
8818	if err != nil {
8819		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
8820		return
8821	}
8822	if !done {
8823		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
8824		return
8825	}
8826	ar.Response = future.Response()
8827	return
8828}
8829
8830// ConnectionResetSharedKey the virtual network connection reset shared key.
8831type ConnectionResetSharedKey struct {
8832	autorest.Response `json:"-"`
8833	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
8834	KeyLength *int32 `json:"keyLength,omitempty"`
8835}
8836
8837// ConnectionSharedKey response for GetConnectionSharedKey API service call.
8838type ConnectionSharedKey struct {
8839	autorest.Response `json:"-"`
8840	// Value - The virtual network connection shared key value.
8841	Value *string `json:"value,omitempty"`
8842	// ID - Resource ID.
8843	ID *string `json:"id,omitempty"`
8844}
8845
8846// ConnectionStateSnapshot connection state snapshot.
8847type ConnectionStateSnapshot struct {
8848	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
8849	ConnectionState ConnectionState `json:"connectionState,omitempty"`
8850	// StartTime - The start time of the connection snapshot.
8851	StartTime *date.Time `json:"startTime,omitempty"`
8852	// EndTime - The end time of the connection snapshot.
8853	EndTime *date.Time `json:"endTime,omitempty"`
8854	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
8855	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
8856	// AvgLatencyInMs - Average latency in ms.
8857	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
8858	// MinLatencyInMs - Minimum latency in ms.
8859	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
8860	// MaxLatencyInMs - Maximum latency in ms.
8861	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
8862	// ProbesSent - The number of sent probes.
8863	ProbesSent *int32 `json:"probesSent,omitempty"`
8864	// ProbesFailed - The number of failed probes.
8865	ProbesFailed *int32 `json:"probesFailed,omitempty"`
8866	// Hops - READ-ONLY; List of hops between the source and the destination.
8867	Hops *[]ConnectivityHop `json:"hops,omitempty"`
8868}
8869
8870// ConnectivityDestination parameters that define destination of connection.
8871type ConnectivityDestination struct {
8872	// ResourceID - The ID of the resource to which a connection attempt will be made.
8873	ResourceID *string `json:"resourceId,omitempty"`
8874	// Address - The IP address or URI the resource to which a connection attempt will be made.
8875	Address *string `json:"address,omitempty"`
8876	// Port - Port on which check connectivity will be performed.
8877	Port *int32 `json:"port,omitempty"`
8878}
8879
8880// ConnectivityHop information about a hop between the source and the destination.
8881type ConnectivityHop struct {
8882	// Type - READ-ONLY; The type of the hop.
8883	Type *string `json:"type,omitempty"`
8884	// ID - READ-ONLY; The ID of the hop.
8885	ID *string `json:"id,omitempty"`
8886	// Address - READ-ONLY; The IP address of the hop.
8887	Address *string `json:"address,omitempty"`
8888	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
8889	ResourceID *string `json:"resourceId,omitempty"`
8890	// NextHopIds - READ-ONLY; List of next hop identifiers.
8891	NextHopIds *[]string `json:"nextHopIds,omitempty"`
8892	// Issues - READ-ONLY; List of issues.
8893	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
8894}
8895
8896// ConnectivityInformation information on the connectivity status.
8897type ConnectivityInformation struct {
8898	autorest.Response `json:"-"`
8899	// Hops - READ-ONLY; List of hops between the source and the destination.
8900	Hops *[]ConnectivityHop `json:"hops,omitempty"`
8901	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
8902	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
8903	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
8904	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
8905	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
8906	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
8907	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
8908	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
8909	// ProbesSent - READ-ONLY; Total number of probes sent.
8910	ProbesSent *int32 `json:"probesSent,omitempty"`
8911	// ProbesFailed - READ-ONLY; Number of failed probes.
8912	ProbesFailed *int32 `json:"probesFailed,omitempty"`
8913}
8914
8915// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
8916type ConnectivityIssue struct {
8917	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
8918	Origin Origin `json:"origin,omitempty"`
8919	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
8920	Severity Severity `json:"severity,omitempty"`
8921	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
8922	Type IssueType `json:"type,omitempty"`
8923	// Context - READ-ONLY; Provides additional context on the issue.
8924	Context *[]map[string]*string `json:"context,omitempty"`
8925}
8926
8927// ConnectivityParameters parameters that determine how the connectivity check will be performed.
8928type ConnectivityParameters struct {
8929	// Source - Describes the source of the connection.
8930	Source *ConnectivitySource `json:"source,omitempty"`
8931	// Destination - Describes the destination of connection.
8932	Destination *ConnectivityDestination `json:"destination,omitempty"`
8933	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
8934	Protocol Protocol `json:"protocol,omitempty"`
8935	// ProtocolConfiguration - Configuration of the protocol.
8936	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
8937}
8938
8939// ConnectivitySource parameters that define the source of the connection.
8940type ConnectivitySource struct {
8941	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
8942	ResourceID *string `json:"resourceId,omitempty"`
8943	// Port - The source port from which a connectivity check will be performed.
8944	Port *int32 `json:"port,omitempty"`
8945}
8946
8947// Container reference to container resource in remote resource provider.
8948type Container struct {
8949	// ID - Resource ID.
8950	ID *string `json:"id,omitempty"`
8951}
8952
8953// ContainerNetworkInterface container network interface child resource.
8954type ContainerNetworkInterface struct {
8955	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
8956	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
8957	// Name - The name of the resource. This name can be used to access the resource.
8958	Name *string `json:"name,omitempty"`
8959	// Type - READ-ONLY; Sub Resource type.
8960	Type *string `json:"type,omitempty"`
8961	// Etag - A unique read-only string that changes whenever the resource is updated.
8962	Etag *string `json:"etag,omitempty"`
8963	// ID - Resource ID.
8964	ID *string `json:"id,omitempty"`
8965}
8966
8967// MarshalJSON is the custom marshaler for ContainerNetworkInterface.
8968func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
8969	objectMap := make(map[string]interface{})
8970	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
8971		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
8972	}
8973	if cni.Name != nil {
8974		objectMap["name"] = cni.Name
8975	}
8976	if cni.Etag != nil {
8977		objectMap["etag"] = cni.Etag
8978	}
8979	if cni.ID != nil {
8980		objectMap["id"] = cni.ID
8981	}
8982	return json.Marshal(objectMap)
8983}
8984
8985// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
8986func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
8987	var m map[string]*json.RawMessage
8988	err := json.Unmarshal(body, &m)
8989	if err != nil {
8990		return err
8991	}
8992	for k, v := range m {
8993		switch k {
8994		case "properties":
8995			if v != nil {
8996				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
8997				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
8998				if err != nil {
8999					return err
9000				}
9001				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
9002			}
9003		case "name":
9004			if v != nil {
9005				var name string
9006				err = json.Unmarshal(*v, &name)
9007				if err != nil {
9008					return err
9009				}
9010				cni.Name = &name
9011			}
9012		case "type":
9013			if v != nil {
9014				var typeVar string
9015				err = json.Unmarshal(*v, &typeVar)
9016				if err != nil {
9017					return err
9018				}
9019				cni.Type = &typeVar
9020			}
9021		case "etag":
9022			if v != nil {
9023				var etag string
9024				err = json.Unmarshal(*v, &etag)
9025				if err != nil {
9026					return err
9027				}
9028				cni.Etag = &etag
9029			}
9030		case "id":
9031			if v != nil {
9032				var ID string
9033				err = json.Unmarshal(*v, &ID)
9034				if err != nil {
9035					return err
9036				}
9037				cni.ID = &ID
9038			}
9039		}
9040	}
9041
9042	return nil
9043}
9044
9045// ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
9046type ContainerNetworkInterfaceConfiguration struct {
9047	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
9048	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
9049	// Name - The name of the resource. This name can be used to access the resource.
9050	Name *string `json:"name,omitempty"`
9051	// Type - READ-ONLY; Sub Resource type.
9052	Type *string `json:"type,omitempty"`
9053	// Etag - A unique read-only string that changes whenever the resource is updated.
9054	Etag *string `json:"etag,omitempty"`
9055	// ID - Resource ID.
9056	ID *string `json:"id,omitempty"`
9057}
9058
9059// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
9060func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
9061	objectMap := make(map[string]interface{})
9062	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
9063		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
9064	}
9065	if cnic.Name != nil {
9066		objectMap["name"] = cnic.Name
9067	}
9068	if cnic.Etag != nil {
9069		objectMap["etag"] = cnic.Etag
9070	}
9071	if cnic.ID != nil {
9072		objectMap["id"] = cnic.ID
9073	}
9074	return json.Marshal(objectMap)
9075}
9076
9077// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
9078func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
9079	var m map[string]*json.RawMessage
9080	err := json.Unmarshal(body, &m)
9081	if err != nil {
9082		return err
9083	}
9084	for k, v := range m {
9085		switch k {
9086		case "properties":
9087			if v != nil {
9088				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
9089				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
9090				if err != nil {
9091					return err
9092				}
9093				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
9094			}
9095		case "name":
9096			if v != nil {
9097				var name string
9098				err = json.Unmarshal(*v, &name)
9099				if err != nil {
9100					return err
9101				}
9102				cnic.Name = &name
9103			}
9104		case "type":
9105			if v != nil {
9106				var typeVar string
9107				err = json.Unmarshal(*v, &typeVar)
9108				if err != nil {
9109					return err
9110				}
9111				cnic.Type = &typeVar
9112			}
9113		case "etag":
9114			if v != nil {
9115				var etag string
9116				err = json.Unmarshal(*v, &etag)
9117				if err != nil {
9118					return err
9119				}
9120				cnic.Etag = &etag
9121			}
9122		case "id":
9123			if v != nil {
9124				var ID string
9125				err = json.Unmarshal(*v, &ID)
9126				if err != nil {
9127					return err
9128				}
9129				cnic.ID = &ID
9130			}
9131		}
9132	}
9133
9134	return nil
9135}
9136
9137// ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
9138// properties.
9139type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
9140	// IPConfigurations - A list of ip configurations of the container network interface configuration.
9141	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
9142	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
9143	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
9144	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9145	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9146}
9147
9148// ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
9149type ContainerNetworkInterfaceIPConfiguration struct {
9150	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
9151	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
9152	// Name - The name of the resource. This name can be used to access the resource.
9153	Name *string `json:"name,omitempty"`
9154	// Type - READ-ONLY; Sub Resource type.
9155	Type *string `json:"type,omitempty"`
9156	// Etag - A unique read-only string that changes whenever the resource is updated.
9157	Etag *string `json:"etag,omitempty"`
9158}
9159
9160// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
9161func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
9162	objectMap := make(map[string]interface{})
9163	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
9164		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
9165	}
9166	if cniic.Name != nil {
9167		objectMap["name"] = cniic.Name
9168	}
9169	if cniic.Etag != nil {
9170		objectMap["etag"] = cniic.Etag
9171	}
9172	return json.Marshal(objectMap)
9173}
9174
9175// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
9176func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
9177	var m map[string]*json.RawMessage
9178	err := json.Unmarshal(body, &m)
9179	if err != nil {
9180		return err
9181	}
9182	for k, v := range m {
9183		switch k {
9184		case "properties":
9185			if v != nil {
9186				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
9187				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
9188				if err != nil {
9189					return err
9190				}
9191				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
9192			}
9193		case "name":
9194			if v != nil {
9195				var name string
9196				err = json.Unmarshal(*v, &name)
9197				if err != nil {
9198					return err
9199				}
9200				cniic.Name = &name
9201			}
9202		case "type":
9203			if v != nil {
9204				var typeVar string
9205				err = json.Unmarshal(*v, &typeVar)
9206				if err != nil {
9207					return err
9208				}
9209				cniic.Type = &typeVar
9210			}
9211		case "etag":
9212			if v != nil {
9213				var etag string
9214				err = json.Unmarshal(*v, &etag)
9215				if err != nil {
9216					return err
9217				}
9218				cniic.Etag = &etag
9219			}
9220		}
9221	}
9222
9223	return nil
9224}
9225
9226// ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
9227// IP configuration.
9228type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
9229	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9230	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9231}
9232
9233// ContainerNetworkInterfacePropertiesFormat properties of container network interface.
9234type ContainerNetworkInterfacePropertiesFormat struct {
9235	// ContainerNetworkInterfaceConfiguration - Container network interface configuration from which this container network interface is created.
9236	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
9237	// Container - Reference to the container to which this container network interface is attached.
9238	Container *Container `json:"container,omitempty"`
9239	// IPConfigurations - Reference to the ip configuration on this container nic.
9240	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
9241	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9242	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9243}
9244
9245// DdosCustomPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9246// long-running operation.
9247type DdosCustomPoliciesCreateOrUpdateFuture struct {
9248	azure.Future
9249}
9250
9251// Result returns the result of the asynchronous operation.
9252// If the operation has not completed it will return an error.
9253func (future *DdosCustomPoliciesCreateOrUpdateFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
9254	var done bool
9255	done, err = future.DoneWithContext(context.Background(), client)
9256	if err != nil {
9257		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9258		return
9259	}
9260	if !done {
9261		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesCreateOrUpdateFuture")
9262		return
9263	}
9264	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9265	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
9266		dcp, err = client.CreateOrUpdateResponder(dcp.Response.Response)
9267		if err != nil {
9268			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", dcp.Response.Response, "Failure responding to request")
9269		}
9270	}
9271	return
9272}
9273
9274// DdosCustomPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
9275// long-running operation.
9276type DdosCustomPoliciesDeleteFuture struct {
9277	azure.Future
9278}
9279
9280// Result returns the result of the asynchronous operation.
9281// If the operation has not completed it will return an error.
9282func (future *DdosCustomPoliciesDeleteFuture) Result(client DdosCustomPoliciesClient) (ar autorest.Response, err error) {
9283	var done bool
9284	done, err = future.DoneWithContext(context.Background(), client)
9285	if err != nil {
9286		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
9287		return
9288	}
9289	if !done {
9290		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesDeleteFuture")
9291		return
9292	}
9293	ar.Response = future.Response()
9294	return
9295}
9296
9297// DdosCustomPoliciesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
9298// long-running operation.
9299type DdosCustomPoliciesUpdateTagsFuture struct {
9300	azure.Future
9301}
9302
9303// Result returns the result of the asynchronous operation.
9304// If the operation has not completed it will return an error.
9305func (future *DdosCustomPoliciesUpdateTagsFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
9306	var done bool
9307	done, err = future.DoneWithContext(context.Background(), client)
9308	if err != nil {
9309		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9310		return
9311	}
9312	if !done {
9313		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesUpdateTagsFuture")
9314		return
9315	}
9316	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9317	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
9318		dcp, err = client.UpdateTagsResponder(dcp.Response.Response)
9319		if err != nil {
9320			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", dcp.Response.Response, "Failure responding to request")
9321		}
9322	}
9323	return
9324}
9325
9326// DdosCustomPolicy a DDoS custom policy in a resource group.
9327type DdosCustomPolicy struct {
9328	autorest.Response `json:"-"`
9329	// DdosCustomPolicyPropertiesFormat - Properties of the DDoS custom policy.
9330	*DdosCustomPolicyPropertiesFormat `json:"properties,omitempty"`
9331	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9332	Etag *string `json:"etag,omitempty"`
9333	// ID - Resource ID.
9334	ID *string `json:"id,omitempty"`
9335	// Name - READ-ONLY; Resource name.
9336	Name *string `json:"name,omitempty"`
9337	// Type - READ-ONLY; Resource type.
9338	Type *string `json:"type,omitempty"`
9339	// Location - Resource location.
9340	Location *string `json:"location,omitempty"`
9341	// Tags - Resource tags.
9342	Tags map[string]*string `json:"tags"`
9343}
9344
9345// MarshalJSON is the custom marshaler for DdosCustomPolicy.
9346func (dcp DdosCustomPolicy) MarshalJSON() ([]byte, error) {
9347	objectMap := make(map[string]interface{})
9348	if dcp.DdosCustomPolicyPropertiesFormat != nil {
9349		objectMap["properties"] = dcp.DdosCustomPolicyPropertiesFormat
9350	}
9351	if dcp.ID != nil {
9352		objectMap["id"] = dcp.ID
9353	}
9354	if dcp.Location != nil {
9355		objectMap["location"] = dcp.Location
9356	}
9357	if dcp.Tags != nil {
9358		objectMap["tags"] = dcp.Tags
9359	}
9360	return json.Marshal(objectMap)
9361}
9362
9363// UnmarshalJSON is the custom unmarshaler for DdosCustomPolicy struct.
9364func (dcp *DdosCustomPolicy) UnmarshalJSON(body []byte) error {
9365	var m map[string]*json.RawMessage
9366	err := json.Unmarshal(body, &m)
9367	if err != nil {
9368		return err
9369	}
9370	for k, v := range m {
9371		switch k {
9372		case "properties":
9373			if v != nil {
9374				var ddosCustomPolicyPropertiesFormat DdosCustomPolicyPropertiesFormat
9375				err = json.Unmarshal(*v, &ddosCustomPolicyPropertiesFormat)
9376				if err != nil {
9377					return err
9378				}
9379				dcp.DdosCustomPolicyPropertiesFormat = &ddosCustomPolicyPropertiesFormat
9380			}
9381		case "etag":
9382			if v != nil {
9383				var etag string
9384				err = json.Unmarshal(*v, &etag)
9385				if err != nil {
9386					return err
9387				}
9388				dcp.Etag = &etag
9389			}
9390		case "id":
9391			if v != nil {
9392				var ID string
9393				err = json.Unmarshal(*v, &ID)
9394				if err != nil {
9395					return err
9396				}
9397				dcp.ID = &ID
9398			}
9399		case "name":
9400			if v != nil {
9401				var name string
9402				err = json.Unmarshal(*v, &name)
9403				if err != nil {
9404					return err
9405				}
9406				dcp.Name = &name
9407			}
9408		case "type":
9409			if v != nil {
9410				var typeVar string
9411				err = json.Unmarshal(*v, &typeVar)
9412				if err != nil {
9413					return err
9414				}
9415				dcp.Type = &typeVar
9416			}
9417		case "location":
9418			if v != nil {
9419				var location string
9420				err = json.Unmarshal(*v, &location)
9421				if err != nil {
9422					return err
9423				}
9424				dcp.Location = &location
9425			}
9426		case "tags":
9427			if v != nil {
9428				var tags map[string]*string
9429				err = json.Unmarshal(*v, &tags)
9430				if err != nil {
9431					return err
9432				}
9433				dcp.Tags = tags
9434			}
9435		}
9436	}
9437
9438	return nil
9439}
9440
9441// DdosCustomPolicyPropertiesFormat dDoS custom policy properties.
9442type DdosCustomPolicyPropertiesFormat struct {
9443	// ResourceGUID - READ-ONLY; The resource GUID property of the DDoS custom policy resource. It uniquely identifies the resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
9444	ResourceGUID *string `json:"resourceGuid,omitempty"`
9445	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9446	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9447	// PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only.
9448	PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"`
9449	// ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters.
9450	ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"`
9451}
9452
9453// DdosProtectionPlan a DDoS protection plan in a resource group.
9454type DdosProtectionPlan struct {
9455	autorest.Response `json:"-"`
9456	// ID - READ-ONLY; Resource ID.
9457	ID *string `json:"id,omitempty"`
9458	// Name - READ-ONLY; Resource name.
9459	Name *string `json:"name,omitempty"`
9460	// Type - READ-ONLY; Resource type.
9461	Type *string `json:"type,omitempty"`
9462	// Location - Resource location.
9463	Location *string `json:"location,omitempty"`
9464	// Tags - Resource tags.
9465	Tags map[string]*string `json:"tags"`
9466	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
9467	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
9468	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9469	Etag *string `json:"etag,omitempty"`
9470}
9471
9472// MarshalJSON is the custom marshaler for DdosProtectionPlan.
9473func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
9474	objectMap := make(map[string]interface{})
9475	if dpp.Location != nil {
9476		objectMap["location"] = dpp.Location
9477	}
9478	if dpp.Tags != nil {
9479		objectMap["tags"] = dpp.Tags
9480	}
9481	if dpp.DdosProtectionPlanPropertiesFormat != nil {
9482		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
9483	}
9484	return json.Marshal(objectMap)
9485}
9486
9487// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
9488func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
9489	var m map[string]*json.RawMessage
9490	err := json.Unmarshal(body, &m)
9491	if err != nil {
9492		return err
9493	}
9494	for k, v := range m {
9495		switch k {
9496		case "id":
9497			if v != nil {
9498				var ID string
9499				err = json.Unmarshal(*v, &ID)
9500				if err != nil {
9501					return err
9502				}
9503				dpp.ID = &ID
9504			}
9505		case "name":
9506			if v != nil {
9507				var name string
9508				err = json.Unmarshal(*v, &name)
9509				if err != nil {
9510					return err
9511				}
9512				dpp.Name = &name
9513			}
9514		case "type":
9515			if v != nil {
9516				var typeVar string
9517				err = json.Unmarshal(*v, &typeVar)
9518				if err != nil {
9519					return err
9520				}
9521				dpp.Type = &typeVar
9522			}
9523		case "location":
9524			if v != nil {
9525				var location string
9526				err = json.Unmarshal(*v, &location)
9527				if err != nil {
9528					return err
9529				}
9530				dpp.Location = &location
9531			}
9532		case "tags":
9533			if v != nil {
9534				var tags map[string]*string
9535				err = json.Unmarshal(*v, &tags)
9536				if err != nil {
9537					return err
9538				}
9539				dpp.Tags = tags
9540			}
9541		case "properties":
9542			if v != nil {
9543				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
9544				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
9545				if err != nil {
9546					return err
9547				}
9548				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
9549			}
9550		case "etag":
9551			if v != nil {
9552				var etag string
9553				err = json.Unmarshal(*v, &etag)
9554				if err != nil {
9555					return err
9556				}
9557				dpp.Etag = &etag
9558			}
9559		}
9560	}
9561
9562	return nil
9563}
9564
9565// DdosProtectionPlanListResult a list of DDoS protection plans.
9566type DdosProtectionPlanListResult struct {
9567	autorest.Response `json:"-"`
9568	// Value - A list of DDoS protection plans.
9569	Value *[]DdosProtectionPlan `json:"value,omitempty"`
9570	// NextLink - READ-ONLY; The URL to get the next set of results.
9571	NextLink *string `json:"nextLink,omitempty"`
9572}
9573
9574// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
9575type DdosProtectionPlanListResultIterator struct {
9576	i    int
9577	page DdosProtectionPlanListResultPage
9578}
9579
9580// NextWithContext advances to the next value.  If there was an error making
9581// the request the iterator does not advance and the error is returned.
9582func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
9583	if tracing.IsEnabled() {
9584		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
9585		defer func() {
9586			sc := -1
9587			if iter.Response().Response.Response != nil {
9588				sc = iter.Response().Response.Response.StatusCode
9589			}
9590			tracing.EndSpan(ctx, sc, err)
9591		}()
9592	}
9593	iter.i++
9594	if iter.i < len(iter.page.Values()) {
9595		return nil
9596	}
9597	err = iter.page.NextWithContext(ctx)
9598	if err != nil {
9599		iter.i--
9600		return err
9601	}
9602	iter.i = 0
9603	return nil
9604}
9605
9606// Next advances to the next value.  If there was an error making
9607// the request the iterator does not advance and the error is returned.
9608// Deprecated: Use NextWithContext() instead.
9609func (iter *DdosProtectionPlanListResultIterator) Next() error {
9610	return iter.NextWithContext(context.Background())
9611}
9612
9613// NotDone returns true if the enumeration should be started or is not yet complete.
9614func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
9615	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9616}
9617
9618// Response returns the raw server response from the last page request.
9619func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
9620	return iter.page.Response()
9621}
9622
9623// Value returns the current value or a zero-initialized value if the
9624// iterator has advanced beyond the end of the collection.
9625func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
9626	if !iter.page.NotDone() {
9627		return DdosProtectionPlan{}
9628	}
9629	return iter.page.Values()[iter.i]
9630}
9631
9632// Creates a new instance of the DdosProtectionPlanListResultIterator type.
9633func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
9634	return DdosProtectionPlanListResultIterator{page: page}
9635}
9636
9637// IsEmpty returns true if the ListResult contains no values.
9638func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
9639	return dpplr.Value == nil || len(*dpplr.Value) == 0
9640}
9641
9642// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
9643// It returns nil if no more results exist.
9644func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
9645	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
9646		return nil, nil
9647	}
9648	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9649		autorest.AsJSON(),
9650		autorest.AsGet(),
9651		autorest.WithBaseURL(to.String(dpplr.NextLink)))
9652}
9653
9654// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
9655type DdosProtectionPlanListResultPage struct {
9656	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
9657	dpplr DdosProtectionPlanListResult
9658}
9659
9660// NextWithContext advances to the next page of values.  If there was an error making
9661// the request the page does not advance and the error is returned.
9662func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
9663	if tracing.IsEnabled() {
9664		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
9665		defer func() {
9666			sc := -1
9667			if page.Response().Response.Response != nil {
9668				sc = page.Response().Response.Response.StatusCode
9669			}
9670			tracing.EndSpan(ctx, sc, err)
9671		}()
9672	}
9673	next, err := page.fn(ctx, page.dpplr)
9674	if err != nil {
9675		return err
9676	}
9677	page.dpplr = next
9678	return nil
9679}
9680
9681// Next advances to the next page of values.  If there was an error making
9682// the request the page does not advance and the error is returned.
9683// Deprecated: Use NextWithContext() instead.
9684func (page *DdosProtectionPlanListResultPage) Next() error {
9685	return page.NextWithContext(context.Background())
9686}
9687
9688// NotDone returns true if the page enumeration should be started or is not yet complete.
9689func (page DdosProtectionPlanListResultPage) NotDone() bool {
9690	return !page.dpplr.IsEmpty()
9691}
9692
9693// Response returns the raw server response from the last page request.
9694func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
9695	return page.dpplr
9696}
9697
9698// Values returns the slice of values for the current page or nil if there are no values.
9699func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
9700	if page.dpplr.IsEmpty() {
9701		return nil
9702	}
9703	return *page.dpplr.Value
9704}
9705
9706// Creates a new instance of the DdosProtectionPlanListResultPage type.
9707func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
9708	return DdosProtectionPlanListResultPage{fn: getNextPage}
9709}
9710
9711// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
9712type DdosProtectionPlanPropertiesFormat struct {
9713	// ResourceGUID - READ-ONLY; The resource GUID property of the DDoS protection plan resource. It uniquely identifies the resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
9714	ResourceGUID *string `json:"resourceGuid,omitempty"`
9715	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9716	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9717	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
9718	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
9719}
9720
9721// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9722// long-running operation.
9723type DdosProtectionPlansCreateOrUpdateFuture struct {
9724	azure.Future
9725}
9726
9727// Result returns the result of the asynchronous operation.
9728// If the operation has not completed it will return an error.
9729func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
9730	var done bool
9731	done, err = future.DoneWithContext(context.Background(), client)
9732	if err != nil {
9733		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9734		return
9735	}
9736	if !done {
9737		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
9738		return
9739	}
9740	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9741	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
9742		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
9743		if err != nil {
9744			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
9745		}
9746	}
9747	return
9748}
9749
9750// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
9751// long-running operation.
9752type DdosProtectionPlansDeleteFuture struct {
9753	azure.Future
9754}
9755
9756// Result returns the result of the asynchronous operation.
9757// If the operation has not completed it will return an error.
9758func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
9759	var done bool
9760	done, err = future.DoneWithContext(context.Background(), client)
9761	if err != nil {
9762		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
9763		return
9764	}
9765	if !done {
9766		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
9767		return
9768	}
9769	ar.Response = future.Response()
9770	return
9771}
9772
9773// DdosProtectionPlansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
9774// long-running operation.
9775type DdosProtectionPlansUpdateTagsFuture struct {
9776	azure.Future
9777}
9778
9779// Result returns the result of the asynchronous operation.
9780// If the operation has not completed it will return an error.
9781func (future *DdosProtectionPlansUpdateTagsFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
9782	var done bool
9783	done, err = future.DoneWithContext(context.Background(), client)
9784	if err != nil {
9785		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9786		return
9787	}
9788	if !done {
9789		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansUpdateTagsFuture")
9790		return
9791	}
9792	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9793	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
9794		dpp, err = client.UpdateTagsResponder(dpp.Response.Response)
9795		if err != nil {
9796			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", dpp.Response.Response, "Failure responding to request")
9797		}
9798	}
9799	return
9800}
9801
9802// DdosSettings contains the DDoS protection settings of the public IP.
9803type DdosSettings struct {
9804	// DdosCustomPolicy - The DDoS custom policy associated with the public IP.
9805	DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"`
9806	// ProtectionCoverage - The DDoS protection policy customizability of the public IP. Only standard coverage will have the ability to be customized. Possible values include: 'DdosSettingsProtectionCoverageBasic', 'DdosSettingsProtectionCoverageStandard'
9807	ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"`
9808}
9809
9810// Delegation details the service to which the subnet is delegated.
9811type Delegation struct {
9812	// ServiceDelegationPropertiesFormat - Properties of the subnet.
9813	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
9814	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
9815	Name *string `json:"name,omitempty"`
9816	// Etag - A unique read-only string that changes whenever the resource is updated.
9817	Etag *string `json:"etag,omitempty"`
9818	// ID - Resource ID.
9819	ID *string `json:"id,omitempty"`
9820}
9821
9822// MarshalJSON is the custom marshaler for Delegation.
9823func (d Delegation) MarshalJSON() ([]byte, error) {
9824	objectMap := make(map[string]interface{})
9825	if d.ServiceDelegationPropertiesFormat != nil {
9826		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
9827	}
9828	if d.Name != nil {
9829		objectMap["name"] = d.Name
9830	}
9831	if d.Etag != nil {
9832		objectMap["etag"] = d.Etag
9833	}
9834	if d.ID != nil {
9835		objectMap["id"] = d.ID
9836	}
9837	return json.Marshal(objectMap)
9838}
9839
9840// UnmarshalJSON is the custom unmarshaler for Delegation struct.
9841func (d *Delegation) UnmarshalJSON(body []byte) error {
9842	var m map[string]*json.RawMessage
9843	err := json.Unmarshal(body, &m)
9844	if err != nil {
9845		return err
9846	}
9847	for k, v := range m {
9848		switch k {
9849		case "properties":
9850			if v != nil {
9851				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
9852				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
9853				if err != nil {
9854					return err
9855				}
9856				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
9857			}
9858		case "name":
9859			if v != nil {
9860				var name string
9861				err = json.Unmarshal(*v, &name)
9862				if err != nil {
9863					return err
9864				}
9865				d.Name = &name
9866			}
9867		case "etag":
9868			if v != nil {
9869				var etag string
9870				err = json.Unmarshal(*v, &etag)
9871				if err != nil {
9872					return err
9873				}
9874				d.Etag = &etag
9875			}
9876		case "id":
9877			if v != nil {
9878				var ID string
9879				err = json.Unmarshal(*v, &ID)
9880				if err != nil {
9881					return err
9882				}
9883				d.ID = &ID
9884			}
9885		}
9886	}
9887
9888	return nil
9889}
9890
9891// DeviceProperties list of properties of the device.
9892type DeviceProperties struct {
9893	// DeviceVendor - Name of the device Vendor.
9894	DeviceVendor *string `json:"deviceVendor,omitempty"`
9895	// DeviceModel - Model of the device.
9896	DeviceModel *string `json:"deviceModel,omitempty"`
9897	// LinkSpeedInMbps - Link speed.
9898	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
9899}
9900
9901// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
9902// network. Standard DHCP option for a subnet overrides VNET DHCP options.
9903type DhcpOptions struct {
9904	// DNSServers - The list of DNS servers IP addresses.
9905	DNSServers *[]string `json:"dnsServers,omitempty"`
9906}
9907
9908// Dimension dimension of the metric.
9909type Dimension struct {
9910	// Name - The name of the dimension.
9911	Name *string `json:"name,omitempty"`
9912	// DisplayName - The display name of the dimension.
9913	DisplayName *string `json:"displayName,omitempty"`
9914	// InternalName - The internal name of the dimension.
9915	InternalName *string `json:"internalName,omitempty"`
9916}
9917
9918// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
9919type DNSNameAvailabilityResult struct {
9920	autorest.Response `json:"-"`
9921	// Available - Domain availability (True/False).
9922	Available *bool `json:"available,omitempty"`
9923}
9924
9925// EffectiveNetworkSecurityGroup effective network security group.
9926type EffectiveNetworkSecurityGroup struct {
9927	// NetworkSecurityGroup - The ID of network security group that is applied.
9928	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
9929	// Association - Associated resources.
9930	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
9931	// EffectiveSecurityRules - A collection of effective security rules.
9932	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
9933	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
9934	TagMap map[string][]string `json:"tagMap"`
9935}
9936
9937// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
9938func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
9939	objectMap := make(map[string]interface{})
9940	if ensg.NetworkSecurityGroup != nil {
9941		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
9942	}
9943	if ensg.Association != nil {
9944		objectMap["association"] = ensg.Association
9945	}
9946	if ensg.EffectiveSecurityRules != nil {
9947		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
9948	}
9949	if ensg.TagMap != nil {
9950		objectMap["tagMap"] = ensg.TagMap
9951	}
9952	return json.Marshal(objectMap)
9953}
9954
9955// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
9956type EffectiveNetworkSecurityGroupAssociation struct {
9957	// Subnet - The ID of the subnet if assigned.
9958	Subnet *SubResource `json:"subnet,omitempty"`
9959	// NetworkInterface - The ID of the network interface if assigned.
9960	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
9961}
9962
9963// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
9964// call.
9965type EffectiveNetworkSecurityGroupListResult struct {
9966	autorest.Response `json:"-"`
9967	// Value - A list of effective network security groups.
9968	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
9969	// NextLink - READ-ONLY; The URL to get the next set of results.
9970	NextLink *string `json:"nextLink,omitempty"`
9971}
9972
9973// EffectiveNetworkSecurityRule effective network security rules.
9974type EffectiveNetworkSecurityRule struct {
9975	// Name - The name of the security rule specified by the user (if created by the user).
9976	Name *string `json:"name,omitempty"`
9977	// Protocol - The network protocol this rule applies to. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
9978	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
9979	// SourcePortRange - The source port or range.
9980	SourcePortRange *string `json:"sourcePortRange,omitempty"`
9981	// DestinationPortRange - The destination port or range.
9982	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
9983	// SourcePortRanges - The source port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as separator (e.g. 100-400), or an asterisk (*).
9984	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
9985	// DestinationPortRanges - The destination port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as separator (e.g. 100-400), or an asterisk (*).
9986	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
9987	// SourceAddressPrefix - The source address prefix.
9988	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
9989	// DestinationAddressPrefix - The destination address prefix.
9990	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
9991	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
9992	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
9993	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
9994	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
9995	// ExpandedSourceAddressPrefix - The expanded source address prefix.
9996	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
9997	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
9998	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
9999	// Access - Whether network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
10000	Access SecurityRuleAccess `json:"access,omitempty"`
10001	// Priority - The priority of the rule.
10002	Priority *int32 `json:"priority,omitempty"`
10003	// Direction - The direction of the rule. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
10004	Direction SecurityRuleDirection `json:"direction,omitempty"`
10005}
10006
10007// EffectiveRoute effective Route.
10008type EffectiveRoute struct {
10009	// Name - The name of the user defined route. This is optional.
10010	Name *string `json:"name,omitempty"`
10011	// DisableBgpRoutePropagation - If true, on-premises routes are not propagated to the network interfaces in the subnet.
10012	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
10013	// Source - Who created the route. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
10014	Source EffectiveRouteSource `json:"source,omitempty"`
10015	// State - The value of effective route. Possible values include: 'Active', 'Invalid'
10016	State EffectiveRouteState `json:"state,omitempty"`
10017	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
10018	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
10019	// NextHopIPAddress - The IP address of the next hop of the effective route.
10020	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
10021	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
10022	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
10023}
10024
10025// EffectiveRouteListResult response for list effective route API service call.
10026type EffectiveRouteListResult struct {
10027	autorest.Response `json:"-"`
10028	// Value - A list of effective routes.
10029	Value *[]EffectiveRoute `json:"value,omitempty"`
10030	// NextLink - READ-ONLY; The URL to get the next set of results.
10031	NextLink *string `json:"nextLink,omitempty"`
10032}
10033
10034// EndpointServiceResult endpoint service.
10035type EndpointServiceResult struct {
10036	// Name - READ-ONLY; Name of the endpoint service.
10037	Name *string `json:"name,omitempty"`
10038	// Type - READ-ONLY; Type of the endpoint service.
10039	Type *string `json:"type,omitempty"`
10040	// ID - Resource ID.
10041	ID *string `json:"id,omitempty"`
10042}
10043
10044// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
10045type EndpointServicesListResult struct {
10046	autorest.Response `json:"-"`
10047	// Value - List of available endpoint services in a region.
10048	Value *[]EndpointServiceResult `json:"value,omitempty"`
10049	// NextLink - The URL to get the next set of results.
10050	NextLink *string `json:"nextLink,omitempty"`
10051}
10052
10053// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
10054// values.
10055type EndpointServicesListResultIterator struct {
10056	i    int
10057	page EndpointServicesListResultPage
10058}
10059
10060// NextWithContext advances to the next value.  If there was an error making
10061// the request the iterator does not advance and the error is returned.
10062func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
10063	if tracing.IsEnabled() {
10064		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
10065		defer func() {
10066			sc := -1
10067			if iter.Response().Response.Response != nil {
10068				sc = iter.Response().Response.Response.StatusCode
10069			}
10070			tracing.EndSpan(ctx, sc, err)
10071		}()
10072	}
10073	iter.i++
10074	if iter.i < len(iter.page.Values()) {
10075		return nil
10076	}
10077	err = iter.page.NextWithContext(ctx)
10078	if err != nil {
10079		iter.i--
10080		return err
10081	}
10082	iter.i = 0
10083	return nil
10084}
10085
10086// Next advances to the next value.  If there was an error making
10087// the request the iterator does not advance and the error is returned.
10088// Deprecated: Use NextWithContext() instead.
10089func (iter *EndpointServicesListResultIterator) Next() error {
10090	return iter.NextWithContext(context.Background())
10091}
10092
10093// NotDone returns true if the enumeration should be started or is not yet complete.
10094func (iter EndpointServicesListResultIterator) NotDone() bool {
10095	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10096}
10097
10098// Response returns the raw server response from the last page request.
10099func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
10100	return iter.page.Response()
10101}
10102
10103// Value returns the current value or a zero-initialized value if the
10104// iterator has advanced beyond the end of the collection.
10105func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
10106	if !iter.page.NotDone() {
10107		return EndpointServiceResult{}
10108	}
10109	return iter.page.Values()[iter.i]
10110}
10111
10112// Creates a new instance of the EndpointServicesListResultIterator type.
10113func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
10114	return EndpointServicesListResultIterator{page: page}
10115}
10116
10117// IsEmpty returns true if the ListResult contains no values.
10118func (eslr EndpointServicesListResult) IsEmpty() bool {
10119	return eslr.Value == nil || len(*eslr.Value) == 0
10120}
10121
10122// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
10123// It returns nil if no more results exist.
10124func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
10125	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
10126		return nil, nil
10127	}
10128	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10129		autorest.AsJSON(),
10130		autorest.AsGet(),
10131		autorest.WithBaseURL(to.String(eslr.NextLink)))
10132}
10133
10134// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
10135type EndpointServicesListResultPage struct {
10136	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
10137	eslr EndpointServicesListResult
10138}
10139
10140// NextWithContext advances to the next page of values.  If there was an error making
10141// the request the page does not advance and the error is returned.
10142func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
10143	if tracing.IsEnabled() {
10144		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
10145		defer func() {
10146			sc := -1
10147			if page.Response().Response.Response != nil {
10148				sc = page.Response().Response.Response.StatusCode
10149			}
10150			tracing.EndSpan(ctx, sc, err)
10151		}()
10152	}
10153	next, err := page.fn(ctx, page.eslr)
10154	if err != nil {
10155		return err
10156	}
10157	page.eslr = next
10158	return nil
10159}
10160
10161// Next advances to the next page of values.  If there was an error making
10162// the request the page does not advance and the error is returned.
10163// Deprecated: Use NextWithContext() instead.
10164func (page *EndpointServicesListResultPage) Next() error {
10165	return page.NextWithContext(context.Background())
10166}
10167
10168// NotDone returns true if the page enumeration should be started or is not yet complete.
10169func (page EndpointServicesListResultPage) NotDone() bool {
10170	return !page.eslr.IsEmpty()
10171}
10172
10173// Response returns the raw server response from the last page request.
10174func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
10175	return page.eslr
10176}
10177
10178// Values returns the slice of values for the current page or nil if there are no values.
10179func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
10180	if page.eslr.IsEmpty() {
10181		return nil
10182	}
10183	return *page.eslr.Value
10184}
10185
10186// Creates a new instance of the EndpointServicesListResultPage type.
10187func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
10188	return EndpointServicesListResultPage{fn: getNextPage}
10189}
10190
10191// Error common error representation.
10192type Error struct {
10193	// Code - Error code.
10194	Code *string `json:"code,omitempty"`
10195	// Message - Error message.
10196	Message *string `json:"message,omitempty"`
10197	// Target - Error target.
10198	Target *string `json:"target,omitempty"`
10199	// Details - Error details.
10200	Details *[]ErrorDetails `json:"details,omitempty"`
10201	// InnerError - Inner error message.
10202	InnerError *string `json:"innerError,omitempty"`
10203}
10204
10205// ErrorDetails common error details representation.
10206type ErrorDetails struct {
10207	// Code - Error code.
10208	Code *string `json:"code,omitempty"`
10209	// Target - Error target.
10210	Target *string `json:"target,omitempty"`
10211	// Message - Error message.
10212	Message *string `json:"message,omitempty"`
10213}
10214
10215// ErrorResponse the error object.
10216type ErrorResponse struct {
10217	// Error - The error details object.
10218	Error *ErrorDetails `json:"error,omitempty"`
10219}
10220
10221// EvaluatedNetworkSecurityGroup results of network security group evaluation.
10222type EvaluatedNetworkSecurityGroup struct {
10223	// NetworkSecurityGroupID - Network security group ID.
10224	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
10225	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
10226	AppliedTo *string `json:"appliedTo,omitempty"`
10227	// MatchedRule - Matched network security rule.
10228	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
10229	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
10230	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
10231}
10232
10233// ExpressRouteCircuit expressRouteCircuit resource.
10234type ExpressRouteCircuit struct {
10235	autorest.Response `json:"-"`
10236	// Sku - The SKU.
10237	Sku *ExpressRouteCircuitSku `json:"sku,omitempty"`
10238	// ExpressRouteCircuitPropertiesFormat - Properties of the express route circuit.
10239	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
10240	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10241	Etag *string `json:"etag,omitempty"`
10242	// ID - Resource ID.
10243	ID *string `json:"id,omitempty"`
10244	// Name - READ-ONLY; Resource name.
10245	Name *string `json:"name,omitempty"`
10246	// Type - READ-ONLY; Resource type.
10247	Type *string `json:"type,omitempty"`
10248	// Location - Resource location.
10249	Location *string `json:"location,omitempty"`
10250	// Tags - Resource tags.
10251	Tags map[string]*string `json:"tags"`
10252}
10253
10254// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
10255func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
10256	objectMap := make(map[string]interface{})
10257	if erc.Sku != nil {
10258		objectMap["sku"] = erc.Sku
10259	}
10260	if erc.ExpressRouteCircuitPropertiesFormat != nil {
10261		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
10262	}
10263	if erc.ID != nil {
10264		objectMap["id"] = erc.ID
10265	}
10266	if erc.Location != nil {
10267		objectMap["location"] = erc.Location
10268	}
10269	if erc.Tags != nil {
10270		objectMap["tags"] = erc.Tags
10271	}
10272	return json.Marshal(objectMap)
10273}
10274
10275// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
10276func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
10277	var m map[string]*json.RawMessage
10278	err := json.Unmarshal(body, &m)
10279	if err != nil {
10280		return err
10281	}
10282	for k, v := range m {
10283		switch k {
10284		case "sku":
10285			if v != nil {
10286				var sku ExpressRouteCircuitSku
10287				err = json.Unmarshal(*v, &sku)
10288				if err != nil {
10289					return err
10290				}
10291				erc.Sku = &sku
10292			}
10293		case "properties":
10294			if v != nil {
10295				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
10296				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
10297				if err != nil {
10298					return err
10299				}
10300				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
10301			}
10302		case "etag":
10303			if v != nil {
10304				var etag string
10305				err = json.Unmarshal(*v, &etag)
10306				if err != nil {
10307					return err
10308				}
10309				erc.Etag = &etag
10310			}
10311		case "id":
10312			if v != nil {
10313				var ID string
10314				err = json.Unmarshal(*v, &ID)
10315				if err != nil {
10316					return err
10317				}
10318				erc.ID = &ID
10319			}
10320		case "name":
10321			if v != nil {
10322				var name string
10323				err = json.Unmarshal(*v, &name)
10324				if err != nil {
10325					return err
10326				}
10327				erc.Name = &name
10328			}
10329		case "type":
10330			if v != nil {
10331				var typeVar string
10332				err = json.Unmarshal(*v, &typeVar)
10333				if err != nil {
10334					return err
10335				}
10336				erc.Type = &typeVar
10337			}
10338		case "location":
10339			if v != nil {
10340				var location string
10341				err = json.Unmarshal(*v, &location)
10342				if err != nil {
10343					return err
10344				}
10345				erc.Location = &location
10346			}
10347		case "tags":
10348			if v != nil {
10349				var tags map[string]*string
10350				err = json.Unmarshal(*v, &tags)
10351				if err != nil {
10352					return err
10353				}
10354				erc.Tags = tags
10355			}
10356		}
10357	}
10358
10359	return nil
10360}
10361
10362// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
10363type ExpressRouteCircuitArpTable struct {
10364	// Age - Entry age in minutes.
10365	Age *int32 `json:"age,omitempty"`
10366	// Interface - Interface address.
10367	Interface *string `json:"interface,omitempty"`
10368	// IPAddress - The IP address.
10369	IPAddress *string `json:"ipAddress,omitempty"`
10370	// MacAddress - The MAC address.
10371	MacAddress *string `json:"macAddress,omitempty"`
10372}
10373
10374// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
10375type ExpressRouteCircuitAuthorization struct {
10376	autorest.Response `json:"-"`
10377	// AuthorizationPropertiesFormat - Properties of the express route circuit authorization.
10378	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
10379	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10380	Name *string `json:"name,omitempty"`
10381	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10382	Etag *string `json:"etag,omitempty"`
10383	// Type - READ-ONLY; Type of the resource.
10384	Type *string `json:"type,omitempty"`
10385	// ID - Resource ID.
10386	ID *string `json:"id,omitempty"`
10387}
10388
10389// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
10390func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
10391	objectMap := make(map[string]interface{})
10392	if erca.AuthorizationPropertiesFormat != nil {
10393		objectMap["properties"] = erca.AuthorizationPropertiesFormat
10394	}
10395	if erca.Name != nil {
10396		objectMap["name"] = erca.Name
10397	}
10398	if erca.ID != nil {
10399		objectMap["id"] = erca.ID
10400	}
10401	return json.Marshal(objectMap)
10402}
10403
10404// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
10405func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
10406	var m map[string]*json.RawMessage
10407	err := json.Unmarshal(body, &m)
10408	if err != nil {
10409		return err
10410	}
10411	for k, v := range m {
10412		switch k {
10413		case "properties":
10414			if v != nil {
10415				var authorizationPropertiesFormat AuthorizationPropertiesFormat
10416				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
10417				if err != nil {
10418					return err
10419				}
10420				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
10421			}
10422		case "name":
10423			if v != nil {
10424				var name string
10425				err = json.Unmarshal(*v, &name)
10426				if err != nil {
10427					return err
10428				}
10429				erca.Name = &name
10430			}
10431		case "etag":
10432			if v != nil {
10433				var etag string
10434				err = json.Unmarshal(*v, &etag)
10435				if err != nil {
10436					return err
10437				}
10438				erca.Etag = &etag
10439			}
10440		case "type":
10441			if v != nil {
10442				var typeVar string
10443				err = json.Unmarshal(*v, &typeVar)
10444				if err != nil {
10445					return err
10446				}
10447				erca.Type = &typeVar
10448			}
10449		case "id":
10450			if v != nil {
10451				var ID string
10452				err = json.Unmarshal(*v, &ID)
10453				if err != nil {
10454					return err
10455				}
10456				erca.ID = &ID
10457			}
10458		}
10459	}
10460
10461	return nil
10462}
10463
10464// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10465// results of a long-running operation.
10466type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
10467	azure.Future
10468}
10469
10470// Result returns the result of the asynchronous operation.
10471// If the operation has not completed it will return an error.
10472func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
10473	var done bool
10474	done, err = future.DoneWithContext(context.Background(), client)
10475	if err != nil {
10476		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10477		return
10478	}
10479	if !done {
10480		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
10481		return
10482	}
10483	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10484	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
10485		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
10486		if err != nil {
10487			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
10488		}
10489	}
10490	return
10491}
10492
10493// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
10494// of a long-running operation.
10495type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
10496	azure.Future
10497}
10498
10499// Result returns the result of the asynchronous operation.
10500// If the operation has not completed it will return an error.
10501func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
10502	var done bool
10503	done, err = future.DoneWithContext(context.Background(), client)
10504	if err != nil {
10505		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
10506		return
10507	}
10508	if !done {
10509		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
10510		return
10511	}
10512	ar.Response = future.Response()
10513	return
10514}
10515
10516// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
10517// resource.
10518type ExpressRouteCircuitConnection struct {
10519	autorest.Response `json:"-"`
10520	// ExpressRouteCircuitConnectionPropertiesFormat - Properties of the express route circuit connection.
10521	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
10522	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10523	Name *string `json:"name,omitempty"`
10524	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10525	Etag *string `json:"etag,omitempty"`
10526	// Type - READ-ONLY; Type of the resource.
10527	Type *string `json:"type,omitempty"`
10528	// ID - Resource ID.
10529	ID *string `json:"id,omitempty"`
10530}
10531
10532// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
10533func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
10534	objectMap := make(map[string]interface{})
10535	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
10536		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
10537	}
10538	if ercc.Name != nil {
10539		objectMap["name"] = ercc.Name
10540	}
10541	if ercc.ID != nil {
10542		objectMap["id"] = ercc.ID
10543	}
10544	return json.Marshal(objectMap)
10545}
10546
10547// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
10548func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
10549	var m map[string]*json.RawMessage
10550	err := json.Unmarshal(body, &m)
10551	if err != nil {
10552		return err
10553	}
10554	for k, v := range m {
10555		switch k {
10556		case "properties":
10557			if v != nil {
10558				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
10559				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
10560				if err != nil {
10561					return err
10562				}
10563				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
10564			}
10565		case "name":
10566			if v != nil {
10567				var name string
10568				err = json.Unmarshal(*v, &name)
10569				if err != nil {
10570					return err
10571				}
10572				ercc.Name = &name
10573			}
10574		case "etag":
10575			if v != nil {
10576				var etag string
10577				err = json.Unmarshal(*v, &etag)
10578				if err != nil {
10579					return err
10580				}
10581				ercc.Etag = &etag
10582			}
10583		case "type":
10584			if v != nil {
10585				var typeVar string
10586				err = json.Unmarshal(*v, &typeVar)
10587				if err != nil {
10588					return err
10589				}
10590				ercc.Type = &typeVar
10591			}
10592		case "id":
10593			if v != nil {
10594				var ID string
10595				err = json.Unmarshal(*v, &ID)
10596				if err != nil {
10597					return err
10598				}
10599				ercc.ID = &ID
10600			}
10601		}
10602	}
10603
10604	return nil
10605}
10606
10607// ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
10608// global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
10609type ExpressRouteCircuitConnectionListResult struct {
10610	autorest.Response `json:"-"`
10611	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
10612	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
10613	// NextLink - The URL to get the next set of results.
10614	NextLink *string `json:"nextLink,omitempty"`
10615}
10616
10617// ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
10618// ExpressRouteCircuitConnection values.
10619type ExpressRouteCircuitConnectionListResultIterator struct {
10620	i    int
10621	page ExpressRouteCircuitConnectionListResultPage
10622}
10623
10624// NextWithContext advances to the next value.  If there was an error making
10625// the request the iterator does not advance and the error is returned.
10626func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
10627	if tracing.IsEnabled() {
10628		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
10629		defer func() {
10630			sc := -1
10631			if iter.Response().Response.Response != nil {
10632				sc = iter.Response().Response.Response.StatusCode
10633			}
10634			tracing.EndSpan(ctx, sc, err)
10635		}()
10636	}
10637	iter.i++
10638	if iter.i < len(iter.page.Values()) {
10639		return nil
10640	}
10641	err = iter.page.NextWithContext(ctx)
10642	if err != nil {
10643		iter.i--
10644		return err
10645	}
10646	iter.i = 0
10647	return nil
10648}
10649
10650// Next advances to the next value.  If there was an error making
10651// the request the iterator does not advance and the error is returned.
10652// Deprecated: Use NextWithContext() instead.
10653func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
10654	return iter.NextWithContext(context.Background())
10655}
10656
10657// NotDone returns true if the enumeration should be started or is not yet complete.
10658func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
10659	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10660}
10661
10662// Response returns the raw server response from the last page request.
10663func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
10664	return iter.page.Response()
10665}
10666
10667// Value returns the current value or a zero-initialized value if the
10668// iterator has advanced beyond the end of the collection.
10669func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
10670	if !iter.page.NotDone() {
10671		return ExpressRouteCircuitConnection{}
10672	}
10673	return iter.page.Values()[iter.i]
10674}
10675
10676// Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
10677func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
10678	return ExpressRouteCircuitConnectionListResultIterator{page: page}
10679}
10680
10681// IsEmpty returns true if the ListResult contains no values.
10682func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
10683	return ercclr.Value == nil || len(*ercclr.Value) == 0
10684}
10685
10686// expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
10687// It returns nil if no more results exist.
10688func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
10689	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
10690		return nil, nil
10691	}
10692	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10693		autorest.AsJSON(),
10694		autorest.AsGet(),
10695		autorest.WithBaseURL(to.String(ercclr.NextLink)))
10696}
10697
10698// ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
10699type ExpressRouteCircuitConnectionListResultPage struct {
10700	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
10701	ercclr ExpressRouteCircuitConnectionListResult
10702}
10703
10704// NextWithContext advances to the next page of values.  If there was an error making
10705// the request the page does not advance and the error is returned.
10706func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
10707	if tracing.IsEnabled() {
10708		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
10709		defer func() {
10710			sc := -1
10711			if page.Response().Response.Response != nil {
10712				sc = page.Response().Response.Response.StatusCode
10713			}
10714			tracing.EndSpan(ctx, sc, err)
10715		}()
10716	}
10717	next, err := page.fn(ctx, page.ercclr)
10718	if err != nil {
10719		return err
10720	}
10721	page.ercclr = next
10722	return nil
10723}
10724
10725// Next advances to the next page of values.  If there was an error making
10726// the request the page does not advance and the error is returned.
10727// Deprecated: Use NextWithContext() instead.
10728func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
10729	return page.NextWithContext(context.Background())
10730}
10731
10732// NotDone returns true if the page enumeration should be started or is not yet complete.
10733func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
10734	return !page.ercclr.IsEmpty()
10735}
10736
10737// Response returns the raw server response from the last page request.
10738func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
10739	return page.ercclr
10740}
10741
10742// Values returns the slice of values for the current page or nil if there are no values.
10743func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
10744	if page.ercclr.IsEmpty() {
10745		return nil
10746	}
10747	return *page.ercclr.Value
10748}
10749
10750// Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
10751func NewExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
10752	return ExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
10753}
10754
10755// ExpressRouteCircuitConnectionPropertiesFormat properties of the express route circuit connection.
10756type ExpressRouteCircuitConnectionPropertiesFormat struct {
10757	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
10758	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
10759	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
10760	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
10761	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
10762	AddressPrefix *string `json:"addressPrefix,omitempty"`
10763	// AuthorizationKey - The authorization key.
10764	AuthorizationKey *string `json:"authorizationKey,omitempty"`
10765	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
10766	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
10767	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10768	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10769}
10770
10771// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10772// results of a long-running operation.
10773type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
10774	azure.Future
10775}
10776
10777// Result returns the result of the asynchronous operation.
10778// If the operation has not completed it will return an error.
10779func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
10780	var done bool
10781	done, err = future.DoneWithContext(context.Background(), client)
10782	if err != nil {
10783		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10784		return
10785	}
10786	if !done {
10787		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
10788		return
10789	}
10790	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10791	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
10792		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
10793		if err != nil {
10794			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
10795		}
10796	}
10797	return
10798}
10799
10800// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
10801// long-running operation.
10802type ExpressRouteCircuitConnectionsDeleteFuture struct {
10803	azure.Future
10804}
10805
10806// Result returns the result of the asynchronous operation.
10807// If the operation has not completed it will return an error.
10808func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
10809	var done bool
10810	done, err = future.DoneWithContext(context.Background(), client)
10811	if err != nil {
10812		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
10813		return
10814	}
10815	if !done {
10816		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
10817		return
10818	}
10819	ar.Response = future.Response()
10820	return
10821}
10822
10823// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
10824type ExpressRouteCircuitListResult struct {
10825	autorest.Response `json:"-"`
10826	// Value - A list of ExpressRouteCircuits in a resource group.
10827	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
10828	// NextLink - The URL to get the next set of results.
10829	NextLink *string `json:"nextLink,omitempty"`
10830}
10831
10832// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
10833// values.
10834type ExpressRouteCircuitListResultIterator struct {
10835	i    int
10836	page ExpressRouteCircuitListResultPage
10837}
10838
10839// NextWithContext advances to the next value.  If there was an error making
10840// the request the iterator does not advance and the error is returned.
10841func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
10842	if tracing.IsEnabled() {
10843		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
10844		defer func() {
10845			sc := -1
10846			if iter.Response().Response.Response != nil {
10847				sc = iter.Response().Response.Response.StatusCode
10848			}
10849			tracing.EndSpan(ctx, sc, err)
10850		}()
10851	}
10852	iter.i++
10853	if iter.i < len(iter.page.Values()) {
10854		return nil
10855	}
10856	err = iter.page.NextWithContext(ctx)
10857	if err != nil {
10858		iter.i--
10859		return err
10860	}
10861	iter.i = 0
10862	return nil
10863}
10864
10865// Next advances to the next value.  If there was an error making
10866// the request the iterator does not advance and the error is returned.
10867// Deprecated: Use NextWithContext() instead.
10868func (iter *ExpressRouteCircuitListResultIterator) Next() error {
10869	return iter.NextWithContext(context.Background())
10870}
10871
10872// NotDone returns true if the enumeration should be started or is not yet complete.
10873func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
10874	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10875}
10876
10877// Response returns the raw server response from the last page request.
10878func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
10879	return iter.page.Response()
10880}
10881
10882// Value returns the current value or a zero-initialized value if the
10883// iterator has advanced beyond the end of the collection.
10884func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
10885	if !iter.page.NotDone() {
10886		return ExpressRouteCircuit{}
10887	}
10888	return iter.page.Values()[iter.i]
10889}
10890
10891// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
10892func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
10893	return ExpressRouteCircuitListResultIterator{page: page}
10894}
10895
10896// IsEmpty returns true if the ListResult contains no values.
10897func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
10898	return erclr.Value == nil || len(*erclr.Value) == 0
10899}
10900
10901// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
10902// It returns nil if no more results exist.
10903func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
10904	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
10905		return nil, nil
10906	}
10907	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10908		autorest.AsJSON(),
10909		autorest.AsGet(),
10910		autorest.WithBaseURL(to.String(erclr.NextLink)))
10911}
10912
10913// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
10914type ExpressRouteCircuitListResultPage struct {
10915	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
10916	erclr ExpressRouteCircuitListResult
10917}
10918
10919// NextWithContext advances to the next page of values.  If there was an error making
10920// the request the page does not advance and the error is returned.
10921func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
10922	if tracing.IsEnabled() {
10923		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
10924		defer func() {
10925			sc := -1
10926			if page.Response().Response.Response != nil {
10927				sc = page.Response().Response.Response.StatusCode
10928			}
10929			tracing.EndSpan(ctx, sc, err)
10930		}()
10931	}
10932	next, err := page.fn(ctx, page.erclr)
10933	if err != nil {
10934		return err
10935	}
10936	page.erclr = next
10937	return nil
10938}
10939
10940// Next advances to the next page of values.  If there was an error making
10941// the request the page does not advance and the error is returned.
10942// Deprecated: Use NextWithContext() instead.
10943func (page *ExpressRouteCircuitListResultPage) Next() error {
10944	return page.NextWithContext(context.Background())
10945}
10946
10947// NotDone returns true if the page enumeration should be started or is not yet complete.
10948func (page ExpressRouteCircuitListResultPage) NotDone() bool {
10949	return !page.erclr.IsEmpty()
10950}
10951
10952// Response returns the raw server response from the last page request.
10953func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
10954	return page.erclr
10955}
10956
10957// Values returns the slice of values for the current page or nil if there are no values.
10958func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
10959	if page.erclr.IsEmpty() {
10960		return nil
10961	}
10962	return *page.erclr.Value
10963}
10964
10965// Creates a new instance of the ExpressRouteCircuitListResultPage type.
10966func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
10967	return ExpressRouteCircuitListResultPage{fn: getNextPage}
10968}
10969
10970// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
10971type ExpressRouteCircuitPeering struct {
10972	autorest.Response `json:"-"`
10973	// ExpressRouteCircuitPeeringPropertiesFormat - Properties of the express route circuit peering.
10974	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
10975	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10976	Name *string `json:"name,omitempty"`
10977	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10978	Etag *string `json:"etag,omitempty"`
10979	// Type - READ-ONLY; Type of the resource.
10980	Type *string `json:"type,omitempty"`
10981	// ID - Resource ID.
10982	ID *string `json:"id,omitempty"`
10983}
10984
10985// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
10986func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
10987	objectMap := make(map[string]interface{})
10988	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
10989		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
10990	}
10991	if ercp.Name != nil {
10992		objectMap["name"] = ercp.Name
10993	}
10994	if ercp.ID != nil {
10995		objectMap["id"] = ercp.ID
10996	}
10997	return json.Marshal(objectMap)
10998}
10999
11000// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
11001func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
11002	var m map[string]*json.RawMessage
11003	err := json.Unmarshal(body, &m)
11004	if err != nil {
11005		return err
11006	}
11007	for k, v := range m {
11008		switch k {
11009		case "properties":
11010			if v != nil {
11011				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
11012				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
11013				if err != nil {
11014					return err
11015				}
11016				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
11017			}
11018		case "name":
11019			if v != nil {
11020				var name string
11021				err = json.Unmarshal(*v, &name)
11022				if err != nil {
11023					return err
11024				}
11025				ercp.Name = &name
11026			}
11027		case "etag":
11028			if v != nil {
11029				var etag string
11030				err = json.Unmarshal(*v, &etag)
11031				if err != nil {
11032					return err
11033				}
11034				ercp.Etag = &etag
11035			}
11036		case "type":
11037			if v != nil {
11038				var typeVar string
11039				err = json.Unmarshal(*v, &typeVar)
11040				if err != nil {
11041					return err
11042				}
11043				ercp.Type = &typeVar
11044			}
11045		case "id":
11046			if v != nil {
11047				var ID string
11048				err = json.Unmarshal(*v, &ID)
11049				if err != nil {
11050					return err
11051				}
11052				ercp.ID = &ID
11053			}
11054		}
11055	}
11056
11057	return nil
11058}
11059
11060// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
11061type ExpressRouteCircuitPeeringConfig struct {
11062	// AdvertisedPublicPrefixes - The reference of AdvertisedPublicPrefixes.
11063	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
11064	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering.
11065	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
11066	// AdvertisedPublicPrefixesState - The advertised public prefix state of the Peering resource. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
11067	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
11068	// LegacyMode - The legacy mode of the peering.
11069	LegacyMode *int32 `json:"legacyMode,omitempty"`
11070	// CustomerASN - The CustomerASN of the peering.
11071	CustomerASN *int32 `json:"customerASN,omitempty"`
11072	// RoutingRegistryName - The RoutingRegistryName of the configuration.
11073	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
11074}
11075
11076// ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
11077type ExpressRouteCircuitPeeringID struct {
11078	// ID - The ID of the ExpressRoute circuit peering.
11079	ID *string `json:"id,omitempty"`
11080}
11081
11082// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
11083// that belong to an ExpressRouteCircuit.
11084type ExpressRouteCircuitPeeringListResult struct {
11085	autorest.Response `json:"-"`
11086	// Value - The peerings in an express route circuit.
11087	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
11088	// NextLink - The URL to get the next set of results.
11089	NextLink *string `json:"nextLink,omitempty"`
11090}
11091
11092// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
11093// ExpressRouteCircuitPeering values.
11094type ExpressRouteCircuitPeeringListResultIterator struct {
11095	i    int
11096	page ExpressRouteCircuitPeeringListResultPage
11097}
11098
11099// NextWithContext advances to the next value.  If there was an error making
11100// the request the iterator does not advance and the error is returned.
11101func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
11102	if tracing.IsEnabled() {
11103		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
11104		defer func() {
11105			sc := -1
11106			if iter.Response().Response.Response != nil {
11107				sc = iter.Response().Response.Response.StatusCode
11108			}
11109			tracing.EndSpan(ctx, sc, err)
11110		}()
11111	}
11112	iter.i++
11113	if iter.i < len(iter.page.Values()) {
11114		return nil
11115	}
11116	err = iter.page.NextWithContext(ctx)
11117	if err != nil {
11118		iter.i--
11119		return err
11120	}
11121	iter.i = 0
11122	return nil
11123}
11124
11125// Next advances to the next value.  If there was an error making
11126// the request the iterator does not advance and the error is returned.
11127// Deprecated: Use NextWithContext() instead.
11128func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
11129	return iter.NextWithContext(context.Background())
11130}
11131
11132// NotDone returns true if the enumeration should be started or is not yet complete.
11133func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
11134	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11135}
11136
11137// Response returns the raw server response from the last page request.
11138func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
11139	return iter.page.Response()
11140}
11141
11142// Value returns the current value or a zero-initialized value if the
11143// iterator has advanced beyond the end of the collection.
11144func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
11145	if !iter.page.NotDone() {
11146		return ExpressRouteCircuitPeering{}
11147	}
11148	return iter.page.Values()[iter.i]
11149}
11150
11151// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
11152func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
11153	return ExpressRouteCircuitPeeringListResultIterator{page: page}
11154}
11155
11156// IsEmpty returns true if the ListResult contains no values.
11157func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
11158	return ercplr.Value == nil || len(*ercplr.Value) == 0
11159}
11160
11161// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
11162// It returns nil if no more results exist.
11163func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
11164	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
11165		return nil, nil
11166	}
11167	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11168		autorest.AsJSON(),
11169		autorest.AsGet(),
11170		autorest.WithBaseURL(to.String(ercplr.NextLink)))
11171}
11172
11173// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
11174type ExpressRouteCircuitPeeringListResultPage struct {
11175	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
11176	ercplr ExpressRouteCircuitPeeringListResult
11177}
11178
11179// NextWithContext advances to the next page of values.  If there was an error making
11180// the request the page does not advance and the error is returned.
11181func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
11182	if tracing.IsEnabled() {
11183		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
11184		defer func() {
11185			sc := -1
11186			if page.Response().Response.Response != nil {
11187				sc = page.Response().Response.Response.StatusCode
11188			}
11189			tracing.EndSpan(ctx, sc, err)
11190		}()
11191	}
11192	next, err := page.fn(ctx, page.ercplr)
11193	if err != nil {
11194		return err
11195	}
11196	page.ercplr = next
11197	return nil
11198}
11199
11200// Next advances to the next page of values.  If there was an error making
11201// the request the page does not advance and the error is returned.
11202// Deprecated: Use NextWithContext() instead.
11203func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
11204	return page.NextWithContext(context.Background())
11205}
11206
11207// NotDone returns true if the page enumeration should be started or is not yet complete.
11208func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
11209	return !page.ercplr.IsEmpty()
11210}
11211
11212// Response returns the raw server response from the last page request.
11213func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
11214	return page.ercplr
11215}
11216
11217// Values returns the slice of values for the current page or nil if there are no values.
11218func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
11219	if page.ercplr.IsEmpty() {
11220		return nil
11221	}
11222	return *page.ercplr.Value
11223}
11224
11225// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
11226func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
11227	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
11228}
11229
11230// ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering.
11231type ExpressRouteCircuitPeeringPropertiesFormat struct {
11232	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
11233	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
11234	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
11235	State ExpressRoutePeeringState `json:"state,omitempty"`
11236	// AzureASN - The Azure ASN.
11237	AzureASN *int32 `json:"azureASN,omitempty"`
11238	// PeerASN - The peer ASN.
11239	PeerASN *int64 `json:"peerASN,omitempty"`
11240	// PrimaryPeerAddressPrefix - The primary address prefix.
11241	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
11242	// SecondaryPeerAddressPrefix - The secondary address prefix.
11243	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
11244	// PrimaryAzurePort - The primary port.
11245	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
11246	// SecondaryAzurePort - The secondary port.
11247	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
11248	// SharedKey - The shared key.
11249	SharedKey *string `json:"sharedKey,omitempty"`
11250	// VlanID - The VLAN ID.
11251	VlanID *int32 `json:"vlanId,omitempty"`
11252	// MicrosoftPeeringConfig - The Microsoft peering configuration.
11253	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
11254	// Stats - The peering stats of express route circuit.
11255	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
11256	// ProvisioningState - The provisioning state of the express route circuit peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11257	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11258	// GatewayManagerEtag - The GatewayManager Etag.
11259	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
11260	// LastModifiedBy - Who was the last to modify the peering.
11261	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
11262	// RouteFilter - The reference of the RouteFilter resource.
11263	RouteFilter *SubResource `json:"routeFilter,omitempty"`
11264	// Ipv6PeeringConfig - The IPv6 peering configuration.
11265	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
11266	// ExpressRouteConnection - The ExpressRoute connection.
11267	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
11268	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
11269	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
11270	// PeeredConnections - READ-ONLY; The list of peered circuit connections associated with Azure Private Peering for this circuit.
11271	PeeredConnections *[]PeerExpressRouteCircuitConnection `json:"peeredConnections,omitempty"`
11272}
11273
11274// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
11275// of a long-running operation.
11276type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
11277	azure.Future
11278}
11279
11280// Result returns the result of the asynchronous operation.
11281// If the operation has not completed it will return an error.
11282func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
11283	var done bool
11284	done, err = future.DoneWithContext(context.Background(), client)
11285	if err != nil {
11286		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11287		return
11288	}
11289	if !done {
11290		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
11291		return
11292	}
11293	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11294	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
11295		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
11296		if err != nil {
11297			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
11298		}
11299	}
11300	return
11301}
11302
11303// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
11304// long-running operation.
11305type ExpressRouteCircuitPeeringsDeleteFuture struct {
11306	azure.Future
11307}
11308
11309// Result returns the result of the asynchronous operation.
11310// If the operation has not completed it will return an error.
11311func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
11312	var done bool
11313	done, err = future.DoneWithContext(context.Background(), client)
11314	if err != nil {
11315		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
11316		return
11317	}
11318	if !done {
11319		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
11320		return
11321	}
11322	ar.Response = future.Response()
11323	return
11324}
11325
11326// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
11327type ExpressRouteCircuitPropertiesFormat struct {
11328	// AllowClassicOperations - Allow classic operations.
11329	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
11330	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
11331	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
11332	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
11333	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
11334	// Authorizations - The list of authorizations.
11335	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
11336	// Peerings - The list of peerings.
11337	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
11338	// ServiceKey - The ServiceKey.
11339	ServiceKey *string `json:"serviceKey,omitempty"`
11340	// ServiceProviderNotes - The ServiceProviderNotes.
11341	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
11342	// ServiceProviderProperties - The ServiceProviderProperties.
11343	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
11344	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
11345	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
11346	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
11347	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
11348	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
11349	Stag *int32 `json:"stag,omitempty"`
11350	// ProvisioningState - The provisioning state of the express route circuit resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11351	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11352	// GatewayManagerEtag - The GatewayManager Etag.
11353	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
11354	// GlobalReachEnabled - Flag denoting Global reach status.
11355	GlobalReachEnabled *bool `json:"globalReachEnabled,omitempty"`
11356}
11357
11358// ExpressRouteCircuitReference reference to an express route circuit.
11359type ExpressRouteCircuitReference struct {
11360	// ID - Corresponding Express Route Circuit Id.
11361	ID *string `json:"id,omitempty"`
11362}
11363
11364// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit.
11365type ExpressRouteCircuitRoutesTable struct {
11366	// NetworkProperty - IP address of a network entity.
11367	NetworkProperty *string `json:"network,omitempty"`
11368	// NextHop - NextHop address.
11369	NextHop *string `json:"nextHop,omitempty"`
11370	// LocPrf - Local preference value as set with the set local-preference route-map configuration command.
11371	LocPrf *string `json:"locPrf,omitempty"`
11372	// Weight - Route Weight.
11373	Weight *int32 `json:"weight,omitempty"`
11374	// Path - Autonomous system paths to the destination network.
11375	Path *string `json:"path,omitempty"`
11376}
11377
11378// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
11379type ExpressRouteCircuitRoutesTableSummary struct {
11380	// Neighbor - IP address of the neighbor.
11381	Neighbor *string `json:"neighbor,omitempty"`
11382	// V - BGP version number spoken to the neighbor.
11383	V *int32 `json:"v,omitempty"`
11384	// As - Autonomous system number.
11385	As *int32 `json:"as,omitempty"`
11386	// UpDown - The length of time that the BGP session has been in the Established state, or the current status if not in the Established state.
11387	UpDown *string `json:"upDown,omitempty"`
11388	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
11389	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
11390}
11391
11392// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
11393// Circuits API.
11394type ExpressRouteCircuitsArpTableListResult struct {
11395	autorest.Response `json:"-"`
11396	// Value - A list of the ARP tables.
11397	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
11398	// NextLink - The URL to get the next set of results.
11399	NextLink *string `json:"nextLink,omitempty"`
11400}
11401
11402// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
11403// long-running operation.
11404type ExpressRouteCircuitsCreateOrUpdateFuture struct {
11405	azure.Future
11406}
11407
11408// Result returns the result of the asynchronous operation.
11409// If the operation has not completed it will return an error.
11410func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
11411	var done bool
11412	done, err = future.DoneWithContext(context.Background(), client)
11413	if err != nil {
11414		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11415		return
11416	}
11417	if !done {
11418		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
11419		return
11420	}
11421	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11422	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11423		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
11424		if err != nil {
11425			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
11426		}
11427	}
11428	return
11429}
11430
11431// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
11432// long-running operation.
11433type ExpressRouteCircuitsDeleteFuture struct {
11434	azure.Future
11435}
11436
11437// Result returns the result of the asynchronous operation.
11438// If the operation has not completed it will return an error.
11439func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
11440	var done bool
11441	done, err = future.DoneWithContext(context.Background(), client)
11442	if err != nil {
11443		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
11444		return
11445	}
11446	if !done {
11447		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
11448		return
11449	}
11450	ar.Response = future.Response()
11451	return
11452}
11453
11454// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
11455// ExpressRouteCircuit.
11456type ExpressRouteCircuitServiceProviderProperties struct {
11457	// ServiceProviderName - The serviceProviderName.
11458	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
11459	// PeeringLocation - The peering location.
11460	PeeringLocation *string `json:"peeringLocation,omitempty"`
11461	// BandwidthInMbps - The BandwidthInMbps.
11462	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
11463}
11464
11465// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
11466type ExpressRouteCircuitSku struct {
11467	// Name - The name of the SKU.
11468	Name *string `json:"name,omitempty"`
11469	// Tier - The tier of the SKU. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal'
11470	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
11471	// Family - The family of the SKU. Possible values include: 'UnlimitedData', 'MeteredData'
11472	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
11473}
11474
11475// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
11476// long-running operation.
11477type ExpressRouteCircuitsListArpTableFuture struct {
11478	azure.Future
11479}
11480
11481// Result returns the result of the asynchronous operation.
11482// If the operation has not completed it will return an error.
11483func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
11484	var done bool
11485	done, err = future.DoneWithContext(context.Background(), client)
11486	if err != nil {
11487		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
11488		return
11489	}
11490	if !done {
11491		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
11492		return
11493	}
11494	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11495	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
11496		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
11497		if err != nil {
11498			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
11499		}
11500	}
11501	return
11502}
11503
11504// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
11505// long-running operation.
11506type ExpressRouteCircuitsListRoutesTableFuture struct {
11507	azure.Future
11508}
11509
11510// Result returns the result of the asynchronous operation.
11511// If the operation has not completed it will return an error.
11512func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
11513	var done bool
11514	done, err = future.DoneWithContext(context.Background(), client)
11515	if err != nil {
11516		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
11517		return
11518	}
11519	if !done {
11520		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
11521		return
11522	}
11523	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11524	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
11525		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
11526		if err != nil {
11527			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
11528		}
11529	}
11530	return
11531}
11532
11533// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
11534// results of a long-running operation.
11535type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
11536	azure.Future
11537}
11538
11539// Result returns the result of the asynchronous operation.
11540// If the operation has not completed it will return an error.
11541func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
11542	var done bool
11543	done, err = future.DoneWithContext(context.Background(), client)
11544	if err != nil {
11545		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
11546		return
11547	}
11548	if !done {
11549		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
11550		return
11551	}
11552	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11553	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
11554		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
11555		if err != nil {
11556			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
11557		}
11558	}
11559	return
11560}
11561
11562// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
11563// Circuits API.
11564type ExpressRouteCircuitsRoutesTableListResult struct {
11565	autorest.Response `json:"-"`
11566	// Value - The list of routes table.
11567	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
11568	// NextLink - The URL to get the next set of results.
11569	NextLink *string `json:"nextLink,omitempty"`
11570}
11571
11572// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
11573// Express Route Circuits API.
11574type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
11575	autorest.Response `json:"-"`
11576	// Value - A list of the routes table.
11577	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
11578	// NextLink - The URL to get the next set of results.
11579	NextLink *string `json:"nextLink,omitempty"`
11580}
11581
11582// ExpressRouteCircuitStats contains stats associated with the peering.
11583type ExpressRouteCircuitStats struct {
11584	autorest.Response `json:"-"`
11585	// PrimarybytesIn - The Primary BytesIn of the peering.
11586	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
11587	// PrimarybytesOut - The primary BytesOut of the peering.
11588	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
11589	// SecondarybytesIn - The secondary BytesIn of the peering.
11590	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
11591	// SecondarybytesOut - The secondary BytesOut of the peering.
11592	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
11593}
11594
11595// ExpressRouteCircuitsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
11596// long-running operation.
11597type ExpressRouteCircuitsUpdateTagsFuture struct {
11598	azure.Future
11599}
11600
11601// Result returns the result of the asynchronous operation.
11602// If the operation has not completed it will return an error.
11603func (future *ExpressRouteCircuitsUpdateTagsFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
11604	var done bool
11605	done, err = future.DoneWithContext(context.Background(), client)
11606	if err != nil {
11607		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11608		return
11609	}
11610	if !done {
11611		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsUpdateTagsFuture")
11612		return
11613	}
11614	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11615	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11616		erc, err = client.UpdateTagsResponder(erc.Response.Response)
11617		if err != nil {
11618			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", erc.Response.Response, "Failure responding to request")
11619		}
11620	}
11621	return
11622}
11623
11624// ExpressRouteConnection expressRouteConnection resource.
11625type ExpressRouteConnection struct {
11626	autorest.Response `json:"-"`
11627	// ExpressRouteConnectionProperties - Properties of the express route connection.
11628	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
11629	// Name - The name of the resource.
11630	Name *string `json:"name,omitempty"`
11631	// ID - Resource ID.
11632	ID *string `json:"id,omitempty"`
11633}
11634
11635// MarshalJSON is the custom marshaler for ExpressRouteConnection.
11636func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
11637	objectMap := make(map[string]interface{})
11638	if erc.ExpressRouteConnectionProperties != nil {
11639		objectMap["properties"] = erc.ExpressRouteConnectionProperties
11640	}
11641	if erc.Name != nil {
11642		objectMap["name"] = erc.Name
11643	}
11644	if erc.ID != nil {
11645		objectMap["id"] = erc.ID
11646	}
11647	return json.Marshal(objectMap)
11648}
11649
11650// UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
11651func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
11652	var m map[string]*json.RawMessage
11653	err := json.Unmarshal(body, &m)
11654	if err != nil {
11655		return err
11656	}
11657	for k, v := range m {
11658		switch k {
11659		case "properties":
11660			if v != nil {
11661				var expressRouteConnectionProperties ExpressRouteConnectionProperties
11662				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
11663				if err != nil {
11664					return err
11665				}
11666				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
11667			}
11668		case "name":
11669			if v != nil {
11670				var name string
11671				err = json.Unmarshal(*v, &name)
11672				if err != nil {
11673					return err
11674				}
11675				erc.Name = &name
11676			}
11677		case "id":
11678			if v != nil {
11679				var ID string
11680				err = json.Unmarshal(*v, &ID)
11681				if err != nil {
11682					return err
11683				}
11684				erc.ID = &ID
11685			}
11686		}
11687	}
11688
11689	return nil
11690}
11691
11692// ExpressRouteConnectionID the ID of the ExpressRouteConnection.
11693type ExpressRouteConnectionID struct {
11694	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
11695	ID *string `json:"id,omitempty"`
11696}
11697
11698// ExpressRouteConnectionList expressRouteConnection list.
11699type ExpressRouteConnectionList struct {
11700	autorest.Response `json:"-"`
11701	// Value - The list of ExpressRoute connections.
11702	Value *[]ExpressRouteConnection `json:"value,omitempty"`
11703}
11704
11705// ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
11706type ExpressRouteConnectionProperties struct {
11707	// ProvisioningState - The provisioning state of the express route connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11708	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11709	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
11710	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
11711	// AuthorizationKey - Authorization key to establish the connection.
11712	AuthorizationKey *string `json:"authorizationKey,omitempty"`
11713	// RoutingWeight - The routing weight associated to the connection.
11714	RoutingWeight *int32 `json:"routingWeight,omitempty"`
11715}
11716
11717// ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
11718// a long-running operation.
11719type ExpressRouteConnectionsCreateOrUpdateFuture struct {
11720	azure.Future
11721}
11722
11723// Result returns the result of the asynchronous operation.
11724// If the operation has not completed it will return an error.
11725func (future *ExpressRouteConnectionsCreateOrUpdateFuture) Result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
11726	var done bool
11727	done, err = future.DoneWithContext(context.Background(), client)
11728	if err != nil {
11729		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11730		return
11731	}
11732	if !done {
11733		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
11734		return
11735	}
11736	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11737	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11738		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
11739		if err != nil {
11740			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
11741		}
11742	}
11743	return
11744}
11745
11746// ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
11747// long-running operation.
11748type ExpressRouteConnectionsDeleteFuture struct {
11749	azure.Future
11750}
11751
11752// Result returns the result of the asynchronous operation.
11753// If the operation has not completed it will return an error.
11754func (future *ExpressRouteConnectionsDeleteFuture) Result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
11755	var done bool
11756	done, err = future.DoneWithContext(context.Background(), client)
11757	if err != nil {
11758		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
11759		return
11760	}
11761	if !done {
11762		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
11763		return
11764	}
11765	ar.Response = future.Response()
11766	return
11767}
11768
11769// ExpressRouteCrossConnection expressRouteCrossConnection resource.
11770type ExpressRouteCrossConnection struct {
11771	autorest.Response `json:"-"`
11772	// ExpressRouteCrossConnectionProperties - Properties of the express route cross connection.
11773	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
11774	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11775	Etag *string `json:"etag,omitempty"`
11776	// ID - Resource ID.
11777	ID *string `json:"id,omitempty"`
11778	// Name - READ-ONLY; Resource name.
11779	Name *string `json:"name,omitempty"`
11780	// Type - READ-ONLY; Resource type.
11781	Type *string `json:"type,omitempty"`
11782	// Location - Resource location.
11783	Location *string `json:"location,omitempty"`
11784	// Tags - Resource tags.
11785	Tags map[string]*string `json:"tags"`
11786}
11787
11788// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
11789func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
11790	objectMap := make(map[string]interface{})
11791	if ercc.ExpressRouteCrossConnectionProperties != nil {
11792		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
11793	}
11794	if ercc.ID != nil {
11795		objectMap["id"] = ercc.ID
11796	}
11797	if ercc.Location != nil {
11798		objectMap["location"] = ercc.Location
11799	}
11800	if ercc.Tags != nil {
11801		objectMap["tags"] = ercc.Tags
11802	}
11803	return json.Marshal(objectMap)
11804}
11805
11806// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
11807func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
11808	var m map[string]*json.RawMessage
11809	err := json.Unmarshal(body, &m)
11810	if err != nil {
11811		return err
11812	}
11813	for k, v := range m {
11814		switch k {
11815		case "properties":
11816			if v != nil {
11817				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
11818				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
11819				if err != nil {
11820					return err
11821				}
11822				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
11823			}
11824		case "etag":
11825			if v != nil {
11826				var etag string
11827				err = json.Unmarshal(*v, &etag)
11828				if err != nil {
11829					return err
11830				}
11831				ercc.Etag = &etag
11832			}
11833		case "id":
11834			if v != nil {
11835				var ID string
11836				err = json.Unmarshal(*v, &ID)
11837				if err != nil {
11838					return err
11839				}
11840				ercc.ID = &ID
11841			}
11842		case "name":
11843			if v != nil {
11844				var name string
11845				err = json.Unmarshal(*v, &name)
11846				if err != nil {
11847					return err
11848				}
11849				ercc.Name = &name
11850			}
11851		case "type":
11852			if v != nil {
11853				var typeVar string
11854				err = json.Unmarshal(*v, &typeVar)
11855				if err != nil {
11856					return err
11857				}
11858				ercc.Type = &typeVar
11859			}
11860		case "location":
11861			if v != nil {
11862				var location string
11863				err = json.Unmarshal(*v, &location)
11864				if err != nil {
11865					return err
11866				}
11867				ercc.Location = &location
11868			}
11869		case "tags":
11870			if v != nil {
11871				var tags map[string]*string
11872				err = json.Unmarshal(*v, &tags)
11873				if err != nil {
11874					return err
11875				}
11876				ercc.Tags = tags
11877			}
11878		}
11879	}
11880
11881	return nil
11882}
11883
11884// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
11885type ExpressRouteCrossConnectionListResult struct {
11886	autorest.Response `json:"-"`
11887	// Value - A list of ExpressRouteCrossConnection resources.
11888	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
11889	// NextLink - READ-ONLY; The URL to get the next set of results.
11890	NextLink *string `json:"nextLink,omitempty"`
11891}
11892
11893// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
11894// ExpressRouteCrossConnection values.
11895type ExpressRouteCrossConnectionListResultIterator struct {
11896	i    int
11897	page ExpressRouteCrossConnectionListResultPage
11898}
11899
11900// NextWithContext advances to the next value.  If there was an error making
11901// the request the iterator does not advance and the error is returned.
11902func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
11903	if tracing.IsEnabled() {
11904		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
11905		defer func() {
11906			sc := -1
11907			if iter.Response().Response.Response != nil {
11908				sc = iter.Response().Response.Response.StatusCode
11909			}
11910			tracing.EndSpan(ctx, sc, err)
11911		}()
11912	}
11913	iter.i++
11914	if iter.i < len(iter.page.Values()) {
11915		return nil
11916	}
11917	err = iter.page.NextWithContext(ctx)
11918	if err != nil {
11919		iter.i--
11920		return err
11921	}
11922	iter.i = 0
11923	return nil
11924}
11925
11926// Next advances to the next value.  If there was an error making
11927// the request the iterator does not advance and the error is returned.
11928// Deprecated: Use NextWithContext() instead.
11929func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
11930	return iter.NextWithContext(context.Background())
11931}
11932
11933// NotDone returns true if the enumeration should be started or is not yet complete.
11934func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
11935	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11936}
11937
11938// Response returns the raw server response from the last page request.
11939func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
11940	return iter.page.Response()
11941}
11942
11943// Value returns the current value or a zero-initialized value if the
11944// iterator has advanced beyond the end of the collection.
11945func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
11946	if !iter.page.NotDone() {
11947		return ExpressRouteCrossConnection{}
11948	}
11949	return iter.page.Values()[iter.i]
11950}
11951
11952// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
11953func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
11954	return ExpressRouteCrossConnectionListResultIterator{page: page}
11955}
11956
11957// IsEmpty returns true if the ListResult contains no values.
11958func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
11959	return ercclr.Value == nil || len(*ercclr.Value) == 0
11960}
11961
11962// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
11963// It returns nil if no more results exist.
11964func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
11965	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
11966		return nil, nil
11967	}
11968	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11969		autorest.AsJSON(),
11970		autorest.AsGet(),
11971		autorest.WithBaseURL(to.String(ercclr.NextLink)))
11972}
11973
11974// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
11975type ExpressRouteCrossConnectionListResultPage struct {
11976	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
11977	ercclr ExpressRouteCrossConnectionListResult
11978}
11979
11980// NextWithContext advances to the next page of values.  If there was an error making
11981// the request the page does not advance and the error is returned.
11982func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
11983	if tracing.IsEnabled() {
11984		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
11985		defer func() {
11986			sc := -1
11987			if page.Response().Response.Response != nil {
11988				sc = page.Response().Response.Response.StatusCode
11989			}
11990			tracing.EndSpan(ctx, sc, err)
11991		}()
11992	}
11993	next, err := page.fn(ctx, page.ercclr)
11994	if err != nil {
11995		return err
11996	}
11997	page.ercclr = next
11998	return nil
11999}
12000
12001// Next advances to the next page of values.  If there was an error making
12002// the request the page does not advance and the error is returned.
12003// Deprecated: Use NextWithContext() instead.
12004func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
12005	return page.NextWithContext(context.Background())
12006}
12007
12008// NotDone returns true if the page enumeration should be started or is not yet complete.
12009func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
12010	return !page.ercclr.IsEmpty()
12011}
12012
12013// Response returns the raw server response from the last page request.
12014func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
12015	return page.ercclr
12016}
12017
12018// Values returns the slice of values for the current page or nil if there are no values.
12019func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
12020	if page.ercclr.IsEmpty() {
12021		return nil
12022	}
12023	return *page.ercclr.Value
12024}
12025
12026// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
12027func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
12028	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
12029}
12030
12031// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
12032type ExpressRouteCrossConnectionPeering struct {
12033	autorest.Response `json:"-"`
12034	// ExpressRouteCrossConnectionPeeringProperties - Properties of the express route cross connection peering.
12035	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
12036	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12037	Name *string `json:"name,omitempty"`
12038	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12039	Etag *string `json:"etag,omitempty"`
12040	// ID - Resource ID.
12041	ID *string `json:"id,omitempty"`
12042}
12043
12044// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
12045func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
12046	objectMap := make(map[string]interface{})
12047	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
12048		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
12049	}
12050	if erccp.Name != nil {
12051		objectMap["name"] = erccp.Name
12052	}
12053	if erccp.ID != nil {
12054		objectMap["id"] = erccp.ID
12055	}
12056	return json.Marshal(objectMap)
12057}
12058
12059// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
12060func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
12061	var m map[string]*json.RawMessage
12062	err := json.Unmarshal(body, &m)
12063	if err != nil {
12064		return err
12065	}
12066	for k, v := range m {
12067		switch k {
12068		case "properties":
12069			if v != nil {
12070				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
12071				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
12072				if err != nil {
12073					return err
12074				}
12075				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
12076			}
12077		case "name":
12078			if v != nil {
12079				var name string
12080				err = json.Unmarshal(*v, &name)
12081				if err != nil {
12082					return err
12083				}
12084				erccp.Name = &name
12085			}
12086		case "etag":
12087			if v != nil {
12088				var etag string
12089				err = json.Unmarshal(*v, &etag)
12090				if err != nil {
12091					return err
12092				}
12093				erccp.Etag = &etag
12094			}
12095		case "id":
12096			if v != nil {
12097				var ID string
12098				err = json.Unmarshal(*v, &ID)
12099				if err != nil {
12100					return err
12101				}
12102				erccp.ID = &ID
12103			}
12104		}
12105	}
12106
12107	return nil
12108}
12109
12110// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
12111// that belong to an ExpressRouteCrossConnection.
12112type ExpressRouteCrossConnectionPeeringList struct {
12113	autorest.Response `json:"-"`
12114	// Value - The peerings in an express route cross connection.
12115	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
12116	// NextLink - READ-ONLY; The URL to get the next set of results.
12117	NextLink *string `json:"nextLink,omitempty"`
12118}
12119
12120// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
12121// ExpressRouteCrossConnectionPeering values.
12122type ExpressRouteCrossConnectionPeeringListIterator struct {
12123	i    int
12124	page ExpressRouteCrossConnectionPeeringListPage
12125}
12126
12127// NextWithContext advances to the next value.  If there was an error making
12128// the request the iterator does not advance and the error is returned.
12129func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
12130	if tracing.IsEnabled() {
12131		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
12132		defer func() {
12133			sc := -1
12134			if iter.Response().Response.Response != nil {
12135				sc = iter.Response().Response.Response.StatusCode
12136			}
12137			tracing.EndSpan(ctx, sc, err)
12138		}()
12139	}
12140	iter.i++
12141	if iter.i < len(iter.page.Values()) {
12142		return nil
12143	}
12144	err = iter.page.NextWithContext(ctx)
12145	if err != nil {
12146		iter.i--
12147		return err
12148	}
12149	iter.i = 0
12150	return nil
12151}
12152
12153// Next advances to the next value.  If there was an error making
12154// the request the iterator does not advance and the error is returned.
12155// Deprecated: Use NextWithContext() instead.
12156func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
12157	return iter.NextWithContext(context.Background())
12158}
12159
12160// NotDone returns true if the enumeration should be started or is not yet complete.
12161func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
12162	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12163}
12164
12165// Response returns the raw server response from the last page request.
12166func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
12167	return iter.page.Response()
12168}
12169
12170// Value returns the current value or a zero-initialized value if the
12171// iterator has advanced beyond the end of the collection.
12172func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
12173	if !iter.page.NotDone() {
12174		return ExpressRouteCrossConnectionPeering{}
12175	}
12176	return iter.page.Values()[iter.i]
12177}
12178
12179// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
12180func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
12181	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
12182}
12183
12184// IsEmpty returns true if the ListResult contains no values.
12185func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
12186	return erccpl.Value == nil || len(*erccpl.Value) == 0
12187}
12188
12189// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
12190// It returns nil if no more results exist.
12191func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
12192	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
12193		return nil, nil
12194	}
12195	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12196		autorest.AsJSON(),
12197		autorest.AsGet(),
12198		autorest.WithBaseURL(to.String(erccpl.NextLink)))
12199}
12200
12201// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
12202type ExpressRouteCrossConnectionPeeringListPage struct {
12203	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
12204	erccpl ExpressRouteCrossConnectionPeeringList
12205}
12206
12207// NextWithContext advances to the next page of values.  If there was an error making
12208// the request the page does not advance and the error is returned.
12209func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
12210	if tracing.IsEnabled() {
12211		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
12212		defer func() {
12213			sc := -1
12214			if page.Response().Response.Response != nil {
12215				sc = page.Response().Response.Response.StatusCode
12216			}
12217			tracing.EndSpan(ctx, sc, err)
12218		}()
12219	}
12220	next, err := page.fn(ctx, page.erccpl)
12221	if err != nil {
12222		return err
12223	}
12224	page.erccpl = next
12225	return nil
12226}
12227
12228// Next advances to the next page of values.  If there was an error making
12229// the request the page does not advance and the error is returned.
12230// Deprecated: Use NextWithContext() instead.
12231func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
12232	return page.NextWithContext(context.Background())
12233}
12234
12235// NotDone returns true if the page enumeration should be started or is not yet complete.
12236func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
12237	return !page.erccpl.IsEmpty()
12238}
12239
12240// Response returns the raw server response from the last page request.
12241func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
12242	return page.erccpl
12243}
12244
12245// Values returns the slice of values for the current page or nil if there are no values.
12246func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
12247	if page.erccpl.IsEmpty() {
12248		return nil
12249	}
12250	return *page.erccpl.Value
12251}
12252
12253// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
12254func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
12255	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
12256}
12257
12258// ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering.
12259type ExpressRouteCrossConnectionPeeringProperties struct {
12260	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
12261	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
12262	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
12263	State ExpressRoutePeeringState `json:"state,omitempty"`
12264	// AzureASN - READ-ONLY; The Azure ASN.
12265	AzureASN *int32 `json:"azureASN,omitempty"`
12266	// PeerASN - The peer ASN.
12267	PeerASN *int64 `json:"peerASN,omitempty"`
12268	// PrimaryPeerAddressPrefix - The primary address prefix.
12269	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
12270	// SecondaryPeerAddressPrefix - The secondary address prefix.
12271	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
12272	// PrimaryAzurePort - READ-ONLY; The primary port.
12273	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
12274	// SecondaryAzurePort - READ-ONLY; The secondary port.
12275	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
12276	// SharedKey - The shared key.
12277	SharedKey *string `json:"sharedKey,omitempty"`
12278	// VlanID - The VLAN ID.
12279	VlanID *int32 `json:"vlanId,omitempty"`
12280	// MicrosoftPeeringConfig - The Microsoft peering configuration.
12281	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
12282	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12283	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12284	// GatewayManagerEtag - The GatewayManager Etag.
12285	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
12286	// LastModifiedBy - Who was the last to modify the peering.
12287	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
12288	// Ipv6PeeringConfig - The IPv6 peering configuration.
12289	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
12290}
12291
12292// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
12293// results of a long-running operation.
12294type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
12295	azure.Future
12296}
12297
12298// Result returns the result of the asynchronous operation.
12299// If the operation has not completed it will return an error.
12300func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
12301	var done bool
12302	done, err = future.DoneWithContext(context.Background(), client)
12303	if err != nil {
12304		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12305		return
12306	}
12307	if !done {
12308		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
12309		return
12310	}
12311	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12312	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
12313		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
12314		if err != nil {
12315			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
12316		}
12317	}
12318	return
12319}
12320
12321// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
12322// of a long-running operation.
12323type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
12324	azure.Future
12325}
12326
12327// Result returns the result of the asynchronous operation.
12328// If the operation has not completed it will return an error.
12329func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
12330	var done bool
12331	done, err = future.DoneWithContext(context.Background(), client)
12332	if err != nil {
12333		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
12334		return
12335	}
12336	if !done {
12337		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
12338		return
12339	}
12340	ar.Response = future.Response()
12341	return
12342}
12343
12344// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
12345type ExpressRouteCrossConnectionProperties struct {
12346	// PrimaryAzurePort - READ-ONLY; The name of the primary port.
12347	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
12348	// SecondaryAzurePort - READ-ONLY; The name of the secondary port.
12349	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
12350	// STag - READ-ONLY; The identifier of the circuit traffic.
12351	STag *int32 `json:"sTag,omitempty"`
12352	// PeeringLocation - The peering location of the ExpressRoute circuit.
12353	PeeringLocation *string `json:"peeringLocation,omitempty"`
12354	// BandwidthInMbps - The circuit bandwidth In Mbps.
12355	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
12356	// ExpressRouteCircuit - The ExpressRouteCircuit.
12357	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
12358	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
12359	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
12360	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
12361	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
12362	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12363	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12364	// Peerings - The list of peerings.
12365	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
12366}
12367
12368// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
12369type ExpressRouteCrossConnectionRoutesTableSummary struct {
12370	// Neighbor - IP address of Neighbor router.
12371	Neighbor *string `json:"neighbor,omitempty"`
12372	// Asn - Autonomous system number.
12373	Asn *int32 `json:"asn,omitempty"`
12374	// UpDown - The length of time that the BGP session has been in the Established state, or the current status if not in the Established state.
12375	UpDown *string `json:"upDown,omitempty"`
12376	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
12377	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
12378}
12379
12380// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
12381// results of a long-running operation.
12382type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
12383	azure.Future
12384}
12385
12386// Result returns the result of the asynchronous operation.
12387// If the operation has not completed it will return an error.
12388func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
12389	var done bool
12390	done, err = future.DoneWithContext(context.Background(), client)
12391	if err != nil {
12392		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12393		return
12394	}
12395	if !done {
12396		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
12397		return
12398	}
12399	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12400	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
12401		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
12402		if err != nil {
12403			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
12404		}
12405	}
12406	return
12407}
12408
12409// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
12410// of a long-running operation.
12411type ExpressRouteCrossConnectionsListArpTableFuture struct {
12412	azure.Future
12413}
12414
12415// Result returns the result of the asynchronous operation.
12416// If the operation has not completed it will return an error.
12417func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
12418	var done bool
12419	done, err = future.DoneWithContext(context.Background(), client)
12420	if err != nil {
12421		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
12422		return
12423	}
12424	if !done {
12425		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
12426		return
12427	}
12428	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12429	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
12430		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
12431		if err != nil {
12432			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
12433		}
12434	}
12435	return
12436}
12437
12438// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
12439// results of a long-running operation.
12440type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
12441	azure.Future
12442}
12443
12444// Result returns the result of the asynchronous operation.
12445// If the operation has not completed it will return an error.
12446func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
12447	var done bool
12448	done, err = future.DoneWithContext(context.Background(), client)
12449	if err != nil {
12450		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
12451		return
12452	}
12453	if !done {
12454		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
12455		return
12456	}
12457	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12458	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
12459		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
12460		if err != nil {
12461			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
12462		}
12463	}
12464	return
12465}
12466
12467// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
12468// the results of a long-running operation.
12469type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
12470	azure.Future
12471}
12472
12473// Result returns the result of the asynchronous operation.
12474// If the operation has not completed it will return an error.
12475func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
12476	var done bool
12477	done, err = future.DoneWithContext(context.Background(), client)
12478	if err != nil {
12479		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
12480		return
12481	}
12482	if !done {
12483		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
12484		return
12485	}
12486	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12487	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
12488		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
12489		if err != nil {
12490			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
12491		}
12492	}
12493	return
12494}
12495
12496// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
12497// the Express Route Cross Connections.
12498type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
12499	autorest.Response `json:"-"`
12500	// Value - A list of the routes table.
12501	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
12502	// NextLink - READ-ONLY; The URL to get the next set of results.
12503	NextLink *string `json:"nextLink,omitempty"`
12504}
12505
12506// ExpressRouteCrossConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the results of
12507// a long-running operation.
12508type ExpressRouteCrossConnectionsUpdateTagsFuture struct {
12509	azure.Future
12510}
12511
12512// Result returns the result of the asynchronous operation.
12513// If the operation has not completed it will return an error.
12514func (future *ExpressRouteCrossConnectionsUpdateTagsFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
12515	var done bool
12516	done, err = future.DoneWithContext(context.Background(), client)
12517	if err != nil {
12518		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
12519		return
12520	}
12521	if !done {
12522		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsUpdateTagsFuture")
12523		return
12524	}
12525	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12526	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
12527		ercc, err = client.UpdateTagsResponder(ercc.Response.Response)
12528		if err != nil {
12529			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", ercc.Response.Response, "Failure responding to request")
12530		}
12531	}
12532	return
12533}
12534
12535// ExpressRouteGateway expressRoute gateway resource.
12536type ExpressRouteGateway struct {
12537	autorest.Response `json:"-"`
12538	// ExpressRouteGatewayProperties - Properties of the express route gateway.
12539	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
12540	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12541	Etag *string `json:"etag,omitempty"`
12542	// ID - Resource ID.
12543	ID *string `json:"id,omitempty"`
12544	// Name - READ-ONLY; Resource name.
12545	Name *string `json:"name,omitempty"`
12546	// Type - READ-ONLY; Resource type.
12547	Type *string `json:"type,omitempty"`
12548	// Location - Resource location.
12549	Location *string `json:"location,omitempty"`
12550	// Tags - Resource tags.
12551	Tags map[string]*string `json:"tags"`
12552}
12553
12554// MarshalJSON is the custom marshaler for ExpressRouteGateway.
12555func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
12556	objectMap := make(map[string]interface{})
12557	if erg.ExpressRouteGatewayProperties != nil {
12558		objectMap["properties"] = erg.ExpressRouteGatewayProperties
12559	}
12560	if erg.ID != nil {
12561		objectMap["id"] = erg.ID
12562	}
12563	if erg.Location != nil {
12564		objectMap["location"] = erg.Location
12565	}
12566	if erg.Tags != nil {
12567		objectMap["tags"] = erg.Tags
12568	}
12569	return json.Marshal(objectMap)
12570}
12571
12572// UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
12573func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
12574	var m map[string]*json.RawMessage
12575	err := json.Unmarshal(body, &m)
12576	if err != nil {
12577		return err
12578	}
12579	for k, v := range m {
12580		switch k {
12581		case "properties":
12582			if v != nil {
12583				var expressRouteGatewayProperties ExpressRouteGatewayProperties
12584				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
12585				if err != nil {
12586					return err
12587				}
12588				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
12589			}
12590		case "etag":
12591			if v != nil {
12592				var etag string
12593				err = json.Unmarshal(*v, &etag)
12594				if err != nil {
12595					return err
12596				}
12597				erg.Etag = &etag
12598			}
12599		case "id":
12600			if v != nil {
12601				var ID string
12602				err = json.Unmarshal(*v, &ID)
12603				if err != nil {
12604					return err
12605				}
12606				erg.ID = &ID
12607			}
12608		case "name":
12609			if v != nil {
12610				var name string
12611				err = json.Unmarshal(*v, &name)
12612				if err != nil {
12613					return err
12614				}
12615				erg.Name = &name
12616			}
12617		case "type":
12618			if v != nil {
12619				var typeVar string
12620				err = json.Unmarshal(*v, &typeVar)
12621				if err != nil {
12622					return err
12623				}
12624				erg.Type = &typeVar
12625			}
12626		case "location":
12627			if v != nil {
12628				var location string
12629				err = json.Unmarshal(*v, &location)
12630				if err != nil {
12631					return err
12632				}
12633				erg.Location = &location
12634			}
12635		case "tags":
12636			if v != nil {
12637				var tags map[string]*string
12638				err = json.Unmarshal(*v, &tags)
12639				if err != nil {
12640					return err
12641				}
12642				erg.Tags = tags
12643			}
12644		}
12645	}
12646
12647	return nil
12648}
12649
12650// ExpressRouteGatewayList list of ExpressRoute gateways.
12651type ExpressRouteGatewayList struct {
12652	autorest.Response `json:"-"`
12653	// Value - List of ExpressRoute gateways.
12654	Value *[]ExpressRouteGateway `json:"value,omitempty"`
12655}
12656
12657// ExpressRouteGatewayProperties expressRoute gateway resource properties.
12658type ExpressRouteGatewayProperties struct {
12659	// AutoScaleConfiguration - Configuration for auto scaling.
12660	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
12661	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
12662	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
12663	// ProvisioningState - The provisioning state of the express route gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12664	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12665	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
12666	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
12667}
12668
12669// ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
12670type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
12671	// Bounds - Minimum and maximum number of scale units to deploy.
12672	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
12673}
12674
12675// ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
12676// deploy.
12677type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
12678	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
12679	Min *int32 `json:"min,omitempty"`
12680	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
12681	Max *int32 `json:"max,omitempty"`
12682}
12683
12684// ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
12685// long-running operation.
12686type ExpressRouteGatewaysCreateOrUpdateFuture struct {
12687	azure.Future
12688}
12689
12690// Result returns the result of the asynchronous operation.
12691// If the operation has not completed it will return an error.
12692func (future *ExpressRouteGatewaysCreateOrUpdateFuture) Result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
12693	var done bool
12694	done, err = future.DoneWithContext(context.Background(), client)
12695	if err != nil {
12696		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12697		return
12698	}
12699	if !done {
12700		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
12701		return
12702	}
12703	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12704	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
12705		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
12706		if err != nil {
12707			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
12708		}
12709	}
12710	return
12711}
12712
12713// ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
12714// long-running operation.
12715type ExpressRouteGatewaysDeleteFuture struct {
12716	azure.Future
12717}
12718
12719// Result returns the result of the asynchronous operation.
12720// If the operation has not completed it will return an error.
12721func (future *ExpressRouteGatewaysDeleteFuture) Result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
12722	var done bool
12723	done, err = future.DoneWithContext(context.Background(), client)
12724	if err != nil {
12725		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
12726		return
12727	}
12728	if !done {
12729		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
12730		return
12731	}
12732	ar.Response = future.Response()
12733	return
12734}
12735
12736// ExpressRouteLink expressRouteLink child resource definition.
12737type ExpressRouteLink struct {
12738	autorest.Response `json:"-"`
12739	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties.
12740	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
12741	// Name - Name of child port resource that is unique among child port resources of the parent.
12742	Name *string `json:"name,omitempty"`
12743	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12744	Etag *string `json:"etag,omitempty"`
12745	// ID - Resource ID.
12746	ID *string `json:"id,omitempty"`
12747}
12748
12749// MarshalJSON is the custom marshaler for ExpressRouteLink.
12750func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
12751	objectMap := make(map[string]interface{})
12752	if erl.ExpressRouteLinkPropertiesFormat != nil {
12753		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
12754	}
12755	if erl.Name != nil {
12756		objectMap["name"] = erl.Name
12757	}
12758	if erl.ID != nil {
12759		objectMap["id"] = erl.ID
12760	}
12761	return json.Marshal(objectMap)
12762}
12763
12764// UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
12765func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
12766	var m map[string]*json.RawMessage
12767	err := json.Unmarshal(body, &m)
12768	if err != nil {
12769		return err
12770	}
12771	for k, v := range m {
12772		switch k {
12773		case "properties":
12774			if v != nil {
12775				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
12776				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
12777				if err != nil {
12778					return err
12779				}
12780				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
12781			}
12782		case "name":
12783			if v != nil {
12784				var name string
12785				err = json.Unmarshal(*v, &name)
12786				if err != nil {
12787					return err
12788				}
12789				erl.Name = &name
12790			}
12791		case "etag":
12792			if v != nil {
12793				var etag string
12794				err = json.Unmarshal(*v, &etag)
12795				if err != nil {
12796					return err
12797				}
12798				erl.Etag = &etag
12799			}
12800		case "id":
12801			if v != nil {
12802				var ID string
12803				err = json.Unmarshal(*v, &ID)
12804				if err != nil {
12805					return err
12806				}
12807				erl.ID = &ID
12808			}
12809		}
12810	}
12811
12812	return nil
12813}
12814
12815// ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
12816type ExpressRouteLinkListResult struct {
12817	autorest.Response `json:"-"`
12818	// Value - The list of ExpressRouteLink sub-resources.
12819	Value *[]ExpressRouteLink `json:"value,omitempty"`
12820	// NextLink - The URL to get the next set of results.
12821	NextLink *string `json:"nextLink,omitempty"`
12822}
12823
12824// ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
12825type ExpressRouteLinkListResultIterator struct {
12826	i    int
12827	page ExpressRouteLinkListResultPage
12828}
12829
12830// NextWithContext advances to the next value.  If there was an error making
12831// the request the iterator does not advance and the error is returned.
12832func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
12833	if tracing.IsEnabled() {
12834		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
12835		defer func() {
12836			sc := -1
12837			if iter.Response().Response.Response != nil {
12838				sc = iter.Response().Response.Response.StatusCode
12839			}
12840			tracing.EndSpan(ctx, sc, err)
12841		}()
12842	}
12843	iter.i++
12844	if iter.i < len(iter.page.Values()) {
12845		return nil
12846	}
12847	err = iter.page.NextWithContext(ctx)
12848	if err != nil {
12849		iter.i--
12850		return err
12851	}
12852	iter.i = 0
12853	return nil
12854}
12855
12856// Next advances to the next value.  If there was an error making
12857// the request the iterator does not advance and the error is returned.
12858// Deprecated: Use NextWithContext() instead.
12859func (iter *ExpressRouteLinkListResultIterator) Next() error {
12860	return iter.NextWithContext(context.Background())
12861}
12862
12863// NotDone returns true if the enumeration should be started or is not yet complete.
12864func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
12865	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12866}
12867
12868// Response returns the raw server response from the last page request.
12869func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
12870	return iter.page.Response()
12871}
12872
12873// Value returns the current value or a zero-initialized value if the
12874// iterator has advanced beyond the end of the collection.
12875func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
12876	if !iter.page.NotDone() {
12877		return ExpressRouteLink{}
12878	}
12879	return iter.page.Values()[iter.i]
12880}
12881
12882// Creates a new instance of the ExpressRouteLinkListResultIterator type.
12883func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
12884	return ExpressRouteLinkListResultIterator{page: page}
12885}
12886
12887// IsEmpty returns true if the ListResult contains no values.
12888func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
12889	return erllr.Value == nil || len(*erllr.Value) == 0
12890}
12891
12892// expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
12893// It returns nil if no more results exist.
12894func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
12895	if erllr.NextLink == nil || len(to.String(erllr.NextLink)) < 1 {
12896		return nil, nil
12897	}
12898	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12899		autorest.AsJSON(),
12900		autorest.AsGet(),
12901		autorest.WithBaseURL(to.String(erllr.NextLink)))
12902}
12903
12904// ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
12905type ExpressRouteLinkListResultPage struct {
12906	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
12907	erllr ExpressRouteLinkListResult
12908}
12909
12910// NextWithContext advances to the next page of values.  If there was an error making
12911// the request the page does not advance and the error is returned.
12912func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
12913	if tracing.IsEnabled() {
12914		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
12915		defer func() {
12916			sc := -1
12917			if page.Response().Response.Response != nil {
12918				sc = page.Response().Response.Response.StatusCode
12919			}
12920			tracing.EndSpan(ctx, sc, err)
12921		}()
12922	}
12923	next, err := page.fn(ctx, page.erllr)
12924	if err != nil {
12925		return err
12926	}
12927	page.erllr = next
12928	return nil
12929}
12930
12931// Next advances to the next page of values.  If there was an error making
12932// the request the page does not advance and the error is returned.
12933// Deprecated: Use NextWithContext() instead.
12934func (page *ExpressRouteLinkListResultPage) Next() error {
12935	return page.NextWithContext(context.Background())
12936}
12937
12938// NotDone returns true if the page enumeration should be started or is not yet complete.
12939func (page ExpressRouteLinkListResultPage) NotDone() bool {
12940	return !page.erllr.IsEmpty()
12941}
12942
12943// Response returns the raw server response from the last page request.
12944func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
12945	return page.erllr
12946}
12947
12948// Values returns the slice of values for the current page or nil if there are no values.
12949func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
12950	if page.erllr.IsEmpty() {
12951		return nil
12952	}
12953	return *page.erllr.Value
12954}
12955
12956// Creates a new instance of the ExpressRouteLinkListResultPage type.
12957func NewExpressRouteLinkListResultPage(getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
12958	return ExpressRouteLinkListResultPage{fn: getNextPage}
12959}
12960
12961// ExpressRouteLinkMacSecConfig expressRouteLink Mac Security Configuration.
12962type ExpressRouteLinkMacSecConfig struct {
12963	// CknSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CKN key.
12964	CknSecretIdentifier *string `json:"cknSecretIdentifier,omitempty"`
12965	// CakSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CAK key.
12966	CakSecretIdentifier *string `json:"cakSecretIdentifier,omitempty"`
12967	// Cipher - Mac security cipher. Possible values include: 'GcmAes128', 'GcmAes256'
12968	Cipher ExpressRouteLinkMacSecCipher `json:"cipher,omitempty"`
12969}
12970
12971// ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
12972type ExpressRouteLinkPropertiesFormat struct {
12973	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
12974	RouterName *string `json:"routerName,omitempty"`
12975	// InterfaceName - READ-ONLY; Name of Azure router interface.
12976	InterfaceName *string `json:"interfaceName,omitempty"`
12977	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
12978	PatchPanelID *string `json:"patchPanelId,omitempty"`
12979	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
12980	RackID *string `json:"rackId,omitempty"`
12981	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
12982	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
12983	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
12984	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
12985	// ProvisioningState - READ-ONLY; The provisioning state of the express route link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12986	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12987	// MacSecConfig - MacSec configuration.
12988	MacSecConfig *ExpressRouteLinkMacSecConfig `json:"macSecConfig,omitempty"`
12989}
12990
12991// ExpressRoutePort expressRoutePort resource definition.
12992type ExpressRoutePort struct {
12993	autorest.Response `json:"-"`
12994	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties.
12995	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
12996	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12997	Etag *string `json:"etag,omitempty"`
12998	// Identity - The identity of ExpressRoutePort, if configured.
12999	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
13000	// ID - Resource ID.
13001	ID *string `json:"id,omitempty"`
13002	// Name - READ-ONLY; Resource name.
13003	Name *string `json:"name,omitempty"`
13004	// Type - READ-ONLY; Resource type.
13005	Type *string `json:"type,omitempty"`
13006	// Location - Resource location.
13007	Location *string `json:"location,omitempty"`
13008	// Tags - Resource tags.
13009	Tags map[string]*string `json:"tags"`
13010}
13011
13012// MarshalJSON is the custom marshaler for ExpressRoutePort.
13013func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
13014	objectMap := make(map[string]interface{})
13015	if erp.ExpressRoutePortPropertiesFormat != nil {
13016		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
13017	}
13018	if erp.Identity != nil {
13019		objectMap["identity"] = erp.Identity
13020	}
13021	if erp.ID != nil {
13022		objectMap["id"] = erp.ID
13023	}
13024	if erp.Location != nil {
13025		objectMap["location"] = erp.Location
13026	}
13027	if erp.Tags != nil {
13028		objectMap["tags"] = erp.Tags
13029	}
13030	return json.Marshal(objectMap)
13031}
13032
13033// UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
13034func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
13035	var m map[string]*json.RawMessage
13036	err := json.Unmarshal(body, &m)
13037	if err != nil {
13038		return err
13039	}
13040	for k, v := range m {
13041		switch k {
13042		case "properties":
13043			if v != nil {
13044				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
13045				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
13046				if err != nil {
13047					return err
13048				}
13049				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
13050			}
13051		case "etag":
13052			if v != nil {
13053				var etag string
13054				err = json.Unmarshal(*v, &etag)
13055				if err != nil {
13056					return err
13057				}
13058				erp.Etag = &etag
13059			}
13060		case "identity":
13061			if v != nil {
13062				var identity ManagedServiceIdentity
13063				err = json.Unmarshal(*v, &identity)
13064				if err != nil {
13065					return err
13066				}
13067				erp.Identity = &identity
13068			}
13069		case "id":
13070			if v != nil {
13071				var ID string
13072				err = json.Unmarshal(*v, &ID)
13073				if err != nil {
13074					return err
13075				}
13076				erp.ID = &ID
13077			}
13078		case "name":
13079			if v != nil {
13080				var name string
13081				err = json.Unmarshal(*v, &name)
13082				if err != nil {
13083					return err
13084				}
13085				erp.Name = &name
13086			}
13087		case "type":
13088			if v != nil {
13089				var typeVar string
13090				err = json.Unmarshal(*v, &typeVar)
13091				if err != nil {
13092					return err
13093				}
13094				erp.Type = &typeVar
13095			}
13096		case "location":
13097			if v != nil {
13098				var location string
13099				err = json.Unmarshal(*v, &location)
13100				if err != nil {
13101					return err
13102				}
13103				erp.Location = &location
13104			}
13105		case "tags":
13106			if v != nil {
13107				var tags map[string]*string
13108				err = json.Unmarshal(*v, &tags)
13109				if err != nil {
13110					return err
13111				}
13112				erp.Tags = tags
13113			}
13114		}
13115	}
13116
13117	return nil
13118}
13119
13120// ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
13121type ExpressRoutePortListResult struct {
13122	autorest.Response `json:"-"`
13123	// Value - A list of ExpressRoutePort resources.
13124	Value *[]ExpressRoutePort `json:"value,omitempty"`
13125	// NextLink - The URL to get the next set of results.
13126	NextLink *string `json:"nextLink,omitempty"`
13127}
13128
13129// ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
13130type ExpressRoutePortListResultIterator struct {
13131	i    int
13132	page ExpressRoutePortListResultPage
13133}
13134
13135// NextWithContext advances to the next value.  If there was an error making
13136// the request the iterator does not advance and the error is returned.
13137func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
13138	if tracing.IsEnabled() {
13139		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
13140		defer func() {
13141			sc := -1
13142			if iter.Response().Response.Response != nil {
13143				sc = iter.Response().Response.Response.StatusCode
13144			}
13145			tracing.EndSpan(ctx, sc, err)
13146		}()
13147	}
13148	iter.i++
13149	if iter.i < len(iter.page.Values()) {
13150		return nil
13151	}
13152	err = iter.page.NextWithContext(ctx)
13153	if err != nil {
13154		iter.i--
13155		return err
13156	}
13157	iter.i = 0
13158	return nil
13159}
13160
13161// Next advances to the next value.  If there was an error making
13162// the request the iterator does not advance and the error is returned.
13163// Deprecated: Use NextWithContext() instead.
13164func (iter *ExpressRoutePortListResultIterator) Next() error {
13165	return iter.NextWithContext(context.Background())
13166}
13167
13168// NotDone returns true if the enumeration should be started or is not yet complete.
13169func (iter ExpressRoutePortListResultIterator) NotDone() bool {
13170	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13171}
13172
13173// Response returns the raw server response from the last page request.
13174func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
13175	return iter.page.Response()
13176}
13177
13178// Value returns the current value or a zero-initialized value if the
13179// iterator has advanced beyond the end of the collection.
13180func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
13181	if !iter.page.NotDone() {
13182		return ExpressRoutePort{}
13183	}
13184	return iter.page.Values()[iter.i]
13185}
13186
13187// Creates a new instance of the ExpressRoutePortListResultIterator type.
13188func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
13189	return ExpressRoutePortListResultIterator{page: page}
13190}
13191
13192// IsEmpty returns true if the ListResult contains no values.
13193func (erplr ExpressRoutePortListResult) IsEmpty() bool {
13194	return erplr.Value == nil || len(*erplr.Value) == 0
13195}
13196
13197// expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
13198// It returns nil if no more results exist.
13199func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
13200	if erplr.NextLink == nil || len(to.String(erplr.NextLink)) < 1 {
13201		return nil, nil
13202	}
13203	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13204		autorest.AsJSON(),
13205		autorest.AsGet(),
13206		autorest.WithBaseURL(to.String(erplr.NextLink)))
13207}
13208
13209// ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
13210type ExpressRoutePortListResultPage struct {
13211	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
13212	erplr ExpressRoutePortListResult
13213}
13214
13215// NextWithContext advances to the next page of values.  If there was an error making
13216// the request the page does not advance and the error is returned.
13217func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
13218	if tracing.IsEnabled() {
13219		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
13220		defer func() {
13221			sc := -1
13222			if page.Response().Response.Response != nil {
13223				sc = page.Response().Response.Response.StatusCode
13224			}
13225			tracing.EndSpan(ctx, sc, err)
13226		}()
13227	}
13228	next, err := page.fn(ctx, page.erplr)
13229	if err != nil {
13230		return err
13231	}
13232	page.erplr = next
13233	return nil
13234}
13235
13236// Next advances to the next page of values.  If there was an error making
13237// the request the page does not advance and the error is returned.
13238// Deprecated: Use NextWithContext() instead.
13239func (page *ExpressRoutePortListResultPage) Next() error {
13240	return page.NextWithContext(context.Background())
13241}
13242
13243// NotDone returns true if the page enumeration should be started or is not yet complete.
13244func (page ExpressRoutePortListResultPage) NotDone() bool {
13245	return !page.erplr.IsEmpty()
13246}
13247
13248// Response returns the raw server response from the last page request.
13249func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
13250	return page.erplr
13251}
13252
13253// Values returns the slice of values for the current page or nil if there are no values.
13254func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
13255	if page.erplr.IsEmpty() {
13256		return nil
13257	}
13258	return *page.erplr.Value
13259}
13260
13261// Creates a new instance of the ExpressRoutePortListResultPage type.
13262func NewExpressRoutePortListResultPage(getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
13263	return ExpressRoutePortListResultPage{fn: getNextPage}
13264}
13265
13266// ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
13267type ExpressRoutePortPropertiesFormat struct {
13268	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
13269	PeeringLocation *string `json:"peeringLocation,omitempty"`
13270	// BandwidthInGbps - Bandwidth of procured ports in Gbps.
13271	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
13272	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
13273	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
13274	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s).
13275	Mtu *string `json:"mtu,omitempty"`
13276	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
13277	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
13278	// EtherType - READ-ONLY; Ether type of the physical port.
13279	EtherType *string `json:"etherType,omitempty"`
13280	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
13281	AllocationDate *string `json:"allocationDate,omitempty"`
13282	// Links - The set of physical links of the ExpressRoutePort resource.
13283	Links *[]ExpressRouteLink `json:"links,omitempty"`
13284	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
13285	Circuits *[]SubResource `json:"circuits,omitempty"`
13286	// ProvisioningState - READ-ONLY; The provisioning state of the express route port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13287	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13288	// ResourceGUID - The resource GUID property of the express route port resource.
13289	ResourceGUID *string `json:"resourceGuid,omitempty"`
13290}
13291
13292// ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13293// long-running operation.
13294type ExpressRoutePortsCreateOrUpdateFuture struct {
13295	azure.Future
13296}
13297
13298// Result returns the result of the asynchronous operation.
13299// If the operation has not completed it will return an error.
13300func (future *ExpressRoutePortsCreateOrUpdateFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
13301	var done bool
13302	done, err = future.DoneWithContext(context.Background(), client)
13303	if err != nil {
13304		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13305		return
13306	}
13307	if !done {
13308		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
13309		return
13310	}
13311	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13312	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
13313		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
13314		if err != nil {
13315			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
13316		}
13317	}
13318	return
13319}
13320
13321// ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13322// operation.
13323type ExpressRoutePortsDeleteFuture struct {
13324	azure.Future
13325}
13326
13327// Result returns the result of the asynchronous operation.
13328// If the operation has not completed it will return an error.
13329func (future *ExpressRoutePortsDeleteFuture) Result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
13330	var done bool
13331	done, err = future.DoneWithContext(context.Background(), client)
13332	if err != nil {
13333		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
13334		return
13335	}
13336	if !done {
13337		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
13338		return
13339	}
13340	ar.Response = future.Response()
13341	return
13342}
13343
13344// ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
13345type ExpressRoutePortsLocation struct {
13346	autorest.Response `json:"-"`
13347	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties.
13348	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
13349	// ID - Resource ID.
13350	ID *string `json:"id,omitempty"`
13351	// Name - READ-ONLY; Resource name.
13352	Name *string `json:"name,omitempty"`
13353	// Type - READ-ONLY; Resource type.
13354	Type *string `json:"type,omitempty"`
13355	// Location - Resource location.
13356	Location *string `json:"location,omitempty"`
13357	// Tags - Resource tags.
13358	Tags map[string]*string `json:"tags"`
13359}
13360
13361// MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
13362func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
13363	objectMap := make(map[string]interface{})
13364	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
13365		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
13366	}
13367	if erpl.ID != nil {
13368		objectMap["id"] = erpl.ID
13369	}
13370	if erpl.Location != nil {
13371		objectMap["location"] = erpl.Location
13372	}
13373	if erpl.Tags != nil {
13374		objectMap["tags"] = erpl.Tags
13375	}
13376	return json.Marshal(objectMap)
13377}
13378
13379// UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
13380func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
13381	var m map[string]*json.RawMessage
13382	err := json.Unmarshal(body, &m)
13383	if err != nil {
13384		return err
13385	}
13386	for k, v := range m {
13387		switch k {
13388		case "properties":
13389			if v != nil {
13390				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
13391				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
13392				if err != nil {
13393					return err
13394				}
13395				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
13396			}
13397		case "id":
13398			if v != nil {
13399				var ID string
13400				err = json.Unmarshal(*v, &ID)
13401				if err != nil {
13402					return err
13403				}
13404				erpl.ID = &ID
13405			}
13406		case "name":
13407			if v != nil {
13408				var name string
13409				err = json.Unmarshal(*v, &name)
13410				if err != nil {
13411					return err
13412				}
13413				erpl.Name = &name
13414			}
13415		case "type":
13416			if v != nil {
13417				var typeVar string
13418				err = json.Unmarshal(*v, &typeVar)
13419				if err != nil {
13420					return err
13421				}
13422				erpl.Type = &typeVar
13423			}
13424		case "location":
13425			if v != nil {
13426				var location string
13427				err = json.Unmarshal(*v, &location)
13428				if err != nil {
13429					return err
13430				}
13431				erpl.Location = &location
13432			}
13433		case "tags":
13434			if v != nil {
13435				var tags map[string]*string
13436				err = json.Unmarshal(*v, &tags)
13437				if err != nil {
13438					return err
13439				}
13440				erpl.Tags = tags
13441			}
13442		}
13443	}
13444
13445	return nil
13446}
13447
13448// ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
13449type ExpressRoutePortsLocationBandwidths struct {
13450	// OfferName - READ-ONLY; Bandwidth descriptive name.
13451	OfferName *string `json:"offerName,omitempty"`
13452	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps.
13453	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
13454}
13455
13456// ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
13457type ExpressRoutePortsLocationListResult struct {
13458	autorest.Response `json:"-"`
13459	// Value - The list of all ExpressRoutePort peering locations.
13460	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
13461	// NextLink - The URL to get the next set of results.
13462	NextLink *string `json:"nextLink,omitempty"`
13463}
13464
13465// ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
13466// ExpressRoutePortsLocation values.
13467type ExpressRoutePortsLocationListResultIterator struct {
13468	i    int
13469	page ExpressRoutePortsLocationListResultPage
13470}
13471
13472// NextWithContext advances to the next value.  If there was an error making
13473// the request the iterator does not advance and the error is returned.
13474func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
13475	if tracing.IsEnabled() {
13476		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
13477		defer func() {
13478			sc := -1
13479			if iter.Response().Response.Response != nil {
13480				sc = iter.Response().Response.Response.StatusCode
13481			}
13482			tracing.EndSpan(ctx, sc, err)
13483		}()
13484	}
13485	iter.i++
13486	if iter.i < len(iter.page.Values()) {
13487		return nil
13488	}
13489	err = iter.page.NextWithContext(ctx)
13490	if err != nil {
13491		iter.i--
13492		return err
13493	}
13494	iter.i = 0
13495	return nil
13496}
13497
13498// Next advances to the next value.  If there was an error making
13499// the request the iterator does not advance and the error is returned.
13500// Deprecated: Use NextWithContext() instead.
13501func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
13502	return iter.NextWithContext(context.Background())
13503}
13504
13505// NotDone returns true if the enumeration should be started or is not yet complete.
13506func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
13507	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13508}
13509
13510// Response returns the raw server response from the last page request.
13511func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
13512	return iter.page.Response()
13513}
13514
13515// Value returns the current value or a zero-initialized value if the
13516// iterator has advanced beyond the end of the collection.
13517func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
13518	if !iter.page.NotDone() {
13519		return ExpressRoutePortsLocation{}
13520	}
13521	return iter.page.Values()[iter.i]
13522}
13523
13524// Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
13525func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
13526	return ExpressRoutePortsLocationListResultIterator{page: page}
13527}
13528
13529// IsEmpty returns true if the ListResult contains no values.
13530func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
13531	return erpllr.Value == nil || len(*erpllr.Value) == 0
13532}
13533
13534// expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
13535// It returns nil if no more results exist.
13536func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
13537	if erpllr.NextLink == nil || len(to.String(erpllr.NextLink)) < 1 {
13538		return nil, nil
13539	}
13540	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13541		autorest.AsJSON(),
13542		autorest.AsGet(),
13543		autorest.WithBaseURL(to.String(erpllr.NextLink)))
13544}
13545
13546// ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
13547type ExpressRoutePortsLocationListResultPage struct {
13548	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
13549	erpllr ExpressRoutePortsLocationListResult
13550}
13551
13552// NextWithContext advances to the next page of values.  If there was an error making
13553// the request the page does not advance and the error is returned.
13554func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
13555	if tracing.IsEnabled() {
13556		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
13557		defer func() {
13558			sc := -1
13559			if page.Response().Response.Response != nil {
13560				sc = page.Response().Response.Response.StatusCode
13561			}
13562			tracing.EndSpan(ctx, sc, err)
13563		}()
13564	}
13565	next, err := page.fn(ctx, page.erpllr)
13566	if err != nil {
13567		return err
13568	}
13569	page.erpllr = next
13570	return nil
13571}
13572
13573// Next advances to the next page of values.  If there was an error making
13574// the request the page does not advance and the error is returned.
13575// Deprecated: Use NextWithContext() instead.
13576func (page *ExpressRoutePortsLocationListResultPage) Next() error {
13577	return page.NextWithContext(context.Background())
13578}
13579
13580// NotDone returns true if the page enumeration should be started or is not yet complete.
13581func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
13582	return !page.erpllr.IsEmpty()
13583}
13584
13585// Response returns the raw server response from the last page request.
13586func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
13587	return page.erpllr
13588}
13589
13590// Values returns the slice of values for the current page or nil if there are no values.
13591func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
13592	if page.erpllr.IsEmpty() {
13593		return nil
13594	}
13595	return *page.erpllr.Value
13596}
13597
13598// Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
13599func NewExpressRoutePortsLocationListResultPage(getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
13600	return ExpressRoutePortsLocationListResultPage{fn: getNextPage}
13601}
13602
13603// ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
13604// resources.
13605type ExpressRoutePortsLocationPropertiesFormat struct {
13606	// Address - READ-ONLY; Address of peering location.
13607	Address *string `json:"address,omitempty"`
13608	// Contact - READ-ONLY; Contact details of peering locations.
13609	Contact *string `json:"contact,omitempty"`
13610	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
13611	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
13612	// ProvisioningState - READ-ONLY; The provisioning state of the express route port location resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13613	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13614}
13615
13616// ExpressRoutePortsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
13617// long-running operation.
13618type ExpressRoutePortsUpdateTagsFuture struct {
13619	azure.Future
13620}
13621
13622// Result returns the result of the asynchronous operation.
13623// If the operation has not completed it will return an error.
13624func (future *ExpressRoutePortsUpdateTagsFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
13625	var done bool
13626	done, err = future.DoneWithContext(context.Background(), client)
13627	if err != nil {
13628		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
13629		return
13630	}
13631	if !done {
13632		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsUpdateTagsFuture")
13633		return
13634	}
13635	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13636	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
13637		erp, err = client.UpdateTagsResponder(erp.Response.Response)
13638		if err != nil {
13639			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", erp.Response.Response, "Failure responding to request")
13640		}
13641	}
13642	return
13643}
13644
13645// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
13646type ExpressRouteServiceProvider struct {
13647	// ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider.
13648	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
13649	// ID - Resource ID.
13650	ID *string `json:"id,omitempty"`
13651	// Name - READ-ONLY; Resource name.
13652	Name *string `json:"name,omitempty"`
13653	// Type - READ-ONLY; Resource type.
13654	Type *string `json:"type,omitempty"`
13655	// Location - Resource location.
13656	Location *string `json:"location,omitempty"`
13657	// Tags - Resource tags.
13658	Tags map[string]*string `json:"tags"`
13659}
13660
13661// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
13662func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
13663	objectMap := make(map[string]interface{})
13664	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
13665		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
13666	}
13667	if ersp.ID != nil {
13668		objectMap["id"] = ersp.ID
13669	}
13670	if ersp.Location != nil {
13671		objectMap["location"] = ersp.Location
13672	}
13673	if ersp.Tags != nil {
13674		objectMap["tags"] = ersp.Tags
13675	}
13676	return json.Marshal(objectMap)
13677}
13678
13679// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
13680func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
13681	var m map[string]*json.RawMessage
13682	err := json.Unmarshal(body, &m)
13683	if err != nil {
13684		return err
13685	}
13686	for k, v := range m {
13687		switch k {
13688		case "properties":
13689			if v != nil {
13690				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
13691				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
13692				if err != nil {
13693					return err
13694				}
13695				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
13696			}
13697		case "id":
13698			if v != nil {
13699				var ID string
13700				err = json.Unmarshal(*v, &ID)
13701				if err != nil {
13702					return err
13703				}
13704				ersp.ID = &ID
13705			}
13706		case "name":
13707			if v != nil {
13708				var name string
13709				err = json.Unmarshal(*v, &name)
13710				if err != nil {
13711					return err
13712				}
13713				ersp.Name = &name
13714			}
13715		case "type":
13716			if v != nil {
13717				var typeVar string
13718				err = json.Unmarshal(*v, &typeVar)
13719				if err != nil {
13720					return err
13721				}
13722				ersp.Type = &typeVar
13723			}
13724		case "location":
13725			if v != nil {
13726				var location string
13727				err = json.Unmarshal(*v, &location)
13728				if err != nil {
13729					return err
13730				}
13731				ersp.Location = &location
13732			}
13733		case "tags":
13734			if v != nil {
13735				var tags map[string]*string
13736				err = json.Unmarshal(*v, &tags)
13737				if err != nil {
13738					return err
13739				}
13740				ersp.Tags = tags
13741			}
13742		}
13743	}
13744
13745	return nil
13746}
13747
13748// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
13749// resources.
13750type ExpressRouteServiceProviderBandwidthsOffered struct {
13751	// OfferName - The OfferName.
13752	OfferName *string `json:"offerName,omitempty"`
13753	// ValueInMbps - The ValueInMbps.
13754	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
13755}
13756
13757// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
13758type ExpressRouteServiceProviderListResult struct {
13759	autorest.Response `json:"-"`
13760	// Value - A list of ExpressRouteResourceProvider resources.
13761	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
13762	// NextLink - The URL to get the next set of results.
13763	NextLink *string `json:"nextLink,omitempty"`
13764}
13765
13766// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
13767// ExpressRouteServiceProvider values.
13768type ExpressRouteServiceProviderListResultIterator struct {
13769	i    int
13770	page ExpressRouteServiceProviderListResultPage
13771}
13772
13773// NextWithContext advances to the next value.  If there was an error making
13774// the request the iterator does not advance and the error is returned.
13775func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
13776	if tracing.IsEnabled() {
13777		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
13778		defer func() {
13779			sc := -1
13780			if iter.Response().Response.Response != nil {
13781				sc = iter.Response().Response.Response.StatusCode
13782			}
13783			tracing.EndSpan(ctx, sc, err)
13784		}()
13785	}
13786	iter.i++
13787	if iter.i < len(iter.page.Values()) {
13788		return nil
13789	}
13790	err = iter.page.NextWithContext(ctx)
13791	if err != nil {
13792		iter.i--
13793		return err
13794	}
13795	iter.i = 0
13796	return nil
13797}
13798
13799// Next advances to the next value.  If there was an error making
13800// the request the iterator does not advance and the error is returned.
13801// Deprecated: Use NextWithContext() instead.
13802func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
13803	return iter.NextWithContext(context.Background())
13804}
13805
13806// NotDone returns true if the enumeration should be started or is not yet complete.
13807func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
13808	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13809}
13810
13811// Response returns the raw server response from the last page request.
13812func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
13813	return iter.page.Response()
13814}
13815
13816// Value returns the current value or a zero-initialized value if the
13817// iterator has advanced beyond the end of the collection.
13818func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
13819	if !iter.page.NotDone() {
13820		return ExpressRouteServiceProvider{}
13821	}
13822	return iter.page.Values()[iter.i]
13823}
13824
13825// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
13826func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
13827	return ExpressRouteServiceProviderListResultIterator{page: page}
13828}
13829
13830// IsEmpty returns true if the ListResult contains no values.
13831func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
13832	return ersplr.Value == nil || len(*ersplr.Value) == 0
13833}
13834
13835// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
13836// It returns nil if no more results exist.
13837func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
13838	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
13839		return nil, nil
13840	}
13841	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13842		autorest.AsJSON(),
13843		autorest.AsGet(),
13844		autorest.WithBaseURL(to.String(ersplr.NextLink)))
13845}
13846
13847// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
13848type ExpressRouteServiceProviderListResultPage struct {
13849	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
13850	ersplr ExpressRouteServiceProviderListResult
13851}
13852
13853// NextWithContext advances to the next page of values.  If there was an error making
13854// the request the page does not advance and the error is returned.
13855func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
13856	if tracing.IsEnabled() {
13857		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
13858		defer func() {
13859			sc := -1
13860			if page.Response().Response.Response != nil {
13861				sc = page.Response().Response.Response.StatusCode
13862			}
13863			tracing.EndSpan(ctx, sc, err)
13864		}()
13865	}
13866	next, err := page.fn(ctx, page.ersplr)
13867	if err != nil {
13868		return err
13869	}
13870	page.ersplr = next
13871	return nil
13872}
13873
13874// Next advances to the next page of values.  If there was an error making
13875// the request the page does not advance and the error is returned.
13876// Deprecated: Use NextWithContext() instead.
13877func (page *ExpressRouteServiceProviderListResultPage) Next() error {
13878	return page.NextWithContext(context.Background())
13879}
13880
13881// NotDone returns true if the page enumeration should be started or is not yet complete.
13882func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
13883	return !page.ersplr.IsEmpty()
13884}
13885
13886// Response returns the raw server response from the last page request.
13887func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
13888	return page.ersplr
13889}
13890
13891// Values returns the slice of values for the current page or nil if there are no values.
13892func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
13893	if page.ersplr.IsEmpty() {
13894		return nil
13895	}
13896	return *page.ersplr.Value
13897}
13898
13899// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
13900func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
13901	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
13902}
13903
13904// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
13905type ExpressRouteServiceProviderPropertiesFormat struct {
13906	// PeeringLocations - A list of peering locations.
13907	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
13908	// BandwidthsOffered - A list of bandwidths offered.
13909	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
13910	// ProvisioningState - The provisioning state of the express route service provider resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13911	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13912}
13913
13914// FirewallPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13915// long-running operation.
13916type FirewallPoliciesCreateOrUpdateFuture struct {
13917	azure.Future
13918}
13919
13920// Result returns the result of the asynchronous operation.
13921// If the operation has not completed it will return an error.
13922func (future *FirewallPoliciesCreateOrUpdateFuture) Result(client FirewallPoliciesClient) (fp FirewallPolicy, err error) {
13923	var done bool
13924	done, err = future.DoneWithContext(context.Background(), client)
13925	if err != nil {
13926		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13927		return
13928	}
13929	if !done {
13930		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesCreateOrUpdateFuture")
13931		return
13932	}
13933	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13934	if fp.Response.Response, err = future.GetResult(sender); err == nil && fp.Response.Response.StatusCode != http.StatusNoContent {
13935		fp, err = client.CreateOrUpdateResponder(fp.Response.Response)
13936		if err != nil {
13937			err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", fp.Response.Response, "Failure responding to request")
13938		}
13939	}
13940	return
13941}
13942
13943// FirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13944// operation.
13945type FirewallPoliciesDeleteFuture struct {
13946	azure.Future
13947}
13948
13949// Result returns the result of the asynchronous operation.
13950// If the operation has not completed it will return an error.
13951func (future *FirewallPoliciesDeleteFuture) Result(client FirewallPoliciesClient) (ar autorest.Response, err error) {
13952	var done bool
13953	done, err = future.DoneWithContext(context.Background(), client)
13954	if err != nil {
13955		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
13956		return
13957	}
13958	if !done {
13959		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesDeleteFuture")
13960		return
13961	}
13962	ar.Response = future.Response()
13963	return
13964}
13965
13966// FirewallPolicy firewallPolicy Resource.
13967type FirewallPolicy struct {
13968	autorest.Response `json:"-"`
13969	// FirewallPolicyPropertiesFormat - Properties of the firewall policy.
13970	*FirewallPolicyPropertiesFormat `json:"properties,omitempty"`
13971	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13972	Etag *string `json:"etag,omitempty"`
13973	// ID - Resource ID.
13974	ID *string `json:"id,omitempty"`
13975	// Name - READ-ONLY; Resource name.
13976	Name *string `json:"name,omitempty"`
13977	// Type - READ-ONLY; Resource type.
13978	Type *string `json:"type,omitempty"`
13979	// Location - Resource location.
13980	Location *string `json:"location,omitempty"`
13981	// Tags - Resource tags.
13982	Tags map[string]*string `json:"tags"`
13983}
13984
13985// MarshalJSON is the custom marshaler for FirewallPolicy.
13986func (fp FirewallPolicy) MarshalJSON() ([]byte, error) {
13987	objectMap := make(map[string]interface{})
13988	if fp.FirewallPolicyPropertiesFormat != nil {
13989		objectMap["properties"] = fp.FirewallPolicyPropertiesFormat
13990	}
13991	if fp.ID != nil {
13992		objectMap["id"] = fp.ID
13993	}
13994	if fp.Location != nil {
13995		objectMap["location"] = fp.Location
13996	}
13997	if fp.Tags != nil {
13998		objectMap["tags"] = fp.Tags
13999	}
14000	return json.Marshal(objectMap)
14001}
14002
14003// UnmarshalJSON is the custom unmarshaler for FirewallPolicy struct.
14004func (fp *FirewallPolicy) UnmarshalJSON(body []byte) error {
14005	var m map[string]*json.RawMessage
14006	err := json.Unmarshal(body, &m)
14007	if err != nil {
14008		return err
14009	}
14010	for k, v := range m {
14011		switch k {
14012		case "properties":
14013			if v != nil {
14014				var firewallPolicyPropertiesFormat FirewallPolicyPropertiesFormat
14015				err = json.Unmarshal(*v, &firewallPolicyPropertiesFormat)
14016				if err != nil {
14017					return err
14018				}
14019				fp.FirewallPolicyPropertiesFormat = &firewallPolicyPropertiesFormat
14020			}
14021		case "etag":
14022			if v != nil {
14023				var etag string
14024				err = json.Unmarshal(*v, &etag)
14025				if err != nil {
14026					return err
14027				}
14028				fp.Etag = &etag
14029			}
14030		case "id":
14031			if v != nil {
14032				var ID string
14033				err = json.Unmarshal(*v, &ID)
14034				if err != nil {
14035					return err
14036				}
14037				fp.ID = &ID
14038			}
14039		case "name":
14040			if v != nil {
14041				var name string
14042				err = json.Unmarshal(*v, &name)
14043				if err != nil {
14044					return err
14045				}
14046				fp.Name = &name
14047			}
14048		case "type":
14049			if v != nil {
14050				var typeVar string
14051				err = json.Unmarshal(*v, &typeVar)
14052				if err != nil {
14053					return err
14054				}
14055				fp.Type = &typeVar
14056			}
14057		case "location":
14058			if v != nil {
14059				var location string
14060				err = json.Unmarshal(*v, &location)
14061				if err != nil {
14062					return err
14063				}
14064				fp.Location = &location
14065			}
14066		case "tags":
14067			if v != nil {
14068				var tags map[string]*string
14069				err = json.Unmarshal(*v, &tags)
14070				if err != nil {
14071					return err
14072				}
14073				fp.Tags = tags
14074			}
14075		}
14076	}
14077
14078	return nil
14079}
14080
14081// FirewallPolicyFilterRule firewall Policy Filter Rule.
14082type FirewallPolicyFilterRule struct {
14083	// Action - The action type of a Filter rule.
14084	Action *FirewallPolicyFilterRuleAction `json:"action,omitempty"`
14085	// RuleConditions - Collection of rule conditions used by a rule.
14086	RuleConditions *[]BasicFirewallPolicyRuleCondition `json:"ruleConditions,omitempty"`
14087	// Name - The name of the rule.
14088	Name *string `json:"name,omitempty"`
14089	// Priority - Priority of the Firewall Policy Rule resource.
14090	Priority *int32 `json:"priority,omitempty"`
14091	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
14092	RuleType RuleType `json:"ruleType,omitempty"`
14093}
14094
14095// MarshalJSON is the custom marshaler for FirewallPolicyFilterRule.
14096func (fpfr FirewallPolicyFilterRule) MarshalJSON() ([]byte, error) {
14097	fpfr.RuleType = RuleTypeFirewallPolicyFilterRule
14098	objectMap := make(map[string]interface{})
14099	if fpfr.Action != nil {
14100		objectMap["action"] = fpfr.Action
14101	}
14102	if fpfr.RuleConditions != nil {
14103		objectMap["ruleConditions"] = fpfr.RuleConditions
14104	}
14105	if fpfr.Name != nil {
14106		objectMap["name"] = fpfr.Name
14107	}
14108	if fpfr.Priority != nil {
14109		objectMap["priority"] = fpfr.Priority
14110	}
14111	if fpfr.RuleType != "" {
14112		objectMap["ruleType"] = fpfr.RuleType
14113	}
14114	return json.Marshal(objectMap)
14115}
14116
14117// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14118func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
14119	return nil, false
14120}
14121
14122// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14123func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
14124	return &fpfr, true
14125}
14126
14127// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14128func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
14129	return nil, false
14130}
14131
14132// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14133func (fpfr FirewallPolicyFilterRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
14134	return &fpfr, true
14135}
14136
14137// UnmarshalJSON is the custom unmarshaler for FirewallPolicyFilterRule struct.
14138func (fpfr *FirewallPolicyFilterRule) UnmarshalJSON(body []byte) error {
14139	var m map[string]*json.RawMessage
14140	err := json.Unmarshal(body, &m)
14141	if err != nil {
14142		return err
14143	}
14144	for k, v := range m {
14145		switch k {
14146		case "action":
14147			if v != nil {
14148				var action FirewallPolicyFilterRuleAction
14149				err = json.Unmarshal(*v, &action)
14150				if err != nil {
14151					return err
14152				}
14153				fpfr.Action = &action
14154			}
14155		case "ruleConditions":
14156			if v != nil {
14157				ruleConditions, err := unmarshalBasicFirewallPolicyRuleConditionArray(*v)
14158				if err != nil {
14159					return err
14160				}
14161				fpfr.RuleConditions = &ruleConditions
14162			}
14163		case "name":
14164			if v != nil {
14165				var name string
14166				err = json.Unmarshal(*v, &name)
14167				if err != nil {
14168					return err
14169				}
14170				fpfr.Name = &name
14171			}
14172		case "priority":
14173			if v != nil {
14174				var priority int32
14175				err = json.Unmarshal(*v, &priority)
14176				if err != nil {
14177					return err
14178				}
14179				fpfr.Priority = &priority
14180			}
14181		case "ruleType":
14182			if v != nil {
14183				var ruleType RuleType
14184				err = json.Unmarshal(*v, &ruleType)
14185				if err != nil {
14186					return err
14187				}
14188				fpfr.RuleType = ruleType
14189			}
14190		}
14191	}
14192
14193	return nil
14194}
14195
14196// FirewallPolicyFilterRuleAction properties of the FirewallPolicyFilterRuleAction.
14197type FirewallPolicyFilterRuleAction struct {
14198	// Type - The type of action. Possible values include: 'FirewallPolicyFilterRuleActionTypeAllow', 'FirewallPolicyFilterRuleActionTypeDeny'
14199	Type FirewallPolicyFilterRuleActionType `json:"type,omitempty"`
14200}
14201
14202// FirewallPolicyListResult response for ListFirewallPolicies API service call.
14203type FirewallPolicyListResult struct {
14204	autorest.Response `json:"-"`
14205	// Value - List of Firewall Policies in a resource group.
14206	Value *[]FirewallPolicy `json:"value,omitempty"`
14207	// NextLink - URL to get the next set of results.
14208	NextLink *string `json:"nextLink,omitempty"`
14209}
14210
14211// FirewallPolicyListResultIterator provides access to a complete listing of FirewallPolicy values.
14212type FirewallPolicyListResultIterator struct {
14213	i    int
14214	page FirewallPolicyListResultPage
14215}
14216
14217// NextWithContext advances to the next value.  If there was an error making
14218// the request the iterator does not advance and the error is returned.
14219func (iter *FirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
14220	if tracing.IsEnabled() {
14221		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultIterator.NextWithContext")
14222		defer func() {
14223			sc := -1
14224			if iter.Response().Response.Response != nil {
14225				sc = iter.Response().Response.Response.StatusCode
14226			}
14227			tracing.EndSpan(ctx, sc, err)
14228		}()
14229	}
14230	iter.i++
14231	if iter.i < len(iter.page.Values()) {
14232		return nil
14233	}
14234	err = iter.page.NextWithContext(ctx)
14235	if err != nil {
14236		iter.i--
14237		return err
14238	}
14239	iter.i = 0
14240	return nil
14241}
14242
14243// Next advances to the next value.  If there was an error making
14244// the request the iterator does not advance and the error is returned.
14245// Deprecated: Use NextWithContext() instead.
14246func (iter *FirewallPolicyListResultIterator) Next() error {
14247	return iter.NextWithContext(context.Background())
14248}
14249
14250// NotDone returns true if the enumeration should be started or is not yet complete.
14251func (iter FirewallPolicyListResultIterator) NotDone() bool {
14252	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14253}
14254
14255// Response returns the raw server response from the last page request.
14256func (iter FirewallPolicyListResultIterator) Response() FirewallPolicyListResult {
14257	return iter.page.Response()
14258}
14259
14260// Value returns the current value or a zero-initialized value if the
14261// iterator has advanced beyond the end of the collection.
14262func (iter FirewallPolicyListResultIterator) Value() FirewallPolicy {
14263	if !iter.page.NotDone() {
14264		return FirewallPolicy{}
14265	}
14266	return iter.page.Values()[iter.i]
14267}
14268
14269// Creates a new instance of the FirewallPolicyListResultIterator type.
14270func NewFirewallPolicyListResultIterator(page FirewallPolicyListResultPage) FirewallPolicyListResultIterator {
14271	return FirewallPolicyListResultIterator{page: page}
14272}
14273
14274// IsEmpty returns true if the ListResult contains no values.
14275func (fplr FirewallPolicyListResult) IsEmpty() bool {
14276	return fplr.Value == nil || len(*fplr.Value) == 0
14277}
14278
14279// firewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
14280// It returns nil if no more results exist.
14281func (fplr FirewallPolicyListResult) firewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
14282	if fplr.NextLink == nil || len(to.String(fplr.NextLink)) < 1 {
14283		return nil, nil
14284	}
14285	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14286		autorest.AsJSON(),
14287		autorest.AsGet(),
14288		autorest.WithBaseURL(to.String(fplr.NextLink)))
14289}
14290
14291// FirewallPolicyListResultPage contains a page of FirewallPolicy values.
14292type FirewallPolicyListResultPage struct {
14293	fn   func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)
14294	fplr FirewallPolicyListResult
14295}
14296
14297// NextWithContext advances to the next page of values.  If there was an error making
14298// the request the page does not advance and the error is returned.
14299func (page *FirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
14300	if tracing.IsEnabled() {
14301		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultPage.NextWithContext")
14302		defer func() {
14303			sc := -1
14304			if page.Response().Response.Response != nil {
14305				sc = page.Response().Response.Response.StatusCode
14306			}
14307			tracing.EndSpan(ctx, sc, err)
14308		}()
14309	}
14310	next, err := page.fn(ctx, page.fplr)
14311	if err != nil {
14312		return err
14313	}
14314	page.fplr = next
14315	return nil
14316}
14317
14318// Next advances to the next page of values.  If there was an error making
14319// the request the page does not advance and the error is returned.
14320// Deprecated: Use NextWithContext() instead.
14321func (page *FirewallPolicyListResultPage) Next() error {
14322	return page.NextWithContext(context.Background())
14323}
14324
14325// NotDone returns true if the page enumeration should be started or is not yet complete.
14326func (page FirewallPolicyListResultPage) NotDone() bool {
14327	return !page.fplr.IsEmpty()
14328}
14329
14330// Response returns the raw server response from the last page request.
14331func (page FirewallPolicyListResultPage) Response() FirewallPolicyListResult {
14332	return page.fplr
14333}
14334
14335// Values returns the slice of values for the current page or nil if there are no values.
14336func (page FirewallPolicyListResultPage) Values() []FirewallPolicy {
14337	if page.fplr.IsEmpty() {
14338		return nil
14339	}
14340	return *page.fplr.Value
14341}
14342
14343// Creates a new instance of the FirewallPolicyListResultPage type.
14344func NewFirewallPolicyListResultPage(getNextPage func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)) FirewallPolicyListResultPage {
14345	return FirewallPolicyListResultPage{fn: getNextPage}
14346}
14347
14348// FirewallPolicyNatRule firewall Policy NAT Rule.
14349type FirewallPolicyNatRule struct {
14350	// Action - The action type of a Nat rule.
14351	Action *FirewallPolicyNatRuleAction `json:"action,omitempty"`
14352	// TranslatedAddress - The translated address for this NAT rule.
14353	TranslatedAddress *string `json:"translatedAddress,omitempty"`
14354	// TranslatedPort - The translated port for this NAT rule.
14355	TranslatedPort *string `json:"translatedPort,omitempty"`
14356	// RuleCondition - The match conditions for incoming traffic.
14357	RuleCondition BasicFirewallPolicyRuleCondition `json:"ruleCondition,omitempty"`
14358	// Name - The name of the rule.
14359	Name *string `json:"name,omitempty"`
14360	// Priority - Priority of the Firewall Policy Rule resource.
14361	Priority *int32 `json:"priority,omitempty"`
14362	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
14363	RuleType RuleType `json:"ruleType,omitempty"`
14364}
14365
14366// MarshalJSON is the custom marshaler for FirewallPolicyNatRule.
14367func (fpnr FirewallPolicyNatRule) MarshalJSON() ([]byte, error) {
14368	fpnr.RuleType = RuleTypeFirewallPolicyNatRule
14369	objectMap := make(map[string]interface{})
14370	if fpnr.Action != nil {
14371		objectMap["action"] = fpnr.Action
14372	}
14373	if fpnr.TranslatedAddress != nil {
14374		objectMap["translatedAddress"] = fpnr.TranslatedAddress
14375	}
14376	if fpnr.TranslatedPort != nil {
14377		objectMap["translatedPort"] = fpnr.TranslatedPort
14378	}
14379	objectMap["ruleCondition"] = fpnr.RuleCondition
14380	if fpnr.Name != nil {
14381		objectMap["name"] = fpnr.Name
14382	}
14383	if fpnr.Priority != nil {
14384		objectMap["priority"] = fpnr.Priority
14385	}
14386	if fpnr.RuleType != "" {
14387		objectMap["ruleType"] = fpnr.RuleType
14388	}
14389	return json.Marshal(objectMap)
14390}
14391
14392// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14393func (fpnr FirewallPolicyNatRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
14394	return &fpnr, true
14395}
14396
14397// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14398func (fpnr FirewallPolicyNatRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
14399	return nil, false
14400}
14401
14402// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14403func (fpnr FirewallPolicyNatRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
14404	return nil, false
14405}
14406
14407// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14408func (fpnr FirewallPolicyNatRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
14409	return &fpnr, true
14410}
14411
14412// UnmarshalJSON is the custom unmarshaler for FirewallPolicyNatRule struct.
14413func (fpnr *FirewallPolicyNatRule) UnmarshalJSON(body []byte) error {
14414	var m map[string]*json.RawMessage
14415	err := json.Unmarshal(body, &m)
14416	if err != nil {
14417		return err
14418	}
14419	for k, v := range m {
14420		switch k {
14421		case "action":
14422			if v != nil {
14423				var action FirewallPolicyNatRuleAction
14424				err = json.Unmarshal(*v, &action)
14425				if err != nil {
14426					return err
14427				}
14428				fpnr.Action = &action
14429			}
14430		case "translatedAddress":
14431			if v != nil {
14432				var translatedAddress string
14433				err = json.Unmarshal(*v, &translatedAddress)
14434				if err != nil {
14435					return err
14436				}
14437				fpnr.TranslatedAddress = &translatedAddress
14438			}
14439		case "translatedPort":
14440			if v != nil {
14441				var translatedPort string
14442				err = json.Unmarshal(*v, &translatedPort)
14443				if err != nil {
14444					return err
14445				}
14446				fpnr.TranslatedPort = &translatedPort
14447			}
14448		case "ruleCondition":
14449			if v != nil {
14450				ruleCondition, err := unmarshalBasicFirewallPolicyRuleCondition(*v)
14451				if err != nil {
14452					return err
14453				}
14454				fpnr.RuleCondition = ruleCondition
14455			}
14456		case "name":
14457			if v != nil {
14458				var name string
14459				err = json.Unmarshal(*v, &name)
14460				if err != nil {
14461					return err
14462				}
14463				fpnr.Name = &name
14464			}
14465		case "priority":
14466			if v != nil {
14467				var priority int32
14468				err = json.Unmarshal(*v, &priority)
14469				if err != nil {
14470					return err
14471				}
14472				fpnr.Priority = &priority
14473			}
14474		case "ruleType":
14475			if v != nil {
14476				var ruleType RuleType
14477				err = json.Unmarshal(*v, &ruleType)
14478				if err != nil {
14479					return err
14480				}
14481				fpnr.RuleType = ruleType
14482			}
14483		}
14484	}
14485
14486	return nil
14487}
14488
14489// FirewallPolicyNatRuleAction properties of the FirewallPolicyNatRuleAction.
14490type FirewallPolicyNatRuleAction struct {
14491	// Type - The type of action. Possible values include: 'DNAT'
14492	Type FirewallPolicyNatRuleActionType `json:"type,omitempty"`
14493}
14494
14495// FirewallPolicyPropertiesFormat firewall Policy definition.
14496type FirewallPolicyPropertiesFormat struct {
14497	// RuleGroups - READ-ONLY; List of references to FirewallPolicyRuleGroups.
14498	RuleGroups *[]SubResource `json:"ruleGroups,omitempty"`
14499	// ProvisioningState - The provisioning state of the firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14500	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14501	// BasePolicy - The parent firewall policy from which rules are inherited.
14502	BasePolicy *SubResource `json:"basePolicy,omitempty"`
14503	// Firewalls - READ-ONLY; List of references to Azure Firewalls that this Firewall Policy is associated with.
14504	Firewalls *[]SubResource `json:"firewalls,omitempty"`
14505	// ChildPolicies - READ-ONLY; List of references to Child Firewall Policies.
14506	ChildPolicies *[]SubResource `json:"childPolicies,omitempty"`
14507	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
14508	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
14509}
14510
14511// BasicFirewallPolicyRule properties of the rule.
14512type BasicFirewallPolicyRule interface {
14513	AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool)
14514	AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool)
14515	AsFirewallPolicyRule() (*FirewallPolicyRule, bool)
14516}
14517
14518// FirewallPolicyRule properties of the rule.
14519type FirewallPolicyRule struct {
14520	// Name - The name of the rule.
14521	Name *string `json:"name,omitempty"`
14522	// Priority - Priority of the Firewall Policy Rule resource.
14523	Priority *int32 `json:"priority,omitempty"`
14524	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
14525	RuleType RuleType `json:"ruleType,omitempty"`
14526}
14527
14528func unmarshalBasicFirewallPolicyRule(body []byte) (BasicFirewallPolicyRule, error) {
14529	var m map[string]interface{}
14530	err := json.Unmarshal(body, &m)
14531	if err != nil {
14532		return nil, err
14533	}
14534
14535	switch m["ruleType"] {
14536	case string(RuleTypeFirewallPolicyNatRule):
14537		var fpnr FirewallPolicyNatRule
14538		err := json.Unmarshal(body, &fpnr)
14539		return fpnr, err
14540	case string(RuleTypeFirewallPolicyFilterRule):
14541		var fpfr FirewallPolicyFilterRule
14542		err := json.Unmarshal(body, &fpfr)
14543		return fpfr, err
14544	default:
14545		var fpr FirewallPolicyRule
14546		err := json.Unmarshal(body, &fpr)
14547		return fpr, err
14548	}
14549}
14550func unmarshalBasicFirewallPolicyRuleArray(body []byte) ([]BasicFirewallPolicyRule, error) {
14551	var rawMessages []*json.RawMessage
14552	err := json.Unmarshal(body, &rawMessages)
14553	if err != nil {
14554		return nil, err
14555	}
14556
14557	fprArray := make([]BasicFirewallPolicyRule, len(rawMessages))
14558
14559	for index, rawMessage := range rawMessages {
14560		fpr, err := unmarshalBasicFirewallPolicyRule(*rawMessage)
14561		if err != nil {
14562			return nil, err
14563		}
14564		fprArray[index] = fpr
14565	}
14566	return fprArray, nil
14567}
14568
14569// MarshalJSON is the custom marshaler for FirewallPolicyRule.
14570func (fpr FirewallPolicyRule) MarshalJSON() ([]byte, error) {
14571	fpr.RuleType = RuleTypeFirewallPolicyRule
14572	objectMap := make(map[string]interface{})
14573	if fpr.Name != nil {
14574		objectMap["name"] = fpr.Name
14575	}
14576	if fpr.Priority != nil {
14577		objectMap["priority"] = fpr.Priority
14578	}
14579	if fpr.RuleType != "" {
14580		objectMap["ruleType"] = fpr.RuleType
14581	}
14582	return json.Marshal(objectMap)
14583}
14584
14585// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14586func (fpr FirewallPolicyRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
14587	return nil, false
14588}
14589
14590// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14591func (fpr FirewallPolicyRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
14592	return nil, false
14593}
14594
14595// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14596func (fpr FirewallPolicyRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
14597	return &fpr, true
14598}
14599
14600// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14601func (fpr FirewallPolicyRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
14602	return &fpr, true
14603}
14604
14605// BasicFirewallPolicyRuleCondition properties of a rule.
14606type BasicFirewallPolicyRuleCondition interface {
14607	AsApplicationRuleCondition() (*ApplicationRuleCondition, bool)
14608	AsRuleCondition() (*RuleCondition, bool)
14609	AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool)
14610}
14611
14612// FirewallPolicyRuleCondition properties of a rule.
14613type FirewallPolicyRuleCondition struct {
14614	// Name - Name of the rule condition.
14615	Name *string `json:"name,omitempty"`
14616	// Description - Description of the rule condition.
14617	Description *string `json:"description,omitempty"`
14618	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
14619	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
14620}
14621
14622func unmarshalBasicFirewallPolicyRuleCondition(body []byte) (BasicFirewallPolicyRuleCondition, error) {
14623	var m map[string]interface{}
14624	err := json.Unmarshal(body, &m)
14625	if err != nil {
14626		return nil, err
14627	}
14628
14629	switch m["ruleConditionType"] {
14630	case string(RuleConditionTypeApplicationRuleCondition):
14631		var arc ApplicationRuleCondition
14632		err := json.Unmarshal(body, &arc)
14633		return arc, err
14634	case string(RuleConditionTypeNetworkRuleCondition):
14635		var rc RuleCondition
14636		err := json.Unmarshal(body, &rc)
14637		return rc, err
14638	default:
14639		var fprc FirewallPolicyRuleCondition
14640		err := json.Unmarshal(body, &fprc)
14641		return fprc, err
14642	}
14643}
14644func unmarshalBasicFirewallPolicyRuleConditionArray(body []byte) ([]BasicFirewallPolicyRuleCondition, error) {
14645	var rawMessages []*json.RawMessage
14646	err := json.Unmarshal(body, &rawMessages)
14647	if err != nil {
14648		return nil, err
14649	}
14650
14651	fprcArray := make([]BasicFirewallPolicyRuleCondition, len(rawMessages))
14652
14653	for index, rawMessage := range rawMessages {
14654		fprc, err := unmarshalBasicFirewallPolicyRuleCondition(*rawMessage)
14655		if err != nil {
14656			return nil, err
14657		}
14658		fprcArray[index] = fprc
14659	}
14660	return fprcArray, nil
14661}
14662
14663// MarshalJSON is the custom marshaler for FirewallPolicyRuleCondition.
14664func (fprc FirewallPolicyRuleCondition) MarshalJSON() ([]byte, error) {
14665	fprc.RuleConditionType = RuleConditionTypeFirewallPolicyRuleCondition
14666	objectMap := make(map[string]interface{})
14667	if fprc.Name != nil {
14668		objectMap["name"] = fprc.Name
14669	}
14670	if fprc.Description != nil {
14671		objectMap["description"] = fprc.Description
14672	}
14673	if fprc.RuleConditionType != "" {
14674		objectMap["ruleConditionType"] = fprc.RuleConditionType
14675	}
14676	return json.Marshal(objectMap)
14677}
14678
14679// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14680func (fprc FirewallPolicyRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
14681	return nil, false
14682}
14683
14684// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14685func (fprc FirewallPolicyRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
14686	return nil, false
14687}
14688
14689// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14690func (fprc FirewallPolicyRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
14691	return &fprc, true
14692}
14693
14694// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14695func (fprc FirewallPolicyRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
14696	return &fprc, true
14697}
14698
14699// FirewallPolicyRuleConditionApplicationProtocol properties of the application rule protocol.
14700type FirewallPolicyRuleConditionApplicationProtocol struct {
14701	// ProtocolType - Protocol type. Possible values include: 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTP', 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS'
14702	ProtocolType FirewallPolicyRuleConditionApplicationProtocolType `json:"protocolType,omitempty"`
14703	// Port - Port number for the protocol, cannot be greater than 64000.
14704	Port *int32 `json:"port,omitempty"`
14705}
14706
14707// FirewallPolicyRuleGroup rule Group resource.
14708type FirewallPolicyRuleGroup struct {
14709	autorest.Response `json:"-"`
14710	// FirewallPolicyRuleGroupProperties - The properties of the firewall policy rule group.
14711	*FirewallPolicyRuleGroupProperties `json:"properties,omitempty"`
14712	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14713	Name *string `json:"name,omitempty"`
14714	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
14715	Etag *string `json:"etag,omitempty"`
14716	// Type - READ-ONLY; Rule Group type.
14717	Type *string `json:"type,omitempty"`
14718	// ID - Resource ID.
14719	ID *string `json:"id,omitempty"`
14720}
14721
14722// MarshalJSON is the custom marshaler for FirewallPolicyRuleGroup.
14723func (fprg FirewallPolicyRuleGroup) MarshalJSON() ([]byte, error) {
14724	objectMap := make(map[string]interface{})
14725	if fprg.FirewallPolicyRuleGroupProperties != nil {
14726		objectMap["properties"] = fprg.FirewallPolicyRuleGroupProperties
14727	}
14728	if fprg.Name != nil {
14729		objectMap["name"] = fprg.Name
14730	}
14731	if fprg.ID != nil {
14732		objectMap["id"] = fprg.ID
14733	}
14734	return json.Marshal(objectMap)
14735}
14736
14737// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroup struct.
14738func (fprg *FirewallPolicyRuleGroup) UnmarshalJSON(body []byte) error {
14739	var m map[string]*json.RawMessage
14740	err := json.Unmarshal(body, &m)
14741	if err != nil {
14742		return err
14743	}
14744	for k, v := range m {
14745		switch k {
14746		case "properties":
14747			if v != nil {
14748				var firewallPolicyRuleGroupProperties FirewallPolicyRuleGroupProperties
14749				err = json.Unmarshal(*v, &firewallPolicyRuleGroupProperties)
14750				if err != nil {
14751					return err
14752				}
14753				fprg.FirewallPolicyRuleGroupProperties = &firewallPolicyRuleGroupProperties
14754			}
14755		case "name":
14756			if v != nil {
14757				var name string
14758				err = json.Unmarshal(*v, &name)
14759				if err != nil {
14760					return err
14761				}
14762				fprg.Name = &name
14763			}
14764		case "etag":
14765			if v != nil {
14766				var etag string
14767				err = json.Unmarshal(*v, &etag)
14768				if err != nil {
14769					return err
14770				}
14771				fprg.Etag = &etag
14772			}
14773		case "type":
14774			if v != nil {
14775				var typeVar string
14776				err = json.Unmarshal(*v, &typeVar)
14777				if err != nil {
14778					return err
14779				}
14780				fprg.Type = &typeVar
14781			}
14782		case "id":
14783			if v != nil {
14784				var ID string
14785				err = json.Unmarshal(*v, &ID)
14786				if err != nil {
14787					return err
14788				}
14789				fprg.ID = &ID
14790			}
14791		}
14792	}
14793
14794	return nil
14795}
14796
14797// FirewallPolicyRuleGroupListResult response for ListFirewallPolicyRuleGroups API service call.
14798type FirewallPolicyRuleGroupListResult struct {
14799	autorest.Response `json:"-"`
14800	// Value - List of FirewallPolicyRuleGroups in a FirewallPolicy.
14801	Value *[]FirewallPolicyRuleGroup `json:"value,omitempty"`
14802	// NextLink - URL to get the next set of results.
14803	NextLink *string `json:"nextLink,omitempty"`
14804}
14805
14806// FirewallPolicyRuleGroupListResultIterator provides access to a complete listing of
14807// FirewallPolicyRuleGroup values.
14808type FirewallPolicyRuleGroupListResultIterator struct {
14809	i    int
14810	page FirewallPolicyRuleGroupListResultPage
14811}
14812
14813// NextWithContext advances to the next value.  If there was an error making
14814// the request the iterator does not advance and the error is returned.
14815func (iter *FirewallPolicyRuleGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
14816	if tracing.IsEnabled() {
14817		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultIterator.NextWithContext")
14818		defer func() {
14819			sc := -1
14820			if iter.Response().Response.Response != nil {
14821				sc = iter.Response().Response.Response.StatusCode
14822			}
14823			tracing.EndSpan(ctx, sc, err)
14824		}()
14825	}
14826	iter.i++
14827	if iter.i < len(iter.page.Values()) {
14828		return nil
14829	}
14830	err = iter.page.NextWithContext(ctx)
14831	if err != nil {
14832		iter.i--
14833		return err
14834	}
14835	iter.i = 0
14836	return nil
14837}
14838
14839// Next advances to the next value.  If there was an error making
14840// the request the iterator does not advance and the error is returned.
14841// Deprecated: Use NextWithContext() instead.
14842func (iter *FirewallPolicyRuleGroupListResultIterator) Next() error {
14843	return iter.NextWithContext(context.Background())
14844}
14845
14846// NotDone returns true if the enumeration should be started or is not yet complete.
14847func (iter FirewallPolicyRuleGroupListResultIterator) NotDone() bool {
14848	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14849}
14850
14851// Response returns the raw server response from the last page request.
14852func (iter FirewallPolicyRuleGroupListResultIterator) Response() FirewallPolicyRuleGroupListResult {
14853	return iter.page.Response()
14854}
14855
14856// Value returns the current value or a zero-initialized value if the
14857// iterator has advanced beyond the end of the collection.
14858func (iter FirewallPolicyRuleGroupListResultIterator) Value() FirewallPolicyRuleGroup {
14859	if !iter.page.NotDone() {
14860		return FirewallPolicyRuleGroup{}
14861	}
14862	return iter.page.Values()[iter.i]
14863}
14864
14865// Creates a new instance of the FirewallPolicyRuleGroupListResultIterator type.
14866func NewFirewallPolicyRuleGroupListResultIterator(page FirewallPolicyRuleGroupListResultPage) FirewallPolicyRuleGroupListResultIterator {
14867	return FirewallPolicyRuleGroupListResultIterator{page: page}
14868}
14869
14870// IsEmpty returns true if the ListResult contains no values.
14871func (fprglr FirewallPolicyRuleGroupListResult) IsEmpty() bool {
14872	return fprglr.Value == nil || len(*fprglr.Value) == 0
14873}
14874
14875// firewallPolicyRuleGroupListResultPreparer prepares a request to retrieve the next set of results.
14876// It returns nil if no more results exist.
14877func (fprglr FirewallPolicyRuleGroupListResult) firewallPolicyRuleGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
14878	if fprglr.NextLink == nil || len(to.String(fprglr.NextLink)) < 1 {
14879		return nil, nil
14880	}
14881	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14882		autorest.AsJSON(),
14883		autorest.AsGet(),
14884		autorest.WithBaseURL(to.String(fprglr.NextLink)))
14885}
14886
14887// FirewallPolicyRuleGroupListResultPage contains a page of FirewallPolicyRuleGroup values.
14888type FirewallPolicyRuleGroupListResultPage struct {
14889	fn     func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)
14890	fprglr FirewallPolicyRuleGroupListResult
14891}
14892
14893// NextWithContext advances to the next page of values.  If there was an error making
14894// the request the page does not advance and the error is returned.
14895func (page *FirewallPolicyRuleGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
14896	if tracing.IsEnabled() {
14897		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultPage.NextWithContext")
14898		defer func() {
14899			sc := -1
14900			if page.Response().Response.Response != nil {
14901				sc = page.Response().Response.Response.StatusCode
14902			}
14903			tracing.EndSpan(ctx, sc, err)
14904		}()
14905	}
14906	next, err := page.fn(ctx, page.fprglr)
14907	if err != nil {
14908		return err
14909	}
14910	page.fprglr = next
14911	return nil
14912}
14913
14914// Next advances to the next page of values.  If there was an error making
14915// the request the page does not advance and the error is returned.
14916// Deprecated: Use NextWithContext() instead.
14917func (page *FirewallPolicyRuleGroupListResultPage) Next() error {
14918	return page.NextWithContext(context.Background())
14919}
14920
14921// NotDone returns true if the page enumeration should be started or is not yet complete.
14922func (page FirewallPolicyRuleGroupListResultPage) NotDone() bool {
14923	return !page.fprglr.IsEmpty()
14924}
14925
14926// Response returns the raw server response from the last page request.
14927func (page FirewallPolicyRuleGroupListResultPage) Response() FirewallPolicyRuleGroupListResult {
14928	return page.fprglr
14929}
14930
14931// Values returns the slice of values for the current page or nil if there are no values.
14932func (page FirewallPolicyRuleGroupListResultPage) Values() []FirewallPolicyRuleGroup {
14933	if page.fprglr.IsEmpty() {
14934		return nil
14935	}
14936	return *page.fprglr.Value
14937}
14938
14939// Creates a new instance of the FirewallPolicyRuleGroupListResultPage type.
14940func NewFirewallPolicyRuleGroupListResultPage(getNextPage func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)) FirewallPolicyRuleGroupListResultPage {
14941	return FirewallPolicyRuleGroupListResultPage{fn: getNextPage}
14942}
14943
14944// FirewallPolicyRuleGroupProperties properties of the rule group.
14945type FirewallPolicyRuleGroupProperties struct {
14946	// Priority - Priority of the Firewall Policy Rule Group resource.
14947	Priority *int32 `json:"priority,omitempty"`
14948	// Rules - Group of Firewall Policy rules.
14949	Rules *[]BasicFirewallPolicyRule `json:"rules,omitempty"`
14950	// ProvisioningState - The provisioning state of the firewall policy rule group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14951	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14952}
14953
14954// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroupProperties struct.
14955func (fprgp *FirewallPolicyRuleGroupProperties) UnmarshalJSON(body []byte) error {
14956	var m map[string]*json.RawMessage
14957	err := json.Unmarshal(body, &m)
14958	if err != nil {
14959		return err
14960	}
14961	for k, v := range m {
14962		switch k {
14963		case "priority":
14964			if v != nil {
14965				var priority int32
14966				err = json.Unmarshal(*v, &priority)
14967				if err != nil {
14968					return err
14969				}
14970				fprgp.Priority = &priority
14971			}
14972		case "rules":
14973			if v != nil {
14974				rules, err := unmarshalBasicFirewallPolicyRuleArray(*v)
14975				if err != nil {
14976					return err
14977				}
14978				fprgp.Rules = &rules
14979			}
14980		case "provisioningState":
14981			if v != nil {
14982				var provisioningState ProvisioningState
14983				err = json.Unmarshal(*v, &provisioningState)
14984				if err != nil {
14985					return err
14986				}
14987				fprgp.ProvisioningState = provisioningState
14988			}
14989		}
14990	}
14991
14992	return nil
14993}
14994
14995// FirewallPolicyRuleGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
14996// a long-running operation.
14997type FirewallPolicyRuleGroupsCreateOrUpdateFuture struct {
14998	azure.Future
14999}
15000
15001// Result returns the result of the asynchronous operation.
15002// If the operation has not completed it will return an error.
15003func (future *FirewallPolicyRuleGroupsCreateOrUpdateFuture) Result(client FirewallPolicyRuleGroupsClient) (fprg FirewallPolicyRuleGroup, err error) {
15004	var done bool
15005	done, err = future.DoneWithContext(context.Background(), client)
15006	if err != nil {
15007		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15008		return
15009	}
15010	if !done {
15011		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsCreateOrUpdateFuture")
15012		return
15013	}
15014	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15015	if fprg.Response.Response, err = future.GetResult(sender); err == nil && fprg.Response.Response.StatusCode != http.StatusNoContent {
15016		fprg, err = client.CreateOrUpdateResponder(fprg.Response.Response)
15017		if err != nil {
15018			err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", fprg.Response.Response, "Failure responding to request")
15019		}
15020	}
15021	return
15022}
15023
15024// FirewallPolicyRuleGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
15025// long-running operation.
15026type FirewallPolicyRuleGroupsDeleteFuture struct {
15027	azure.Future
15028}
15029
15030// Result returns the result of the asynchronous operation.
15031// If the operation has not completed it will return an error.
15032func (future *FirewallPolicyRuleGroupsDeleteFuture) Result(client FirewallPolicyRuleGroupsClient) (ar autorest.Response, err error) {
15033	var done bool
15034	done, err = future.DoneWithContext(context.Background(), client)
15035	if err != nil {
15036		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
15037		return
15038	}
15039	if !done {
15040		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsDeleteFuture")
15041		return
15042	}
15043	ar.Response = future.Response()
15044	return
15045}
15046
15047// FlowLogFormatParameters parameters that define the flow log format.
15048type FlowLogFormatParameters struct {
15049	// Type - The file type of flow log. Possible values include: 'JSON'
15050	Type FlowLogFormatType `json:"type,omitempty"`
15051	// Version - The version (revision) of the flow log.
15052	Version *int32 `json:"version,omitempty"`
15053}
15054
15055// FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
15056type FlowLogInformation struct {
15057	autorest.Response `json:"-"`
15058	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
15059	TargetResourceID *string `json:"targetResourceId,omitempty"`
15060	// FlowLogProperties - Properties of the flow log.
15061	*FlowLogProperties `json:"properties,omitempty"`
15062	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
15063	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
15064}
15065
15066// MarshalJSON is the custom marshaler for FlowLogInformation.
15067func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
15068	objectMap := make(map[string]interface{})
15069	if fli.TargetResourceID != nil {
15070		objectMap["targetResourceId"] = fli.TargetResourceID
15071	}
15072	if fli.FlowLogProperties != nil {
15073		objectMap["properties"] = fli.FlowLogProperties
15074	}
15075	if fli.FlowAnalyticsConfiguration != nil {
15076		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
15077	}
15078	return json.Marshal(objectMap)
15079}
15080
15081// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
15082func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
15083	var m map[string]*json.RawMessage
15084	err := json.Unmarshal(body, &m)
15085	if err != nil {
15086		return err
15087	}
15088	for k, v := range m {
15089		switch k {
15090		case "targetResourceId":
15091			if v != nil {
15092				var targetResourceID string
15093				err = json.Unmarshal(*v, &targetResourceID)
15094				if err != nil {
15095					return err
15096				}
15097				fli.TargetResourceID = &targetResourceID
15098			}
15099		case "properties":
15100			if v != nil {
15101				var flowLogProperties FlowLogProperties
15102				err = json.Unmarshal(*v, &flowLogProperties)
15103				if err != nil {
15104					return err
15105				}
15106				fli.FlowLogProperties = &flowLogProperties
15107			}
15108		case "flowAnalyticsConfiguration":
15109			if v != nil {
15110				var flowAnalyticsConfiguration TrafficAnalyticsProperties
15111				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
15112				if err != nil {
15113					return err
15114				}
15115				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
15116			}
15117		}
15118	}
15119
15120	return nil
15121}
15122
15123// FlowLogProperties parameters that define the configuration of flow log.
15124type FlowLogProperties struct {
15125	// StorageID - ID of the storage account which is used to store the flow log.
15126	StorageID *string `json:"storageId,omitempty"`
15127	// Enabled - Flag to enable/disable flow logging.
15128	Enabled *bool `json:"enabled,omitempty"`
15129	// RetentionPolicy - Parameters that define the retention policy for flow log.
15130	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
15131	// Format - Parameters that define the flow log format.
15132	Format *FlowLogFormatParameters `json:"format,omitempty"`
15133}
15134
15135// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
15136// (optional) status.
15137type FlowLogStatusParameters struct {
15138	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
15139	TargetResourceID *string `json:"targetResourceId,omitempty"`
15140}
15141
15142// FrontendIPConfiguration frontend IP address of the load balancer.
15143type FrontendIPConfiguration struct {
15144	autorest.Response `json:"-"`
15145	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
15146	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
15147	// Name - The name of the resource that is unique within the set of frontend IP configurations used by the load balancer. This name can be used to access the resource.
15148	Name *string `json:"name,omitempty"`
15149	// Etag - A unique read-only string that changes whenever the resource is updated.
15150	Etag *string `json:"etag,omitempty"`
15151	// Type - READ-ONLY; Type of the resource.
15152	Type *string `json:"type,omitempty"`
15153	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
15154	Zones *[]string `json:"zones,omitempty"`
15155	// ID - Resource ID.
15156	ID *string `json:"id,omitempty"`
15157}
15158
15159// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
15160func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
15161	objectMap := make(map[string]interface{})
15162	if fic.FrontendIPConfigurationPropertiesFormat != nil {
15163		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
15164	}
15165	if fic.Name != nil {
15166		objectMap["name"] = fic.Name
15167	}
15168	if fic.Etag != nil {
15169		objectMap["etag"] = fic.Etag
15170	}
15171	if fic.Zones != nil {
15172		objectMap["zones"] = fic.Zones
15173	}
15174	if fic.ID != nil {
15175		objectMap["id"] = fic.ID
15176	}
15177	return json.Marshal(objectMap)
15178}
15179
15180// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
15181func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
15182	var m map[string]*json.RawMessage
15183	err := json.Unmarshal(body, &m)
15184	if err != nil {
15185		return err
15186	}
15187	for k, v := range m {
15188		switch k {
15189		case "properties":
15190			if v != nil {
15191				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
15192				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
15193				if err != nil {
15194					return err
15195				}
15196				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
15197			}
15198		case "name":
15199			if v != nil {
15200				var name string
15201				err = json.Unmarshal(*v, &name)
15202				if err != nil {
15203					return err
15204				}
15205				fic.Name = &name
15206			}
15207		case "etag":
15208			if v != nil {
15209				var etag string
15210				err = json.Unmarshal(*v, &etag)
15211				if err != nil {
15212					return err
15213				}
15214				fic.Etag = &etag
15215			}
15216		case "type":
15217			if v != nil {
15218				var typeVar string
15219				err = json.Unmarshal(*v, &typeVar)
15220				if err != nil {
15221					return err
15222				}
15223				fic.Type = &typeVar
15224			}
15225		case "zones":
15226			if v != nil {
15227				var zones []string
15228				err = json.Unmarshal(*v, &zones)
15229				if err != nil {
15230					return err
15231				}
15232				fic.Zones = &zones
15233			}
15234		case "id":
15235			if v != nil {
15236				var ID string
15237				err = json.Unmarshal(*v, &ID)
15238				if err != nil {
15239					return err
15240				}
15241				fic.ID = &ID
15242			}
15243		}
15244	}
15245
15246	return nil
15247}
15248
15249// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
15250type FrontendIPConfigurationPropertiesFormat struct {
15251	// InboundNatRules - READ-ONLY; An array of references to inbound rules that use this frontend IP.
15252	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
15253	// InboundNatPools - READ-ONLY; An array of references to inbound pools that use this frontend IP.
15254	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
15255	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this frontend IP.
15256	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
15257	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this frontend IP.
15258	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
15259	// PrivateIPAddress - The private IP address of the IP configuration.
15260	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
15261	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic'
15262	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
15263	// PrivateIPAddressVersion - Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
15264	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
15265	// Subnet - The reference of the subnet resource.
15266	Subnet *Subnet `json:"subnet,omitempty"`
15267	// PublicIPAddress - The reference of the Public IP resource.
15268	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
15269	// PublicIPPrefix - The reference of the Public IP Prefix resource.
15270	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
15271	// ProvisioningState - The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15272	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15273}
15274
15275// GatewayRoute gateway routing details.
15276type GatewayRoute struct {
15277	// LocalAddress - READ-ONLY; The gateway's local address.
15278	LocalAddress *string `json:"localAddress,omitempty"`
15279	// NetworkProperty - READ-ONLY; The route's network prefix.
15280	NetworkProperty *string `json:"network,omitempty"`
15281	// NextHop - READ-ONLY; The route's next hop.
15282	NextHop *string `json:"nextHop,omitempty"`
15283	// SourcePeer - READ-ONLY; The peer this route was learned from.
15284	SourcePeer *string `json:"sourcePeer,omitempty"`
15285	// Origin - READ-ONLY; The source this route was learned from.
15286	Origin *string `json:"origin,omitempty"`
15287	// AsPath - READ-ONLY; The route's AS path sequence.
15288	AsPath *string `json:"asPath,omitempty"`
15289	// Weight - READ-ONLY; The route's weight.
15290	Weight *int32 `json:"weight,omitempty"`
15291}
15292
15293// GatewayRouteListResult list of virtual network gateway routes.
15294type GatewayRouteListResult struct {
15295	autorest.Response `json:"-"`
15296	// Value - List of gateway routes.
15297	Value *[]GatewayRoute `json:"value,omitempty"`
15298}
15299
15300// GeneratevirtualwanvpnserverconfigurationvpnprofileFuture an abstraction for monitoring and retrieving
15301// the results of a long-running operation.
15302type GeneratevirtualwanvpnserverconfigurationvpnprofileFuture struct {
15303	azure.Future
15304}
15305
15306// Result returns the result of the asynchronous operation.
15307// If the operation has not completed it will return an error.
15308func (future *GeneratevirtualwanvpnserverconfigurationvpnprofileFuture) Result(client BaseClient) (vpr VpnProfileResponse, err error) {
15309	var done bool
15310	done, err = future.DoneWithContext(context.Background(), client)
15311	if err != nil {
15312		err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", future.Response(), "Polling failure")
15313		return
15314	}
15315	if !done {
15316		err = azure.NewAsyncOpIncompleteError("network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture")
15317		return
15318	}
15319	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15320	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
15321		vpr, err = client.GeneratevirtualwanvpnserverconfigurationvpnprofileResponder(vpr.Response.Response)
15322		if err != nil {
15323			err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", vpr.Response.Response, "Failure responding to request")
15324		}
15325	}
15326	return
15327}
15328
15329// GetVpnSitesConfigurationRequest list of Vpn-Sites.
15330type GetVpnSitesConfigurationRequest struct {
15331	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
15332	VpnSites *[]string `json:"vpnSites,omitempty"`
15333	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites.
15334	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
15335}
15336
15337// HTTPConfiguration HTTP configuration of the connectivity check.
15338type HTTPConfiguration struct {
15339	// Method - HTTP method. Possible values include: 'Get'
15340	Method HTTPMethod `json:"method,omitempty"`
15341	// Headers - List of HTTP headers.
15342	Headers *[]HTTPHeader `json:"headers,omitempty"`
15343	// ValidStatusCodes - Valid status codes.
15344	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
15345}
15346
15347// HTTPHeader describes the HTTP header.
15348type HTTPHeader struct {
15349	// Name - The name in HTTP header.
15350	Name *string `json:"name,omitempty"`
15351	// Value - The value in HTTP header.
15352	Value *string `json:"value,omitempty"`
15353}
15354
15355// HubIPAddresses IP addresses associated with azure firewall.
15356type HubIPAddresses struct {
15357	// PublicIPAddresses - List of Public IP addresses associated with azure firewall.
15358	PublicIPAddresses *[]AzureFirewallPublicIPAddress `json:"publicIPAddresses,omitempty"`
15359	// PrivateIPAddress - Private IP Address associated with azure firewall.
15360	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
15361}
15362
15363// HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
15364type HubVirtualNetworkConnection struct {
15365	autorest.Response `json:"-"`
15366	// HubVirtualNetworkConnectionProperties - Properties of the hub virtual network connection.
15367	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
15368	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15369	Name *string `json:"name,omitempty"`
15370	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
15371	Etag *string `json:"etag,omitempty"`
15372	// ID - Resource ID.
15373	ID *string `json:"id,omitempty"`
15374}
15375
15376// MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
15377func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
15378	objectMap := make(map[string]interface{})
15379	if hvnc.HubVirtualNetworkConnectionProperties != nil {
15380		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
15381	}
15382	if hvnc.Name != nil {
15383		objectMap["name"] = hvnc.Name
15384	}
15385	if hvnc.ID != nil {
15386		objectMap["id"] = hvnc.ID
15387	}
15388	return json.Marshal(objectMap)
15389}
15390
15391// UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
15392func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
15393	var m map[string]*json.RawMessage
15394	err := json.Unmarshal(body, &m)
15395	if err != nil {
15396		return err
15397	}
15398	for k, v := range m {
15399		switch k {
15400		case "properties":
15401			if v != nil {
15402				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
15403				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
15404				if err != nil {
15405					return err
15406				}
15407				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
15408			}
15409		case "name":
15410			if v != nil {
15411				var name string
15412				err = json.Unmarshal(*v, &name)
15413				if err != nil {
15414					return err
15415				}
15416				hvnc.Name = &name
15417			}
15418		case "etag":
15419			if v != nil {
15420				var etag string
15421				err = json.Unmarshal(*v, &etag)
15422				if err != nil {
15423					return err
15424				}
15425				hvnc.Etag = &etag
15426			}
15427		case "id":
15428			if v != nil {
15429				var ID string
15430				err = json.Unmarshal(*v, &ID)
15431				if err != nil {
15432					return err
15433				}
15434				hvnc.ID = &ID
15435			}
15436		}
15437	}
15438
15439	return nil
15440}
15441
15442// HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection.
15443type HubVirtualNetworkConnectionProperties struct {
15444	// RemoteVirtualNetwork - Reference to the remote virtual network.
15445	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
15446	// AllowHubToRemoteVnetTransit - VirtualHub to RemoteVnet transit to enabled or not.
15447	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
15448	// AllowRemoteVnetToUseHubVnetGateways - Allow RemoteVnet to use Virtual Hub's gateways.
15449	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
15450	// EnableInternetSecurity - Enable internet security.
15451	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
15452	// ProvisioningState - The provisioning state of the hub virtual network connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15453	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15454}
15455
15456// InboundNatPool inbound NAT pool of the load balancer.
15457type InboundNatPool struct {
15458	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
15459	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
15460	// Name - The name of the resource that is unique within the set of inbound NAT pools used by the load balancer. This name can be used to access the resource.
15461	Name *string `json:"name,omitempty"`
15462	// Etag - A unique read-only string that changes whenever the resource is updated.
15463	Etag *string `json:"etag,omitempty"`
15464	// Type - READ-ONLY; Type of the resource.
15465	Type *string `json:"type,omitempty"`
15466	// ID - Resource ID.
15467	ID *string `json:"id,omitempty"`
15468}
15469
15470// MarshalJSON is the custom marshaler for InboundNatPool.
15471func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
15472	objectMap := make(map[string]interface{})
15473	if inp.InboundNatPoolPropertiesFormat != nil {
15474		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
15475	}
15476	if inp.Name != nil {
15477		objectMap["name"] = inp.Name
15478	}
15479	if inp.Etag != nil {
15480		objectMap["etag"] = inp.Etag
15481	}
15482	if inp.ID != nil {
15483		objectMap["id"] = inp.ID
15484	}
15485	return json.Marshal(objectMap)
15486}
15487
15488// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
15489func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
15490	var m map[string]*json.RawMessage
15491	err := json.Unmarshal(body, &m)
15492	if err != nil {
15493		return err
15494	}
15495	for k, v := range m {
15496		switch k {
15497		case "properties":
15498			if v != nil {
15499				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
15500				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
15501				if err != nil {
15502					return err
15503				}
15504				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
15505			}
15506		case "name":
15507			if v != nil {
15508				var name string
15509				err = json.Unmarshal(*v, &name)
15510				if err != nil {
15511					return err
15512				}
15513				inp.Name = &name
15514			}
15515		case "etag":
15516			if v != nil {
15517				var etag string
15518				err = json.Unmarshal(*v, &etag)
15519				if err != nil {
15520					return err
15521				}
15522				inp.Etag = &etag
15523			}
15524		case "type":
15525			if v != nil {
15526				var typeVar string
15527				err = json.Unmarshal(*v, &typeVar)
15528				if err != nil {
15529					return err
15530				}
15531				inp.Type = &typeVar
15532			}
15533		case "id":
15534			if v != nil {
15535				var ID string
15536				err = json.Unmarshal(*v, &ID)
15537				if err != nil {
15538					return err
15539				}
15540				inp.ID = &ID
15541			}
15542		}
15543	}
15544
15545	return nil
15546}
15547
15548// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
15549type InboundNatPoolPropertiesFormat struct {
15550	// FrontendIPConfiguration - A reference to frontend IP addresses.
15551	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
15552	// Protocol - The reference to the transport protocol used by the inbound NAT pool. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
15553	Protocol TransportProtocol `json:"protocol,omitempty"`
15554	// FrontendPortRangeStart - The first port number in the range of external ports that will be used to provide Inbound Nat to NICs associated with a load balancer. Acceptable values range between 1 and 65534.
15555	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
15556	// FrontendPortRangeEnd - The last port number in the range of external ports that will be used to provide Inbound Nat to NICs associated with a load balancer. Acceptable values range between 1 and 65535.
15557	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
15558	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
15559	BackendPort *int32 `json:"backendPort,omitempty"`
15560	// IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.
15561	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
15562	// EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint.
15563	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
15564	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
15565	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
15566	// ProvisioningState - The provisioning state of the inbound NAT pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15567	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15568}
15569
15570// InboundNatRule inbound NAT rule of the load balancer.
15571type InboundNatRule struct {
15572	autorest.Response `json:"-"`
15573	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
15574	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
15575	// Name - The name of the resource that is unique within the set of inbound NAT rules used by the load balancer. This name can be used to access the resource.
15576	Name *string `json:"name,omitempty"`
15577	// Etag - A unique read-only string that changes whenever the resource is updated.
15578	Etag *string `json:"etag,omitempty"`
15579	// Type - READ-ONLY; Type of the resource.
15580	Type *string `json:"type,omitempty"`
15581	// ID - Resource ID.
15582	ID *string `json:"id,omitempty"`
15583}
15584
15585// MarshalJSON is the custom marshaler for InboundNatRule.
15586func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
15587	objectMap := make(map[string]interface{})
15588	if inr.InboundNatRulePropertiesFormat != nil {
15589		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
15590	}
15591	if inr.Name != nil {
15592		objectMap["name"] = inr.Name
15593	}
15594	if inr.Etag != nil {
15595		objectMap["etag"] = inr.Etag
15596	}
15597	if inr.ID != nil {
15598		objectMap["id"] = inr.ID
15599	}
15600	return json.Marshal(objectMap)
15601}
15602
15603// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
15604func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
15605	var m map[string]*json.RawMessage
15606	err := json.Unmarshal(body, &m)
15607	if err != nil {
15608		return err
15609	}
15610	for k, v := range m {
15611		switch k {
15612		case "properties":
15613			if v != nil {
15614				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
15615				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
15616				if err != nil {
15617					return err
15618				}
15619				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
15620			}
15621		case "name":
15622			if v != nil {
15623				var name string
15624				err = json.Unmarshal(*v, &name)
15625				if err != nil {
15626					return err
15627				}
15628				inr.Name = &name
15629			}
15630		case "etag":
15631			if v != nil {
15632				var etag string
15633				err = json.Unmarshal(*v, &etag)
15634				if err != nil {
15635					return err
15636				}
15637				inr.Etag = &etag
15638			}
15639		case "type":
15640			if v != nil {
15641				var typeVar string
15642				err = json.Unmarshal(*v, &typeVar)
15643				if err != nil {
15644					return err
15645				}
15646				inr.Type = &typeVar
15647			}
15648		case "id":
15649			if v != nil {
15650				var ID string
15651				err = json.Unmarshal(*v, &ID)
15652				if err != nil {
15653					return err
15654				}
15655				inr.ID = &ID
15656			}
15657		}
15658	}
15659
15660	return nil
15661}
15662
15663// InboundNatRuleListResult response for ListInboundNatRule API service call.
15664type InboundNatRuleListResult struct {
15665	autorest.Response `json:"-"`
15666	// Value - A list of inbound nat rules in a load balancer.
15667	Value *[]InboundNatRule `json:"value,omitempty"`
15668	// NextLink - READ-ONLY; The URL to get the next set of results.
15669	NextLink *string `json:"nextLink,omitempty"`
15670}
15671
15672// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
15673type InboundNatRuleListResultIterator struct {
15674	i    int
15675	page InboundNatRuleListResultPage
15676}
15677
15678// NextWithContext advances to the next value.  If there was an error making
15679// the request the iterator does not advance and the error is returned.
15680func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
15681	if tracing.IsEnabled() {
15682		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
15683		defer func() {
15684			sc := -1
15685			if iter.Response().Response.Response != nil {
15686				sc = iter.Response().Response.Response.StatusCode
15687			}
15688			tracing.EndSpan(ctx, sc, err)
15689		}()
15690	}
15691	iter.i++
15692	if iter.i < len(iter.page.Values()) {
15693		return nil
15694	}
15695	err = iter.page.NextWithContext(ctx)
15696	if err != nil {
15697		iter.i--
15698		return err
15699	}
15700	iter.i = 0
15701	return nil
15702}
15703
15704// Next advances to the next value.  If there was an error making
15705// the request the iterator does not advance and the error is returned.
15706// Deprecated: Use NextWithContext() instead.
15707func (iter *InboundNatRuleListResultIterator) Next() error {
15708	return iter.NextWithContext(context.Background())
15709}
15710
15711// NotDone returns true if the enumeration should be started or is not yet complete.
15712func (iter InboundNatRuleListResultIterator) NotDone() bool {
15713	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15714}
15715
15716// Response returns the raw server response from the last page request.
15717func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
15718	return iter.page.Response()
15719}
15720
15721// Value returns the current value or a zero-initialized value if the
15722// iterator has advanced beyond the end of the collection.
15723func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
15724	if !iter.page.NotDone() {
15725		return InboundNatRule{}
15726	}
15727	return iter.page.Values()[iter.i]
15728}
15729
15730// Creates a new instance of the InboundNatRuleListResultIterator type.
15731func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
15732	return InboundNatRuleListResultIterator{page: page}
15733}
15734
15735// IsEmpty returns true if the ListResult contains no values.
15736func (inrlr InboundNatRuleListResult) IsEmpty() bool {
15737	return inrlr.Value == nil || len(*inrlr.Value) == 0
15738}
15739
15740// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
15741// It returns nil if no more results exist.
15742func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
15743	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
15744		return nil, nil
15745	}
15746	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15747		autorest.AsJSON(),
15748		autorest.AsGet(),
15749		autorest.WithBaseURL(to.String(inrlr.NextLink)))
15750}
15751
15752// InboundNatRuleListResultPage contains a page of InboundNatRule values.
15753type InboundNatRuleListResultPage struct {
15754	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
15755	inrlr InboundNatRuleListResult
15756}
15757
15758// NextWithContext advances to the next page of values.  If there was an error making
15759// the request the page does not advance and the error is returned.
15760func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
15761	if tracing.IsEnabled() {
15762		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
15763		defer func() {
15764			sc := -1
15765			if page.Response().Response.Response != nil {
15766				sc = page.Response().Response.Response.StatusCode
15767			}
15768			tracing.EndSpan(ctx, sc, err)
15769		}()
15770	}
15771	next, err := page.fn(ctx, page.inrlr)
15772	if err != nil {
15773		return err
15774	}
15775	page.inrlr = next
15776	return nil
15777}
15778
15779// Next advances to the next page of values.  If there was an error making
15780// the request the page does not advance and the error is returned.
15781// Deprecated: Use NextWithContext() instead.
15782func (page *InboundNatRuleListResultPage) Next() error {
15783	return page.NextWithContext(context.Background())
15784}
15785
15786// NotDone returns true if the page enumeration should be started or is not yet complete.
15787func (page InboundNatRuleListResultPage) NotDone() bool {
15788	return !page.inrlr.IsEmpty()
15789}
15790
15791// Response returns the raw server response from the last page request.
15792func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
15793	return page.inrlr
15794}
15795
15796// Values returns the slice of values for the current page or nil if there are no values.
15797func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
15798	if page.inrlr.IsEmpty() {
15799		return nil
15800	}
15801	return *page.inrlr.Value
15802}
15803
15804// Creates a new instance of the InboundNatRuleListResultPage type.
15805func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
15806	return InboundNatRuleListResultPage{fn: getNextPage}
15807}
15808
15809// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
15810type InboundNatRulePropertiesFormat struct {
15811	// FrontendIPConfiguration - A reference to frontend IP addresses.
15812	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
15813	// BackendIPConfiguration - READ-ONLY; A reference to a private IP address defined on a network interface of a VM. Traffic sent to the frontend port of each of the frontend IP configurations is forwarded to the backend IP.
15814	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
15815	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
15816	Protocol TransportProtocol `json:"protocol,omitempty"`
15817	// FrontendPort - The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values range from 1 to 65534.
15818	FrontendPort *int32 `json:"frontendPort,omitempty"`
15819	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
15820	BackendPort *int32 `json:"backendPort,omitempty"`
15821	// IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.
15822	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
15823	// EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint.
15824	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
15825	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
15826	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
15827	// ProvisioningState - The provisioning state of the inbound NAT rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15828	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15829}
15830
15831// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
15832// long-running operation.
15833type InboundNatRulesCreateOrUpdateFuture struct {
15834	azure.Future
15835}
15836
15837// Result returns the result of the asynchronous operation.
15838// If the operation has not completed it will return an error.
15839func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
15840	var done bool
15841	done, err = future.DoneWithContext(context.Background(), client)
15842	if err != nil {
15843		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15844		return
15845	}
15846	if !done {
15847		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
15848		return
15849	}
15850	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15851	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
15852		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
15853		if err != nil {
15854			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
15855		}
15856	}
15857	return
15858}
15859
15860// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
15861// operation.
15862type InboundNatRulesDeleteFuture struct {
15863	azure.Future
15864}
15865
15866// Result returns the result of the asynchronous operation.
15867// If the operation has not completed it will return an error.
15868func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
15869	var done bool
15870	done, err = future.DoneWithContext(context.Background(), client)
15871	if err != nil {
15872		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
15873		return
15874	}
15875	if !done {
15876		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
15877		return
15878	}
15879	ar.Response = future.Response()
15880	return
15881}
15882
15883// IntentPolicy network Intent Policy resource.
15884type IntentPolicy struct {
15885	// Etag - A unique read-only string that changes whenever the resource is updated.
15886	Etag *string `json:"etag,omitempty"`
15887	// ID - Resource ID.
15888	ID *string `json:"id,omitempty"`
15889	// Name - READ-ONLY; Resource name.
15890	Name *string `json:"name,omitempty"`
15891	// Type - READ-ONLY; Resource type.
15892	Type *string `json:"type,omitempty"`
15893	// Location - Resource location.
15894	Location *string `json:"location,omitempty"`
15895	// Tags - Resource tags.
15896	Tags map[string]*string `json:"tags"`
15897}
15898
15899// MarshalJSON is the custom marshaler for IntentPolicy.
15900func (IP IntentPolicy) MarshalJSON() ([]byte, error) {
15901	objectMap := make(map[string]interface{})
15902	if IP.Etag != nil {
15903		objectMap["etag"] = IP.Etag
15904	}
15905	if IP.ID != nil {
15906		objectMap["id"] = IP.ID
15907	}
15908	if IP.Location != nil {
15909		objectMap["location"] = IP.Location
15910	}
15911	if IP.Tags != nil {
15912		objectMap["tags"] = IP.Tags
15913	}
15914	return json.Marshal(objectMap)
15915}
15916
15917// IntentPolicyConfiguration details of NetworkIntentPolicyConfiguration for PrepareNetworkPoliciesRequest.
15918type IntentPolicyConfiguration struct {
15919	// NetworkIntentPolicyName - The name of the Network Intent Policy for storing in target subscription.
15920	NetworkIntentPolicyName *string `json:"networkIntentPolicyName,omitempty"`
15921	// SourceNetworkIntentPolicy - Source network intent policy.
15922	SourceNetworkIntentPolicy *IntentPolicy `json:"sourceNetworkIntentPolicy,omitempty"`
15923}
15924
15925// Interface a network interface in a resource group.
15926type Interface struct {
15927	autorest.Response `json:"-"`
15928	// InterfacePropertiesFormat - Properties of the network interface.
15929	*InterfacePropertiesFormat `json:"properties,omitempty"`
15930	// Etag - A unique read-only string that changes whenever the resource is updated.
15931	Etag *string `json:"etag,omitempty"`
15932	// ID - Resource ID.
15933	ID *string `json:"id,omitempty"`
15934	// Name - READ-ONLY; Resource name.
15935	Name *string `json:"name,omitempty"`
15936	// Type - READ-ONLY; Resource type.
15937	Type *string `json:"type,omitempty"`
15938	// Location - Resource location.
15939	Location *string `json:"location,omitempty"`
15940	// Tags - Resource tags.
15941	Tags map[string]*string `json:"tags"`
15942}
15943
15944// MarshalJSON is the custom marshaler for Interface.
15945func (i Interface) MarshalJSON() ([]byte, error) {
15946	objectMap := make(map[string]interface{})
15947	if i.InterfacePropertiesFormat != nil {
15948		objectMap["properties"] = i.InterfacePropertiesFormat
15949	}
15950	if i.Etag != nil {
15951		objectMap["etag"] = i.Etag
15952	}
15953	if i.ID != nil {
15954		objectMap["id"] = i.ID
15955	}
15956	if i.Location != nil {
15957		objectMap["location"] = i.Location
15958	}
15959	if i.Tags != nil {
15960		objectMap["tags"] = i.Tags
15961	}
15962	return json.Marshal(objectMap)
15963}
15964
15965// UnmarshalJSON is the custom unmarshaler for Interface struct.
15966func (i *Interface) UnmarshalJSON(body []byte) error {
15967	var m map[string]*json.RawMessage
15968	err := json.Unmarshal(body, &m)
15969	if err != nil {
15970		return err
15971	}
15972	for k, v := range m {
15973		switch k {
15974		case "properties":
15975			if v != nil {
15976				var interfacePropertiesFormat InterfacePropertiesFormat
15977				err = json.Unmarshal(*v, &interfacePropertiesFormat)
15978				if err != nil {
15979					return err
15980				}
15981				i.InterfacePropertiesFormat = &interfacePropertiesFormat
15982			}
15983		case "etag":
15984			if v != nil {
15985				var etag string
15986				err = json.Unmarshal(*v, &etag)
15987				if err != nil {
15988					return err
15989				}
15990				i.Etag = &etag
15991			}
15992		case "id":
15993			if v != nil {
15994				var ID string
15995				err = json.Unmarshal(*v, &ID)
15996				if err != nil {
15997					return err
15998				}
15999				i.ID = &ID
16000			}
16001		case "name":
16002			if v != nil {
16003				var name string
16004				err = json.Unmarshal(*v, &name)
16005				if err != nil {
16006					return err
16007				}
16008				i.Name = &name
16009			}
16010		case "type":
16011			if v != nil {
16012				var typeVar string
16013				err = json.Unmarshal(*v, &typeVar)
16014				if err != nil {
16015					return err
16016				}
16017				i.Type = &typeVar
16018			}
16019		case "location":
16020			if v != nil {
16021				var location string
16022				err = json.Unmarshal(*v, &location)
16023				if err != nil {
16024					return err
16025				}
16026				i.Location = &location
16027			}
16028		case "tags":
16029			if v != nil {
16030				var tags map[string]*string
16031				err = json.Unmarshal(*v, &tags)
16032				if err != nil {
16033					return err
16034				}
16035				i.Tags = tags
16036			}
16037		}
16038	}
16039
16040	return nil
16041}
16042
16043// InterfaceAssociation network interface and its custom security rules.
16044type InterfaceAssociation struct {
16045	// ID - READ-ONLY; Network interface ID.
16046	ID *string `json:"id,omitempty"`
16047	// SecurityRules - Collection of custom security rules.
16048	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
16049}
16050
16051// InterfaceDNSSettings DNS settings of a network interface.
16052type InterfaceDNSSettings struct {
16053	// DNSServers - List of DNS servers IP addresses. Use 'AzureProvidedDNS' to switch to azure provided DNS resolution. 'AzureProvidedDNS' value cannot be combined with other IPs, it must be the only value in dnsServers collection.
16054	DNSServers *[]string `json:"dnsServers,omitempty"`
16055	// AppliedDNSServers - If the VM that uses this NIC is part of an Availability Set, then this list will have the union of all DNS servers from all NICs that are part of the Availability Set. This property is what is configured on each of those VMs.
16056	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
16057	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
16058	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
16059	// InternalFqdn - Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
16060	InternalFqdn *string `json:"internalFqdn,omitempty"`
16061	// InternalDomainNameSuffix - Even if internalDnsNameLabel is not specified, a DNS entry is created for the primary NIC of the VM. This DNS name can be constructed by concatenating the VM name with the value of internalDomainNameSuffix.
16062	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
16063}
16064
16065// InterfaceIPConfiguration iPConfiguration in a network interface.
16066type InterfaceIPConfiguration struct {
16067	autorest.Response `json:"-"`
16068	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
16069	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
16070	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16071	Name *string `json:"name,omitempty"`
16072	// Etag - A unique read-only string that changes whenever the resource is updated.
16073	Etag *string `json:"etag,omitempty"`
16074	// ID - Resource ID.
16075	ID *string `json:"id,omitempty"`
16076}
16077
16078// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
16079func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
16080	objectMap := make(map[string]interface{})
16081	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
16082		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
16083	}
16084	if iic.Name != nil {
16085		objectMap["name"] = iic.Name
16086	}
16087	if iic.Etag != nil {
16088		objectMap["etag"] = iic.Etag
16089	}
16090	if iic.ID != nil {
16091		objectMap["id"] = iic.ID
16092	}
16093	return json.Marshal(objectMap)
16094}
16095
16096// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
16097func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
16098	var m map[string]*json.RawMessage
16099	err := json.Unmarshal(body, &m)
16100	if err != nil {
16101		return err
16102	}
16103	for k, v := range m {
16104		switch k {
16105		case "properties":
16106			if v != nil {
16107				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
16108				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
16109				if err != nil {
16110					return err
16111				}
16112				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
16113			}
16114		case "name":
16115			if v != nil {
16116				var name string
16117				err = json.Unmarshal(*v, &name)
16118				if err != nil {
16119					return err
16120				}
16121				iic.Name = &name
16122			}
16123		case "etag":
16124			if v != nil {
16125				var etag string
16126				err = json.Unmarshal(*v, &etag)
16127				if err != nil {
16128					return err
16129				}
16130				iic.Etag = &etag
16131			}
16132		case "id":
16133			if v != nil {
16134				var ID string
16135				err = json.Unmarshal(*v, &ID)
16136				if err != nil {
16137					return err
16138				}
16139				iic.ID = &ID
16140			}
16141		}
16142	}
16143
16144	return nil
16145}
16146
16147// InterfaceIPConfigurationListResult response for list ip configurations API service call.
16148type InterfaceIPConfigurationListResult struct {
16149	autorest.Response `json:"-"`
16150	// Value - A list of ip configurations.
16151	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
16152	// NextLink - READ-ONLY; The URL to get the next set of results.
16153	NextLink *string `json:"nextLink,omitempty"`
16154}
16155
16156// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
16157// InterfaceIPConfiguration values.
16158type InterfaceIPConfigurationListResultIterator struct {
16159	i    int
16160	page InterfaceIPConfigurationListResultPage
16161}
16162
16163// NextWithContext advances to the next value.  If there was an error making
16164// the request the iterator does not advance and the error is returned.
16165func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
16166	if tracing.IsEnabled() {
16167		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
16168		defer func() {
16169			sc := -1
16170			if iter.Response().Response.Response != nil {
16171				sc = iter.Response().Response.Response.StatusCode
16172			}
16173			tracing.EndSpan(ctx, sc, err)
16174		}()
16175	}
16176	iter.i++
16177	if iter.i < len(iter.page.Values()) {
16178		return nil
16179	}
16180	err = iter.page.NextWithContext(ctx)
16181	if err != nil {
16182		iter.i--
16183		return err
16184	}
16185	iter.i = 0
16186	return nil
16187}
16188
16189// Next advances to the next value.  If there was an error making
16190// the request the iterator does not advance and the error is returned.
16191// Deprecated: Use NextWithContext() instead.
16192func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
16193	return iter.NextWithContext(context.Background())
16194}
16195
16196// NotDone returns true if the enumeration should be started or is not yet complete.
16197func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
16198	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16199}
16200
16201// Response returns the raw server response from the last page request.
16202func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
16203	return iter.page.Response()
16204}
16205
16206// Value returns the current value or a zero-initialized value if the
16207// iterator has advanced beyond the end of the collection.
16208func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
16209	if !iter.page.NotDone() {
16210		return InterfaceIPConfiguration{}
16211	}
16212	return iter.page.Values()[iter.i]
16213}
16214
16215// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
16216func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
16217	return InterfaceIPConfigurationListResultIterator{page: page}
16218}
16219
16220// IsEmpty returns true if the ListResult contains no values.
16221func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
16222	return iiclr.Value == nil || len(*iiclr.Value) == 0
16223}
16224
16225// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
16226// It returns nil if no more results exist.
16227func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
16228	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
16229		return nil, nil
16230	}
16231	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16232		autorest.AsJSON(),
16233		autorest.AsGet(),
16234		autorest.WithBaseURL(to.String(iiclr.NextLink)))
16235}
16236
16237// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
16238type InterfaceIPConfigurationListResultPage struct {
16239	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
16240	iiclr InterfaceIPConfigurationListResult
16241}
16242
16243// NextWithContext advances to the next page of values.  If there was an error making
16244// the request the page does not advance and the error is returned.
16245func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
16246	if tracing.IsEnabled() {
16247		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
16248		defer func() {
16249			sc := -1
16250			if page.Response().Response.Response != nil {
16251				sc = page.Response().Response.Response.StatusCode
16252			}
16253			tracing.EndSpan(ctx, sc, err)
16254		}()
16255	}
16256	next, err := page.fn(ctx, page.iiclr)
16257	if err != nil {
16258		return err
16259	}
16260	page.iiclr = next
16261	return nil
16262}
16263
16264// Next advances to the next page of values.  If there was an error making
16265// the request the page does not advance and the error is returned.
16266// Deprecated: Use NextWithContext() instead.
16267func (page *InterfaceIPConfigurationListResultPage) Next() error {
16268	return page.NextWithContext(context.Background())
16269}
16270
16271// NotDone returns true if the page enumeration should be started or is not yet complete.
16272func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
16273	return !page.iiclr.IsEmpty()
16274}
16275
16276// Response returns the raw server response from the last page request.
16277func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
16278	return page.iiclr
16279}
16280
16281// Values returns the slice of values for the current page or nil if there are no values.
16282func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
16283	if page.iiclr.IsEmpty() {
16284		return nil
16285	}
16286	return *page.iiclr.Value
16287}
16288
16289// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
16290func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
16291	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
16292}
16293
16294// InterfaceIPConfigurationPrivateLinkConnectionProperties privateLinkConnection properties for the network
16295// interface.
16296type InterfaceIPConfigurationPrivateLinkConnectionProperties struct {
16297	// GroupID - READ-ONLY; The group ID for current private link connection.
16298	GroupID *string `json:"groupId,omitempty"`
16299	// RequiredMemberName - READ-ONLY; The required member name for current private link connection.
16300	RequiredMemberName *string `json:"requiredMemberName,omitempty"`
16301	// Fqdns - READ-ONLY; List of FQDNs for current private link connection.
16302	Fqdns *[]string `json:"fqdns,omitempty"`
16303}
16304
16305// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
16306type InterfaceIPConfigurationPropertiesFormat struct {
16307	// VirtualNetworkTaps - The reference to Virtual Network Taps.
16308	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
16309	// ApplicationGatewayBackendAddressPools - The reference of ApplicationGatewayBackendAddressPool resource.
16310	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
16311	// LoadBalancerBackendAddressPools - The reference of LoadBalancerBackendAddressPool resource.
16312	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
16313	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
16314	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
16315	// PrivateIPAddress - Private IP address of the IP configuration.
16316	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
16317	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
16318	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
16319	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
16320	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
16321	// Subnet - Subnet bound to the IP configuration.
16322	Subnet *Subnet `json:"subnet,omitempty"`
16323	// Primary - Whether this is a primary customer address on the network interface.
16324	Primary *bool `json:"primary,omitempty"`
16325	// PublicIPAddress - Public IP address bound to the IP configuration.
16326	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
16327	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
16328	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
16329	// ProvisioningState - The provisioning state of the network interface IP configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16330	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16331	// PrivateLinkConnectionProperties - READ-ONLY; PrivateLinkConnection properties for the network interface.
16332	PrivateLinkConnectionProperties *InterfaceIPConfigurationPrivateLinkConnectionProperties `json:"privateLinkConnectionProperties,omitempty"`
16333}
16334
16335// InterfaceListResult response for the ListNetworkInterface API service call.
16336type InterfaceListResult struct {
16337	autorest.Response `json:"-"`
16338	// Value - A list of network interfaces in a resource group.
16339	Value *[]Interface `json:"value,omitempty"`
16340	// NextLink - READ-ONLY; The URL to get the next set of results.
16341	NextLink *string `json:"nextLink,omitempty"`
16342}
16343
16344// InterfaceListResultIterator provides access to a complete listing of Interface values.
16345type InterfaceListResultIterator struct {
16346	i    int
16347	page InterfaceListResultPage
16348}
16349
16350// NextWithContext advances to the next value.  If there was an error making
16351// the request the iterator does not advance and the error is returned.
16352func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
16353	if tracing.IsEnabled() {
16354		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
16355		defer func() {
16356			sc := -1
16357			if iter.Response().Response.Response != nil {
16358				sc = iter.Response().Response.Response.StatusCode
16359			}
16360			tracing.EndSpan(ctx, sc, err)
16361		}()
16362	}
16363	iter.i++
16364	if iter.i < len(iter.page.Values()) {
16365		return nil
16366	}
16367	err = iter.page.NextWithContext(ctx)
16368	if err != nil {
16369		iter.i--
16370		return err
16371	}
16372	iter.i = 0
16373	return nil
16374}
16375
16376// Next advances to the next value.  If there was an error making
16377// the request the iterator does not advance and the error is returned.
16378// Deprecated: Use NextWithContext() instead.
16379func (iter *InterfaceListResultIterator) Next() error {
16380	return iter.NextWithContext(context.Background())
16381}
16382
16383// NotDone returns true if the enumeration should be started or is not yet complete.
16384func (iter InterfaceListResultIterator) NotDone() bool {
16385	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16386}
16387
16388// Response returns the raw server response from the last page request.
16389func (iter InterfaceListResultIterator) Response() InterfaceListResult {
16390	return iter.page.Response()
16391}
16392
16393// Value returns the current value or a zero-initialized value if the
16394// iterator has advanced beyond the end of the collection.
16395func (iter InterfaceListResultIterator) Value() Interface {
16396	if !iter.page.NotDone() {
16397		return Interface{}
16398	}
16399	return iter.page.Values()[iter.i]
16400}
16401
16402// Creates a new instance of the InterfaceListResultIterator type.
16403func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
16404	return InterfaceListResultIterator{page: page}
16405}
16406
16407// IsEmpty returns true if the ListResult contains no values.
16408func (ilr InterfaceListResult) IsEmpty() bool {
16409	return ilr.Value == nil || len(*ilr.Value) == 0
16410}
16411
16412// interfaceListResultPreparer prepares a request to retrieve the next set of results.
16413// It returns nil if no more results exist.
16414func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
16415	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
16416		return nil, nil
16417	}
16418	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16419		autorest.AsJSON(),
16420		autorest.AsGet(),
16421		autorest.WithBaseURL(to.String(ilr.NextLink)))
16422}
16423
16424// InterfaceListResultPage contains a page of Interface values.
16425type InterfaceListResultPage struct {
16426	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
16427	ilr InterfaceListResult
16428}
16429
16430// NextWithContext advances to the next page of values.  If there was an error making
16431// the request the page does not advance and the error is returned.
16432func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
16433	if tracing.IsEnabled() {
16434		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
16435		defer func() {
16436			sc := -1
16437			if page.Response().Response.Response != nil {
16438				sc = page.Response().Response.Response.StatusCode
16439			}
16440			tracing.EndSpan(ctx, sc, err)
16441		}()
16442	}
16443	next, err := page.fn(ctx, page.ilr)
16444	if err != nil {
16445		return err
16446	}
16447	page.ilr = next
16448	return nil
16449}
16450
16451// Next advances to the next page of values.  If there was an error making
16452// the request the page does not advance and the error is returned.
16453// Deprecated: Use NextWithContext() instead.
16454func (page *InterfaceListResultPage) Next() error {
16455	return page.NextWithContext(context.Background())
16456}
16457
16458// NotDone returns true if the page enumeration should be started or is not yet complete.
16459func (page InterfaceListResultPage) NotDone() bool {
16460	return !page.ilr.IsEmpty()
16461}
16462
16463// Response returns the raw server response from the last page request.
16464func (page InterfaceListResultPage) Response() InterfaceListResult {
16465	return page.ilr
16466}
16467
16468// Values returns the slice of values for the current page or nil if there are no values.
16469func (page InterfaceListResultPage) Values() []Interface {
16470	if page.ilr.IsEmpty() {
16471		return nil
16472	}
16473	return *page.ilr.Value
16474}
16475
16476// Creates a new instance of the InterfaceListResultPage type.
16477func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
16478	return InterfaceListResultPage{fn: getNextPage}
16479}
16480
16481// InterfaceLoadBalancerListResult response for list ip configurations API service call.
16482type InterfaceLoadBalancerListResult struct {
16483	autorest.Response `json:"-"`
16484	// Value - A list of load balancers.
16485	Value *[]LoadBalancer `json:"value,omitempty"`
16486	// NextLink - READ-ONLY; The URL to get the next set of results.
16487	NextLink *string `json:"nextLink,omitempty"`
16488}
16489
16490// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
16491type InterfaceLoadBalancerListResultIterator struct {
16492	i    int
16493	page InterfaceLoadBalancerListResultPage
16494}
16495
16496// NextWithContext advances to the next value.  If there was an error making
16497// the request the iterator does not advance and the error is returned.
16498func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
16499	if tracing.IsEnabled() {
16500		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
16501		defer func() {
16502			sc := -1
16503			if iter.Response().Response.Response != nil {
16504				sc = iter.Response().Response.Response.StatusCode
16505			}
16506			tracing.EndSpan(ctx, sc, err)
16507		}()
16508	}
16509	iter.i++
16510	if iter.i < len(iter.page.Values()) {
16511		return nil
16512	}
16513	err = iter.page.NextWithContext(ctx)
16514	if err != nil {
16515		iter.i--
16516		return err
16517	}
16518	iter.i = 0
16519	return nil
16520}
16521
16522// Next advances to the next value.  If there was an error making
16523// the request the iterator does not advance and the error is returned.
16524// Deprecated: Use NextWithContext() instead.
16525func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
16526	return iter.NextWithContext(context.Background())
16527}
16528
16529// NotDone returns true if the enumeration should be started or is not yet complete.
16530func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
16531	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16532}
16533
16534// Response returns the raw server response from the last page request.
16535func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
16536	return iter.page.Response()
16537}
16538
16539// Value returns the current value or a zero-initialized value if the
16540// iterator has advanced beyond the end of the collection.
16541func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
16542	if !iter.page.NotDone() {
16543		return LoadBalancer{}
16544	}
16545	return iter.page.Values()[iter.i]
16546}
16547
16548// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
16549func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
16550	return InterfaceLoadBalancerListResultIterator{page: page}
16551}
16552
16553// IsEmpty returns true if the ListResult contains no values.
16554func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
16555	return ilblr.Value == nil || len(*ilblr.Value) == 0
16556}
16557
16558// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
16559// It returns nil if no more results exist.
16560func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
16561	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
16562		return nil, nil
16563	}
16564	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16565		autorest.AsJSON(),
16566		autorest.AsGet(),
16567		autorest.WithBaseURL(to.String(ilblr.NextLink)))
16568}
16569
16570// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
16571type InterfaceLoadBalancerListResultPage struct {
16572	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
16573	ilblr InterfaceLoadBalancerListResult
16574}
16575
16576// NextWithContext advances to the next page of values.  If there was an error making
16577// the request the page does not advance and the error is returned.
16578func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
16579	if tracing.IsEnabled() {
16580		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
16581		defer func() {
16582			sc := -1
16583			if page.Response().Response.Response != nil {
16584				sc = page.Response().Response.Response.StatusCode
16585			}
16586			tracing.EndSpan(ctx, sc, err)
16587		}()
16588	}
16589	next, err := page.fn(ctx, page.ilblr)
16590	if err != nil {
16591		return err
16592	}
16593	page.ilblr = next
16594	return nil
16595}
16596
16597// Next advances to the next page of values.  If there was an error making
16598// the request the page does not advance and the error is returned.
16599// Deprecated: Use NextWithContext() instead.
16600func (page *InterfaceLoadBalancerListResultPage) Next() error {
16601	return page.NextWithContext(context.Background())
16602}
16603
16604// NotDone returns true if the page enumeration should be started or is not yet complete.
16605func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
16606	return !page.ilblr.IsEmpty()
16607}
16608
16609// Response returns the raw server response from the last page request.
16610func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
16611	return page.ilblr
16612}
16613
16614// Values returns the slice of values for the current page or nil if there are no values.
16615func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
16616	if page.ilblr.IsEmpty() {
16617		return nil
16618	}
16619	return *page.ilblr.Value
16620}
16621
16622// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
16623func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
16624	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
16625}
16626
16627// InterfacePropertiesFormat networkInterface properties.
16628type InterfacePropertiesFormat struct {
16629	// VirtualMachine - READ-ONLY; The reference of a virtual machine.
16630	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
16631	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
16632	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
16633	// PrivateEndpoint - READ-ONLY; A reference to the private endpoint to which the network interface is linked.
16634	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
16635	// IPConfigurations - A list of IPConfigurations of the network interface.
16636	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
16637	// TapConfigurations - A list of TapConfigurations of the network interface.
16638	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
16639	// DNSSettings - The DNS settings in network interface.
16640	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
16641	// MacAddress - The MAC address of the network interface.
16642	MacAddress *string `json:"macAddress,omitempty"`
16643	// Primary - Whether this is a primary network interface on a virtual machine.
16644	Primary *bool `json:"primary,omitempty"`
16645	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
16646	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
16647	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
16648	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
16649	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources.
16650	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
16651	// ResourceGUID - The resource GUID property of the network interface resource.
16652	ResourceGUID *string `json:"resourceGuid,omitempty"`
16653	// ProvisioningState - The provisioning state of the network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16654	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16655}
16656
16657// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
16658// long-running operation.
16659type InterfacesCreateOrUpdateFuture struct {
16660	azure.Future
16661}
16662
16663// Result returns the result of the asynchronous operation.
16664// If the operation has not completed it will return an error.
16665func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
16666	var done bool
16667	done, err = future.DoneWithContext(context.Background(), client)
16668	if err != nil {
16669		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16670		return
16671	}
16672	if !done {
16673		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
16674		return
16675	}
16676	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16677	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
16678		i, err = client.CreateOrUpdateResponder(i.Response.Response)
16679		if err != nil {
16680			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
16681		}
16682	}
16683	return
16684}
16685
16686// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
16687// operation.
16688type InterfacesDeleteFuture struct {
16689	azure.Future
16690}
16691
16692// Result returns the result of the asynchronous operation.
16693// If the operation has not completed it will return an error.
16694func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
16695	var done bool
16696	done, err = future.DoneWithContext(context.Background(), client)
16697	if err != nil {
16698		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
16699		return
16700	}
16701	if !done {
16702		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
16703		return
16704	}
16705	ar.Response = future.Response()
16706	return
16707}
16708
16709// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
16710// long-running operation.
16711type InterfacesGetEffectiveRouteTableFuture struct {
16712	azure.Future
16713}
16714
16715// Result returns the result of the asynchronous operation.
16716// If the operation has not completed it will return an error.
16717func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
16718	var done bool
16719	done, err = future.DoneWithContext(context.Background(), client)
16720	if err != nil {
16721		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
16722		return
16723	}
16724	if !done {
16725		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
16726		return
16727	}
16728	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16729	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
16730		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
16731		if err != nil {
16732			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
16733		}
16734	}
16735	return
16736}
16737
16738// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
16739// results of a long-running operation.
16740type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
16741	azure.Future
16742}
16743
16744// Result returns the result of the asynchronous operation.
16745// If the operation has not completed it will return an error.
16746func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
16747	var done bool
16748	done, err = future.DoneWithContext(context.Background(), client)
16749	if err != nil {
16750		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
16751		return
16752	}
16753	if !done {
16754		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
16755		return
16756	}
16757	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16758	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
16759		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
16760		if err != nil {
16761			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
16762		}
16763	}
16764	return
16765}
16766
16767// InterfacesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
16768// operation.
16769type InterfacesUpdateTagsFuture struct {
16770	azure.Future
16771}
16772
16773// Result returns the result of the asynchronous operation.
16774// If the operation has not completed it will return an error.
16775func (future *InterfacesUpdateTagsFuture) Result(client InterfacesClient) (i Interface, err error) {
16776	var done bool
16777	done, err = future.DoneWithContext(context.Background(), client)
16778	if err != nil {
16779		err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
16780		return
16781	}
16782	if !done {
16783		err = azure.NewAsyncOpIncompleteError("network.InterfacesUpdateTagsFuture")
16784		return
16785	}
16786	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16787	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
16788		i, err = client.UpdateTagsResponder(i.Response.Response)
16789		if err != nil {
16790			err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", i.Response.Response, "Failure responding to request")
16791		}
16792	}
16793	return
16794}
16795
16796// InterfaceTapConfiguration tap configuration in a Network Interface.
16797type InterfaceTapConfiguration struct {
16798	autorest.Response `json:"-"`
16799	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration.
16800	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
16801	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16802	Name *string `json:"name,omitempty"`
16803	// Etag - A unique read-only string that changes whenever the resource is updated.
16804	Etag *string `json:"etag,omitempty"`
16805	// Type - READ-ONLY; Sub Resource type.
16806	Type *string `json:"type,omitempty"`
16807	// ID - Resource ID.
16808	ID *string `json:"id,omitempty"`
16809}
16810
16811// MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
16812func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
16813	objectMap := make(map[string]interface{})
16814	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
16815		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
16816	}
16817	if itc.Name != nil {
16818		objectMap["name"] = itc.Name
16819	}
16820	if itc.Etag != nil {
16821		objectMap["etag"] = itc.Etag
16822	}
16823	if itc.ID != nil {
16824		objectMap["id"] = itc.ID
16825	}
16826	return json.Marshal(objectMap)
16827}
16828
16829// UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
16830func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
16831	var m map[string]*json.RawMessage
16832	err := json.Unmarshal(body, &m)
16833	if err != nil {
16834		return err
16835	}
16836	for k, v := range m {
16837		switch k {
16838		case "properties":
16839			if v != nil {
16840				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
16841				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
16842				if err != nil {
16843					return err
16844				}
16845				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
16846			}
16847		case "name":
16848			if v != nil {
16849				var name string
16850				err = json.Unmarshal(*v, &name)
16851				if err != nil {
16852					return err
16853				}
16854				itc.Name = &name
16855			}
16856		case "etag":
16857			if v != nil {
16858				var etag string
16859				err = json.Unmarshal(*v, &etag)
16860				if err != nil {
16861					return err
16862				}
16863				itc.Etag = &etag
16864			}
16865		case "type":
16866			if v != nil {
16867				var typeVar string
16868				err = json.Unmarshal(*v, &typeVar)
16869				if err != nil {
16870					return err
16871				}
16872				itc.Type = &typeVar
16873			}
16874		case "id":
16875			if v != nil {
16876				var ID string
16877				err = json.Unmarshal(*v, &ID)
16878				if err != nil {
16879					return err
16880				}
16881				itc.ID = &ID
16882			}
16883		}
16884	}
16885
16886	return nil
16887}
16888
16889// InterfaceTapConfigurationListResult response for list tap configurations API service call.
16890type InterfaceTapConfigurationListResult struct {
16891	autorest.Response `json:"-"`
16892	// Value - A list of tap configurations.
16893	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
16894	// NextLink - READ-ONLY; The URL to get the next set of results.
16895	NextLink *string `json:"nextLink,omitempty"`
16896}
16897
16898// InterfaceTapConfigurationListResultIterator provides access to a complete listing of
16899// InterfaceTapConfiguration values.
16900type InterfaceTapConfigurationListResultIterator struct {
16901	i    int
16902	page InterfaceTapConfigurationListResultPage
16903}
16904
16905// NextWithContext advances to the next value.  If there was an error making
16906// the request the iterator does not advance and the error is returned.
16907func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
16908	if tracing.IsEnabled() {
16909		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
16910		defer func() {
16911			sc := -1
16912			if iter.Response().Response.Response != nil {
16913				sc = iter.Response().Response.Response.StatusCode
16914			}
16915			tracing.EndSpan(ctx, sc, err)
16916		}()
16917	}
16918	iter.i++
16919	if iter.i < len(iter.page.Values()) {
16920		return nil
16921	}
16922	err = iter.page.NextWithContext(ctx)
16923	if err != nil {
16924		iter.i--
16925		return err
16926	}
16927	iter.i = 0
16928	return nil
16929}
16930
16931// Next advances to the next value.  If there was an error making
16932// the request the iterator does not advance and the error is returned.
16933// Deprecated: Use NextWithContext() instead.
16934func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
16935	return iter.NextWithContext(context.Background())
16936}
16937
16938// NotDone returns true if the enumeration should be started or is not yet complete.
16939func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
16940	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16941}
16942
16943// Response returns the raw server response from the last page request.
16944func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
16945	return iter.page.Response()
16946}
16947
16948// Value returns the current value or a zero-initialized value if the
16949// iterator has advanced beyond the end of the collection.
16950func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
16951	if !iter.page.NotDone() {
16952		return InterfaceTapConfiguration{}
16953	}
16954	return iter.page.Values()[iter.i]
16955}
16956
16957// Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
16958func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
16959	return InterfaceTapConfigurationListResultIterator{page: page}
16960}
16961
16962// IsEmpty returns true if the ListResult contains no values.
16963func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
16964	return itclr.Value == nil || len(*itclr.Value) == 0
16965}
16966
16967// interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
16968// It returns nil if no more results exist.
16969func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
16970	if itclr.NextLink == nil || len(to.String(itclr.NextLink)) < 1 {
16971		return nil, nil
16972	}
16973	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16974		autorest.AsJSON(),
16975		autorest.AsGet(),
16976		autorest.WithBaseURL(to.String(itclr.NextLink)))
16977}
16978
16979// InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
16980type InterfaceTapConfigurationListResultPage struct {
16981	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
16982	itclr InterfaceTapConfigurationListResult
16983}
16984
16985// NextWithContext advances to the next page of values.  If there was an error making
16986// the request the page does not advance and the error is returned.
16987func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
16988	if tracing.IsEnabled() {
16989		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
16990		defer func() {
16991			sc := -1
16992			if page.Response().Response.Response != nil {
16993				sc = page.Response().Response.Response.StatusCode
16994			}
16995			tracing.EndSpan(ctx, sc, err)
16996		}()
16997	}
16998	next, err := page.fn(ctx, page.itclr)
16999	if err != nil {
17000		return err
17001	}
17002	page.itclr = next
17003	return nil
17004}
17005
17006// Next advances to the next page of values.  If there was an error making
17007// the request the page does not advance and the error is returned.
17008// Deprecated: Use NextWithContext() instead.
17009func (page *InterfaceTapConfigurationListResultPage) Next() error {
17010	return page.NextWithContext(context.Background())
17011}
17012
17013// NotDone returns true if the page enumeration should be started or is not yet complete.
17014func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
17015	return !page.itclr.IsEmpty()
17016}
17017
17018// Response returns the raw server response from the last page request.
17019func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
17020	return page.itclr
17021}
17022
17023// Values returns the slice of values for the current page or nil if there are no values.
17024func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
17025	if page.itclr.IsEmpty() {
17026		return nil
17027	}
17028	return *page.itclr.Value
17029}
17030
17031// Creates a new instance of the InterfaceTapConfigurationListResultPage type.
17032func NewInterfaceTapConfigurationListResultPage(getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
17033	return InterfaceTapConfigurationListResultPage{fn: getNextPage}
17034}
17035
17036// InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
17037type InterfaceTapConfigurationPropertiesFormat struct {
17038	// VirtualNetworkTap - The reference of the Virtual Network Tap resource.
17039	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
17040	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17041	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17042}
17043
17044// InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
17045// of a long-running operation.
17046type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
17047	azure.Future
17048}
17049
17050// Result returns the result of the asynchronous operation.
17051// If the operation has not completed it will return an error.
17052func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) Result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
17053	var done bool
17054	done, err = future.DoneWithContext(context.Background(), client)
17055	if err != nil {
17056		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17057		return
17058	}
17059	if !done {
17060		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
17061		return
17062	}
17063	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17064	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
17065		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
17066		if err != nil {
17067			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
17068		}
17069	}
17070	return
17071}
17072
17073// InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
17074// long-running operation.
17075type InterfaceTapConfigurationsDeleteFuture struct {
17076	azure.Future
17077}
17078
17079// Result returns the result of the asynchronous operation.
17080// If the operation has not completed it will return an error.
17081func (future *InterfaceTapConfigurationsDeleteFuture) Result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
17082	var done bool
17083	done, err = future.DoneWithContext(context.Background(), client)
17084	if err != nil {
17085		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
17086		return
17087	}
17088	if !done {
17089		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
17090		return
17091	}
17092	ar.Response = future.Response()
17093	return
17094}
17095
17096// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call.
17097type IPAddressAvailabilityResult struct {
17098	autorest.Response `json:"-"`
17099	// Available - Private IP address availability.
17100	Available *bool `json:"available,omitempty"`
17101	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
17102	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
17103}
17104
17105// IPConfiguration IP configuration.
17106type IPConfiguration struct {
17107	// IPConfigurationPropertiesFormat - Properties of the IP configuration.
17108	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
17109	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17110	Name *string `json:"name,omitempty"`
17111	// Etag - A unique read-only string that changes whenever the resource is updated.
17112	Etag *string `json:"etag,omitempty"`
17113	// ID - Resource ID.
17114	ID *string `json:"id,omitempty"`
17115}
17116
17117// MarshalJSON is the custom marshaler for IPConfiguration.
17118func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
17119	objectMap := make(map[string]interface{})
17120	if ic.IPConfigurationPropertiesFormat != nil {
17121		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
17122	}
17123	if ic.Name != nil {
17124		objectMap["name"] = ic.Name
17125	}
17126	if ic.Etag != nil {
17127		objectMap["etag"] = ic.Etag
17128	}
17129	if ic.ID != nil {
17130		objectMap["id"] = ic.ID
17131	}
17132	return json.Marshal(objectMap)
17133}
17134
17135// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
17136func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
17137	var m map[string]*json.RawMessage
17138	err := json.Unmarshal(body, &m)
17139	if err != nil {
17140		return err
17141	}
17142	for k, v := range m {
17143		switch k {
17144		case "properties":
17145			if v != nil {
17146				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
17147				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
17148				if err != nil {
17149					return err
17150				}
17151				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
17152			}
17153		case "name":
17154			if v != nil {
17155				var name string
17156				err = json.Unmarshal(*v, &name)
17157				if err != nil {
17158					return err
17159				}
17160				ic.Name = &name
17161			}
17162		case "etag":
17163			if v != nil {
17164				var etag string
17165				err = json.Unmarshal(*v, &etag)
17166				if err != nil {
17167					return err
17168				}
17169				ic.Etag = &etag
17170			}
17171		case "id":
17172			if v != nil {
17173				var ID string
17174				err = json.Unmarshal(*v, &ID)
17175				if err != nil {
17176					return err
17177				}
17178				ic.ID = &ID
17179			}
17180		}
17181	}
17182
17183	return nil
17184}
17185
17186// IPConfigurationProfile IP configuration profile child resource.
17187type IPConfigurationProfile struct {
17188	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
17189	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
17190	// Name - The name of the resource. This name can be used to access the resource.
17191	Name *string `json:"name,omitempty"`
17192	// Type - READ-ONLY; Sub Resource type.
17193	Type *string `json:"type,omitempty"`
17194	// Etag - A unique read-only string that changes whenever the resource is updated.
17195	Etag *string `json:"etag,omitempty"`
17196	// ID - Resource ID.
17197	ID *string `json:"id,omitempty"`
17198}
17199
17200// MarshalJSON is the custom marshaler for IPConfigurationProfile.
17201func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
17202	objectMap := make(map[string]interface{})
17203	if icp.IPConfigurationProfilePropertiesFormat != nil {
17204		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
17205	}
17206	if icp.Name != nil {
17207		objectMap["name"] = icp.Name
17208	}
17209	if icp.Etag != nil {
17210		objectMap["etag"] = icp.Etag
17211	}
17212	if icp.ID != nil {
17213		objectMap["id"] = icp.ID
17214	}
17215	return json.Marshal(objectMap)
17216}
17217
17218// UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
17219func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
17220	var m map[string]*json.RawMessage
17221	err := json.Unmarshal(body, &m)
17222	if err != nil {
17223		return err
17224	}
17225	for k, v := range m {
17226		switch k {
17227		case "properties":
17228			if v != nil {
17229				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
17230				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
17231				if err != nil {
17232					return err
17233				}
17234				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
17235			}
17236		case "name":
17237			if v != nil {
17238				var name string
17239				err = json.Unmarshal(*v, &name)
17240				if err != nil {
17241					return err
17242				}
17243				icp.Name = &name
17244			}
17245		case "type":
17246			if v != nil {
17247				var typeVar string
17248				err = json.Unmarshal(*v, &typeVar)
17249				if err != nil {
17250					return err
17251				}
17252				icp.Type = &typeVar
17253			}
17254		case "etag":
17255			if v != nil {
17256				var etag string
17257				err = json.Unmarshal(*v, &etag)
17258				if err != nil {
17259					return err
17260				}
17261				icp.Etag = &etag
17262			}
17263		case "id":
17264			if v != nil {
17265				var ID string
17266				err = json.Unmarshal(*v, &ID)
17267				if err != nil {
17268					return err
17269				}
17270				icp.ID = &ID
17271			}
17272		}
17273	}
17274
17275	return nil
17276}
17277
17278// IPConfigurationProfilePropertiesFormat IP configuration profile properties.
17279type IPConfigurationProfilePropertiesFormat struct {
17280	// Subnet - The reference of the subnet resource to create a container network interface ip configuration.
17281	Subnet *Subnet `json:"subnet,omitempty"`
17282	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17283	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17284}
17285
17286// IPConfigurationPropertiesFormat properties of IP configuration.
17287type IPConfigurationPropertiesFormat struct {
17288	// PrivateIPAddress - The private IP address of the IP configuration.
17289	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
17290	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
17291	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
17292	// Subnet - The reference of the subnet resource.
17293	Subnet *Subnet `json:"subnet,omitempty"`
17294	// PublicIPAddress - The reference of the public IP resource.
17295	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
17296	// ProvisioningState - The provisioning state of the IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17297	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17298}
17299
17300// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection.
17301type IpsecPolicy struct {
17302	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
17303	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
17304	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
17305	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
17306	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
17307	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
17308	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
17309	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
17310	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
17311	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
17312	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
17313	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
17314	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
17315	DhGroup DhGroup `json:"dhGroup,omitempty"`
17316	// PfsGroup - The Pfs Group used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
17317	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
17318}
17319
17320// IPTag contains the IpTag associated with the object.
17321type IPTag struct {
17322	// IPTagType - The IP tag type. Example: FirstPartyUsage.
17323	IPTagType *string `json:"ipTagType,omitempty"`
17324	// Tag - The value of the IP tag associated with the public IP. Example: SQL.
17325	Tag *string `json:"tag,omitempty"`
17326}
17327
17328// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
17329type Ipv6ExpressRouteCircuitPeeringConfig struct {
17330	// PrimaryPeerAddressPrefix - The primary address prefix.
17331	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
17332	// SecondaryPeerAddressPrefix - The secondary address prefix.
17333	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
17334	// MicrosoftPeeringConfig - The Microsoft peering configuration.
17335	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
17336	// RouteFilter - The reference of the RouteFilter resource.
17337	RouteFilter *SubResource `json:"routeFilter,omitempty"`
17338	// State - The state of peering. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
17339	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
17340}
17341
17342// ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
17343// the next set of results.
17344type ListHubVirtualNetworkConnectionsResult struct {
17345	autorest.Response `json:"-"`
17346	// Value - List of HubVirtualNetworkConnections.
17347	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
17348	// NextLink - URL to get the next set of operation list results if there are any.
17349	NextLink *string `json:"nextLink,omitempty"`
17350}
17351
17352// ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
17353// HubVirtualNetworkConnection values.
17354type ListHubVirtualNetworkConnectionsResultIterator struct {
17355	i    int
17356	page ListHubVirtualNetworkConnectionsResultPage
17357}
17358
17359// NextWithContext advances to the next value.  If there was an error making
17360// the request the iterator does not advance and the error is returned.
17361func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
17362	if tracing.IsEnabled() {
17363		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
17364		defer func() {
17365			sc := -1
17366			if iter.Response().Response.Response != nil {
17367				sc = iter.Response().Response.Response.StatusCode
17368			}
17369			tracing.EndSpan(ctx, sc, err)
17370		}()
17371	}
17372	iter.i++
17373	if iter.i < len(iter.page.Values()) {
17374		return nil
17375	}
17376	err = iter.page.NextWithContext(ctx)
17377	if err != nil {
17378		iter.i--
17379		return err
17380	}
17381	iter.i = 0
17382	return nil
17383}
17384
17385// Next advances to the next value.  If there was an error making
17386// the request the iterator does not advance and the error is returned.
17387// Deprecated: Use NextWithContext() instead.
17388func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
17389	return iter.NextWithContext(context.Background())
17390}
17391
17392// NotDone returns true if the enumeration should be started or is not yet complete.
17393func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
17394	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17395}
17396
17397// Response returns the raw server response from the last page request.
17398func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
17399	return iter.page.Response()
17400}
17401
17402// Value returns the current value or a zero-initialized value if the
17403// iterator has advanced beyond the end of the collection.
17404func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
17405	if !iter.page.NotDone() {
17406		return HubVirtualNetworkConnection{}
17407	}
17408	return iter.page.Values()[iter.i]
17409}
17410
17411// Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
17412func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
17413	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
17414}
17415
17416// IsEmpty returns true if the ListResult contains no values.
17417func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
17418	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
17419}
17420
17421// listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
17422// It returns nil if no more results exist.
17423func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
17424	if lhvncr.NextLink == nil || len(to.String(lhvncr.NextLink)) < 1 {
17425		return nil, nil
17426	}
17427	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17428		autorest.AsJSON(),
17429		autorest.AsGet(),
17430		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
17431}
17432
17433// ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
17434type ListHubVirtualNetworkConnectionsResultPage struct {
17435	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
17436	lhvncr ListHubVirtualNetworkConnectionsResult
17437}
17438
17439// NextWithContext advances to the next page of values.  If there was an error making
17440// the request the page does not advance and the error is returned.
17441func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
17442	if tracing.IsEnabled() {
17443		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
17444		defer func() {
17445			sc := -1
17446			if page.Response().Response.Response != nil {
17447				sc = page.Response().Response.Response.StatusCode
17448			}
17449			tracing.EndSpan(ctx, sc, err)
17450		}()
17451	}
17452	next, err := page.fn(ctx, page.lhvncr)
17453	if err != nil {
17454		return err
17455	}
17456	page.lhvncr = next
17457	return nil
17458}
17459
17460// Next advances to the next page of values.  If there was an error making
17461// the request the page does not advance and the error is returned.
17462// Deprecated: Use NextWithContext() instead.
17463func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
17464	return page.NextWithContext(context.Background())
17465}
17466
17467// NotDone returns true if the page enumeration should be started or is not yet complete.
17468func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
17469	return !page.lhvncr.IsEmpty()
17470}
17471
17472// Response returns the raw server response from the last page request.
17473func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
17474	return page.lhvncr
17475}
17476
17477// Values returns the slice of values for the current page or nil if there are no values.
17478func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
17479	if page.lhvncr.IsEmpty() {
17480		return nil
17481	}
17482	return *page.lhvncr.Value
17483}
17484
17485// Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
17486func NewListHubVirtualNetworkConnectionsResultPage(getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
17487	return ListHubVirtualNetworkConnectionsResultPage{fn: getNextPage}
17488}
17489
17490// ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
17491// P2SVpnGateways and a URL nextLink to get the next set of results.
17492type ListP2SVpnGatewaysResult struct {
17493	autorest.Response `json:"-"`
17494	// Value - List of P2SVpnGateways.
17495	Value *[]P2SVpnGateway `json:"value,omitempty"`
17496	// NextLink - URL to get the next set of operation list results if there are any.
17497	NextLink *string `json:"nextLink,omitempty"`
17498}
17499
17500// ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
17501type ListP2SVpnGatewaysResultIterator struct {
17502	i    int
17503	page ListP2SVpnGatewaysResultPage
17504}
17505
17506// NextWithContext advances to the next value.  If there was an error making
17507// the request the iterator does not advance and the error is returned.
17508func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
17509	if tracing.IsEnabled() {
17510		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
17511		defer func() {
17512			sc := -1
17513			if iter.Response().Response.Response != nil {
17514				sc = iter.Response().Response.Response.StatusCode
17515			}
17516			tracing.EndSpan(ctx, sc, err)
17517		}()
17518	}
17519	iter.i++
17520	if iter.i < len(iter.page.Values()) {
17521		return nil
17522	}
17523	err = iter.page.NextWithContext(ctx)
17524	if err != nil {
17525		iter.i--
17526		return err
17527	}
17528	iter.i = 0
17529	return nil
17530}
17531
17532// Next advances to the next value.  If there was an error making
17533// the request the iterator does not advance and the error is returned.
17534// Deprecated: Use NextWithContext() instead.
17535func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
17536	return iter.NextWithContext(context.Background())
17537}
17538
17539// NotDone returns true if the enumeration should be started or is not yet complete.
17540func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
17541	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17542}
17543
17544// Response returns the raw server response from the last page request.
17545func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
17546	return iter.page.Response()
17547}
17548
17549// Value returns the current value or a zero-initialized value if the
17550// iterator has advanced beyond the end of the collection.
17551func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
17552	if !iter.page.NotDone() {
17553		return P2SVpnGateway{}
17554	}
17555	return iter.page.Values()[iter.i]
17556}
17557
17558// Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
17559func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
17560	return ListP2SVpnGatewaysResultIterator{page: page}
17561}
17562
17563// IsEmpty returns true if the ListResult contains no values.
17564func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
17565	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
17566}
17567
17568// listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
17569// It returns nil if no more results exist.
17570func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
17571	if lpvgr.NextLink == nil || len(to.String(lpvgr.NextLink)) < 1 {
17572		return nil, nil
17573	}
17574	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17575		autorest.AsJSON(),
17576		autorest.AsGet(),
17577		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
17578}
17579
17580// ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
17581type ListP2SVpnGatewaysResultPage struct {
17582	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
17583	lpvgr ListP2SVpnGatewaysResult
17584}
17585
17586// NextWithContext advances to the next page of values.  If there was an error making
17587// the request the page does not advance and the error is returned.
17588func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
17589	if tracing.IsEnabled() {
17590		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
17591		defer func() {
17592			sc := -1
17593			if page.Response().Response.Response != nil {
17594				sc = page.Response().Response.Response.StatusCode
17595			}
17596			tracing.EndSpan(ctx, sc, err)
17597		}()
17598	}
17599	next, err := page.fn(ctx, page.lpvgr)
17600	if err != nil {
17601		return err
17602	}
17603	page.lpvgr = next
17604	return nil
17605}
17606
17607// Next advances to the next page of values.  If there was an error making
17608// the request the page does not advance and the error is returned.
17609// Deprecated: Use NextWithContext() instead.
17610func (page *ListP2SVpnGatewaysResultPage) Next() error {
17611	return page.NextWithContext(context.Background())
17612}
17613
17614// NotDone returns true if the page enumeration should be started or is not yet complete.
17615func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
17616	return !page.lpvgr.IsEmpty()
17617}
17618
17619// Response returns the raw server response from the last page request.
17620func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
17621	return page.lpvgr
17622}
17623
17624// Values returns the slice of values for the current page or nil if there are no values.
17625func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
17626	if page.lpvgr.IsEmpty() {
17627		return nil
17628	}
17629	return *page.lpvgr.Value
17630}
17631
17632// Creates a new instance of the ListP2SVpnGatewaysResultPage type.
17633func NewListP2SVpnGatewaysResultPage(getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
17634	return ListP2SVpnGatewaysResultPage{fn: getNextPage}
17635}
17636
17637// ListString ...
17638type ListString struct {
17639	autorest.Response `json:"-"`
17640	Value             *[]string `json:"value,omitempty"`
17641}
17642
17643// ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
17644// URL nextLink to get the next set of results.
17645type ListVirtualHubsResult struct {
17646	autorest.Response `json:"-"`
17647	// Value - List of VirtualHubs.
17648	Value *[]VirtualHub `json:"value,omitempty"`
17649	// NextLink - URL to get the next set of operation list results if there are any.
17650	NextLink *string `json:"nextLink,omitempty"`
17651}
17652
17653// ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
17654type ListVirtualHubsResultIterator struct {
17655	i    int
17656	page ListVirtualHubsResultPage
17657}
17658
17659// NextWithContext advances to the next value.  If there was an error making
17660// the request the iterator does not advance and the error is returned.
17661func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
17662	if tracing.IsEnabled() {
17663		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
17664		defer func() {
17665			sc := -1
17666			if iter.Response().Response.Response != nil {
17667				sc = iter.Response().Response.Response.StatusCode
17668			}
17669			tracing.EndSpan(ctx, sc, err)
17670		}()
17671	}
17672	iter.i++
17673	if iter.i < len(iter.page.Values()) {
17674		return nil
17675	}
17676	err = iter.page.NextWithContext(ctx)
17677	if err != nil {
17678		iter.i--
17679		return err
17680	}
17681	iter.i = 0
17682	return nil
17683}
17684
17685// Next advances to the next value.  If there was an error making
17686// the request the iterator does not advance and the error is returned.
17687// Deprecated: Use NextWithContext() instead.
17688func (iter *ListVirtualHubsResultIterator) Next() error {
17689	return iter.NextWithContext(context.Background())
17690}
17691
17692// NotDone returns true if the enumeration should be started or is not yet complete.
17693func (iter ListVirtualHubsResultIterator) NotDone() bool {
17694	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17695}
17696
17697// Response returns the raw server response from the last page request.
17698func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
17699	return iter.page.Response()
17700}
17701
17702// Value returns the current value or a zero-initialized value if the
17703// iterator has advanced beyond the end of the collection.
17704func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
17705	if !iter.page.NotDone() {
17706		return VirtualHub{}
17707	}
17708	return iter.page.Values()[iter.i]
17709}
17710
17711// Creates a new instance of the ListVirtualHubsResultIterator type.
17712func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
17713	return ListVirtualHubsResultIterator{page: page}
17714}
17715
17716// IsEmpty returns true if the ListResult contains no values.
17717func (lvhr ListVirtualHubsResult) IsEmpty() bool {
17718	return lvhr.Value == nil || len(*lvhr.Value) == 0
17719}
17720
17721// listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
17722// It returns nil if no more results exist.
17723func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
17724	if lvhr.NextLink == nil || len(to.String(lvhr.NextLink)) < 1 {
17725		return nil, nil
17726	}
17727	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17728		autorest.AsJSON(),
17729		autorest.AsGet(),
17730		autorest.WithBaseURL(to.String(lvhr.NextLink)))
17731}
17732
17733// ListVirtualHubsResultPage contains a page of VirtualHub values.
17734type ListVirtualHubsResultPage struct {
17735	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
17736	lvhr ListVirtualHubsResult
17737}
17738
17739// NextWithContext advances to the next page of values.  If there was an error making
17740// the request the page does not advance and the error is returned.
17741func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
17742	if tracing.IsEnabled() {
17743		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
17744		defer func() {
17745			sc := -1
17746			if page.Response().Response.Response != nil {
17747				sc = page.Response().Response.Response.StatusCode
17748			}
17749			tracing.EndSpan(ctx, sc, err)
17750		}()
17751	}
17752	next, err := page.fn(ctx, page.lvhr)
17753	if err != nil {
17754		return err
17755	}
17756	page.lvhr = next
17757	return nil
17758}
17759
17760// Next advances to the next page of values.  If there was an error making
17761// the request the page does not advance and the error is returned.
17762// Deprecated: Use NextWithContext() instead.
17763func (page *ListVirtualHubsResultPage) Next() error {
17764	return page.NextWithContext(context.Background())
17765}
17766
17767// NotDone returns true if the page enumeration should be started or is not yet complete.
17768func (page ListVirtualHubsResultPage) NotDone() bool {
17769	return !page.lvhr.IsEmpty()
17770}
17771
17772// Response returns the raw server response from the last page request.
17773func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
17774	return page.lvhr
17775}
17776
17777// Values returns the slice of values for the current page or nil if there are no values.
17778func (page ListVirtualHubsResultPage) Values() []VirtualHub {
17779	if page.lvhr.IsEmpty() {
17780		return nil
17781	}
17782	return *page.lvhr.Value
17783}
17784
17785// Creates a new instance of the ListVirtualHubsResultPage type.
17786func NewListVirtualHubsResultPage(getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
17787	return ListVirtualHubsResultPage{fn: getNextPage}
17788}
17789
17790// ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
17791// URL nextLink to get the next set of results.
17792type ListVirtualWANsResult struct {
17793	autorest.Response `json:"-"`
17794	// Value - List of VirtualWANs.
17795	Value *[]VirtualWAN `json:"value,omitempty"`
17796	// NextLink - URL to get the next set of operation list results if there are any.
17797	NextLink *string `json:"nextLink,omitempty"`
17798}
17799
17800// ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
17801type ListVirtualWANsResultIterator struct {
17802	i    int
17803	page ListVirtualWANsResultPage
17804}
17805
17806// NextWithContext advances to the next value.  If there was an error making
17807// the request the iterator does not advance and the error is returned.
17808func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
17809	if tracing.IsEnabled() {
17810		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
17811		defer func() {
17812			sc := -1
17813			if iter.Response().Response.Response != nil {
17814				sc = iter.Response().Response.Response.StatusCode
17815			}
17816			tracing.EndSpan(ctx, sc, err)
17817		}()
17818	}
17819	iter.i++
17820	if iter.i < len(iter.page.Values()) {
17821		return nil
17822	}
17823	err = iter.page.NextWithContext(ctx)
17824	if err != nil {
17825		iter.i--
17826		return err
17827	}
17828	iter.i = 0
17829	return nil
17830}
17831
17832// Next advances to the next value.  If there was an error making
17833// the request the iterator does not advance and the error is returned.
17834// Deprecated: Use NextWithContext() instead.
17835func (iter *ListVirtualWANsResultIterator) Next() error {
17836	return iter.NextWithContext(context.Background())
17837}
17838
17839// NotDone returns true if the enumeration should be started or is not yet complete.
17840func (iter ListVirtualWANsResultIterator) NotDone() bool {
17841	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17842}
17843
17844// Response returns the raw server response from the last page request.
17845func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
17846	return iter.page.Response()
17847}
17848
17849// Value returns the current value or a zero-initialized value if the
17850// iterator has advanced beyond the end of the collection.
17851func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
17852	if !iter.page.NotDone() {
17853		return VirtualWAN{}
17854	}
17855	return iter.page.Values()[iter.i]
17856}
17857
17858// Creates a new instance of the ListVirtualWANsResultIterator type.
17859func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
17860	return ListVirtualWANsResultIterator{page: page}
17861}
17862
17863// IsEmpty returns true if the ListResult contains no values.
17864func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
17865	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
17866}
17867
17868// listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
17869// It returns nil if no more results exist.
17870func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
17871	if lvwnr.NextLink == nil || len(to.String(lvwnr.NextLink)) < 1 {
17872		return nil, nil
17873	}
17874	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17875		autorest.AsJSON(),
17876		autorest.AsGet(),
17877		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
17878}
17879
17880// ListVirtualWANsResultPage contains a page of VirtualWAN values.
17881type ListVirtualWANsResultPage struct {
17882	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
17883	lvwnr ListVirtualWANsResult
17884}
17885
17886// NextWithContext advances to the next page of values.  If there was an error making
17887// the request the page does not advance and the error is returned.
17888func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
17889	if tracing.IsEnabled() {
17890		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
17891		defer func() {
17892			sc := -1
17893			if page.Response().Response.Response != nil {
17894				sc = page.Response().Response.Response.StatusCode
17895			}
17896			tracing.EndSpan(ctx, sc, err)
17897		}()
17898	}
17899	next, err := page.fn(ctx, page.lvwnr)
17900	if err != nil {
17901		return err
17902	}
17903	page.lvwnr = next
17904	return nil
17905}
17906
17907// Next advances to the next page of values.  If there was an error making
17908// the request the page does not advance and the error is returned.
17909// Deprecated: Use NextWithContext() instead.
17910func (page *ListVirtualWANsResultPage) Next() error {
17911	return page.NextWithContext(context.Background())
17912}
17913
17914// NotDone returns true if the page enumeration should be started or is not yet complete.
17915func (page ListVirtualWANsResultPage) NotDone() bool {
17916	return !page.lvwnr.IsEmpty()
17917}
17918
17919// Response returns the raw server response from the last page request.
17920func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
17921	return page.lvwnr
17922}
17923
17924// Values returns the slice of values for the current page or nil if there are no values.
17925func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
17926	if page.lvwnr.IsEmpty() {
17927		return nil
17928	}
17929	return *page.lvwnr.Value
17930}
17931
17932// Creates a new instance of the ListVirtualWANsResultPage type.
17933func NewListVirtualWANsResultPage(getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
17934	return ListVirtualWANsResultPage{fn: getNextPage}
17935}
17936
17937// ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
17938// It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
17939type ListVpnConnectionsResult struct {
17940	autorest.Response `json:"-"`
17941	// Value - List of Vpn Connections.
17942	Value *[]VpnConnection `json:"value,omitempty"`
17943	// NextLink - URL to get the next set of operation list results if there are any.
17944	NextLink *string `json:"nextLink,omitempty"`
17945}
17946
17947// ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
17948type ListVpnConnectionsResultIterator struct {
17949	i    int
17950	page ListVpnConnectionsResultPage
17951}
17952
17953// NextWithContext advances to the next value.  If there was an error making
17954// the request the iterator does not advance and the error is returned.
17955func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
17956	if tracing.IsEnabled() {
17957		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
17958		defer func() {
17959			sc := -1
17960			if iter.Response().Response.Response != nil {
17961				sc = iter.Response().Response.Response.StatusCode
17962			}
17963			tracing.EndSpan(ctx, sc, err)
17964		}()
17965	}
17966	iter.i++
17967	if iter.i < len(iter.page.Values()) {
17968		return nil
17969	}
17970	err = iter.page.NextWithContext(ctx)
17971	if err != nil {
17972		iter.i--
17973		return err
17974	}
17975	iter.i = 0
17976	return nil
17977}
17978
17979// Next advances to the next value.  If there was an error making
17980// the request the iterator does not advance and the error is returned.
17981// Deprecated: Use NextWithContext() instead.
17982func (iter *ListVpnConnectionsResultIterator) Next() error {
17983	return iter.NextWithContext(context.Background())
17984}
17985
17986// NotDone returns true if the enumeration should be started or is not yet complete.
17987func (iter ListVpnConnectionsResultIterator) NotDone() bool {
17988	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17989}
17990
17991// Response returns the raw server response from the last page request.
17992func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
17993	return iter.page.Response()
17994}
17995
17996// Value returns the current value or a zero-initialized value if the
17997// iterator has advanced beyond the end of the collection.
17998func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
17999	if !iter.page.NotDone() {
18000		return VpnConnection{}
18001	}
18002	return iter.page.Values()[iter.i]
18003}
18004
18005// Creates a new instance of the ListVpnConnectionsResultIterator type.
18006func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
18007	return ListVpnConnectionsResultIterator{page: page}
18008}
18009
18010// IsEmpty returns true if the ListResult contains no values.
18011func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
18012	return lvcr.Value == nil || len(*lvcr.Value) == 0
18013}
18014
18015// listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
18016// It returns nil if no more results exist.
18017func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
18018	if lvcr.NextLink == nil || len(to.String(lvcr.NextLink)) < 1 {
18019		return nil, nil
18020	}
18021	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18022		autorest.AsJSON(),
18023		autorest.AsGet(),
18024		autorest.WithBaseURL(to.String(lvcr.NextLink)))
18025}
18026
18027// ListVpnConnectionsResultPage contains a page of VpnConnection values.
18028type ListVpnConnectionsResultPage struct {
18029	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
18030	lvcr ListVpnConnectionsResult
18031}
18032
18033// NextWithContext advances to the next page of values.  If there was an error making
18034// the request the page does not advance and the error is returned.
18035func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
18036	if tracing.IsEnabled() {
18037		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
18038		defer func() {
18039			sc := -1
18040			if page.Response().Response.Response != nil {
18041				sc = page.Response().Response.Response.StatusCode
18042			}
18043			tracing.EndSpan(ctx, sc, err)
18044		}()
18045	}
18046	next, err := page.fn(ctx, page.lvcr)
18047	if err != nil {
18048		return err
18049	}
18050	page.lvcr = next
18051	return nil
18052}
18053
18054// Next advances to the next page of values.  If there was an error making
18055// the request the page does not advance and the error is returned.
18056// Deprecated: Use NextWithContext() instead.
18057func (page *ListVpnConnectionsResultPage) Next() error {
18058	return page.NextWithContext(context.Background())
18059}
18060
18061// NotDone returns true if the page enumeration should be started or is not yet complete.
18062func (page ListVpnConnectionsResultPage) NotDone() bool {
18063	return !page.lvcr.IsEmpty()
18064}
18065
18066// Response returns the raw server response from the last page request.
18067func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
18068	return page.lvcr
18069}
18070
18071// Values returns the slice of values for the current page or nil if there are no values.
18072func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
18073	if page.lvcr.IsEmpty() {
18074		return nil
18075	}
18076	return *page.lvcr.Value
18077}
18078
18079// Creates a new instance of the ListVpnConnectionsResultPage type.
18080func NewListVpnConnectionsResultPage(getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
18081	return ListVpnConnectionsResultPage{fn: getNextPage}
18082}
18083
18084// ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
18085// URL nextLink to get the next set of results.
18086type ListVpnGatewaysResult struct {
18087	autorest.Response `json:"-"`
18088	// Value - List of VpnGateways.
18089	Value *[]VpnGateway `json:"value,omitempty"`
18090	// NextLink - URL to get the next set of operation list results if there are any.
18091	NextLink *string `json:"nextLink,omitempty"`
18092}
18093
18094// ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
18095type ListVpnGatewaysResultIterator struct {
18096	i    int
18097	page ListVpnGatewaysResultPage
18098}
18099
18100// NextWithContext advances to the next value.  If there was an error making
18101// the request the iterator does not advance and the error is returned.
18102func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
18103	if tracing.IsEnabled() {
18104		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
18105		defer func() {
18106			sc := -1
18107			if iter.Response().Response.Response != nil {
18108				sc = iter.Response().Response.Response.StatusCode
18109			}
18110			tracing.EndSpan(ctx, sc, err)
18111		}()
18112	}
18113	iter.i++
18114	if iter.i < len(iter.page.Values()) {
18115		return nil
18116	}
18117	err = iter.page.NextWithContext(ctx)
18118	if err != nil {
18119		iter.i--
18120		return err
18121	}
18122	iter.i = 0
18123	return nil
18124}
18125
18126// Next advances to the next value.  If there was an error making
18127// the request the iterator does not advance and the error is returned.
18128// Deprecated: Use NextWithContext() instead.
18129func (iter *ListVpnGatewaysResultIterator) Next() error {
18130	return iter.NextWithContext(context.Background())
18131}
18132
18133// NotDone returns true if the enumeration should be started or is not yet complete.
18134func (iter ListVpnGatewaysResultIterator) NotDone() bool {
18135	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18136}
18137
18138// Response returns the raw server response from the last page request.
18139func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
18140	return iter.page.Response()
18141}
18142
18143// Value returns the current value or a zero-initialized value if the
18144// iterator has advanced beyond the end of the collection.
18145func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
18146	if !iter.page.NotDone() {
18147		return VpnGateway{}
18148	}
18149	return iter.page.Values()[iter.i]
18150}
18151
18152// Creates a new instance of the ListVpnGatewaysResultIterator type.
18153func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
18154	return ListVpnGatewaysResultIterator{page: page}
18155}
18156
18157// IsEmpty returns true if the ListResult contains no values.
18158func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
18159	return lvgr.Value == nil || len(*lvgr.Value) == 0
18160}
18161
18162// listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
18163// It returns nil if no more results exist.
18164func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
18165	if lvgr.NextLink == nil || len(to.String(lvgr.NextLink)) < 1 {
18166		return nil, nil
18167	}
18168	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18169		autorest.AsJSON(),
18170		autorest.AsGet(),
18171		autorest.WithBaseURL(to.String(lvgr.NextLink)))
18172}
18173
18174// ListVpnGatewaysResultPage contains a page of VpnGateway values.
18175type ListVpnGatewaysResultPage struct {
18176	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
18177	lvgr ListVpnGatewaysResult
18178}
18179
18180// NextWithContext advances to the next page of values.  If there was an error making
18181// the request the page does not advance and the error is returned.
18182func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
18183	if tracing.IsEnabled() {
18184		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
18185		defer func() {
18186			sc := -1
18187			if page.Response().Response.Response != nil {
18188				sc = page.Response().Response.Response.StatusCode
18189			}
18190			tracing.EndSpan(ctx, sc, err)
18191		}()
18192	}
18193	next, err := page.fn(ctx, page.lvgr)
18194	if err != nil {
18195		return err
18196	}
18197	page.lvgr = next
18198	return nil
18199}
18200
18201// Next advances to the next page of values.  If there was an error making
18202// the request the page does not advance and the error is returned.
18203// Deprecated: Use NextWithContext() instead.
18204func (page *ListVpnGatewaysResultPage) Next() error {
18205	return page.NextWithContext(context.Background())
18206}
18207
18208// NotDone returns true if the page enumeration should be started or is not yet complete.
18209func (page ListVpnGatewaysResultPage) NotDone() bool {
18210	return !page.lvgr.IsEmpty()
18211}
18212
18213// Response returns the raw server response from the last page request.
18214func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
18215	return page.lvgr
18216}
18217
18218// Values returns the slice of values for the current page or nil if there are no values.
18219func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
18220	if page.lvgr.IsEmpty() {
18221		return nil
18222	}
18223	return *page.lvgr.Value
18224}
18225
18226// Creates a new instance of the ListVpnGatewaysResultPage type.
18227func NewListVpnGatewaysResultPage(getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
18228	return ListVpnGatewaysResultPage{fn: getNextPage}
18229}
18230
18231// ListVpnServerConfigurationsResult result of the request to list all VpnServerConfigurations. It contains
18232// a list of VpnServerConfigurations and a URL nextLink to get the next set of results.
18233type ListVpnServerConfigurationsResult struct {
18234	autorest.Response `json:"-"`
18235	// Value - List of VpnServerConfigurations.
18236	Value *[]VpnServerConfiguration `json:"value,omitempty"`
18237	// NextLink - URL to get the next set of operation list results if there are any.
18238	NextLink *string `json:"nextLink,omitempty"`
18239}
18240
18241// ListVpnServerConfigurationsResultIterator provides access to a complete listing of
18242// VpnServerConfiguration values.
18243type ListVpnServerConfigurationsResultIterator struct {
18244	i    int
18245	page ListVpnServerConfigurationsResultPage
18246}
18247
18248// NextWithContext advances to the next value.  If there was an error making
18249// the request the iterator does not advance and the error is returned.
18250func (iter *ListVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
18251	if tracing.IsEnabled() {
18252		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultIterator.NextWithContext")
18253		defer func() {
18254			sc := -1
18255			if iter.Response().Response.Response != nil {
18256				sc = iter.Response().Response.Response.StatusCode
18257			}
18258			tracing.EndSpan(ctx, sc, err)
18259		}()
18260	}
18261	iter.i++
18262	if iter.i < len(iter.page.Values()) {
18263		return nil
18264	}
18265	err = iter.page.NextWithContext(ctx)
18266	if err != nil {
18267		iter.i--
18268		return err
18269	}
18270	iter.i = 0
18271	return nil
18272}
18273
18274// Next advances to the next value.  If there was an error making
18275// the request the iterator does not advance and the error is returned.
18276// Deprecated: Use NextWithContext() instead.
18277func (iter *ListVpnServerConfigurationsResultIterator) Next() error {
18278	return iter.NextWithContext(context.Background())
18279}
18280
18281// NotDone returns true if the enumeration should be started or is not yet complete.
18282func (iter ListVpnServerConfigurationsResultIterator) NotDone() bool {
18283	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18284}
18285
18286// Response returns the raw server response from the last page request.
18287func (iter ListVpnServerConfigurationsResultIterator) Response() ListVpnServerConfigurationsResult {
18288	return iter.page.Response()
18289}
18290
18291// Value returns the current value or a zero-initialized value if the
18292// iterator has advanced beyond the end of the collection.
18293func (iter ListVpnServerConfigurationsResultIterator) Value() VpnServerConfiguration {
18294	if !iter.page.NotDone() {
18295		return VpnServerConfiguration{}
18296	}
18297	return iter.page.Values()[iter.i]
18298}
18299
18300// Creates a new instance of the ListVpnServerConfigurationsResultIterator type.
18301func NewListVpnServerConfigurationsResultIterator(page ListVpnServerConfigurationsResultPage) ListVpnServerConfigurationsResultIterator {
18302	return ListVpnServerConfigurationsResultIterator{page: page}
18303}
18304
18305// IsEmpty returns true if the ListResult contains no values.
18306func (lvscr ListVpnServerConfigurationsResult) IsEmpty() bool {
18307	return lvscr.Value == nil || len(*lvscr.Value) == 0
18308}
18309
18310// listVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
18311// It returns nil if no more results exist.
18312func (lvscr ListVpnServerConfigurationsResult) listVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
18313	if lvscr.NextLink == nil || len(to.String(lvscr.NextLink)) < 1 {
18314		return nil, nil
18315	}
18316	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18317		autorest.AsJSON(),
18318		autorest.AsGet(),
18319		autorest.WithBaseURL(to.String(lvscr.NextLink)))
18320}
18321
18322// ListVpnServerConfigurationsResultPage contains a page of VpnServerConfiguration values.
18323type ListVpnServerConfigurationsResultPage struct {
18324	fn    func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)
18325	lvscr ListVpnServerConfigurationsResult
18326}
18327
18328// NextWithContext advances to the next page of values.  If there was an error making
18329// the request the page does not advance and the error is returned.
18330func (page *ListVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
18331	if tracing.IsEnabled() {
18332		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultPage.NextWithContext")
18333		defer func() {
18334			sc := -1
18335			if page.Response().Response.Response != nil {
18336				sc = page.Response().Response.Response.StatusCode
18337			}
18338			tracing.EndSpan(ctx, sc, err)
18339		}()
18340	}
18341	next, err := page.fn(ctx, page.lvscr)
18342	if err != nil {
18343		return err
18344	}
18345	page.lvscr = next
18346	return nil
18347}
18348
18349// Next advances to the next page of values.  If there was an error making
18350// the request the page does not advance and the error is returned.
18351// Deprecated: Use NextWithContext() instead.
18352func (page *ListVpnServerConfigurationsResultPage) Next() error {
18353	return page.NextWithContext(context.Background())
18354}
18355
18356// NotDone returns true if the page enumeration should be started or is not yet complete.
18357func (page ListVpnServerConfigurationsResultPage) NotDone() bool {
18358	return !page.lvscr.IsEmpty()
18359}
18360
18361// Response returns the raw server response from the last page request.
18362func (page ListVpnServerConfigurationsResultPage) Response() ListVpnServerConfigurationsResult {
18363	return page.lvscr
18364}
18365
18366// Values returns the slice of values for the current page or nil if there are no values.
18367func (page ListVpnServerConfigurationsResultPage) Values() []VpnServerConfiguration {
18368	if page.lvscr.IsEmpty() {
18369		return nil
18370	}
18371	return *page.lvscr.Value
18372}
18373
18374// Creates a new instance of the ListVpnServerConfigurationsResultPage type.
18375func NewListVpnServerConfigurationsResultPage(getNextPage func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)) ListVpnServerConfigurationsResultPage {
18376	return ListVpnServerConfigurationsResultPage{fn: getNextPage}
18377}
18378
18379// ListVpnSiteLinkConnectionsResult result of the request to list all vpn connections to a virtual wan vpn
18380// gateway. It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
18381type ListVpnSiteLinkConnectionsResult struct {
18382	autorest.Response `json:"-"`
18383	// Value - List of VpnSiteLinkConnections.
18384	Value *[]VpnSiteLinkConnection `json:"value,omitempty"`
18385	// NextLink - URL to get the next set of operation list results if there are any.
18386	NextLink *string `json:"nextLink,omitempty"`
18387}
18388
18389// ListVpnSiteLinkConnectionsResultIterator provides access to a complete listing of VpnSiteLinkConnection
18390// values.
18391type ListVpnSiteLinkConnectionsResultIterator struct {
18392	i    int
18393	page ListVpnSiteLinkConnectionsResultPage
18394}
18395
18396// NextWithContext advances to the next value.  If there was an error making
18397// the request the iterator does not advance and the error is returned.
18398func (iter *ListVpnSiteLinkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
18399	if tracing.IsEnabled() {
18400		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultIterator.NextWithContext")
18401		defer func() {
18402			sc := -1
18403			if iter.Response().Response.Response != nil {
18404				sc = iter.Response().Response.Response.StatusCode
18405			}
18406			tracing.EndSpan(ctx, sc, err)
18407		}()
18408	}
18409	iter.i++
18410	if iter.i < len(iter.page.Values()) {
18411		return nil
18412	}
18413	err = iter.page.NextWithContext(ctx)
18414	if err != nil {
18415		iter.i--
18416		return err
18417	}
18418	iter.i = 0
18419	return nil
18420}
18421
18422// Next advances to the next value.  If there was an error making
18423// the request the iterator does not advance and the error is returned.
18424// Deprecated: Use NextWithContext() instead.
18425func (iter *ListVpnSiteLinkConnectionsResultIterator) Next() error {
18426	return iter.NextWithContext(context.Background())
18427}
18428
18429// NotDone returns true if the enumeration should be started or is not yet complete.
18430func (iter ListVpnSiteLinkConnectionsResultIterator) NotDone() bool {
18431	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18432}
18433
18434// Response returns the raw server response from the last page request.
18435func (iter ListVpnSiteLinkConnectionsResultIterator) Response() ListVpnSiteLinkConnectionsResult {
18436	return iter.page.Response()
18437}
18438
18439// Value returns the current value or a zero-initialized value if the
18440// iterator has advanced beyond the end of the collection.
18441func (iter ListVpnSiteLinkConnectionsResultIterator) Value() VpnSiteLinkConnection {
18442	if !iter.page.NotDone() {
18443		return VpnSiteLinkConnection{}
18444	}
18445	return iter.page.Values()[iter.i]
18446}
18447
18448// Creates a new instance of the ListVpnSiteLinkConnectionsResultIterator type.
18449func NewListVpnSiteLinkConnectionsResultIterator(page ListVpnSiteLinkConnectionsResultPage) ListVpnSiteLinkConnectionsResultIterator {
18450	return ListVpnSiteLinkConnectionsResultIterator{page: page}
18451}
18452
18453// IsEmpty returns true if the ListResult contains no values.
18454func (lvslcr ListVpnSiteLinkConnectionsResult) IsEmpty() bool {
18455	return lvslcr.Value == nil || len(*lvslcr.Value) == 0
18456}
18457
18458// listVpnSiteLinkConnectionsResultPreparer prepares a request to retrieve the next set of results.
18459// It returns nil if no more results exist.
18460func (lvslcr ListVpnSiteLinkConnectionsResult) listVpnSiteLinkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
18461	if lvslcr.NextLink == nil || len(to.String(lvslcr.NextLink)) < 1 {
18462		return nil, nil
18463	}
18464	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18465		autorest.AsJSON(),
18466		autorest.AsGet(),
18467		autorest.WithBaseURL(to.String(lvslcr.NextLink)))
18468}
18469
18470// ListVpnSiteLinkConnectionsResultPage contains a page of VpnSiteLinkConnection values.
18471type ListVpnSiteLinkConnectionsResultPage struct {
18472	fn     func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)
18473	lvslcr ListVpnSiteLinkConnectionsResult
18474}
18475
18476// NextWithContext advances to the next page of values.  If there was an error making
18477// the request the page does not advance and the error is returned.
18478func (page *ListVpnSiteLinkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
18479	if tracing.IsEnabled() {
18480		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultPage.NextWithContext")
18481		defer func() {
18482			sc := -1
18483			if page.Response().Response.Response != nil {
18484				sc = page.Response().Response.Response.StatusCode
18485			}
18486			tracing.EndSpan(ctx, sc, err)
18487		}()
18488	}
18489	next, err := page.fn(ctx, page.lvslcr)
18490	if err != nil {
18491		return err
18492	}
18493	page.lvslcr = next
18494	return nil
18495}
18496
18497// Next advances to the next page of values.  If there was an error making
18498// the request the page does not advance and the error is returned.
18499// Deprecated: Use NextWithContext() instead.
18500func (page *ListVpnSiteLinkConnectionsResultPage) Next() error {
18501	return page.NextWithContext(context.Background())
18502}
18503
18504// NotDone returns true if the page enumeration should be started or is not yet complete.
18505func (page ListVpnSiteLinkConnectionsResultPage) NotDone() bool {
18506	return !page.lvslcr.IsEmpty()
18507}
18508
18509// Response returns the raw server response from the last page request.
18510func (page ListVpnSiteLinkConnectionsResultPage) Response() ListVpnSiteLinkConnectionsResult {
18511	return page.lvslcr
18512}
18513
18514// Values returns the slice of values for the current page or nil if there are no values.
18515func (page ListVpnSiteLinkConnectionsResultPage) Values() []VpnSiteLinkConnection {
18516	if page.lvslcr.IsEmpty() {
18517		return nil
18518	}
18519	return *page.lvslcr.Value
18520}
18521
18522// Creates a new instance of the ListVpnSiteLinkConnectionsResultPage type.
18523func NewListVpnSiteLinkConnectionsResultPage(getNextPage func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)) ListVpnSiteLinkConnectionsResultPage {
18524	return ListVpnSiteLinkConnectionsResultPage{fn: getNextPage}
18525}
18526
18527// ListVpnSiteLinksResult result of the request to list VpnSiteLinks. It contains a list of VpnSiteLinks
18528// and a URL nextLink to get the next set of results.
18529type ListVpnSiteLinksResult struct {
18530	autorest.Response `json:"-"`
18531	// Value - List of VpnSitesLinks.
18532	Value *[]VpnSiteLink `json:"value,omitempty"`
18533	// NextLink - URL to get the next set of operation list results if there are any.
18534	NextLink *string `json:"nextLink,omitempty"`
18535}
18536
18537// ListVpnSiteLinksResultIterator provides access to a complete listing of VpnSiteLink values.
18538type ListVpnSiteLinksResultIterator struct {
18539	i    int
18540	page ListVpnSiteLinksResultPage
18541}
18542
18543// NextWithContext advances to the next value.  If there was an error making
18544// the request the iterator does not advance and the error is returned.
18545func (iter *ListVpnSiteLinksResultIterator) NextWithContext(ctx context.Context) (err error) {
18546	if tracing.IsEnabled() {
18547		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultIterator.NextWithContext")
18548		defer func() {
18549			sc := -1
18550			if iter.Response().Response.Response != nil {
18551				sc = iter.Response().Response.Response.StatusCode
18552			}
18553			tracing.EndSpan(ctx, sc, err)
18554		}()
18555	}
18556	iter.i++
18557	if iter.i < len(iter.page.Values()) {
18558		return nil
18559	}
18560	err = iter.page.NextWithContext(ctx)
18561	if err != nil {
18562		iter.i--
18563		return err
18564	}
18565	iter.i = 0
18566	return nil
18567}
18568
18569// Next advances to the next value.  If there was an error making
18570// the request the iterator does not advance and the error is returned.
18571// Deprecated: Use NextWithContext() instead.
18572func (iter *ListVpnSiteLinksResultIterator) Next() error {
18573	return iter.NextWithContext(context.Background())
18574}
18575
18576// NotDone returns true if the enumeration should be started or is not yet complete.
18577func (iter ListVpnSiteLinksResultIterator) NotDone() bool {
18578	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18579}
18580
18581// Response returns the raw server response from the last page request.
18582func (iter ListVpnSiteLinksResultIterator) Response() ListVpnSiteLinksResult {
18583	return iter.page.Response()
18584}
18585
18586// Value returns the current value or a zero-initialized value if the
18587// iterator has advanced beyond the end of the collection.
18588func (iter ListVpnSiteLinksResultIterator) Value() VpnSiteLink {
18589	if !iter.page.NotDone() {
18590		return VpnSiteLink{}
18591	}
18592	return iter.page.Values()[iter.i]
18593}
18594
18595// Creates a new instance of the ListVpnSiteLinksResultIterator type.
18596func NewListVpnSiteLinksResultIterator(page ListVpnSiteLinksResultPage) ListVpnSiteLinksResultIterator {
18597	return ListVpnSiteLinksResultIterator{page: page}
18598}
18599
18600// IsEmpty returns true if the ListResult contains no values.
18601func (lvslr ListVpnSiteLinksResult) IsEmpty() bool {
18602	return lvslr.Value == nil || len(*lvslr.Value) == 0
18603}
18604
18605// listVpnSiteLinksResultPreparer prepares a request to retrieve the next set of results.
18606// It returns nil if no more results exist.
18607func (lvslr ListVpnSiteLinksResult) listVpnSiteLinksResultPreparer(ctx context.Context) (*http.Request, error) {
18608	if lvslr.NextLink == nil || len(to.String(lvslr.NextLink)) < 1 {
18609		return nil, nil
18610	}
18611	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18612		autorest.AsJSON(),
18613		autorest.AsGet(),
18614		autorest.WithBaseURL(to.String(lvslr.NextLink)))
18615}
18616
18617// ListVpnSiteLinksResultPage contains a page of VpnSiteLink values.
18618type ListVpnSiteLinksResultPage struct {
18619	fn    func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)
18620	lvslr ListVpnSiteLinksResult
18621}
18622
18623// NextWithContext advances to the next page of values.  If there was an error making
18624// the request the page does not advance and the error is returned.
18625func (page *ListVpnSiteLinksResultPage) NextWithContext(ctx context.Context) (err error) {
18626	if tracing.IsEnabled() {
18627		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultPage.NextWithContext")
18628		defer func() {
18629			sc := -1
18630			if page.Response().Response.Response != nil {
18631				sc = page.Response().Response.Response.StatusCode
18632			}
18633			tracing.EndSpan(ctx, sc, err)
18634		}()
18635	}
18636	next, err := page.fn(ctx, page.lvslr)
18637	if err != nil {
18638		return err
18639	}
18640	page.lvslr = next
18641	return nil
18642}
18643
18644// Next advances to the next page of values.  If there was an error making
18645// the request the page does not advance and the error is returned.
18646// Deprecated: Use NextWithContext() instead.
18647func (page *ListVpnSiteLinksResultPage) Next() error {
18648	return page.NextWithContext(context.Background())
18649}
18650
18651// NotDone returns true if the page enumeration should be started or is not yet complete.
18652func (page ListVpnSiteLinksResultPage) NotDone() bool {
18653	return !page.lvslr.IsEmpty()
18654}
18655
18656// Response returns the raw server response from the last page request.
18657func (page ListVpnSiteLinksResultPage) Response() ListVpnSiteLinksResult {
18658	return page.lvslr
18659}
18660
18661// Values returns the slice of values for the current page or nil if there are no values.
18662func (page ListVpnSiteLinksResultPage) Values() []VpnSiteLink {
18663	if page.lvslr.IsEmpty() {
18664		return nil
18665	}
18666	return *page.lvslr.Value
18667}
18668
18669// Creates a new instance of the ListVpnSiteLinksResultPage type.
18670func NewListVpnSiteLinksResultPage(getNextPage func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)) ListVpnSiteLinksResultPage {
18671	return ListVpnSiteLinksResultPage{fn: getNextPage}
18672}
18673
18674// ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
18675// nextLink to get the next set of results.
18676type ListVpnSitesResult struct {
18677	autorest.Response `json:"-"`
18678	// Value - List of VpnSites.
18679	Value *[]VpnSite `json:"value,omitempty"`
18680	// NextLink - URL to get the next set of operation list results if there are any.
18681	NextLink *string `json:"nextLink,omitempty"`
18682}
18683
18684// ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
18685type ListVpnSitesResultIterator struct {
18686	i    int
18687	page ListVpnSitesResultPage
18688}
18689
18690// NextWithContext advances to the next value.  If there was an error making
18691// the request the iterator does not advance and the error is returned.
18692func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
18693	if tracing.IsEnabled() {
18694		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
18695		defer func() {
18696			sc := -1
18697			if iter.Response().Response.Response != nil {
18698				sc = iter.Response().Response.Response.StatusCode
18699			}
18700			tracing.EndSpan(ctx, sc, err)
18701		}()
18702	}
18703	iter.i++
18704	if iter.i < len(iter.page.Values()) {
18705		return nil
18706	}
18707	err = iter.page.NextWithContext(ctx)
18708	if err != nil {
18709		iter.i--
18710		return err
18711	}
18712	iter.i = 0
18713	return nil
18714}
18715
18716// Next advances to the next value.  If there was an error making
18717// the request the iterator does not advance and the error is returned.
18718// Deprecated: Use NextWithContext() instead.
18719func (iter *ListVpnSitesResultIterator) Next() error {
18720	return iter.NextWithContext(context.Background())
18721}
18722
18723// NotDone returns true if the enumeration should be started or is not yet complete.
18724func (iter ListVpnSitesResultIterator) NotDone() bool {
18725	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18726}
18727
18728// Response returns the raw server response from the last page request.
18729func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
18730	return iter.page.Response()
18731}
18732
18733// Value returns the current value or a zero-initialized value if the
18734// iterator has advanced beyond the end of the collection.
18735func (iter ListVpnSitesResultIterator) Value() VpnSite {
18736	if !iter.page.NotDone() {
18737		return VpnSite{}
18738	}
18739	return iter.page.Values()[iter.i]
18740}
18741
18742// Creates a new instance of the ListVpnSitesResultIterator type.
18743func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
18744	return ListVpnSitesResultIterator{page: page}
18745}
18746
18747// IsEmpty returns true if the ListResult contains no values.
18748func (lvsr ListVpnSitesResult) IsEmpty() bool {
18749	return lvsr.Value == nil || len(*lvsr.Value) == 0
18750}
18751
18752// listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
18753// It returns nil if no more results exist.
18754func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
18755	if lvsr.NextLink == nil || len(to.String(lvsr.NextLink)) < 1 {
18756		return nil, nil
18757	}
18758	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18759		autorest.AsJSON(),
18760		autorest.AsGet(),
18761		autorest.WithBaseURL(to.String(lvsr.NextLink)))
18762}
18763
18764// ListVpnSitesResultPage contains a page of VpnSite values.
18765type ListVpnSitesResultPage struct {
18766	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
18767	lvsr ListVpnSitesResult
18768}
18769
18770// NextWithContext advances to the next page of values.  If there was an error making
18771// the request the page does not advance and the error is returned.
18772func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
18773	if tracing.IsEnabled() {
18774		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
18775		defer func() {
18776			sc := -1
18777			if page.Response().Response.Response != nil {
18778				sc = page.Response().Response.Response.StatusCode
18779			}
18780			tracing.EndSpan(ctx, sc, err)
18781		}()
18782	}
18783	next, err := page.fn(ctx, page.lvsr)
18784	if err != nil {
18785		return err
18786	}
18787	page.lvsr = next
18788	return nil
18789}
18790
18791// Next advances to the next page of values.  If there was an error making
18792// the request the page does not advance and the error is returned.
18793// Deprecated: Use NextWithContext() instead.
18794func (page *ListVpnSitesResultPage) Next() error {
18795	return page.NextWithContext(context.Background())
18796}
18797
18798// NotDone returns true if the page enumeration should be started or is not yet complete.
18799func (page ListVpnSitesResultPage) NotDone() bool {
18800	return !page.lvsr.IsEmpty()
18801}
18802
18803// Response returns the raw server response from the last page request.
18804func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
18805	return page.lvsr
18806}
18807
18808// Values returns the slice of values for the current page or nil if there are no values.
18809func (page ListVpnSitesResultPage) Values() []VpnSite {
18810	if page.lvsr.IsEmpty() {
18811		return nil
18812	}
18813	return *page.lvsr.Value
18814}
18815
18816// Creates a new instance of the ListVpnSitesResultPage type.
18817func NewListVpnSitesResultPage(getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
18818	return ListVpnSitesResultPage{fn: getNextPage}
18819}
18820
18821// LoadBalancer loadBalancer resource.
18822type LoadBalancer struct {
18823	autorest.Response `json:"-"`
18824	// Sku - The load balancer SKU.
18825	Sku *LoadBalancerSku `json:"sku,omitempty"`
18826	// LoadBalancerPropertiesFormat - Properties of load balancer.
18827	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
18828	// Etag - A unique read-only string that changes whenever the resource is updated.
18829	Etag *string `json:"etag,omitempty"`
18830	// ID - Resource ID.
18831	ID *string `json:"id,omitempty"`
18832	// Name - READ-ONLY; Resource name.
18833	Name *string `json:"name,omitempty"`
18834	// Type - READ-ONLY; Resource type.
18835	Type *string `json:"type,omitempty"`
18836	// Location - Resource location.
18837	Location *string `json:"location,omitempty"`
18838	// Tags - Resource tags.
18839	Tags map[string]*string `json:"tags"`
18840}
18841
18842// MarshalJSON is the custom marshaler for LoadBalancer.
18843func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
18844	objectMap := make(map[string]interface{})
18845	if lb.Sku != nil {
18846		objectMap["sku"] = lb.Sku
18847	}
18848	if lb.LoadBalancerPropertiesFormat != nil {
18849		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
18850	}
18851	if lb.Etag != nil {
18852		objectMap["etag"] = lb.Etag
18853	}
18854	if lb.ID != nil {
18855		objectMap["id"] = lb.ID
18856	}
18857	if lb.Location != nil {
18858		objectMap["location"] = lb.Location
18859	}
18860	if lb.Tags != nil {
18861		objectMap["tags"] = lb.Tags
18862	}
18863	return json.Marshal(objectMap)
18864}
18865
18866// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
18867func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
18868	var m map[string]*json.RawMessage
18869	err := json.Unmarshal(body, &m)
18870	if err != nil {
18871		return err
18872	}
18873	for k, v := range m {
18874		switch k {
18875		case "sku":
18876			if v != nil {
18877				var sku LoadBalancerSku
18878				err = json.Unmarshal(*v, &sku)
18879				if err != nil {
18880					return err
18881				}
18882				lb.Sku = &sku
18883			}
18884		case "properties":
18885			if v != nil {
18886				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
18887				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
18888				if err != nil {
18889					return err
18890				}
18891				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
18892			}
18893		case "etag":
18894			if v != nil {
18895				var etag string
18896				err = json.Unmarshal(*v, &etag)
18897				if err != nil {
18898					return err
18899				}
18900				lb.Etag = &etag
18901			}
18902		case "id":
18903			if v != nil {
18904				var ID string
18905				err = json.Unmarshal(*v, &ID)
18906				if err != nil {
18907					return err
18908				}
18909				lb.ID = &ID
18910			}
18911		case "name":
18912			if v != nil {
18913				var name string
18914				err = json.Unmarshal(*v, &name)
18915				if err != nil {
18916					return err
18917				}
18918				lb.Name = &name
18919			}
18920		case "type":
18921			if v != nil {
18922				var typeVar string
18923				err = json.Unmarshal(*v, &typeVar)
18924				if err != nil {
18925					return err
18926				}
18927				lb.Type = &typeVar
18928			}
18929		case "location":
18930			if v != nil {
18931				var location string
18932				err = json.Unmarshal(*v, &location)
18933				if err != nil {
18934					return err
18935				}
18936				lb.Location = &location
18937			}
18938		case "tags":
18939			if v != nil {
18940				var tags map[string]*string
18941				err = json.Unmarshal(*v, &tags)
18942				if err != nil {
18943					return err
18944				}
18945				lb.Tags = tags
18946			}
18947		}
18948	}
18949
18950	return nil
18951}
18952
18953// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
18954type LoadBalancerBackendAddressPoolListResult struct {
18955	autorest.Response `json:"-"`
18956	// Value - A list of backend address pools in a load balancer.
18957	Value *[]BackendAddressPool `json:"value,omitempty"`
18958	// NextLink - READ-ONLY; The URL to get the next set of results.
18959	NextLink *string `json:"nextLink,omitempty"`
18960}
18961
18962// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
18963// BackendAddressPool values.
18964type LoadBalancerBackendAddressPoolListResultIterator struct {
18965	i    int
18966	page LoadBalancerBackendAddressPoolListResultPage
18967}
18968
18969// NextWithContext advances to the next value.  If there was an error making
18970// the request the iterator does not advance and the error is returned.
18971func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
18972	if tracing.IsEnabled() {
18973		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
18974		defer func() {
18975			sc := -1
18976			if iter.Response().Response.Response != nil {
18977				sc = iter.Response().Response.Response.StatusCode
18978			}
18979			tracing.EndSpan(ctx, sc, err)
18980		}()
18981	}
18982	iter.i++
18983	if iter.i < len(iter.page.Values()) {
18984		return nil
18985	}
18986	err = iter.page.NextWithContext(ctx)
18987	if err != nil {
18988		iter.i--
18989		return err
18990	}
18991	iter.i = 0
18992	return nil
18993}
18994
18995// Next advances to the next value.  If there was an error making
18996// the request the iterator does not advance and the error is returned.
18997// Deprecated: Use NextWithContext() instead.
18998func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
18999	return iter.NextWithContext(context.Background())
19000}
19001
19002// NotDone returns true if the enumeration should be started or is not yet complete.
19003func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
19004	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19005}
19006
19007// Response returns the raw server response from the last page request.
19008func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
19009	return iter.page.Response()
19010}
19011
19012// Value returns the current value or a zero-initialized value if the
19013// iterator has advanced beyond the end of the collection.
19014func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
19015	if !iter.page.NotDone() {
19016		return BackendAddressPool{}
19017	}
19018	return iter.page.Values()[iter.i]
19019}
19020
19021// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
19022func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
19023	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
19024}
19025
19026// IsEmpty returns true if the ListResult contains no values.
19027func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
19028	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
19029}
19030
19031// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
19032// It returns nil if no more results exist.
19033func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
19034	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
19035		return nil, nil
19036	}
19037	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19038		autorest.AsJSON(),
19039		autorest.AsGet(),
19040		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
19041}
19042
19043// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
19044type LoadBalancerBackendAddressPoolListResultPage struct {
19045	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
19046	lbbaplr LoadBalancerBackendAddressPoolListResult
19047}
19048
19049// NextWithContext advances to the next page of values.  If there was an error making
19050// the request the page does not advance and the error is returned.
19051func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
19052	if tracing.IsEnabled() {
19053		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
19054		defer func() {
19055			sc := -1
19056			if page.Response().Response.Response != nil {
19057				sc = page.Response().Response.Response.StatusCode
19058			}
19059			tracing.EndSpan(ctx, sc, err)
19060		}()
19061	}
19062	next, err := page.fn(ctx, page.lbbaplr)
19063	if err != nil {
19064		return err
19065	}
19066	page.lbbaplr = next
19067	return nil
19068}
19069
19070// Next advances to the next page of values.  If there was an error making
19071// the request the page does not advance and the error is returned.
19072// Deprecated: Use NextWithContext() instead.
19073func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
19074	return page.NextWithContext(context.Background())
19075}
19076
19077// NotDone returns true if the page enumeration should be started or is not yet complete.
19078func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
19079	return !page.lbbaplr.IsEmpty()
19080}
19081
19082// Response returns the raw server response from the last page request.
19083func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
19084	return page.lbbaplr
19085}
19086
19087// Values returns the slice of values for the current page or nil if there are no values.
19088func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
19089	if page.lbbaplr.IsEmpty() {
19090		return nil
19091	}
19092	return *page.lbbaplr.Value
19093}
19094
19095// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
19096func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
19097	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
19098}
19099
19100// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
19101type LoadBalancerFrontendIPConfigurationListResult struct {
19102	autorest.Response `json:"-"`
19103	// Value - A list of frontend IP configurations in a load balancer.
19104	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
19105	// NextLink - READ-ONLY; The URL to get the next set of results.
19106	NextLink *string `json:"nextLink,omitempty"`
19107}
19108
19109// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
19110// FrontendIPConfiguration values.
19111type LoadBalancerFrontendIPConfigurationListResultIterator struct {
19112	i    int
19113	page LoadBalancerFrontendIPConfigurationListResultPage
19114}
19115
19116// NextWithContext advances to the next value.  If there was an error making
19117// the request the iterator does not advance and the error is returned.
19118func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
19119	if tracing.IsEnabled() {
19120		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
19121		defer func() {
19122			sc := -1
19123			if iter.Response().Response.Response != nil {
19124				sc = iter.Response().Response.Response.StatusCode
19125			}
19126			tracing.EndSpan(ctx, sc, err)
19127		}()
19128	}
19129	iter.i++
19130	if iter.i < len(iter.page.Values()) {
19131		return nil
19132	}
19133	err = iter.page.NextWithContext(ctx)
19134	if err != nil {
19135		iter.i--
19136		return err
19137	}
19138	iter.i = 0
19139	return nil
19140}
19141
19142// Next advances to the next value.  If there was an error making
19143// the request the iterator does not advance and the error is returned.
19144// Deprecated: Use NextWithContext() instead.
19145func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
19146	return iter.NextWithContext(context.Background())
19147}
19148
19149// NotDone returns true if the enumeration should be started or is not yet complete.
19150func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
19151	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19152}
19153
19154// Response returns the raw server response from the last page request.
19155func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
19156	return iter.page.Response()
19157}
19158
19159// Value returns the current value or a zero-initialized value if the
19160// iterator has advanced beyond the end of the collection.
19161func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
19162	if !iter.page.NotDone() {
19163		return FrontendIPConfiguration{}
19164	}
19165	return iter.page.Values()[iter.i]
19166}
19167
19168// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
19169func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
19170	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
19171}
19172
19173// IsEmpty returns true if the ListResult contains no values.
19174func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
19175	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
19176}
19177
19178// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
19179// It returns nil if no more results exist.
19180func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
19181	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
19182		return nil, nil
19183	}
19184	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19185		autorest.AsJSON(),
19186		autorest.AsGet(),
19187		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
19188}
19189
19190// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
19191type LoadBalancerFrontendIPConfigurationListResultPage struct {
19192	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
19193	lbficlr LoadBalancerFrontendIPConfigurationListResult
19194}
19195
19196// NextWithContext advances to the next page of values.  If there was an error making
19197// the request the page does not advance and the error is returned.
19198func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
19199	if tracing.IsEnabled() {
19200		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
19201		defer func() {
19202			sc := -1
19203			if page.Response().Response.Response != nil {
19204				sc = page.Response().Response.Response.StatusCode
19205			}
19206			tracing.EndSpan(ctx, sc, err)
19207		}()
19208	}
19209	next, err := page.fn(ctx, page.lbficlr)
19210	if err != nil {
19211		return err
19212	}
19213	page.lbficlr = next
19214	return nil
19215}
19216
19217// Next advances to the next page of values.  If there was an error making
19218// the request the page does not advance and the error is returned.
19219// Deprecated: Use NextWithContext() instead.
19220func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
19221	return page.NextWithContext(context.Background())
19222}
19223
19224// NotDone returns true if the page enumeration should be started or is not yet complete.
19225func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
19226	return !page.lbficlr.IsEmpty()
19227}
19228
19229// Response returns the raw server response from the last page request.
19230func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
19231	return page.lbficlr
19232}
19233
19234// Values returns the slice of values for the current page or nil if there are no values.
19235func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
19236	if page.lbficlr.IsEmpty() {
19237		return nil
19238	}
19239	return *page.lbficlr.Value
19240}
19241
19242// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
19243func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
19244	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
19245}
19246
19247// LoadBalancerListResult response for ListLoadBalancers API service call.
19248type LoadBalancerListResult struct {
19249	autorest.Response `json:"-"`
19250	// Value - A list of load balancers in a resource group.
19251	Value *[]LoadBalancer `json:"value,omitempty"`
19252	// NextLink - READ-ONLY; The URL to get the next set of results.
19253	NextLink *string `json:"nextLink,omitempty"`
19254}
19255
19256// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
19257type LoadBalancerListResultIterator struct {
19258	i    int
19259	page LoadBalancerListResultPage
19260}
19261
19262// NextWithContext advances to the next value.  If there was an error making
19263// the request the iterator does not advance and the error is returned.
19264func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
19265	if tracing.IsEnabled() {
19266		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
19267		defer func() {
19268			sc := -1
19269			if iter.Response().Response.Response != nil {
19270				sc = iter.Response().Response.Response.StatusCode
19271			}
19272			tracing.EndSpan(ctx, sc, err)
19273		}()
19274	}
19275	iter.i++
19276	if iter.i < len(iter.page.Values()) {
19277		return nil
19278	}
19279	err = iter.page.NextWithContext(ctx)
19280	if err != nil {
19281		iter.i--
19282		return err
19283	}
19284	iter.i = 0
19285	return nil
19286}
19287
19288// Next advances to the next value.  If there was an error making
19289// the request the iterator does not advance and the error is returned.
19290// Deprecated: Use NextWithContext() instead.
19291func (iter *LoadBalancerListResultIterator) Next() error {
19292	return iter.NextWithContext(context.Background())
19293}
19294
19295// NotDone returns true if the enumeration should be started or is not yet complete.
19296func (iter LoadBalancerListResultIterator) NotDone() bool {
19297	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19298}
19299
19300// Response returns the raw server response from the last page request.
19301func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
19302	return iter.page.Response()
19303}
19304
19305// Value returns the current value or a zero-initialized value if the
19306// iterator has advanced beyond the end of the collection.
19307func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
19308	if !iter.page.NotDone() {
19309		return LoadBalancer{}
19310	}
19311	return iter.page.Values()[iter.i]
19312}
19313
19314// Creates a new instance of the LoadBalancerListResultIterator type.
19315func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
19316	return LoadBalancerListResultIterator{page: page}
19317}
19318
19319// IsEmpty returns true if the ListResult contains no values.
19320func (lblr LoadBalancerListResult) IsEmpty() bool {
19321	return lblr.Value == nil || len(*lblr.Value) == 0
19322}
19323
19324// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
19325// It returns nil if no more results exist.
19326func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
19327	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
19328		return nil, nil
19329	}
19330	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19331		autorest.AsJSON(),
19332		autorest.AsGet(),
19333		autorest.WithBaseURL(to.String(lblr.NextLink)))
19334}
19335
19336// LoadBalancerListResultPage contains a page of LoadBalancer values.
19337type LoadBalancerListResultPage struct {
19338	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
19339	lblr LoadBalancerListResult
19340}
19341
19342// NextWithContext advances to the next page of values.  If there was an error making
19343// the request the page does not advance and the error is returned.
19344func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
19345	if tracing.IsEnabled() {
19346		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
19347		defer func() {
19348			sc := -1
19349			if page.Response().Response.Response != nil {
19350				sc = page.Response().Response.Response.StatusCode
19351			}
19352			tracing.EndSpan(ctx, sc, err)
19353		}()
19354	}
19355	next, err := page.fn(ctx, page.lblr)
19356	if err != nil {
19357		return err
19358	}
19359	page.lblr = next
19360	return nil
19361}
19362
19363// Next advances to the next page of values.  If there was an error making
19364// the request the page does not advance and the error is returned.
19365// Deprecated: Use NextWithContext() instead.
19366func (page *LoadBalancerListResultPage) Next() error {
19367	return page.NextWithContext(context.Background())
19368}
19369
19370// NotDone returns true if the page enumeration should be started or is not yet complete.
19371func (page LoadBalancerListResultPage) NotDone() bool {
19372	return !page.lblr.IsEmpty()
19373}
19374
19375// Response returns the raw server response from the last page request.
19376func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
19377	return page.lblr
19378}
19379
19380// Values returns the slice of values for the current page or nil if there are no values.
19381func (page LoadBalancerListResultPage) Values() []LoadBalancer {
19382	if page.lblr.IsEmpty() {
19383		return nil
19384	}
19385	return *page.lblr.Value
19386}
19387
19388// Creates a new instance of the LoadBalancerListResultPage type.
19389func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
19390	return LoadBalancerListResultPage{fn: getNextPage}
19391}
19392
19393// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
19394type LoadBalancerLoadBalancingRuleListResult struct {
19395	autorest.Response `json:"-"`
19396	// Value - A list of load balancing rules in a load balancer.
19397	Value *[]LoadBalancingRule `json:"value,omitempty"`
19398	// NextLink - READ-ONLY; The URL to get the next set of results.
19399	NextLink *string `json:"nextLink,omitempty"`
19400}
19401
19402// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
19403// LoadBalancingRule values.
19404type LoadBalancerLoadBalancingRuleListResultIterator struct {
19405	i    int
19406	page LoadBalancerLoadBalancingRuleListResultPage
19407}
19408
19409// NextWithContext advances to the next value.  If there was an error making
19410// the request the iterator does not advance and the error is returned.
19411func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
19412	if tracing.IsEnabled() {
19413		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
19414		defer func() {
19415			sc := -1
19416			if iter.Response().Response.Response != nil {
19417				sc = iter.Response().Response.Response.StatusCode
19418			}
19419			tracing.EndSpan(ctx, sc, err)
19420		}()
19421	}
19422	iter.i++
19423	if iter.i < len(iter.page.Values()) {
19424		return nil
19425	}
19426	err = iter.page.NextWithContext(ctx)
19427	if err != nil {
19428		iter.i--
19429		return err
19430	}
19431	iter.i = 0
19432	return nil
19433}
19434
19435// Next advances to the next value.  If there was an error making
19436// the request the iterator does not advance and the error is returned.
19437// Deprecated: Use NextWithContext() instead.
19438func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
19439	return iter.NextWithContext(context.Background())
19440}
19441
19442// NotDone returns true if the enumeration should be started or is not yet complete.
19443func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
19444	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19445}
19446
19447// Response returns the raw server response from the last page request.
19448func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
19449	return iter.page.Response()
19450}
19451
19452// Value returns the current value or a zero-initialized value if the
19453// iterator has advanced beyond the end of the collection.
19454func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
19455	if !iter.page.NotDone() {
19456		return LoadBalancingRule{}
19457	}
19458	return iter.page.Values()[iter.i]
19459}
19460
19461// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
19462func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
19463	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
19464}
19465
19466// IsEmpty returns true if the ListResult contains no values.
19467func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
19468	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
19469}
19470
19471// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
19472// It returns nil if no more results exist.
19473func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
19474	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
19475		return nil, nil
19476	}
19477	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19478		autorest.AsJSON(),
19479		autorest.AsGet(),
19480		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
19481}
19482
19483// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
19484type LoadBalancerLoadBalancingRuleListResultPage struct {
19485	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
19486	lblbrlr LoadBalancerLoadBalancingRuleListResult
19487}
19488
19489// NextWithContext advances to the next page of values.  If there was an error making
19490// the request the page does not advance and the error is returned.
19491func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
19492	if tracing.IsEnabled() {
19493		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
19494		defer func() {
19495			sc := -1
19496			if page.Response().Response.Response != nil {
19497				sc = page.Response().Response.Response.StatusCode
19498			}
19499			tracing.EndSpan(ctx, sc, err)
19500		}()
19501	}
19502	next, err := page.fn(ctx, page.lblbrlr)
19503	if err != nil {
19504		return err
19505	}
19506	page.lblbrlr = next
19507	return nil
19508}
19509
19510// Next advances to the next page of values.  If there was an error making
19511// the request the page does not advance and the error is returned.
19512// Deprecated: Use NextWithContext() instead.
19513func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
19514	return page.NextWithContext(context.Background())
19515}
19516
19517// NotDone returns true if the page enumeration should be started or is not yet complete.
19518func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
19519	return !page.lblbrlr.IsEmpty()
19520}
19521
19522// Response returns the raw server response from the last page request.
19523func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
19524	return page.lblbrlr
19525}
19526
19527// Values returns the slice of values for the current page or nil if there are no values.
19528func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
19529	if page.lblbrlr.IsEmpty() {
19530		return nil
19531	}
19532	return *page.lblbrlr.Value
19533}
19534
19535// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
19536func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
19537	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
19538}
19539
19540// LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
19541type LoadBalancerOutboundRuleListResult struct {
19542	autorest.Response `json:"-"`
19543	// Value - A list of outbound rules in a load balancer.
19544	Value *[]OutboundRule `json:"value,omitempty"`
19545	// NextLink - READ-ONLY; The URL to get the next set of results.
19546	NextLink *string `json:"nextLink,omitempty"`
19547}
19548
19549// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
19550type LoadBalancerOutboundRuleListResultIterator struct {
19551	i    int
19552	page LoadBalancerOutboundRuleListResultPage
19553}
19554
19555// NextWithContext advances to the next value.  If there was an error making
19556// the request the iterator does not advance and the error is returned.
19557func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
19558	if tracing.IsEnabled() {
19559		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
19560		defer func() {
19561			sc := -1
19562			if iter.Response().Response.Response != nil {
19563				sc = iter.Response().Response.Response.StatusCode
19564			}
19565			tracing.EndSpan(ctx, sc, err)
19566		}()
19567	}
19568	iter.i++
19569	if iter.i < len(iter.page.Values()) {
19570		return nil
19571	}
19572	err = iter.page.NextWithContext(ctx)
19573	if err != nil {
19574		iter.i--
19575		return err
19576	}
19577	iter.i = 0
19578	return nil
19579}
19580
19581// Next advances to the next value.  If there was an error making
19582// the request the iterator does not advance and the error is returned.
19583// Deprecated: Use NextWithContext() instead.
19584func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
19585	return iter.NextWithContext(context.Background())
19586}
19587
19588// NotDone returns true if the enumeration should be started or is not yet complete.
19589func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
19590	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19591}
19592
19593// Response returns the raw server response from the last page request.
19594func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
19595	return iter.page.Response()
19596}
19597
19598// Value returns the current value or a zero-initialized value if the
19599// iterator has advanced beyond the end of the collection.
19600func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
19601	if !iter.page.NotDone() {
19602		return OutboundRule{}
19603	}
19604	return iter.page.Values()[iter.i]
19605}
19606
19607// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
19608func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
19609	return LoadBalancerOutboundRuleListResultIterator{page: page}
19610}
19611
19612// IsEmpty returns true if the ListResult contains no values.
19613func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
19614	return lborlr.Value == nil || len(*lborlr.Value) == 0
19615}
19616
19617// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
19618// It returns nil if no more results exist.
19619func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
19620	if lborlr.NextLink == nil || len(to.String(lborlr.NextLink)) < 1 {
19621		return nil, nil
19622	}
19623	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19624		autorest.AsJSON(),
19625		autorest.AsGet(),
19626		autorest.WithBaseURL(to.String(lborlr.NextLink)))
19627}
19628
19629// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
19630type LoadBalancerOutboundRuleListResultPage struct {
19631	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
19632	lborlr LoadBalancerOutboundRuleListResult
19633}
19634
19635// NextWithContext advances to the next page of values.  If there was an error making
19636// the request the page does not advance and the error is returned.
19637func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
19638	if tracing.IsEnabled() {
19639		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
19640		defer func() {
19641			sc := -1
19642			if page.Response().Response.Response != nil {
19643				sc = page.Response().Response.Response.StatusCode
19644			}
19645			tracing.EndSpan(ctx, sc, err)
19646		}()
19647	}
19648	next, err := page.fn(ctx, page.lborlr)
19649	if err != nil {
19650		return err
19651	}
19652	page.lborlr = next
19653	return nil
19654}
19655
19656// Next advances to the next page of values.  If there was an error making
19657// the request the page does not advance and the error is returned.
19658// Deprecated: Use NextWithContext() instead.
19659func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
19660	return page.NextWithContext(context.Background())
19661}
19662
19663// NotDone returns true if the page enumeration should be started or is not yet complete.
19664func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
19665	return !page.lborlr.IsEmpty()
19666}
19667
19668// Response returns the raw server response from the last page request.
19669func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
19670	return page.lborlr
19671}
19672
19673// Values returns the slice of values for the current page or nil if there are no values.
19674func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
19675	if page.lborlr.IsEmpty() {
19676		return nil
19677	}
19678	return *page.lborlr.Value
19679}
19680
19681// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
19682func NewLoadBalancerOutboundRuleListResultPage(getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
19683	return LoadBalancerOutboundRuleListResultPage{fn: getNextPage}
19684}
19685
19686// LoadBalancerProbeListResult response for ListProbe API service call.
19687type LoadBalancerProbeListResult struct {
19688	autorest.Response `json:"-"`
19689	// Value - A list of probes in a load balancer.
19690	Value *[]Probe `json:"value,omitempty"`
19691	// NextLink - READ-ONLY; The URL to get the next set of results.
19692	NextLink *string `json:"nextLink,omitempty"`
19693}
19694
19695// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
19696type LoadBalancerProbeListResultIterator struct {
19697	i    int
19698	page LoadBalancerProbeListResultPage
19699}
19700
19701// NextWithContext advances to the next value.  If there was an error making
19702// the request the iterator does not advance and the error is returned.
19703func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
19704	if tracing.IsEnabled() {
19705		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
19706		defer func() {
19707			sc := -1
19708			if iter.Response().Response.Response != nil {
19709				sc = iter.Response().Response.Response.StatusCode
19710			}
19711			tracing.EndSpan(ctx, sc, err)
19712		}()
19713	}
19714	iter.i++
19715	if iter.i < len(iter.page.Values()) {
19716		return nil
19717	}
19718	err = iter.page.NextWithContext(ctx)
19719	if err != nil {
19720		iter.i--
19721		return err
19722	}
19723	iter.i = 0
19724	return nil
19725}
19726
19727// Next advances to the next value.  If there was an error making
19728// the request the iterator does not advance and the error is returned.
19729// Deprecated: Use NextWithContext() instead.
19730func (iter *LoadBalancerProbeListResultIterator) Next() error {
19731	return iter.NextWithContext(context.Background())
19732}
19733
19734// NotDone returns true if the enumeration should be started or is not yet complete.
19735func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
19736	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19737}
19738
19739// Response returns the raw server response from the last page request.
19740func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
19741	return iter.page.Response()
19742}
19743
19744// Value returns the current value or a zero-initialized value if the
19745// iterator has advanced beyond the end of the collection.
19746func (iter LoadBalancerProbeListResultIterator) Value() Probe {
19747	if !iter.page.NotDone() {
19748		return Probe{}
19749	}
19750	return iter.page.Values()[iter.i]
19751}
19752
19753// Creates a new instance of the LoadBalancerProbeListResultIterator type.
19754func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
19755	return LoadBalancerProbeListResultIterator{page: page}
19756}
19757
19758// IsEmpty returns true if the ListResult contains no values.
19759func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
19760	return lbplr.Value == nil || len(*lbplr.Value) == 0
19761}
19762
19763// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
19764// It returns nil if no more results exist.
19765func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
19766	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
19767		return nil, nil
19768	}
19769	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19770		autorest.AsJSON(),
19771		autorest.AsGet(),
19772		autorest.WithBaseURL(to.String(lbplr.NextLink)))
19773}
19774
19775// LoadBalancerProbeListResultPage contains a page of Probe values.
19776type LoadBalancerProbeListResultPage struct {
19777	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
19778	lbplr LoadBalancerProbeListResult
19779}
19780
19781// NextWithContext advances to the next page of values.  If there was an error making
19782// the request the page does not advance and the error is returned.
19783func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
19784	if tracing.IsEnabled() {
19785		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
19786		defer func() {
19787			sc := -1
19788			if page.Response().Response.Response != nil {
19789				sc = page.Response().Response.Response.StatusCode
19790			}
19791			tracing.EndSpan(ctx, sc, err)
19792		}()
19793	}
19794	next, err := page.fn(ctx, page.lbplr)
19795	if err != nil {
19796		return err
19797	}
19798	page.lbplr = next
19799	return nil
19800}
19801
19802// Next advances to the next page of values.  If there was an error making
19803// the request the page does not advance and the error is returned.
19804// Deprecated: Use NextWithContext() instead.
19805func (page *LoadBalancerProbeListResultPage) Next() error {
19806	return page.NextWithContext(context.Background())
19807}
19808
19809// NotDone returns true if the page enumeration should be started or is not yet complete.
19810func (page LoadBalancerProbeListResultPage) NotDone() bool {
19811	return !page.lbplr.IsEmpty()
19812}
19813
19814// Response returns the raw server response from the last page request.
19815func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
19816	return page.lbplr
19817}
19818
19819// Values returns the slice of values for the current page or nil if there are no values.
19820func (page LoadBalancerProbeListResultPage) Values() []Probe {
19821	if page.lbplr.IsEmpty() {
19822		return nil
19823	}
19824	return *page.lbplr.Value
19825}
19826
19827// Creates a new instance of the LoadBalancerProbeListResultPage type.
19828func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
19829	return LoadBalancerProbeListResultPage{fn: getNextPage}
19830}
19831
19832// LoadBalancerPropertiesFormat properties of the load balancer.
19833type LoadBalancerPropertiesFormat struct {
19834	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer.
19835	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
19836	// BackendAddressPools - Collection of backend address pools used by a load balancer.
19837	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
19838	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning.
19839	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
19840	// Probes - Collection of probe objects used in the load balancer.
19841	Probes *[]Probe `json:"probes,omitempty"`
19842	// InboundNatRules - Collection of inbound NAT Rules used by a load balancer. Defining inbound NAT rules on your load balancer is mutually exclusive with defining an inbound NAT pool. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an Inbound NAT pool. They have to reference individual inbound NAT rules.
19843	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
19844	// InboundNatPools - Defines an external port range for inbound NAT to a single backend port on NICs associated with a load balancer. Inbound NAT rules are created automatically for each NIC associated with the Load Balancer using an external port from this range. Defining an Inbound NAT pool on your Load Balancer is mutually exclusive with defining inbound Nat rules. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an inbound NAT pool. They have to reference individual inbound NAT rules.
19845	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
19846	// OutboundRules - The outbound rules.
19847	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
19848	// ResourceGUID - The resource GUID property of the load balancer resource.
19849	ResourceGUID *string `json:"resourceGuid,omitempty"`
19850	// ProvisioningState - The provisioning state of the load balancer resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
19851	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
19852}
19853
19854// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
19855// long-running operation.
19856type LoadBalancersCreateOrUpdateFuture struct {
19857	azure.Future
19858}
19859
19860// Result returns the result of the asynchronous operation.
19861// If the operation has not completed it will return an error.
19862func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
19863	var done bool
19864	done, err = future.DoneWithContext(context.Background(), client)
19865	if err != nil {
19866		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19867		return
19868	}
19869	if !done {
19870		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
19871		return
19872	}
19873	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19874	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
19875		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
19876		if err != nil {
19877			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
19878		}
19879	}
19880	return
19881}
19882
19883// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19884// operation.
19885type LoadBalancersDeleteFuture struct {
19886	azure.Future
19887}
19888
19889// Result returns the result of the asynchronous operation.
19890// If the operation has not completed it will return an error.
19891func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
19892	var done bool
19893	done, err = future.DoneWithContext(context.Background(), client)
19894	if err != nil {
19895		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
19896		return
19897	}
19898	if !done {
19899		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
19900		return
19901	}
19902	ar.Response = future.Response()
19903	return
19904}
19905
19906// LoadBalancerSku SKU of a load balancer.
19907type LoadBalancerSku struct {
19908	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
19909	Name LoadBalancerSkuName `json:"name,omitempty"`
19910}
19911
19912// LoadBalancersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
19913// operation.
19914type LoadBalancersUpdateTagsFuture struct {
19915	azure.Future
19916}
19917
19918// Result returns the result of the asynchronous operation.
19919// If the operation has not completed it will return an error.
19920func (future *LoadBalancersUpdateTagsFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
19921	var done bool
19922	done, err = future.DoneWithContext(context.Background(), client)
19923	if err != nil {
19924		err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
19925		return
19926	}
19927	if !done {
19928		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersUpdateTagsFuture")
19929		return
19930	}
19931	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19932	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
19933		lb, err = client.UpdateTagsResponder(lb.Response.Response)
19934		if err != nil {
19935			err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", lb.Response.Response, "Failure responding to request")
19936		}
19937	}
19938	return
19939}
19940
19941// LoadBalancingRule a load balancing rule for a load balancer.
19942type LoadBalancingRule struct {
19943	autorest.Response `json:"-"`
19944	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
19945	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
19946	// Name - The name of the resource that is unique within the set of load balancing rules used by the load balancer. This name can be used to access the resource.
19947	Name *string `json:"name,omitempty"`
19948	// Etag - A unique read-only string that changes whenever the resource is updated.
19949	Etag *string `json:"etag,omitempty"`
19950	// Type - READ-ONLY; Type of the resource.
19951	Type *string `json:"type,omitempty"`
19952	// ID - Resource ID.
19953	ID *string `json:"id,omitempty"`
19954}
19955
19956// MarshalJSON is the custom marshaler for LoadBalancingRule.
19957func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
19958	objectMap := make(map[string]interface{})
19959	if lbr.LoadBalancingRulePropertiesFormat != nil {
19960		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
19961	}
19962	if lbr.Name != nil {
19963		objectMap["name"] = lbr.Name
19964	}
19965	if lbr.Etag != nil {
19966		objectMap["etag"] = lbr.Etag
19967	}
19968	if lbr.ID != nil {
19969		objectMap["id"] = lbr.ID
19970	}
19971	return json.Marshal(objectMap)
19972}
19973
19974// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
19975func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
19976	var m map[string]*json.RawMessage
19977	err := json.Unmarshal(body, &m)
19978	if err != nil {
19979		return err
19980	}
19981	for k, v := range m {
19982		switch k {
19983		case "properties":
19984			if v != nil {
19985				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
19986				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
19987				if err != nil {
19988					return err
19989				}
19990				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
19991			}
19992		case "name":
19993			if v != nil {
19994				var name string
19995				err = json.Unmarshal(*v, &name)
19996				if err != nil {
19997					return err
19998				}
19999				lbr.Name = &name
20000			}
20001		case "etag":
20002			if v != nil {
20003				var etag string
20004				err = json.Unmarshal(*v, &etag)
20005				if err != nil {
20006					return err
20007				}
20008				lbr.Etag = &etag
20009			}
20010		case "type":
20011			if v != nil {
20012				var typeVar string
20013				err = json.Unmarshal(*v, &typeVar)
20014				if err != nil {
20015					return err
20016				}
20017				lbr.Type = &typeVar
20018			}
20019		case "id":
20020			if v != nil {
20021				var ID string
20022				err = json.Unmarshal(*v, &ID)
20023				if err != nil {
20024					return err
20025				}
20026				lbr.ID = &ID
20027			}
20028		}
20029	}
20030
20031	return nil
20032}
20033
20034// LoadBalancingRulePropertiesFormat properties of the load balancer.
20035type LoadBalancingRulePropertiesFormat struct {
20036	// FrontendIPConfiguration - A reference to frontend IP addresses.
20037	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
20038	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
20039	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
20040	// Probe - The reference of the load balancer probe used by the load balancing rule.
20041	Probe *SubResource `json:"probe,omitempty"`
20042	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
20043	Protocol TransportProtocol `json:"protocol,omitempty"`
20044	// LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol'
20045	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
20046	// FrontendPort - The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values are between 0 and 65534. Note that value 0 enables "Any Port".
20047	FrontendPort *int32 `json:"frontendPort,omitempty"`
20048	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port".
20049	BackendPort *int32 `json:"backendPort,omitempty"`
20050	// IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.
20051	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
20052	// EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint.
20053	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
20054	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
20055	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
20056	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
20057	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
20058	// ProvisioningState - The provisioning state of the load balancing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20059	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20060}
20061
20062// LocalNetworkGateway a common class for general resource information.
20063type LocalNetworkGateway struct {
20064	autorest.Response `json:"-"`
20065	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
20066	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
20067	// Etag - A unique read-only string that changes whenever the resource is updated.
20068	Etag *string `json:"etag,omitempty"`
20069	// ID - Resource ID.
20070	ID *string `json:"id,omitempty"`
20071	// Name - READ-ONLY; Resource name.
20072	Name *string `json:"name,omitempty"`
20073	// Type - READ-ONLY; Resource type.
20074	Type *string `json:"type,omitempty"`
20075	// Location - Resource location.
20076	Location *string `json:"location,omitempty"`
20077	// Tags - Resource tags.
20078	Tags map[string]*string `json:"tags"`
20079}
20080
20081// MarshalJSON is the custom marshaler for LocalNetworkGateway.
20082func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
20083	objectMap := make(map[string]interface{})
20084	if lng.LocalNetworkGatewayPropertiesFormat != nil {
20085		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
20086	}
20087	if lng.Etag != nil {
20088		objectMap["etag"] = lng.Etag
20089	}
20090	if lng.ID != nil {
20091		objectMap["id"] = lng.ID
20092	}
20093	if lng.Location != nil {
20094		objectMap["location"] = lng.Location
20095	}
20096	if lng.Tags != nil {
20097		objectMap["tags"] = lng.Tags
20098	}
20099	return json.Marshal(objectMap)
20100}
20101
20102// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
20103func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
20104	var m map[string]*json.RawMessage
20105	err := json.Unmarshal(body, &m)
20106	if err != nil {
20107		return err
20108	}
20109	for k, v := range m {
20110		switch k {
20111		case "properties":
20112			if v != nil {
20113				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
20114				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
20115				if err != nil {
20116					return err
20117				}
20118				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
20119			}
20120		case "etag":
20121			if v != nil {
20122				var etag string
20123				err = json.Unmarshal(*v, &etag)
20124				if err != nil {
20125					return err
20126				}
20127				lng.Etag = &etag
20128			}
20129		case "id":
20130			if v != nil {
20131				var ID string
20132				err = json.Unmarshal(*v, &ID)
20133				if err != nil {
20134					return err
20135				}
20136				lng.ID = &ID
20137			}
20138		case "name":
20139			if v != nil {
20140				var name string
20141				err = json.Unmarshal(*v, &name)
20142				if err != nil {
20143					return err
20144				}
20145				lng.Name = &name
20146			}
20147		case "type":
20148			if v != nil {
20149				var typeVar string
20150				err = json.Unmarshal(*v, &typeVar)
20151				if err != nil {
20152					return err
20153				}
20154				lng.Type = &typeVar
20155			}
20156		case "location":
20157			if v != nil {
20158				var location string
20159				err = json.Unmarshal(*v, &location)
20160				if err != nil {
20161					return err
20162				}
20163				lng.Location = &location
20164			}
20165		case "tags":
20166			if v != nil {
20167				var tags map[string]*string
20168				err = json.Unmarshal(*v, &tags)
20169				if err != nil {
20170					return err
20171				}
20172				lng.Tags = tags
20173			}
20174		}
20175	}
20176
20177	return nil
20178}
20179
20180// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
20181type LocalNetworkGatewayListResult struct {
20182	autorest.Response `json:"-"`
20183	// Value - A list of local network gateways that exists in a resource group.
20184	Value *[]LocalNetworkGateway `json:"value,omitempty"`
20185	// NextLink - READ-ONLY; The URL to get the next set of results.
20186	NextLink *string `json:"nextLink,omitempty"`
20187}
20188
20189// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
20190// values.
20191type LocalNetworkGatewayListResultIterator struct {
20192	i    int
20193	page LocalNetworkGatewayListResultPage
20194}
20195
20196// NextWithContext advances to the next value.  If there was an error making
20197// the request the iterator does not advance and the error is returned.
20198func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
20199	if tracing.IsEnabled() {
20200		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
20201		defer func() {
20202			sc := -1
20203			if iter.Response().Response.Response != nil {
20204				sc = iter.Response().Response.Response.StatusCode
20205			}
20206			tracing.EndSpan(ctx, sc, err)
20207		}()
20208	}
20209	iter.i++
20210	if iter.i < len(iter.page.Values()) {
20211		return nil
20212	}
20213	err = iter.page.NextWithContext(ctx)
20214	if err != nil {
20215		iter.i--
20216		return err
20217	}
20218	iter.i = 0
20219	return nil
20220}
20221
20222// Next advances to the next value.  If there was an error making
20223// the request the iterator does not advance and the error is returned.
20224// Deprecated: Use NextWithContext() instead.
20225func (iter *LocalNetworkGatewayListResultIterator) Next() error {
20226	return iter.NextWithContext(context.Background())
20227}
20228
20229// NotDone returns true if the enumeration should be started or is not yet complete.
20230func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
20231	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20232}
20233
20234// Response returns the raw server response from the last page request.
20235func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
20236	return iter.page.Response()
20237}
20238
20239// Value returns the current value or a zero-initialized value if the
20240// iterator has advanced beyond the end of the collection.
20241func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
20242	if !iter.page.NotDone() {
20243		return LocalNetworkGateway{}
20244	}
20245	return iter.page.Values()[iter.i]
20246}
20247
20248// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
20249func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
20250	return LocalNetworkGatewayListResultIterator{page: page}
20251}
20252
20253// IsEmpty returns true if the ListResult contains no values.
20254func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
20255	return lnglr.Value == nil || len(*lnglr.Value) == 0
20256}
20257
20258// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
20259// It returns nil if no more results exist.
20260func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
20261	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
20262		return nil, nil
20263	}
20264	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20265		autorest.AsJSON(),
20266		autorest.AsGet(),
20267		autorest.WithBaseURL(to.String(lnglr.NextLink)))
20268}
20269
20270// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
20271type LocalNetworkGatewayListResultPage struct {
20272	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
20273	lnglr LocalNetworkGatewayListResult
20274}
20275
20276// NextWithContext advances to the next page of values.  If there was an error making
20277// the request the page does not advance and the error is returned.
20278func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
20279	if tracing.IsEnabled() {
20280		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
20281		defer func() {
20282			sc := -1
20283			if page.Response().Response.Response != nil {
20284				sc = page.Response().Response.Response.StatusCode
20285			}
20286			tracing.EndSpan(ctx, sc, err)
20287		}()
20288	}
20289	next, err := page.fn(ctx, page.lnglr)
20290	if err != nil {
20291		return err
20292	}
20293	page.lnglr = next
20294	return nil
20295}
20296
20297// Next advances to the next page of values.  If there was an error making
20298// the request the page does not advance and the error is returned.
20299// Deprecated: Use NextWithContext() instead.
20300func (page *LocalNetworkGatewayListResultPage) Next() error {
20301	return page.NextWithContext(context.Background())
20302}
20303
20304// NotDone returns true if the page enumeration should be started or is not yet complete.
20305func (page LocalNetworkGatewayListResultPage) NotDone() bool {
20306	return !page.lnglr.IsEmpty()
20307}
20308
20309// Response returns the raw server response from the last page request.
20310func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
20311	return page.lnglr
20312}
20313
20314// Values returns the slice of values for the current page or nil if there are no values.
20315func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
20316	if page.lnglr.IsEmpty() {
20317		return nil
20318	}
20319	return *page.lnglr.Value
20320}
20321
20322// Creates a new instance of the LocalNetworkGatewayListResultPage type.
20323func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
20324	return LocalNetworkGatewayListResultPage{fn: getNextPage}
20325}
20326
20327// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties.
20328type LocalNetworkGatewayPropertiesFormat struct {
20329	// LocalNetworkAddressSpace - Local network site address space.
20330	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
20331	// GatewayIPAddress - IP address of local network gateway.
20332	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
20333	// BgpSettings - Local network gateway's BGP speaker settings.
20334	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
20335	// ResourceGUID - The resource GUID property of the local network gateway resource.
20336	ResourceGUID *string `json:"resourceGuid,omitempty"`
20337	// ProvisioningState - READ-ONLY; The provisioning state of the local network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20338	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20339}
20340
20341// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
20342// long-running operation.
20343type LocalNetworkGatewaysCreateOrUpdateFuture struct {
20344	azure.Future
20345}
20346
20347// Result returns the result of the asynchronous operation.
20348// If the operation has not completed it will return an error.
20349func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
20350	var done bool
20351	done, err = future.DoneWithContext(context.Background(), client)
20352	if err != nil {
20353		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20354		return
20355	}
20356	if !done {
20357		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
20358		return
20359	}
20360	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20361	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
20362		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
20363		if err != nil {
20364			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
20365		}
20366	}
20367	return
20368}
20369
20370// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
20371// long-running operation.
20372type LocalNetworkGatewaysDeleteFuture struct {
20373	azure.Future
20374}
20375
20376// Result returns the result of the asynchronous operation.
20377// If the operation has not completed it will return an error.
20378func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
20379	var done bool
20380	done, err = future.DoneWithContext(context.Background(), client)
20381	if err != nil {
20382		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
20383		return
20384	}
20385	if !done {
20386		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
20387		return
20388	}
20389	ar.Response = future.Response()
20390	return
20391}
20392
20393// LocalNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
20394// long-running operation.
20395type LocalNetworkGatewaysUpdateTagsFuture struct {
20396	azure.Future
20397}
20398
20399// Result returns the result of the asynchronous operation.
20400// If the operation has not completed it will return an error.
20401func (future *LocalNetworkGatewaysUpdateTagsFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
20402	var done bool
20403	done, err = future.DoneWithContext(context.Background(), client)
20404	if err != nil {
20405		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
20406		return
20407	}
20408	if !done {
20409		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysUpdateTagsFuture")
20410		return
20411	}
20412	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20413	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
20414		lng, err = client.UpdateTagsResponder(lng.Response.Response)
20415		if err != nil {
20416			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", lng.Response.Response, "Failure responding to request")
20417		}
20418	}
20419	return
20420}
20421
20422// LogSpecification description of logging specification.
20423type LogSpecification struct {
20424	// Name - The name of the specification.
20425	Name *string `json:"name,omitempty"`
20426	// DisplayName - The display name of the specification.
20427	DisplayName *string `json:"displayName,omitempty"`
20428	// BlobDuration - Duration of the blob.
20429	BlobDuration *string `json:"blobDuration,omitempty"`
20430}
20431
20432// ManagedRuleGroupOverride defines a managed rule group override setting.
20433type ManagedRuleGroupOverride struct {
20434	// RuleGroupName - Describes the managed rule group to override.
20435	RuleGroupName *string `json:"ruleGroupName,omitempty"`
20436	// Rules - List of rules that will be disabled. If none specified, all rules in the group will be disabled.
20437	Rules *[]ManagedRuleOverride `json:"rules,omitempty"`
20438}
20439
20440// ManagedRuleOverride defines a managed rule group override setting.
20441type ManagedRuleOverride struct {
20442	// RuleID - Identifier for the managed rule.
20443	RuleID *string `json:"ruleId,omitempty"`
20444	// State - Describes the state of the managed rule. Defaults to Disabled if not specified. Possible values include: 'ManagedRuleEnabledStateDisabled'
20445	State ManagedRuleEnabledState `json:"state,omitempty"`
20446}
20447
20448// ManagedRulesDefinition allow to exclude some variable satisfy the condition for the WAF check.
20449type ManagedRulesDefinition struct {
20450	// Exclusions - Describes the Exclusions that are applied on the policy.
20451	Exclusions *[]OwaspCrsExclusionEntry `json:"exclusions,omitempty"`
20452	// ManagedRuleSets - Describes the ruleSets that are associated with the policy.
20453	ManagedRuleSets *[]ManagedRuleSet `json:"managedRuleSets,omitempty"`
20454}
20455
20456// ManagedRuleSet defines a managed rule set.
20457type ManagedRuleSet struct {
20458	// RuleSetType - Defines the rule set type to use.
20459	RuleSetType *string `json:"ruleSetType,omitempty"`
20460	// RuleSetVersion - Defines the version of the rule set to use.
20461	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
20462	// RuleGroupOverrides - Defines the rule group overrides to apply to the rule set.
20463	RuleGroupOverrides *[]ManagedRuleGroupOverride `json:"ruleGroupOverrides,omitempty"`
20464}
20465
20466// ManagedServiceIdentity identity for the resource.
20467type ManagedServiceIdentity struct {
20468	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
20469	PrincipalID *string `json:"principalId,omitempty"`
20470	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
20471	TenantID *string `json:"tenantId,omitempty"`
20472	// Type - The type of identity used for the resource. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone'
20473	Type ResourceIdentityType `json:"type,omitempty"`
20474	// UserAssignedIdentities - The list of user identities associated with resource. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
20475	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
20476}
20477
20478// MarshalJSON is the custom marshaler for ManagedServiceIdentity.
20479func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
20480	objectMap := make(map[string]interface{})
20481	if msi.Type != "" {
20482		objectMap["type"] = msi.Type
20483	}
20484	if msi.UserAssignedIdentities != nil {
20485		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
20486	}
20487	return json.Marshal(objectMap)
20488}
20489
20490// ManagedServiceIdentityUserAssignedIdentitiesValue ...
20491type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
20492	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
20493	PrincipalID *string `json:"principalId,omitempty"`
20494	// ClientID - READ-ONLY; The client id of user assigned identity.
20495	ClientID *string `json:"clientId,omitempty"`
20496}
20497
20498// MatchCondition define match conditions.
20499type MatchCondition struct {
20500	// MatchVariables - List of match variables.
20501	MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"`
20502	// Operator - Describes operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex'
20503	Operator WebApplicationFirewallOperator `json:"operator,omitempty"`
20504	// NegationConditon - Describes if this is negate condition or not.
20505	NegationConditon *bool `json:"negationConditon,omitempty"`
20506	// MatchValues - Match value.
20507	MatchValues *[]string `json:"matchValues,omitempty"`
20508	// Transforms - List of transforms.
20509	Transforms *[]WebApplicationFirewallTransform `json:"transforms,omitempty"`
20510}
20511
20512// MatchedRule matched rule.
20513type MatchedRule struct {
20514	// RuleName - Name of the matched network security rule.
20515	RuleName *string `json:"ruleName,omitempty"`
20516	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
20517	Action *string `json:"action,omitempty"`
20518}
20519
20520// MatchVariable define match variables.
20521type MatchVariable struct {
20522	// VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies'
20523	VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"`
20524	// Selector - Describes field of the matchVariable collection.
20525	Selector *string `json:"selector,omitempty"`
20526}
20527
20528// MetricSpecification description of metrics specification.
20529type MetricSpecification struct {
20530	// Name - The name of the metric.
20531	Name *string `json:"name,omitempty"`
20532	// DisplayName - The display name of the metric.
20533	DisplayName *string `json:"displayName,omitempty"`
20534	// DisplayDescription - The description of the metric.
20535	DisplayDescription *string `json:"displayDescription,omitempty"`
20536	// Unit - Units the metric to be displayed in.
20537	Unit *string `json:"unit,omitempty"`
20538	// AggregationType - The aggregation type.
20539	AggregationType *string `json:"aggregationType,omitempty"`
20540	// Availabilities - List of availability.
20541	Availabilities *[]Availability `json:"availabilities,omitempty"`
20542	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
20543	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
20544	// FillGapWithZero - Whether gaps would be filled with zeros.
20545	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
20546	// MetricFilterPattern - Pattern for the filter of the metric.
20547	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
20548	// Dimensions - List of dimensions.
20549	Dimensions *[]Dimension `json:"dimensions,omitempty"`
20550	// IsInternal - Whether the metric is internal.
20551	IsInternal *bool `json:"isInternal,omitempty"`
20552	// SourceMdmAccount - The source MDM account.
20553	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
20554	// SourceMdmNamespace - The source MDM namespace.
20555	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
20556	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
20557	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
20558}
20559
20560// NatGateway nat Gateway resource.
20561type NatGateway struct {
20562	autorest.Response `json:"-"`
20563	// Sku - The nat gateway SKU.
20564	Sku *NatGatewaySku `json:"sku,omitempty"`
20565	// NatGatewayPropertiesFormat - Nat Gateway properties.
20566	*NatGatewayPropertiesFormat `json:"properties,omitempty"`
20567	// Zones - A list of availability zones denoting the zone in which Nat Gateway should be deployed.
20568	Zones *[]string `json:"zones,omitempty"`
20569	// Etag - A unique read-only string that changes whenever the resource is updated.
20570	Etag *string `json:"etag,omitempty"`
20571	// ID - Resource ID.
20572	ID *string `json:"id,omitempty"`
20573	// Name - READ-ONLY; Resource name.
20574	Name *string `json:"name,omitempty"`
20575	// Type - READ-ONLY; Resource type.
20576	Type *string `json:"type,omitempty"`
20577	// Location - Resource location.
20578	Location *string `json:"location,omitempty"`
20579	// Tags - Resource tags.
20580	Tags map[string]*string `json:"tags"`
20581}
20582
20583// MarshalJSON is the custom marshaler for NatGateway.
20584func (ng NatGateway) MarshalJSON() ([]byte, error) {
20585	objectMap := make(map[string]interface{})
20586	if ng.Sku != nil {
20587		objectMap["sku"] = ng.Sku
20588	}
20589	if ng.NatGatewayPropertiesFormat != nil {
20590		objectMap["properties"] = ng.NatGatewayPropertiesFormat
20591	}
20592	if ng.Zones != nil {
20593		objectMap["zones"] = ng.Zones
20594	}
20595	if ng.Etag != nil {
20596		objectMap["etag"] = ng.Etag
20597	}
20598	if ng.ID != nil {
20599		objectMap["id"] = ng.ID
20600	}
20601	if ng.Location != nil {
20602		objectMap["location"] = ng.Location
20603	}
20604	if ng.Tags != nil {
20605		objectMap["tags"] = ng.Tags
20606	}
20607	return json.Marshal(objectMap)
20608}
20609
20610// UnmarshalJSON is the custom unmarshaler for NatGateway struct.
20611func (ng *NatGateway) UnmarshalJSON(body []byte) error {
20612	var m map[string]*json.RawMessage
20613	err := json.Unmarshal(body, &m)
20614	if err != nil {
20615		return err
20616	}
20617	for k, v := range m {
20618		switch k {
20619		case "sku":
20620			if v != nil {
20621				var sku NatGatewaySku
20622				err = json.Unmarshal(*v, &sku)
20623				if err != nil {
20624					return err
20625				}
20626				ng.Sku = &sku
20627			}
20628		case "properties":
20629			if v != nil {
20630				var natGatewayPropertiesFormat NatGatewayPropertiesFormat
20631				err = json.Unmarshal(*v, &natGatewayPropertiesFormat)
20632				if err != nil {
20633					return err
20634				}
20635				ng.NatGatewayPropertiesFormat = &natGatewayPropertiesFormat
20636			}
20637		case "zones":
20638			if v != nil {
20639				var zones []string
20640				err = json.Unmarshal(*v, &zones)
20641				if err != nil {
20642					return err
20643				}
20644				ng.Zones = &zones
20645			}
20646		case "etag":
20647			if v != nil {
20648				var etag string
20649				err = json.Unmarshal(*v, &etag)
20650				if err != nil {
20651					return err
20652				}
20653				ng.Etag = &etag
20654			}
20655		case "id":
20656			if v != nil {
20657				var ID string
20658				err = json.Unmarshal(*v, &ID)
20659				if err != nil {
20660					return err
20661				}
20662				ng.ID = &ID
20663			}
20664		case "name":
20665			if v != nil {
20666				var name string
20667				err = json.Unmarshal(*v, &name)
20668				if err != nil {
20669					return err
20670				}
20671				ng.Name = &name
20672			}
20673		case "type":
20674			if v != nil {
20675				var typeVar string
20676				err = json.Unmarshal(*v, &typeVar)
20677				if err != nil {
20678					return err
20679				}
20680				ng.Type = &typeVar
20681			}
20682		case "location":
20683			if v != nil {
20684				var location string
20685				err = json.Unmarshal(*v, &location)
20686				if err != nil {
20687					return err
20688				}
20689				ng.Location = &location
20690			}
20691		case "tags":
20692			if v != nil {
20693				var tags map[string]*string
20694				err = json.Unmarshal(*v, &tags)
20695				if err != nil {
20696					return err
20697				}
20698				ng.Tags = tags
20699			}
20700		}
20701	}
20702
20703	return nil
20704}
20705
20706// NatGatewayListResult response for ListNatGateways API service call.
20707type NatGatewayListResult struct {
20708	autorest.Response `json:"-"`
20709	// Value - A list of Nat Gateways that exists in a resource group.
20710	Value *[]NatGateway `json:"value,omitempty"`
20711	// NextLink - The URL to get the next set of results.
20712	NextLink *string `json:"nextLink,omitempty"`
20713}
20714
20715// NatGatewayListResultIterator provides access to a complete listing of NatGateway values.
20716type NatGatewayListResultIterator struct {
20717	i    int
20718	page NatGatewayListResultPage
20719}
20720
20721// NextWithContext advances to the next value.  If there was an error making
20722// the request the iterator does not advance and the error is returned.
20723func (iter *NatGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
20724	if tracing.IsEnabled() {
20725		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultIterator.NextWithContext")
20726		defer func() {
20727			sc := -1
20728			if iter.Response().Response.Response != nil {
20729				sc = iter.Response().Response.Response.StatusCode
20730			}
20731			tracing.EndSpan(ctx, sc, err)
20732		}()
20733	}
20734	iter.i++
20735	if iter.i < len(iter.page.Values()) {
20736		return nil
20737	}
20738	err = iter.page.NextWithContext(ctx)
20739	if err != nil {
20740		iter.i--
20741		return err
20742	}
20743	iter.i = 0
20744	return nil
20745}
20746
20747// Next advances to the next value.  If there was an error making
20748// the request the iterator does not advance and the error is returned.
20749// Deprecated: Use NextWithContext() instead.
20750func (iter *NatGatewayListResultIterator) Next() error {
20751	return iter.NextWithContext(context.Background())
20752}
20753
20754// NotDone returns true if the enumeration should be started or is not yet complete.
20755func (iter NatGatewayListResultIterator) NotDone() bool {
20756	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20757}
20758
20759// Response returns the raw server response from the last page request.
20760func (iter NatGatewayListResultIterator) Response() NatGatewayListResult {
20761	return iter.page.Response()
20762}
20763
20764// Value returns the current value or a zero-initialized value if the
20765// iterator has advanced beyond the end of the collection.
20766func (iter NatGatewayListResultIterator) Value() NatGateway {
20767	if !iter.page.NotDone() {
20768		return NatGateway{}
20769	}
20770	return iter.page.Values()[iter.i]
20771}
20772
20773// Creates a new instance of the NatGatewayListResultIterator type.
20774func NewNatGatewayListResultIterator(page NatGatewayListResultPage) NatGatewayListResultIterator {
20775	return NatGatewayListResultIterator{page: page}
20776}
20777
20778// IsEmpty returns true if the ListResult contains no values.
20779func (nglr NatGatewayListResult) IsEmpty() bool {
20780	return nglr.Value == nil || len(*nglr.Value) == 0
20781}
20782
20783// natGatewayListResultPreparer prepares a request to retrieve the next set of results.
20784// It returns nil if no more results exist.
20785func (nglr NatGatewayListResult) natGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
20786	if nglr.NextLink == nil || len(to.String(nglr.NextLink)) < 1 {
20787		return nil, nil
20788	}
20789	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20790		autorest.AsJSON(),
20791		autorest.AsGet(),
20792		autorest.WithBaseURL(to.String(nglr.NextLink)))
20793}
20794
20795// NatGatewayListResultPage contains a page of NatGateway values.
20796type NatGatewayListResultPage struct {
20797	fn   func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)
20798	nglr NatGatewayListResult
20799}
20800
20801// NextWithContext advances to the next page of values.  If there was an error making
20802// the request the page does not advance and the error is returned.
20803func (page *NatGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
20804	if tracing.IsEnabled() {
20805		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultPage.NextWithContext")
20806		defer func() {
20807			sc := -1
20808			if page.Response().Response.Response != nil {
20809				sc = page.Response().Response.Response.StatusCode
20810			}
20811			tracing.EndSpan(ctx, sc, err)
20812		}()
20813	}
20814	next, err := page.fn(ctx, page.nglr)
20815	if err != nil {
20816		return err
20817	}
20818	page.nglr = next
20819	return nil
20820}
20821
20822// Next advances to the next page of values.  If there was an error making
20823// the request the page does not advance and the error is returned.
20824// Deprecated: Use NextWithContext() instead.
20825func (page *NatGatewayListResultPage) Next() error {
20826	return page.NextWithContext(context.Background())
20827}
20828
20829// NotDone returns true if the page enumeration should be started or is not yet complete.
20830func (page NatGatewayListResultPage) NotDone() bool {
20831	return !page.nglr.IsEmpty()
20832}
20833
20834// Response returns the raw server response from the last page request.
20835func (page NatGatewayListResultPage) Response() NatGatewayListResult {
20836	return page.nglr
20837}
20838
20839// Values returns the slice of values for the current page or nil if there are no values.
20840func (page NatGatewayListResultPage) Values() []NatGateway {
20841	if page.nglr.IsEmpty() {
20842		return nil
20843	}
20844	return *page.nglr.Value
20845}
20846
20847// Creates a new instance of the NatGatewayListResultPage type.
20848func NewNatGatewayListResultPage(getNextPage func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)) NatGatewayListResultPage {
20849	return NatGatewayListResultPage{fn: getNextPage}
20850}
20851
20852// NatGatewayPropertiesFormat nat Gateway properties.
20853type NatGatewayPropertiesFormat struct {
20854	// IdleTimeoutInMinutes - The idle timeout of the nat gateway.
20855	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
20856	// PublicIPAddresses - An array of public ip addresses associated with the nat gateway resource.
20857	PublicIPAddresses *[]SubResource `json:"publicIpAddresses,omitempty"`
20858	// PublicIPPrefixes - An array of public ip prefixes associated with the nat gateway resource.
20859	PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"`
20860	// Subnets - READ-ONLY; An array of references to the subnets using this nat gateway resource.
20861	Subnets *[]SubResource `json:"subnets,omitempty"`
20862	// ResourceGUID - The resource GUID property of the NAT gateway resource.
20863	ResourceGUID *string `json:"resourceGuid,omitempty"`
20864	// ProvisioningState - The provisioning state of the NAT gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20865	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20866}
20867
20868// NatGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
20869// long-running operation.
20870type NatGatewaysCreateOrUpdateFuture struct {
20871	azure.Future
20872}
20873
20874// Result returns the result of the asynchronous operation.
20875// If the operation has not completed it will return an error.
20876func (future *NatGatewaysCreateOrUpdateFuture) Result(client NatGatewaysClient) (ng NatGateway, err error) {
20877	var done bool
20878	done, err = future.DoneWithContext(context.Background(), client)
20879	if err != nil {
20880		err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20881		return
20882	}
20883	if !done {
20884		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysCreateOrUpdateFuture")
20885		return
20886	}
20887	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20888	if ng.Response.Response, err = future.GetResult(sender); err == nil && ng.Response.Response.StatusCode != http.StatusNoContent {
20889		ng, err = client.CreateOrUpdateResponder(ng.Response.Response)
20890		if err != nil {
20891			err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", ng.Response.Response, "Failure responding to request")
20892		}
20893	}
20894	return
20895}
20896
20897// NatGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20898// operation.
20899type NatGatewaysDeleteFuture struct {
20900	azure.Future
20901}
20902
20903// Result returns the result of the asynchronous operation.
20904// If the operation has not completed it will return an error.
20905func (future *NatGatewaysDeleteFuture) Result(client NatGatewaysClient) (ar autorest.Response, err error) {
20906	var done bool
20907	done, err = future.DoneWithContext(context.Background(), client)
20908	if err != nil {
20909		err = autorest.NewErrorWithError(err, "network.NatGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
20910		return
20911	}
20912	if !done {
20913		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysDeleteFuture")
20914		return
20915	}
20916	ar.Response = future.Response()
20917	return
20918}
20919
20920// NatGatewaySku SKU of nat gateway.
20921type NatGatewaySku struct {
20922	// Name - Name of Nat Gateway SKU. Possible values include: 'NatGatewaySkuNameStandard'
20923	Name NatGatewaySkuName `json:"name,omitempty"`
20924}
20925
20926// NextHopParameters parameters that define the source and destination endpoint.
20927type NextHopParameters struct {
20928	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
20929	TargetResourceID *string `json:"targetResourceId,omitempty"`
20930	// SourceIPAddress - The source IP address.
20931	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
20932	// DestinationIPAddress - The destination IP address.
20933	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
20934	// TargetNicResourceID - The NIC ID. (If VM has multiple NICs and IP forwarding is enabled on any of the nics, then this parameter must be specified. Otherwise optional).
20935	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
20936}
20937
20938// NextHopResult the information about next hop from the specified VM.
20939type NextHopResult struct {
20940	autorest.Response `json:"-"`
20941	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
20942	NextHopType NextHopType `json:"nextHopType,omitempty"`
20943	// NextHopIPAddress - Next hop IP Address.
20944	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
20945	// RouteTableID - The resource identifier for the route table associated with the route being returned. If the route being returned does not correspond to any user created routes then this field will be the string 'System Route'.
20946	RouteTableID *string `json:"routeTableId,omitempty"`
20947}
20948
20949// Operation network REST API operation definition.
20950type Operation struct {
20951	// Name - Operation name: {provider}/{resource}/{operation}.
20952	Name *string `json:"name,omitempty"`
20953	// Display - Display metadata associated with the operation.
20954	Display *OperationDisplay `json:"display,omitempty"`
20955	// Origin - Origin of the operation.
20956	Origin *string `json:"origin,omitempty"`
20957	// OperationPropertiesFormat - Operation properties format.
20958	*OperationPropertiesFormat `json:"properties,omitempty"`
20959}
20960
20961// MarshalJSON is the custom marshaler for Operation.
20962func (o Operation) MarshalJSON() ([]byte, error) {
20963	objectMap := make(map[string]interface{})
20964	if o.Name != nil {
20965		objectMap["name"] = o.Name
20966	}
20967	if o.Display != nil {
20968		objectMap["display"] = o.Display
20969	}
20970	if o.Origin != nil {
20971		objectMap["origin"] = o.Origin
20972	}
20973	if o.OperationPropertiesFormat != nil {
20974		objectMap["properties"] = o.OperationPropertiesFormat
20975	}
20976	return json.Marshal(objectMap)
20977}
20978
20979// UnmarshalJSON is the custom unmarshaler for Operation struct.
20980func (o *Operation) UnmarshalJSON(body []byte) error {
20981	var m map[string]*json.RawMessage
20982	err := json.Unmarshal(body, &m)
20983	if err != nil {
20984		return err
20985	}
20986	for k, v := range m {
20987		switch k {
20988		case "name":
20989			if v != nil {
20990				var name string
20991				err = json.Unmarshal(*v, &name)
20992				if err != nil {
20993					return err
20994				}
20995				o.Name = &name
20996			}
20997		case "display":
20998			if v != nil {
20999				var display OperationDisplay
21000				err = json.Unmarshal(*v, &display)
21001				if err != nil {
21002					return err
21003				}
21004				o.Display = &display
21005			}
21006		case "origin":
21007			if v != nil {
21008				var origin string
21009				err = json.Unmarshal(*v, &origin)
21010				if err != nil {
21011					return err
21012				}
21013				o.Origin = &origin
21014			}
21015		case "properties":
21016			if v != nil {
21017				var operationPropertiesFormat OperationPropertiesFormat
21018				err = json.Unmarshal(*v, &operationPropertiesFormat)
21019				if err != nil {
21020					return err
21021				}
21022				o.OperationPropertiesFormat = &operationPropertiesFormat
21023			}
21024		}
21025	}
21026
21027	return nil
21028}
21029
21030// OperationDisplay display metadata associated with the operation.
21031type OperationDisplay struct {
21032	// Provider - Service provider: Microsoft Network.
21033	Provider *string `json:"provider,omitempty"`
21034	// Resource - Resource on which the operation is performed.
21035	Resource *string `json:"resource,omitempty"`
21036	// Operation - Type of the operation: get, read, delete, etc.
21037	Operation *string `json:"operation,omitempty"`
21038	// Description - Description of the operation.
21039	Description *string `json:"description,omitempty"`
21040}
21041
21042// OperationListResult result of the request to list Network operations. It contains a list of operations
21043// and a URL link to get the next set of results.
21044type OperationListResult struct {
21045	autorest.Response `json:"-"`
21046	// Value - List of Network operations supported by the Network resource provider.
21047	Value *[]Operation `json:"value,omitempty"`
21048	// NextLink - URL to get the next set of operation list results if there are any.
21049	NextLink *string `json:"nextLink,omitempty"`
21050}
21051
21052// OperationListResultIterator provides access to a complete listing of Operation values.
21053type OperationListResultIterator struct {
21054	i    int
21055	page OperationListResultPage
21056}
21057
21058// NextWithContext advances to the next value.  If there was an error making
21059// the request the iterator does not advance and the error is returned.
21060func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
21061	if tracing.IsEnabled() {
21062		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
21063		defer func() {
21064			sc := -1
21065			if iter.Response().Response.Response != nil {
21066				sc = iter.Response().Response.Response.StatusCode
21067			}
21068			tracing.EndSpan(ctx, sc, err)
21069		}()
21070	}
21071	iter.i++
21072	if iter.i < len(iter.page.Values()) {
21073		return nil
21074	}
21075	err = iter.page.NextWithContext(ctx)
21076	if err != nil {
21077		iter.i--
21078		return err
21079	}
21080	iter.i = 0
21081	return nil
21082}
21083
21084// Next advances to the next value.  If there was an error making
21085// the request the iterator does not advance and the error is returned.
21086// Deprecated: Use NextWithContext() instead.
21087func (iter *OperationListResultIterator) Next() error {
21088	return iter.NextWithContext(context.Background())
21089}
21090
21091// NotDone returns true if the enumeration should be started or is not yet complete.
21092func (iter OperationListResultIterator) NotDone() bool {
21093	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21094}
21095
21096// Response returns the raw server response from the last page request.
21097func (iter OperationListResultIterator) Response() OperationListResult {
21098	return iter.page.Response()
21099}
21100
21101// Value returns the current value or a zero-initialized value if the
21102// iterator has advanced beyond the end of the collection.
21103func (iter OperationListResultIterator) Value() Operation {
21104	if !iter.page.NotDone() {
21105		return Operation{}
21106	}
21107	return iter.page.Values()[iter.i]
21108}
21109
21110// Creates a new instance of the OperationListResultIterator type.
21111func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
21112	return OperationListResultIterator{page: page}
21113}
21114
21115// IsEmpty returns true if the ListResult contains no values.
21116func (olr OperationListResult) IsEmpty() bool {
21117	return olr.Value == nil || len(*olr.Value) == 0
21118}
21119
21120// operationListResultPreparer prepares a request to retrieve the next set of results.
21121// It returns nil if no more results exist.
21122func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
21123	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
21124		return nil, nil
21125	}
21126	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21127		autorest.AsJSON(),
21128		autorest.AsGet(),
21129		autorest.WithBaseURL(to.String(olr.NextLink)))
21130}
21131
21132// OperationListResultPage contains a page of Operation values.
21133type OperationListResultPage struct {
21134	fn  func(context.Context, OperationListResult) (OperationListResult, error)
21135	olr OperationListResult
21136}
21137
21138// NextWithContext advances to the next page of values.  If there was an error making
21139// the request the page does not advance and the error is returned.
21140func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
21141	if tracing.IsEnabled() {
21142		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
21143		defer func() {
21144			sc := -1
21145			if page.Response().Response.Response != nil {
21146				sc = page.Response().Response.Response.StatusCode
21147			}
21148			tracing.EndSpan(ctx, sc, err)
21149		}()
21150	}
21151	next, err := page.fn(ctx, page.olr)
21152	if err != nil {
21153		return err
21154	}
21155	page.olr = next
21156	return nil
21157}
21158
21159// Next advances to the next page of values.  If there was an error making
21160// the request the page does not advance and the error is returned.
21161// Deprecated: Use NextWithContext() instead.
21162func (page *OperationListResultPage) Next() error {
21163	return page.NextWithContext(context.Background())
21164}
21165
21166// NotDone returns true if the page enumeration should be started or is not yet complete.
21167func (page OperationListResultPage) NotDone() bool {
21168	return !page.olr.IsEmpty()
21169}
21170
21171// Response returns the raw server response from the last page request.
21172func (page OperationListResultPage) Response() OperationListResult {
21173	return page.olr
21174}
21175
21176// Values returns the slice of values for the current page or nil if there are no values.
21177func (page OperationListResultPage) Values() []Operation {
21178	if page.olr.IsEmpty() {
21179		return nil
21180	}
21181	return *page.olr.Value
21182}
21183
21184// Creates a new instance of the OperationListResultPage type.
21185func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
21186	return OperationListResultPage{fn: getNextPage}
21187}
21188
21189// OperationPropertiesFormat description of operation properties format.
21190type OperationPropertiesFormat struct {
21191	// ServiceSpecification - Specification of the service.
21192	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
21193}
21194
21195// OperationPropertiesFormatServiceSpecification specification of the service.
21196type OperationPropertiesFormatServiceSpecification struct {
21197	// MetricSpecifications - Operation service specification.
21198	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
21199	// LogSpecifications - Operation log specification.
21200	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
21201}
21202
21203// OutboundRule outbound rule of the load balancer.
21204type OutboundRule struct {
21205	autorest.Response `json:"-"`
21206	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
21207	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
21208	// Name - The name of the resource that is unique within the set of outbound rules used by the load balancer. This name can be used to access the resource.
21209	Name *string `json:"name,omitempty"`
21210	// Etag - A unique read-only string that changes whenever the resource is updated.
21211	Etag *string `json:"etag,omitempty"`
21212	// Type - READ-ONLY; Type of the resource.
21213	Type *string `json:"type,omitempty"`
21214	// ID - Resource ID.
21215	ID *string `json:"id,omitempty"`
21216}
21217
21218// MarshalJSON is the custom marshaler for OutboundRule.
21219func (or OutboundRule) MarshalJSON() ([]byte, error) {
21220	objectMap := make(map[string]interface{})
21221	if or.OutboundRulePropertiesFormat != nil {
21222		objectMap["properties"] = or.OutboundRulePropertiesFormat
21223	}
21224	if or.Name != nil {
21225		objectMap["name"] = or.Name
21226	}
21227	if or.Etag != nil {
21228		objectMap["etag"] = or.Etag
21229	}
21230	if or.ID != nil {
21231		objectMap["id"] = or.ID
21232	}
21233	return json.Marshal(objectMap)
21234}
21235
21236// UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
21237func (or *OutboundRule) UnmarshalJSON(body []byte) error {
21238	var m map[string]*json.RawMessage
21239	err := json.Unmarshal(body, &m)
21240	if err != nil {
21241		return err
21242	}
21243	for k, v := range m {
21244		switch k {
21245		case "properties":
21246			if v != nil {
21247				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
21248				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
21249				if err != nil {
21250					return err
21251				}
21252				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
21253			}
21254		case "name":
21255			if v != nil {
21256				var name string
21257				err = json.Unmarshal(*v, &name)
21258				if err != nil {
21259					return err
21260				}
21261				or.Name = &name
21262			}
21263		case "etag":
21264			if v != nil {
21265				var etag string
21266				err = json.Unmarshal(*v, &etag)
21267				if err != nil {
21268					return err
21269				}
21270				or.Etag = &etag
21271			}
21272		case "type":
21273			if v != nil {
21274				var typeVar string
21275				err = json.Unmarshal(*v, &typeVar)
21276				if err != nil {
21277					return err
21278				}
21279				or.Type = &typeVar
21280			}
21281		case "id":
21282			if v != nil {
21283				var ID string
21284				err = json.Unmarshal(*v, &ID)
21285				if err != nil {
21286					return err
21287				}
21288				or.ID = &ID
21289			}
21290		}
21291	}
21292
21293	return nil
21294}
21295
21296// OutboundRulePropertiesFormat outbound rule of the load balancer.
21297type OutboundRulePropertiesFormat struct {
21298	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
21299	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
21300	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
21301	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
21302	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
21303	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
21304	// ProvisioningState - The provisioning state of the outbound rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21305	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21306	// Protocol - The protocol for the outbound rule in load balancer. Possible values include: 'LoadBalancerOutboundRuleProtocolTCP', 'LoadBalancerOutboundRuleProtocolUDP', 'LoadBalancerOutboundRuleProtocolAll'
21307	Protocol LoadBalancerOutboundRuleProtocol `json:"protocol,omitempty"`
21308	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
21309	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
21310	// IdleTimeoutInMinutes - The timeout for the TCP idle connection.
21311	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
21312}
21313
21314// OwaspCrsExclusionEntry allow to exclude some variable satisfy the condition for the WAF check.
21315type OwaspCrsExclusionEntry struct {
21316	// MatchVariable - The variable to be excluded. Possible values include: 'RequestHeaderNames', 'RequestCookieNames', 'RequestArgNames'
21317	MatchVariable OwaspCrsExclusionEntryMatchVariable `json:"matchVariable,omitempty"`
21318	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to. Possible values include: 'OwaspCrsExclusionEntrySelectorMatchOperatorEquals', 'OwaspCrsExclusionEntrySelectorMatchOperatorContains', 'OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny'
21319	SelectorMatchOperator OwaspCrsExclusionEntrySelectorMatchOperator `json:"selectorMatchOperator,omitempty"`
21320	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
21321	Selector *string `json:"selector,omitempty"`
21322}
21323
21324// P2SConnectionConfiguration p2SConnectionConfiguration Resource.
21325type P2SConnectionConfiguration struct {
21326	// P2SConnectionConfigurationProperties - Properties of the P2S connection configuration.
21327	*P2SConnectionConfigurationProperties `json:"properties,omitempty"`
21328	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21329	Name *string `json:"name,omitempty"`
21330	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21331	Etag *string `json:"etag,omitempty"`
21332	// ID - Resource ID.
21333	ID *string `json:"id,omitempty"`
21334}
21335
21336// MarshalJSON is the custom marshaler for P2SConnectionConfiguration.
21337func (pcc P2SConnectionConfiguration) MarshalJSON() ([]byte, error) {
21338	objectMap := make(map[string]interface{})
21339	if pcc.P2SConnectionConfigurationProperties != nil {
21340		objectMap["properties"] = pcc.P2SConnectionConfigurationProperties
21341	}
21342	if pcc.Name != nil {
21343		objectMap["name"] = pcc.Name
21344	}
21345	if pcc.ID != nil {
21346		objectMap["id"] = pcc.ID
21347	}
21348	return json.Marshal(objectMap)
21349}
21350
21351// UnmarshalJSON is the custom unmarshaler for P2SConnectionConfiguration struct.
21352func (pcc *P2SConnectionConfiguration) UnmarshalJSON(body []byte) error {
21353	var m map[string]*json.RawMessage
21354	err := json.Unmarshal(body, &m)
21355	if err != nil {
21356		return err
21357	}
21358	for k, v := range m {
21359		switch k {
21360		case "properties":
21361			if v != nil {
21362				var p2SConnectionConfigurationProperties P2SConnectionConfigurationProperties
21363				err = json.Unmarshal(*v, &p2SConnectionConfigurationProperties)
21364				if err != nil {
21365					return err
21366				}
21367				pcc.P2SConnectionConfigurationProperties = &p2SConnectionConfigurationProperties
21368			}
21369		case "name":
21370			if v != nil {
21371				var name string
21372				err = json.Unmarshal(*v, &name)
21373				if err != nil {
21374					return err
21375				}
21376				pcc.Name = &name
21377			}
21378		case "etag":
21379			if v != nil {
21380				var etag string
21381				err = json.Unmarshal(*v, &etag)
21382				if err != nil {
21383					return err
21384				}
21385				pcc.Etag = &etag
21386			}
21387		case "id":
21388			if v != nil {
21389				var ID string
21390				err = json.Unmarshal(*v, &ID)
21391				if err != nil {
21392					return err
21393				}
21394				pcc.ID = &ID
21395			}
21396		}
21397	}
21398
21399	return nil
21400}
21401
21402// P2SConnectionConfigurationProperties parameters for P2SConnectionConfiguration.
21403type P2SConnectionConfigurationProperties struct {
21404	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
21405	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
21406	// ProvisioningState - The provisioning state of the P2SConnectionConfiguration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21407	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21408}
21409
21410// P2SVpnConnectionHealth p2S Vpn connection detailed health written to sas url.
21411type P2SVpnConnectionHealth struct {
21412	autorest.Response `json:"-"`
21413	// SasURL - Returned sas url of the blob to which the p2s vpn connection detailed health will be written.
21414	SasURL *string `json:"sasUrl,omitempty"`
21415}
21416
21417// P2SVpnConnectionHealthRequest list of P2S Vpn connection health request.
21418type P2SVpnConnectionHealthRequest struct {
21419	// VpnUserNamesFilter - The list of p2s vpn user names whose p2s vpn connection detailed health to retrieve for.
21420	VpnUserNamesFilter *[]string `json:"vpnUserNamesFilter,omitempty"`
21421	// OutputBlobSasURL - The sas-url to download the P2S Vpn connection health detail.
21422	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
21423}
21424
21425// P2SVpnGateway p2SVpnGateway Resource.
21426type P2SVpnGateway struct {
21427	autorest.Response `json:"-"`
21428	// P2SVpnGatewayProperties - Properties of the P2SVpnGateway.
21429	*P2SVpnGatewayProperties `json:"properties,omitempty"`
21430	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21431	Etag *string `json:"etag,omitempty"`
21432	// ID - Resource ID.
21433	ID *string `json:"id,omitempty"`
21434	// Name - READ-ONLY; Resource name.
21435	Name *string `json:"name,omitempty"`
21436	// Type - READ-ONLY; Resource type.
21437	Type *string `json:"type,omitempty"`
21438	// Location - Resource location.
21439	Location *string `json:"location,omitempty"`
21440	// Tags - Resource tags.
21441	Tags map[string]*string `json:"tags"`
21442}
21443
21444// MarshalJSON is the custom marshaler for P2SVpnGateway.
21445func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
21446	objectMap := make(map[string]interface{})
21447	if pvg.P2SVpnGatewayProperties != nil {
21448		objectMap["properties"] = pvg.P2SVpnGatewayProperties
21449	}
21450	if pvg.ID != nil {
21451		objectMap["id"] = pvg.ID
21452	}
21453	if pvg.Location != nil {
21454		objectMap["location"] = pvg.Location
21455	}
21456	if pvg.Tags != nil {
21457		objectMap["tags"] = pvg.Tags
21458	}
21459	return json.Marshal(objectMap)
21460}
21461
21462// UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
21463func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
21464	var m map[string]*json.RawMessage
21465	err := json.Unmarshal(body, &m)
21466	if err != nil {
21467		return err
21468	}
21469	for k, v := range m {
21470		switch k {
21471		case "properties":
21472			if v != nil {
21473				var p2SVpnGatewayProperties P2SVpnGatewayProperties
21474				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
21475				if err != nil {
21476					return err
21477				}
21478				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
21479			}
21480		case "etag":
21481			if v != nil {
21482				var etag string
21483				err = json.Unmarshal(*v, &etag)
21484				if err != nil {
21485					return err
21486				}
21487				pvg.Etag = &etag
21488			}
21489		case "id":
21490			if v != nil {
21491				var ID string
21492				err = json.Unmarshal(*v, &ID)
21493				if err != nil {
21494					return err
21495				}
21496				pvg.ID = &ID
21497			}
21498		case "name":
21499			if v != nil {
21500				var name string
21501				err = json.Unmarshal(*v, &name)
21502				if err != nil {
21503					return err
21504				}
21505				pvg.Name = &name
21506			}
21507		case "type":
21508			if v != nil {
21509				var typeVar string
21510				err = json.Unmarshal(*v, &typeVar)
21511				if err != nil {
21512					return err
21513				}
21514				pvg.Type = &typeVar
21515			}
21516		case "location":
21517			if v != nil {
21518				var location string
21519				err = json.Unmarshal(*v, &location)
21520				if err != nil {
21521					return err
21522				}
21523				pvg.Location = &location
21524			}
21525		case "tags":
21526			if v != nil {
21527				var tags map[string]*string
21528				err = json.Unmarshal(*v, &tags)
21529				if err != nil {
21530					return err
21531				}
21532				pvg.Tags = tags
21533			}
21534		}
21535	}
21536
21537	return nil
21538}
21539
21540// P2SVpnGatewayProperties parameters for P2SVpnGateway.
21541type P2SVpnGatewayProperties struct {
21542	// VirtualHub - The VirtualHub to which the gateway belongs.
21543	VirtualHub *SubResource `json:"virtualHub,omitempty"`
21544	// P2SConnectionConfigurations - List of all p2s connection configurations of the gateway.
21545	P2SConnectionConfigurations *[]P2SConnectionConfiguration `json:"p2SConnectionConfigurations,omitempty"`
21546	// ProvisioningState - The provisioning state of the P2S VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21547	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21548	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
21549	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
21550	// VpnServerConfiguration - The VpnServerConfiguration to which the p2sVpnGateway is attached to.
21551	VpnServerConfiguration *SubResource `json:"vpnServerConfiguration,omitempty"`
21552	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
21553	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
21554}
21555
21556// P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21557// long-running operation.
21558type P2sVpnGatewaysCreateOrUpdateFuture struct {
21559	azure.Future
21560}
21561
21562// Result returns the result of the asynchronous operation.
21563// If the operation has not completed it will return an error.
21564func (future *P2sVpnGatewaysCreateOrUpdateFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
21565	var done bool
21566	done, err = future.DoneWithContext(context.Background(), client)
21567	if err != nil {
21568		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21569		return
21570	}
21571	if !done {
21572		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
21573		return
21574	}
21575	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21576	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
21577		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
21578		if err != nil {
21579			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
21580		}
21581	}
21582	return
21583}
21584
21585// P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21586// operation.
21587type P2sVpnGatewaysDeleteFuture struct {
21588	azure.Future
21589}
21590
21591// Result returns the result of the asynchronous operation.
21592// If the operation has not completed it will return an error.
21593func (future *P2sVpnGatewaysDeleteFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
21594	var done bool
21595	done, err = future.DoneWithContext(context.Background(), client)
21596	if err != nil {
21597		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
21598		return
21599	}
21600	if !done {
21601		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
21602		return
21603	}
21604	ar.Response = future.Response()
21605	return
21606}
21607
21608// P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
21609// long-running operation.
21610type P2sVpnGatewaysGenerateVpnProfileFuture struct {
21611	azure.Future
21612}
21613
21614// Result returns the result of the asynchronous operation.
21615// If the operation has not completed it will return an error.
21616func (future *P2sVpnGatewaysGenerateVpnProfileFuture) Result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
21617	var done bool
21618	done, err = future.DoneWithContext(context.Background(), client)
21619	if err != nil {
21620		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
21621		return
21622	}
21623	if !done {
21624		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
21625		return
21626	}
21627	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21628	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
21629		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
21630		if err != nil {
21631			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
21632		}
21633	}
21634	return
21635}
21636
21637// P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture an abstraction for monitoring and retrieving the
21638// results of a long-running operation.
21639type P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture struct {
21640	azure.Future
21641}
21642
21643// Result returns the result of the asynchronous operation.
21644// If the operation has not completed it will return an error.
21645func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture) Result(client P2sVpnGatewaysClient) (pvch P2SVpnConnectionHealth, err error) {
21646	var done bool
21647	done, err = future.DoneWithContext(context.Background(), client)
21648	if err != nil {
21649		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", future.Response(), "Polling failure")
21650		return
21651	}
21652	if !done {
21653		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture")
21654		return
21655	}
21656	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21657	if pvch.Response.Response, err = future.GetResult(sender); err == nil && pvch.Response.Response.StatusCode != http.StatusNoContent {
21658		pvch, err = client.GetP2sVpnConnectionHealthDetailedResponder(pvch.Response.Response)
21659		if err != nil {
21660			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", pvch.Response.Response, "Failure responding to request")
21661		}
21662	}
21663	return
21664}
21665
21666// P2sVpnGatewaysGetP2sVpnConnectionHealthFuture an abstraction for monitoring and retrieving the results
21667// of a long-running operation.
21668type P2sVpnGatewaysGetP2sVpnConnectionHealthFuture struct {
21669	azure.Future
21670}
21671
21672// Result returns the result of the asynchronous operation.
21673// If the operation has not completed it will return an error.
21674func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
21675	var done bool
21676	done, err = future.DoneWithContext(context.Background(), client)
21677	if err != nil {
21678		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", future.Response(), "Polling failure")
21679		return
21680	}
21681	if !done {
21682		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture")
21683		return
21684	}
21685	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21686	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
21687		pvg, err = client.GetP2sVpnConnectionHealthResponder(pvg.Response.Response)
21688		if err != nil {
21689			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", pvg.Response.Response, "Failure responding to request")
21690		}
21691	}
21692	return
21693}
21694
21695// P2sVpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
21696// long-running operation.
21697type P2sVpnGatewaysUpdateTagsFuture struct {
21698	azure.Future
21699}
21700
21701// Result returns the result of the asynchronous operation.
21702// If the operation has not completed it will return an error.
21703func (future *P2sVpnGatewaysUpdateTagsFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
21704	var done bool
21705	done, err = future.DoneWithContext(context.Background(), client)
21706	if err != nil {
21707		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
21708		return
21709	}
21710	if !done {
21711		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysUpdateTagsFuture")
21712		return
21713	}
21714	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21715	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
21716		pvg, err = client.UpdateTagsResponder(pvg.Response.Response)
21717		if err != nil {
21718			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", pvg.Response.Response, "Failure responding to request")
21719		}
21720	}
21721	return
21722}
21723
21724// P2SVpnProfileParameters vpn Client Parameters for package generation.
21725type P2SVpnProfileParameters struct {
21726	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
21727	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
21728}
21729
21730// PacketCapture parameters that define the create packet capture operation.
21731type PacketCapture struct {
21732	// PacketCaptureParameters - Properties of the packet capture.
21733	*PacketCaptureParameters `json:"properties,omitempty"`
21734}
21735
21736// MarshalJSON is the custom marshaler for PacketCapture.
21737func (pc PacketCapture) MarshalJSON() ([]byte, error) {
21738	objectMap := make(map[string]interface{})
21739	if pc.PacketCaptureParameters != nil {
21740		objectMap["properties"] = pc.PacketCaptureParameters
21741	}
21742	return json.Marshal(objectMap)
21743}
21744
21745// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
21746func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
21747	var m map[string]*json.RawMessage
21748	err := json.Unmarshal(body, &m)
21749	if err != nil {
21750		return err
21751	}
21752	for k, v := range m {
21753		switch k {
21754		case "properties":
21755			if v != nil {
21756				var packetCaptureParameters PacketCaptureParameters
21757				err = json.Unmarshal(*v, &packetCaptureParameters)
21758				if err != nil {
21759					return err
21760				}
21761				pc.PacketCaptureParameters = &packetCaptureParameters
21762			}
21763		}
21764	}
21765
21766	return nil
21767}
21768
21769// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
21770type PacketCaptureFilter struct {
21771	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
21772	Protocol PcProtocol `json:"protocol,omitempty"`
21773	// LocalIPAddress - Local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5"? for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
21774	LocalIPAddress *string `json:"localIPAddress,omitempty"`
21775	// RemoteIPAddress - Local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
21776	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
21777	// LocalPort - Local port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
21778	LocalPort *string `json:"localPort,omitempty"`
21779	// RemotePort - Remote port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
21780	RemotePort *string `json:"remotePort,omitempty"`
21781}
21782
21783// PacketCaptureListResult list of packet capture sessions.
21784type PacketCaptureListResult struct {
21785	autorest.Response `json:"-"`
21786	// Value - Information about packet capture sessions.
21787	Value *[]PacketCaptureResult `json:"value,omitempty"`
21788}
21789
21790// PacketCaptureParameters parameters that define the create packet capture operation.
21791type PacketCaptureParameters struct {
21792	// Target - The ID of the targeted resource, only VM is currently supported.
21793	Target *string `json:"target,omitempty"`
21794	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
21795	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
21796	// TotalBytesPerSession - Maximum size of the capture output.
21797	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
21798	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
21799	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
21800	// StorageLocation - Describes the storage location for a packet capture session.
21801	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
21802	// Filters - A list of packet capture filters.
21803	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
21804}
21805
21806// PacketCaptureQueryStatusResult status of packet capture session.
21807type PacketCaptureQueryStatusResult struct {
21808	autorest.Response `json:"-"`
21809	// Name - The name of the packet capture resource.
21810	Name *string `json:"name,omitempty"`
21811	// ID - The ID of the packet capture resource.
21812	ID *string `json:"id,omitempty"`
21813	// CaptureStartTime - The start time of the packet capture session.
21814	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
21815	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
21816	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
21817	// StopReason - The reason the current packet capture session was stopped.
21818	StopReason *string `json:"stopReason,omitempty"`
21819	// PacketCaptureError - List of errors of packet capture session.
21820	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
21821}
21822
21823// PacketCaptureResult information about packet capture session.
21824type PacketCaptureResult struct {
21825	autorest.Response `json:"-"`
21826	// Name - READ-ONLY; Name of the packet capture session.
21827	Name *string `json:"name,omitempty"`
21828	// ID - READ-ONLY; ID of the packet capture operation.
21829	ID *string `json:"id,omitempty"`
21830	// Etag - A unique read-only string that changes whenever the resource is updated.
21831	Etag *string `json:"etag,omitempty"`
21832	// PacketCaptureResultProperties - Properties of the packet capture result.
21833	*PacketCaptureResultProperties `json:"properties,omitempty"`
21834}
21835
21836// MarshalJSON is the custom marshaler for PacketCaptureResult.
21837func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
21838	objectMap := make(map[string]interface{})
21839	if pcr.Etag != nil {
21840		objectMap["etag"] = pcr.Etag
21841	}
21842	if pcr.PacketCaptureResultProperties != nil {
21843		objectMap["properties"] = pcr.PacketCaptureResultProperties
21844	}
21845	return json.Marshal(objectMap)
21846}
21847
21848// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
21849func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
21850	var m map[string]*json.RawMessage
21851	err := json.Unmarshal(body, &m)
21852	if err != nil {
21853		return err
21854	}
21855	for k, v := range m {
21856		switch k {
21857		case "name":
21858			if v != nil {
21859				var name string
21860				err = json.Unmarshal(*v, &name)
21861				if err != nil {
21862					return err
21863				}
21864				pcr.Name = &name
21865			}
21866		case "id":
21867			if v != nil {
21868				var ID string
21869				err = json.Unmarshal(*v, &ID)
21870				if err != nil {
21871					return err
21872				}
21873				pcr.ID = &ID
21874			}
21875		case "etag":
21876			if v != nil {
21877				var etag string
21878				err = json.Unmarshal(*v, &etag)
21879				if err != nil {
21880					return err
21881				}
21882				pcr.Etag = &etag
21883			}
21884		case "properties":
21885			if v != nil {
21886				var packetCaptureResultProperties PacketCaptureResultProperties
21887				err = json.Unmarshal(*v, &packetCaptureResultProperties)
21888				if err != nil {
21889					return err
21890				}
21891				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
21892			}
21893		}
21894	}
21895
21896	return nil
21897}
21898
21899// PacketCaptureResultProperties describes the properties of a packet capture session.
21900type PacketCaptureResultProperties struct {
21901	// ProvisioningState - The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21902	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21903	// Target - The ID of the targeted resource, only VM is currently supported.
21904	Target *string `json:"target,omitempty"`
21905	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
21906	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
21907	// TotalBytesPerSession - Maximum size of the capture output.
21908	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
21909	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
21910	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
21911	// StorageLocation - Describes the storage location for a packet capture session.
21912	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
21913	// Filters - A list of packet capture filters.
21914	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
21915}
21916
21917// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
21918// operation.
21919type PacketCapturesCreateFuture struct {
21920	azure.Future
21921}
21922
21923// Result returns the result of the asynchronous operation.
21924// If the operation has not completed it will return an error.
21925func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
21926	var done bool
21927	done, err = future.DoneWithContext(context.Background(), client)
21928	if err != nil {
21929		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
21930		return
21931	}
21932	if !done {
21933		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
21934		return
21935	}
21936	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21937	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
21938		pcr, err = client.CreateResponder(pcr.Response.Response)
21939		if err != nil {
21940			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
21941		}
21942	}
21943	return
21944}
21945
21946// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21947// operation.
21948type PacketCapturesDeleteFuture struct {
21949	azure.Future
21950}
21951
21952// Result returns the result of the asynchronous operation.
21953// If the operation has not completed it will return an error.
21954func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
21955	var done bool
21956	done, err = future.DoneWithContext(context.Background(), client)
21957	if err != nil {
21958		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
21959		return
21960	}
21961	if !done {
21962		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
21963		return
21964	}
21965	ar.Response = future.Response()
21966	return
21967}
21968
21969// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
21970// operation.
21971type PacketCapturesGetStatusFuture struct {
21972	azure.Future
21973}
21974
21975// Result returns the result of the asynchronous operation.
21976// If the operation has not completed it will return an error.
21977func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
21978	var done bool
21979	done, err = future.DoneWithContext(context.Background(), client)
21980	if err != nil {
21981		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
21982		return
21983	}
21984	if !done {
21985		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
21986		return
21987	}
21988	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21989	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
21990		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
21991		if err != nil {
21992			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
21993		}
21994	}
21995	return
21996}
21997
21998// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
21999// operation.
22000type PacketCapturesStopFuture struct {
22001	azure.Future
22002}
22003
22004// Result returns the result of the asynchronous operation.
22005// If the operation has not completed it will return an error.
22006func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
22007	var done bool
22008	done, err = future.DoneWithContext(context.Background(), client)
22009	if err != nil {
22010		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
22011		return
22012	}
22013	if !done {
22014		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
22015		return
22016	}
22017	ar.Response = future.Response()
22018	return
22019}
22020
22021// PacketCaptureStorageLocation describes the storage location for a packet capture session.
22022type PacketCaptureStorageLocation struct {
22023	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
22024	StorageID *string `json:"storageId,omitempty"`
22025	// StoragePath - The URI of the storage path to save the packet capture. Must be a well-formed URI describing the location to save the packet capture.
22026	StoragePath *string `json:"storagePath,omitempty"`
22027	// FilePath - A valid local path on the targeting VM. Must include the name of the capture file (*.cap). For linux virtual machine it must start with /var/captures. Required if no storage ID is provided, otherwise optional.
22028	FilePath *string `json:"filePath,omitempty"`
22029}
22030
22031// PatchRouteFilter route Filter Resource.
22032type PatchRouteFilter struct {
22033	// RouteFilterPropertiesFormat - Properties of the route filter.
22034	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
22035	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
22036	Name *string `json:"name,omitempty"`
22037	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22038	Etag *string `json:"etag,omitempty"`
22039	// Type - READ-ONLY; Resource type.
22040	Type *string `json:"type,omitempty"`
22041	// Tags - Resource tags.
22042	Tags map[string]*string `json:"tags"`
22043	// ID - Resource ID.
22044	ID *string `json:"id,omitempty"`
22045}
22046
22047// MarshalJSON is the custom marshaler for PatchRouteFilter.
22048func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
22049	objectMap := make(map[string]interface{})
22050	if prf.RouteFilterPropertiesFormat != nil {
22051		objectMap["properties"] = prf.RouteFilterPropertiesFormat
22052	}
22053	if prf.Tags != nil {
22054		objectMap["tags"] = prf.Tags
22055	}
22056	if prf.ID != nil {
22057		objectMap["id"] = prf.ID
22058	}
22059	return json.Marshal(objectMap)
22060}
22061
22062// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
22063func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
22064	var m map[string]*json.RawMessage
22065	err := json.Unmarshal(body, &m)
22066	if err != nil {
22067		return err
22068	}
22069	for k, v := range m {
22070		switch k {
22071		case "properties":
22072			if v != nil {
22073				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
22074				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
22075				if err != nil {
22076					return err
22077				}
22078				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
22079			}
22080		case "name":
22081			if v != nil {
22082				var name string
22083				err = json.Unmarshal(*v, &name)
22084				if err != nil {
22085					return err
22086				}
22087				prf.Name = &name
22088			}
22089		case "etag":
22090			if v != nil {
22091				var etag string
22092				err = json.Unmarshal(*v, &etag)
22093				if err != nil {
22094					return err
22095				}
22096				prf.Etag = &etag
22097			}
22098		case "type":
22099			if v != nil {
22100				var typeVar string
22101				err = json.Unmarshal(*v, &typeVar)
22102				if err != nil {
22103					return err
22104				}
22105				prf.Type = &typeVar
22106			}
22107		case "tags":
22108			if v != nil {
22109				var tags map[string]*string
22110				err = json.Unmarshal(*v, &tags)
22111				if err != nil {
22112					return err
22113				}
22114				prf.Tags = tags
22115			}
22116		case "id":
22117			if v != nil {
22118				var ID string
22119				err = json.Unmarshal(*v, &ID)
22120				if err != nil {
22121					return err
22122				}
22123				prf.ID = &ID
22124			}
22125		}
22126	}
22127
22128	return nil
22129}
22130
22131// PatchRouteFilterRule route Filter Rule Resource.
22132type PatchRouteFilterRule struct {
22133	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
22134	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
22135	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
22136	Name *string `json:"name,omitempty"`
22137	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22138	Etag *string `json:"etag,omitempty"`
22139	// ID - Resource ID.
22140	ID *string `json:"id,omitempty"`
22141}
22142
22143// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
22144func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
22145	objectMap := make(map[string]interface{})
22146	if prfr.RouteFilterRulePropertiesFormat != nil {
22147		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
22148	}
22149	if prfr.ID != nil {
22150		objectMap["id"] = prfr.ID
22151	}
22152	return json.Marshal(objectMap)
22153}
22154
22155// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
22156func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
22157	var m map[string]*json.RawMessage
22158	err := json.Unmarshal(body, &m)
22159	if err != nil {
22160		return err
22161	}
22162	for k, v := range m {
22163		switch k {
22164		case "properties":
22165			if v != nil {
22166				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
22167				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
22168				if err != nil {
22169					return err
22170				}
22171				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
22172			}
22173		case "name":
22174			if v != nil {
22175				var name string
22176				err = json.Unmarshal(*v, &name)
22177				if err != nil {
22178					return err
22179				}
22180				prfr.Name = &name
22181			}
22182		case "etag":
22183			if v != nil {
22184				var etag string
22185				err = json.Unmarshal(*v, &etag)
22186				if err != nil {
22187					return err
22188				}
22189				prfr.Etag = &etag
22190			}
22191		case "id":
22192			if v != nil {
22193				var ID string
22194				err = json.Unmarshal(*v, &ID)
22195				if err != nil {
22196					return err
22197				}
22198				prfr.ID = &ID
22199			}
22200		}
22201	}
22202
22203	return nil
22204}
22205
22206// PeerExpressRouteCircuitConnection peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
22207// resource.
22208type PeerExpressRouteCircuitConnection struct {
22209	autorest.Response `json:"-"`
22210	// PeerExpressRouteCircuitConnectionPropertiesFormat - Properties of the peer express route circuit connection.
22211	*PeerExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
22212	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
22213	Name *string `json:"name,omitempty"`
22214	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22215	Etag *string `json:"etag,omitempty"`
22216	// Type - READ-ONLY; Type of the resource.
22217	Type *string `json:"type,omitempty"`
22218	// ID - Resource ID.
22219	ID *string `json:"id,omitempty"`
22220}
22221
22222// MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnection.
22223func (percc PeerExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
22224	objectMap := make(map[string]interface{})
22225	if percc.PeerExpressRouteCircuitConnectionPropertiesFormat != nil {
22226		objectMap["properties"] = percc.PeerExpressRouteCircuitConnectionPropertiesFormat
22227	}
22228	if percc.Name != nil {
22229		objectMap["name"] = percc.Name
22230	}
22231	if percc.ID != nil {
22232		objectMap["id"] = percc.ID
22233	}
22234	return json.Marshal(objectMap)
22235}
22236
22237// UnmarshalJSON is the custom unmarshaler for PeerExpressRouteCircuitConnection struct.
22238func (percc *PeerExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
22239	var m map[string]*json.RawMessage
22240	err := json.Unmarshal(body, &m)
22241	if err != nil {
22242		return err
22243	}
22244	for k, v := range m {
22245		switch k {
22246		case "properties":
22247			if v != nil {
22248				var peerExpressRouteCircuitConnectionPropertiesFormat PeerExpressRouteCircuitConnectionPropertiesFormat
22249				err = json.Unmarshal(*v, &peerExpressRouteCircuitConnectionPropertiesFormat)
22250				if err != nil {
22251					return err
22252				}
22253				percc.PeerExpressRouteCircuitConnectionPropertiesFormat = &peerExpressRouteCircuitConnectionPropertiesFormat
22254			}
22255		case "name":
22256			if v != nil {
22257				var name string
22258				err = json.Unmarshal(*v, &name)
22259				if err != nil {
22260					return err
22261				}
22262				percc.Name = &name
22263			}
22264		case "etag":
22265			if v != nil {
22266				var etag string
22267				err = json.Unmarshal(*v, &etag)
22268				if err != nil {
22269					return err
22270				}
22271				percc.Etag = &etag
22272			}
22273		case "type":
22274			if v != nil {
22275				var typeVar string
22276				err = json.Unmarshal(*v, &typeVar)
22277				if err != nil {
22278					return err
22279				}
22280				percc.Type = &typeVar
22281			}
22282		case "id":
22283			if v != nil {
22284				var ID string
22285				err = json.Unmarshal(*v, &ID)
22286				if err != nil {
22287					return err
22288				}
22289				percc.ID = &ID
22290			}
22291		}
22292	}
22293
22294	return nil
22295}
22296
22297// PeerExpressRouteCircuitConnectionListResult response for ListPeeredConnections API service call
22298// retrieves all global reach peer circuit connections that belongs to a Private Peering for an
22299// ExpressRouteCircuit.
22300type PeerExpressRouteCircuitConnectionListResult struct {
22301	autorest.Response `json:"-"`
22302	// Value - The global reach peer circuit connection associated with Private Peering in an ExpressRoute Circuit.
22303	Value *[]PeerExpressRouteCircuitConnection `json:"value,omitempty"`
22304	// NextLink - The URL to get the next set of results.
22305	NextLink *string `json:"nextLink,omitempty"`
22306}
22307
22308// PeerExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
22309// PeerExpressRouteCircuitConnection values.
22310type PeerExpressRouteCircuitConnectionListResultIterator struct {
22311	i    int
22312	page PeerExpressRouteCircuitConnectionListResultPage
22313}
22314
22315// NextWithContext advances to the next value.  If there was an error making
22316// the request the iterator does not advance and the error is returned.
22317func (iter *PeerExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
22318	if tracing.IsEnabled() {
22319		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultIterator.NextWithContext")
22320		defer func() {
22321			sc := -1
22322			if iter.Response().Response.Response != nil {
22323				sc = iter.Response().Response.Response.StatusCode
22324			}
22325			tracing.EndSpan(ctx, sc, err)
22326		}()
22327	}
22328	iter.i++
22329	if iter.i < len(iter.page.Values()) {
22330		return nil
22331	}
22332	err = iter.page.NextWithContext(ctx)
22333	if err != nil {
22334		iter.i--
22335		return err
22336	}
22337	iter.i = 0
22338	return nil
22339}
22340
22341// Next advances to the next value.  If there was an error making
22342// the request the iterator does not advance and the error is returned.
22343// Deprecated: Use NextWithContext() instead.
22344func (iter *PeerExpressRouteCircuitConnectionListResultIterator) Next() error {
22345	return iter.NextWithContext(context.Background())
22346}
22347
22348// NotDone returns true if the enumeration should be started or is not yet complete.
22349func (iter PeerExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
22350	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22351}
22352
22353// Response returns the raw server response from the last page request.
22354func (iter PeerExpressRouteCircuitConnectionListResultIterator) Response() PeerExpressRouteCircuitConnectionListResult {
22355	return iter.page.Response()
22356}
22357
22358// Value returns the current value or a zero-initialized value if the
22359// iterator has advanced beyond the end of the collection.
22360func (iter PeerExpressRouteCircuitConnectionListResultIterator) Value() PeerExpressRouteCircuitConnection {
22361	if !iter.page.NotDone() {
22362		return PeerExpressRouteCircuitConnection{}
22363	}
22364	return iter.page.Values()[iter.i]
22365}
22366
22367// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultIterator type.
22368func NewPeerExpressRouteCircuitConnectionListResultIterator(page PeerExpressRouteCircuitConnectionListResultPage) PeerExpressRouteCircuitConnectionListResultIterator {
22369	return PeerExpressRouteCircuitConnectionListResultIterator{page: page}
22370}
22371
22372// IsEmpty returns true if the ListResult contains no values.
22373func (percclr PeerExpressRouteCircuitConnectionListResult) IsEmpty() bool {
22374	return percclr.Value == nil || len(*percclr.Value) == 0
22375}
22376
22377// peerExpressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
22378// It returns nil if no more results exist.
22379func (percclr PeerExpressRouteCircuitConnectionListResult) peerExpressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
22380	if percclr.NextLink == nil || len(to.String(percclr.NextLink)) < 1 {
22381		return nil, nil
22382	}
22383	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22384		autorest.AsJSON(),
22385		autorest.AsGet(),
22386		autorest.WithBaseURL(to.String(percclr.NextLink)))
22387}
22388
22389// PeerExpressRouteCircuitConnectionListResultPage contains a page of PeerExpressRouteCircuitConnection
22390// values.
22391type PeerExpressRouteCircuitConnectionListResultPage struct {
22392	fn      func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)
22393	percclr PeerExpressRouteCircuitConnectionListResult
22394}
22395
22396// NextWithContext advances to the next page of values.  If there was an error making
22397// the request the page does not advance and the error is returned.
22398func (page *PeerExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
22399	if tracing.IsEnabled() {
22400		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultPage.NextWithContext")
22401		defer func() {
22402			sc := -1
22403			if page.Response().Response.Response != nil {
22404				sc = page.Response().Response.Response.StatusCode
22405			}
22406			tracing.EndSpan(ctx, sc, err)
22407		}()
22408	}
22409	next, err := page.fn(ctx, page.percclr)
22410	if err != nil {
22411		return err
22412	}
22413	page.percclr = next
22414	return nil
22415}
22416
22417// Next advances to the next page of values.  If there was an error making
22418// the request the page does not advance and the error is returned.
22419// Deprecated: Use NextWithContext() instead.
22420func (page *PeerExpressRouteCircuitConnectionListResultPage) Next() error {
22421	return page.NextWithContext(context.Background())
22422}
22423
22424// NotDone returns true if the page enumeration should be started or is not yet complete.
22425func (page PeerExpressRouteCircuitConnectionListResultPage) NotDone() bool {
22426	return !page.percclr.IsEmpty()
22427}
22428
22429// Response returns the raw server response from the last page request.
22430func (page PeerExpressRouteCircuitConnectionListResultPage) Response() PeerExpressRouteCircuitConnectionListResult {
22431	return page.percclr
22432}
22433
22434// Values returns the slice of values for the current page or nil if there are no values.
22435func (page PeerExpressRouteCircuitConnectionListResultPage) Values() []PeerExpressRouteCircuitConnection {
22436	if page.percclr.IsEmpty() {
22437		return nil
22438	}
22439	return *page.percclr.Value
22440}
22441
22442// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultPage type.
22443func NewPeerExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)) PeerExpressRouteCircuitConnectionListResultPage {
22444	return PeerExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
22445}
22446
22447// PeerExpressRouteCircuitConnectionPropertiesFormat properties of the peer express route circuit
22448// connection.
22449type PeerExpressRouteCircuitConnectionPropertiesFormat struct {
22450	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit.
22451	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
22452	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
22453	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
22454	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
22455	AddressPrefix *string `json:"addressPrefix,omitempty"`
22456	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
22457	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
22458	// ConnectionName - The name of the express route circuit connection resource.
22459	ConnectionName *string `json:"connectionName,omitempty"`
22460	// AuthResourceGUID - The resource guid of the authorization used for the express route circuit connection.
22461	AuthResourceGUID *string `json:"authResourceGuid,omitempty"`
22462	// ProvisioningState - READ-ONLY; The provisioning state of the peer express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22463	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22464}
22465
22466// PolicySettings defines contents of a web application firewall global configuration.
22467type PolicySettings struct {
22468	// State - Describes if the policy is in enabled state or disabled state. Possible values include: 'WebApplicationFirewallEnabledStateDisabled', 'WebApplicationFirewallEnabledStateEnabled'
22469	State WebApplicationFirewallEnabledState `json:"state,omitempty"`
22470	// Mode - Describes if it is in detection mode or prevention mode at policy level. Possible values include: 'WebApplicationFirewallModePrevention', 'WebApplicationFirewallModeDetection'
22471	Mode WebApplicationFirewallMode `json:"mode,omitempty"`
22472	// RequestBodyCheck - Whether to allow WAF to check request Body.
22473	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
22474	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
22475	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
22476	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
22477	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
22478}
22479
22480// PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet.
22481type PrepareNetworkPoliciesRequest struct {
22482	// ServiceName - The name of the service for which subnet is being prepared for.
22483	ServiceName *string `json:"serviceName,omitempty"`
22484	// NetworkIntentPolicyConfigurations - A list of NetworkIntentPolicyConfiguration.
22485	NetworkIntentPolicyConfigurations *[]IntentPolicyConfiguration `json:"networkIntentPolicyConfigurations,omitempty"`
22486}
22487
22488// PrivateEndpoint private endpoint resource.
22489type PrivateEndpoint struct {
22490	autorest.Response `json:"-"`
22491	// PrivateEndpointProperties - Properties of the private endpoint.
22492	*PrivateEndpointProperties `json:"properties,omitempty"`
22493	// Etag - A unique read-only string that changes whenever the resource is updated.
22494	Etag *string `json:"etag,omitempty"`
22495	// ID - Resource ID.
22496	ID *string `json:"id,omitempty"`
22497	// Name - READ-ONLY; Resource name.
22498	Name *string `json:"name,omitempty"`
22499	// Type - READ-ONLY; Resource type.
22500	Type *string `json:"type,omitempty"`
22501	// Location - Resource location.
22502	Location *string `json:"location,omitempty"`
22503	// Tags - Resource tags.
22504	Tags map[string]*string `json:"tags"`
22505}
22506
22507// MarshalJSON is the custom marshaler for PrivateEndpoint.
22508func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) {
22509	objectMap := make(map[string]interface{})
22510	if peVar.PrivateEndpointProperties != nil {
22511		objectMap["properties"] = peVar.PrivateEndpointProperties
22512	}
22513	if peVar.Etag != nil {
22514		objectMap["etag"] = peVar.Etag
22515	}
22516	if peVar.ID != nil {
22517		objectMap["id"] = peVar.ID
22518	}
22519	if peVar.Location != nil {
22520		objectMap["location"] = peVar.Location
22521	}
22522	if peVar.Tags != nil {
22523		objectMap["tags"] = peVar.Tags
22524	}
22525	return json.Marshal(objectMap)
22526}
22527
22528// UnmarshalJSON is the custom unmarshaler for PrivateEndpoint struct.
22529func (peVar *PrivateEndpoint) UnmarshalJSON(body []byte) error {
22530	var m map[string]*json.RawMessage
22531	err := json.Unmarshal(body, &m)
22532	if err != nil {
22533		return err
22534	}
22535	for k, v := range m {
22536		switch k {
22537		case "properties":
22538			if v != nil {
22539				var privateEndpointProperties PrivateEndpointProperties
22540				err = json.Unmarshal(*v, &privateEndpointProperties)
22541				if err != nil {
22542					return err
22543				}
22544				peVar.PrivateEndpointProperties = &privateEndpointProperties
22545			}
22546		case "etag":
22547			if v != nil {
22548				var etag string
22549				err = json.Unmarshal(*v, &etag)
22550				if err != nil {
22551					return err
22552				}
22553				peVar.Etag = &etag
22554			}
22555		case "id":
22556			if v != nil {
22557				var ID string
22558				err = json.Unmarshal(*v, &ID)
22559				if err != nil {
22560					return err
22561				}
22562				peVar.ID = &ID
22563			}
22564		case "name":
22565			if v != nil {
22566				var name string
22567				err = json.Unmarshal(*v, &name)
22568				if err != nil {
22569					return err
22570				}
22571				peVar.Name = &name
22572			}
22573		case "type":
22574			if v != nil {
22575				var typeVar string
22576				err = json.Unmarshal(*v, &typeVar)
22577				if err != nil {
22578					return err
22579				}
22580				peVar.Type = &typeVar
22581			}
22582		case "location":
22583			if v != nil {
22584				var location string
22585				err = json.Unmarshal(*v, &location)
22586				if err != nil {
22587					return err
22588				}
22589				peVar.Location = &location
22590			}
22591		case "tags":
22592			if v != nil {
22593				var tags map[string]*string
22594				err = json.Unmarshal(*v, &tags)
22595				if err != nil {
22596					return err
22597				}
22598				peVar.Tags = tags
22599			}
22600		}
22601	}
22602
22603	return nil
22604}
22605
22606// PrivateEndpointConnection privateEndpointConnection resource.
22607type PrivateEndpointConnection struct {
22608	autorest.Response `json:"-"`
22609	// PrivateEndpointConnectionProperties - Properties of the private end point connection.
22610	*PrivateEndpointConnectionProperties `json:"properties,omitempty"`
22611	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
22612	Name *string `json:"name,omitempty"`
22613	// Type - READ-ONLY; The resource type.
22614	Type *string `json:"type,omitempty"`
22615	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22616	Etag *string `json:"etag,omitempty"`
22617	// ID - Resource ID.
22618	ID *string `json:"id,omitempty"`
22619}
22620
22621// MarshalJSON is the custom marshaler for PrivateEndpointConnection.
22622func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) {
22623	objectMap := make(map[string]interface{})
22624	if pec.PrivateEndpointConnectionProperties != nil {
22625		objectMap["properties"] = pec.PrivateEndpointConnectionProperties
22626	}
22627	if pec.Name != nil {
22628		objectMap["name"] = pec.Name
22629	}
22630	if pec.ID != nil {
22631		objectMap["id"] = pec.ID
22632	}
22633	return json.Marshal(objectMap)
22634}
22635
22636// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct.
22637func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error {
22638	var m map[string]*json.RawMessage
22639	err := json.Unmarshal(body, &m)
22640	if err != nil {
22641		return err
22642	}
22643	for k, v := range m {
22644		switch k {
22645		case "properties":
22646			if v != nil {
22647				var privateEndpointConnectionProperties PrivateEndpointConnectionProperties
22648				err = json.Unmarshal(*v, &privateEndpointConnectionProperties)
22649				if err != nil {
22650					return err
22651				}
22652				pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties
22653			}
22654		case "name":
22655			if v != nil {
22656				var name string
22657				err = json.Unmarshal(*v, &name)
22658				if err != nil {
22659					return err
22660				}
22661				pec.Name = &name
22662			}
22663		case "type":
22664			if v != nil {
22665				var typeVar string
22666				err = json.Unmarshal(*v, &typeVar)
22667				if err != nil {
22668					return err
22669				}
22670				pec.Type = &typeVar
22671			}
22672		case "etag":
22673			if v != nil {
22674				var etag string
22675				err = json.Unmarshal(*v, &etag)
22676				if err != nil {
22677					return err
22678				}
22679				pec.Etag = &etag
22680			}
22681		case "id":
22682			if v != nil {
22683				var ID string
22684				err = json.Unmarshal(*v, &ID)
22685				if err != nil {
22686					return err
22687				}
22688				pec.ID = &ID
22689			}
22690		}
22691	}
22692
22693	return nil
22694}
22695
22696// PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties.
22697type PrivateEndpointConnectionProperties struct {
22698	// PrivateEndpoint - The resource of private end point.
22699	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
22700	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
22701	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
22702	// ProvisioningState - The provisioning state of the private endpoint connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22703	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22704}
22705
22706// PrivateEndpointListResult response for the ListPrivateEndpoints API service call.
22707type PrivateEndpointListResult struct {
22708	autorest.Response `json:"-"`
22709	// Value - A list of private endpoint resources in a resource group.
22710	Value *[]PrivateEndpoint `json:"value,omitempty"`
22711	// NextLink - READ-ONLY; The URL to get the next set of results.
22712	NextLink *string `json:"nextLink,omitempty"`
22713}
22714
22715// PrivateEndpointListResultIterator provides access to a complete listing of PrivateEndpoint values.
22716type PrivateEndpointListResultIterator struct {
22717	i    int
22718	page PrivateEndpointListResultPage
22719}
22720
22721// NextWithContext advances to the next value.  If there was an error making
22722// the request the iterator does not advance and the error is returned.
22723func (iter *PrivateEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
22724	if tracing.IsEnabled() {
22725		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultIterator.NextWithContext")
22726		defer func() {
22727			sc := -1
22728			if iter.Response().Response.Response != nil {
22729				sc = iter.Response().Response.Response.StatusCode
22730			}
22731			tracing.EndSpan(ctx, sc, err)
22732		}()
22733	}
22734	iter.i++
22735	if iter.i < len(iter.page.Values()) {
22736		return nil
22737	}
22738	err = iter.page.NextWithContext(ctx)
22739	if err != nil {
22740		iter.i--
22741		return err
22742	}
22743	iter.i = 0
22744	return nil
22745}
22746
22747// Next advances to the next value.  If there was an error making
22748// the request the iterator does not advance and the error is returned.
22749// Deprecated: Use NextWithContext() instead.
22750func (iter *PrivateEndpointListResultIterator) Next() error {
22751	return iter.NextWithContext(context.Background())
22752}
22753
22754// NotDone returns true if the enumeration should be started or is not yet complete.
22755func (iter PrivateEndpointListResultIterator) NotDone() bool {
22756	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22757}
22758
22759// Response returns the raw server response from the last page request.
22760func (iter PrivateEndpointListResultIterator) Response() PrivateEndpointListResult {
22761	return iter.page.Response()
22762}
22763
22764// Value returns the current value or a zero-initialized value if the
22765// iterator has advanced beyond the end of the collection.
22766func (iter PrivateEndpointListResultIterator) Value() PrivateEndpoint {
22767	if !iter.page.NotDone() {
22768		return PrivateEndpoint{}
22769	}
22770	return iter.page.Values()[iter.i]
22771}
22772
22773// Creates a new instance of the PrivateEndpointListResultIterator type.
22774func NewPrivateEndpointListResultIterator(page PrivateEndpointListResultPage) PrivateEndpointListResultIterator {
22775	return PrivateEndpointListResultIterator{page: page}
22776}
22777
22778// IsEmpty returns true if the ListResult contains no values.
22779func (pelr PrivateEndpointListResult) IsEmpty() bool {
22780	return pelr.Value == nil || len(*pelr.Value) == 0
22781}
22782
22783// privateEndpointListResultPreparer prepares a request to retrieve the next set of results.
22784// It returns nil if no more results exist.
22785func (pelr PrivateEndpointListResult) privateEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
22786	if pelr.NextLink == nil || len(to.String(pelr.NextLink)) < 1 {
22787		return nil, nil
22788	}
22789	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22790		autorest.AsJSON(),
22791		autorest.AsGet(),
22792		autorest.WithBaseURL(to.String(pelr.NextLink)))
22793}
22794
22795// PrivateEndpointListResultPage contains a page of PrivateEndpoint values.
22796type PrivateEndpointListResultPage struct {
22797	fn   func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)
22798	pelr PrivateEndpointListResult
22799}
22800
22801// NextWithContext advances to the next page of values.  If there was an error making
22802// the request the page does not advance and the error is returned.
22803func (page *PrivateEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
22804	if tracing.IsEnabled() {
22805		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultPage.NextWithContext")
22806		defer func() {
22807			sc := -1
22808			if page.Response().Response.Response != nil {
22809				sc = page.Response().Response.Response.StatusCode
22810			}
22811			tracing.EndSpan(ctx, sc, err)
22812		}()
22813	}
22814	next, err := page.fn(ctx, page.pelr)
22815	if err != nil {
22816		return err
22817	}
22818	page.pelr = next
22819	return nil
22820}
22821
22822// Next advances to the next page of values.  If there was an error making
22823// the request the page does not advance and the error is returned.
22824// Deprecated: Use NextWithContext() instead.
22825func (page *PrivateEndpointListResultPage) Next() error {
22826	return page.NextWithContext(context.Background())
22827}
22828
22829// NotDone returns true if the page enumeration should be started or is not yet complete.
22830func (page PrivateEndpointListResultPage) NotDone() bool {
22831	return !page.pelr.IsEmpty()
22832}
22833
22834// Response returns the raw server response from the last page request.
22835func (page PrivateEndpointListResultPage) Response() PrivateEndpointListResult {
22836	return page.pelr
22837}
22838
22839// Values returns the slice of values for the current page or nil if there are no values.
22840func (page PrivateEndpointListResultPage) Values() []PrivateEndpoint {
22841	if page.pelr.IsEmpty() {
22842		return nil
22843	}
22844	return *page.pelr.Value
22845}
22846
22847// Creates a new instance of the PrivateEndpointListResultPage type.
22848func NewPrivateEndpointListResultPage(getNextPage func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)) PrivateEndpointListResultPage {
22849	return PrivateEndpointListResultPage{fn: getNextPage}
22850}
22851
22852// PrivateEndpointProperties properties of the private endpoint.
22853type PrivateEndpointProperties struct {
22854	// Subnet - The ID of the subnet from which the private IP will be allocated.
22855	Subnet *Subnet `json:"subnet,omitempty"`
22856	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private endpoint.
22857	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
22858	// ProvisioningState - The provisioning state of the private endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22859	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22860	// PrivateLinkServiceConnections - A grouping of information about the connection to the remote resource.
22861	PrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"privateLinkServiceConnections,omitempty"`
22862	// ManualPrivateLinkServiceConnections - A grouping of information about the connection to the remote resource. Used when the network admin does not have access to approve connections to the remote resource.
22863	ManualPrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"manualPrivateLinkServiceConnections,omitempty"`
22864}
22865
22866// PrivateEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22867// long-running operation.
22868type PrivateEndpointsCreateOrUpdateFuture struct {
22869	azure.Future
22870}
22871
22872// Result returns the result of the asynchronous operation.
22873// If the operation has not completed it will return an error.
22874func (future *PrivateEndpointsCreateOrUpdateFuture) Result(client PrivateEndpointsClient) (peVar PrivateEndpoint, err error) {
22875	var done bool
22876	done, err = future.DoneWithContext(context.Background(), client)
22877	if err != nil {
22878		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22879		return
22880	}
22881	if !done {
22882		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsCreateOrUpdateFuture")
22883		return
22884	}
22885	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22886	if peVar.Response.Response, err = future.GetResult(sender); err == nil && peVar.Response.Response.StatusCode != http.StatusNoContent {
22887		peVar, err = client.CreateOrUpdateResponder(peVar.Response.Response)
22888		if err != nil {
22889			err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", peVar.Response.Response, "Failure responding to request")
22890		}
22891	}
22892	return
22893}
22894
22895// PrivateEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22896// operation.
22897type PrivateEndpointsDeleteFuture struct {
22898	azure.Future
22899}
22900
22901// Result returns the result of the asynchronous operation.
22902// If the operation has not completed it will return an error.
22903func (future *PrivateEndpointsDeleteFuture) Result(client PrivateEndpointsClient) (ar autorest.Response, err error) {
22904	var done bool
22905	done, err = future.DoneWithContext(context.Background(), client)
22906	if err != nil {
22907		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
22908		return
22909	}
22910	if !done {
22911		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsDeleteFuture")
22912		return
22913	}
22914	ar.Response = future.Response()
22915	return
22916}
22917
22918// PrivateLinkService private link service resource.
22919type PrivateLinkService struct {
22920	autorest.Response `json:"-"`
22921	// PrivateLinkServiceProperties - Properties of the private link service.
22922	*PrivateLinkServiceProperties `json:"properties,omitempty"`
22923	// Etag - A unique read-only string that changes whenever the resource is updated.
22924	Etag *string `json:"etag,omitempty"`
22925	// ID - Resource ID.
22926	ID *string `json:"id,omitempty"`
22927	// Name - READ-ONLY; Resource name.
22928	Name *string `json:"name,omitempty"`
22929	// Type - READ-ONLY; Resource type.
22930	Type *string `json:"type,omitempty"`
22931	// Location - Resource location.
22932	Location *string `json:"location,omitempty"`
22933	// Tags - Resource tags.
22934	Tags map[string]*string `json:"tags"`
22935}
22936
22937// MarshalJSON is the custom marshaler for PrivateLinkService.
22938func (pls PrivateLinkService) MarshalJSON() ([]byte, error) {
22939	objectMap := make(map[string]interface{})
22940	if pls.PrivateLinkServiceProperties != nil {
22941		objectMap["properties"] = pls.PrivateLinkServiceProperties
22942	}
22943	if pls.Etag != nil {
22944		objectMap["etag"] = pls.Etag
22945	}
22946	if pls.ID != nil {
22947		objectMap["id"] = pls.ID
22948	}
22949	if pls.Location != nil {
22950		objectMap["location"] = pls.Location
22951	}
22952	if pls.Tags != nil {
22953		objectMap["tags"] = pls.Tags
22954	}
22955	return json.Marshal(objectMap)
22956}
22957
22958// UnmarshalJSON is the custom unmarshaler for PrivateLinkService struct.
22959func (pls *PrivateLinkService) UnmarshalJSON(body []byte) error {
22960	var m map[string]*json.RawMessage
22961	err := json.Unmarshal(body, &m)
22962	if err != nil {
22963		return err
22964	}
22965	for k, v := range m {
22966		switch k {
22967		case "properties":
22968			if v != nil {
22969				var privateLinkServiceProperties PrivateLinkServiceProperties
22970				err = json.Unmarshal(*v, &privateLinkServiceProperties)
22971				if err != nil {
22972					return err
22973				}
22974				pls.PrivateLinkServiceProperties = &privateLinkServiceProperties
22975			}
22976		case "etag":
22977			if v != nil {
22978				var etag string
22979				err = json.Unmarshal(*v, &etag)
22980				if err != nil {
22981					return err
22982				}
22983				pls.Etag = &etag
22984			}
22985		case "id":
22986			if v != nil {
22987				var ID string
22988				err = json.Unmarshal(*v, &ID)
22989				if err != nil {
22990					return err
22991				}
22992				pls.ID = &ID
22993			}
22994		case "name":
22995			if v != nil {
22996				var name string
22997				err = json.Unmarshal(*v, &name)
22998				if err != nil {
22999					return err
23000				}
23001				pls.Name = &name
23002			}
23003		case "type":
23004			if v != nil {
23005				var typeVar string
23006				err = json.Unmarshal(*v, &typeVar)
23007				if err != nil {
23008					return err
23009				}
23010				pls.Type = &typeVar
23011			}
23012		case "location":
23013			if v != nil {
23014				var location string
23015				err = json.Unmarshal(*v, &location)
23016				if err != nil {
23017					return err
23018				}
23019				pls.Location = &location
23020			}
23021		case "tags":
23022			if v != nil {
23023				var tags map[string]*string
23024				err = json.Unmarshal(*v, &tags)
23025				if err != nil {
23026					return err
23027				}
23028				pls.Tags = tags
23029			}
23030		}
23031	}
23032
23033	return nil
23034}
23035
23036// PrivateLinkServiceConnection privateLinkServiceConnection resource.
23037type PrivateLinkServiceConnection struct {
23038	// PrivateLinkServiceConnectionProperties - Properties of the private link service connection.
23039	*PrivateLinkServiceConnectionProperties `json:"properties,omitempty"`
23040	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23041	Name *string `json:"name,omitempty"`
23042	// Type - READ-ONLY; The resource type.
23043	Type *string `json:"type,omitempty"`
23044	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23045	Etag *string `json:"etag,omitempty"`
23046	// ID - Resource ID.
23047	ID *string `json:"id,omitempty"`
23048}
23049
23050// MarshalJSON is the custom marshaler for PrivateLinkServiceConnection.
23051func (plsc PrivateLinkServiceConnection) MarshalJSON() ([]byte, error) {
23052	objectMap := make(map[string]interface{})
23053	if plsc.PrivateLinkServiceConnectionProperties != nil {
23054		objectMap["properties"] = plsc.PrivateLinkServiceConnectionProperties
23055	}
23056	if plsc.Name != nil {
23057		objectMap["name"] = plsc.Name
23058	}
23059	if plsc.ID != nil {
23060		objectMap["id"] = plsc.ID
23061	}
23062	return json.Marshal(objectMap)
23063}
23064
23065// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceConnection struct.
23066func (plsc *PrivateLinkServiceConnection) UnmarshalJSON(body []byte) error {
23067	var m map[string]*json.RawMessage
23068	err := json.Unmarshal(body, &m)
23069	if err != nil {
23070		return err
23071	}
23072	for k, v := range m {
23073		switch k {
23074		case "properties":
23075			if v != nil {
23076				var privateLinkServiceConnectionProperties PrivateLinkServiceConnectionProperties
23077				err = json.Unmarshal(*v, &privateLinkServiceConnectionProperties)
23078				if err != nil {
23079					return err
23080				}
23081				plsc.PrivateLinkServiceConnectionProperties = &privateLinkServiceConnectionProperties
23082			}
23083		case "name":
23084			if v != nil {
23085				var name string
23086				err = json.Unmarshal(*v, &name)
23087				if err != nil {
23088					return err
23089				}
23090				plsc.Name = &name
23091			}
23092		case "type":
23093			if v != nil {
23094				var typeVar string
23095				err = json.Unmarshal(*v, &typeVar)
23096				if err != nil {
23097					return err
23098				}
23099				plsc.Type = &typeVar
23100			}
23101		case "etag":
23102			if v != nil {
23103				var etag string
23104				err = json.Unmarshal(*v, &etag)
23105				if err != nil {
23106					return err
23107				}
23108				plsc.Etag = &etag
23109			}
23110		case "id":
23111			if v != nil {
23112				var ID string
23113				err = json.Unmarshal(*v, &ID)
23114				if err != nil {
23115					return err
23116				}
23117				plsc.ID = &ID
23118			}
23119		}
23120	}
23121
23122	return nil
23123}
23124
23125// PrivateLinkServiceConnectionProperties properties of the PrivateLinkServiceConnection.
23126type PrivateLinkServiceConnectionProperties struct {
23127	// ProvisioningState - The provisioning state of the private link service connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23128	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23129	// PrivateLinkServiceID - The resource id of private link service.
23130	PrivateLinkServiceID *string `json:"privateLinkServiceId,omitempty"`
23131	// GroupIds - The ID(s) of the group(s) obtained from the remote resource that this private endpoint should connect to.
23132	GroupIds *[]string `json:"groupIds,omitempty"`
23133	// RequestMessage - A message passed to the owner of the remote resource with this connection request. Restricted to 140 chars.
23134	RequestMessage *string `json:"requestMessage,omitempty"`
23135	// PrivateLinkServiceConnectionState - A collection of read-only information about the state of the connection to the remote resource.
23136	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
23137}
23138
23139// PrivateLinkServiceConnectionState a collection of information about the state of the connection between
23140// service consumer and provider.
23141type PrivateLinkServiceConnectionState struct {
23142	// Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.
23143	Status *string `json:"status,omitempty"`
23144	// Description - The reason for approval/rejection of the connection.
23145	Description *string `json:"description,omitempty"`
23146	// ActionsRequired - A message indicating if changes on the service provider require any updates on the consumer.
23147	ActionsRequired *string `json:"actionsRequired,omitempty"`
23148}
23149
23150// PrivateLinkServiceIPConfiguration the private link service ip configuration.
23151type PrivateLinkServiceIPConfiguration struct {
23152	// PrivateLinkServiceIPConfigurationProperties - Properties of the private link service ip configuration.
23153	*PrivateLinkServiceIPConfigurationProperties `json:"properties,omitempty"`
23154	// Name - The name of private link service ip configuration.
23155	Name *string `json:"name,omitempty"`
23156	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23157	Etag *string `json:"etag,omitempty"`
23158	// Type - READ-ONLY; The resource type.
23159	Type *string `json:"type,omitempty"`
23160	// ID - Resource ID.
23161	ID *string `json:"id,omitempty"`
23162}
23163
23164// MarshalJSON is the custom marshaler for PrivateLinkServiceIPConfiguration.
23165func (plsic PrivateLinkServiceIPConfiguration) MarshalJSON() ([]byte, error) {
23166	objectMap := make(map[string]interface{})
23167	if plsic.PrivateLinkServiceIPConfigurationProperties != nil {
23168		objectMap["properties"] = plsic.PrivateLinkServiceIPConfigurationProperties
23169	}
23170	if plsic.Name != nil {
23171		objectMap["name"] = plsic.Name
23172	}
23173	if plsic.ID != nil {
23174		objectMap["id"] = plsic.ID
23175	}
23176	return json.Marshal(objectMap)
23177}
23178
23179// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceIPConfiguration struct.
23180func (plsic *PrivateLinkServiceIPConfiguration) UnmarshalJSON(body []byte) error {
23181	var m map[string]*json.RawMessage
23182	err := json.Unmarshal(body, &m)
23183	if err != nil {
23184		return err
23185	}
23186	for k, v := range m {
23187		switch k {
23188		case "properties":
23189			if v != nil {
23190				var privateLinkServiceIPConfigurationProperties PrivateLinkServiceIPConfigurationProperties
23191				err = json.Unmarshal(*v, &privateLinkServiceIPConfigurationProperties)
23192				if err != nil {
23193					return err
23194				}
23195				plsic.PrivateLinkServiceIPConfigurationProperties = &privateLinkServiceIPConfigurationProperties
23196			}
23197		case "name":
23198			if v != nil {
23199				var name string
23200				err = json.Unmarshal(*v, &name)
23201				if err != nil {
23202					return err
23203				}
23204				plsic.Name = &name
23205			}
23206		case "etag":
23207			if v != nil {
23208				var etag string
23209				err = json.Unmarshal(*v, &etag)
23210				if err != nil {
23211					return err
23212				}
23213				plsic.Etag = &etag
23214			}
23215		case "type":
23216			if v != nil {
23217				var typeVar string
23218				err = json.Unmarshal(*v, &typeVar)
23219				if err != nil {
23220					return err
23221				}
23222				plsic.Type = &typeVar
23223			}
23224		case "id":
23225			if v != nil {
23226				var ID string
23227				err = json.Unmarshal(*v, &ID)
23228				if err != nil {
23229					return err
23230				}
23231				plsic.ID = &ID
23232			}
23233		}
23234	}
23235
23236	return nil
23237}
23238
23239// PrivateLinkServiceIPConfigurationProperties properties of private link service IP configuration.
23240type PrivateLinkServiceIPConfigurationProperties struct {
23241	// PrivateIPAddress - The private IP address of the IP configuration.
23242	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
23243	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
23244	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
23245	// Subnet - The reference to the subnet resource.
23246	Subnet *Subnet `json:"subnet,omitempty"`
23247	// Primary - Whether the ip configuration is primary or not.
23248	Primary *bool `json:"primary,omitempty"`
23249	// ProvisioningState - The provisioning state of the private link service IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23250	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23251	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
23252	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
23253}
23254
23255// PrivateLinkServiceListResult response for the ListPrivateLinkService API service call.
23256type PrivateLinkServiceListResult struct {
23257	autorest.Response `json:"-"`
23258	// Value - A list of PrivateLinkService resources in a resource group.
23259	Value *[]PrivateLinkService `json:"value,omitempty"`
23260	// NextLink - READ-ONLY; The URL to get the next set of results.
23261	NextLink *string `json:"nextLink,omitempty"`
23262}
23263
23264// PrivateLinkServiceListResultIterator provides access to a complete listing of PrivateLinkService values.
23265type PrivateLinkServiceListResultIterator struct {
23266	i    int
23267	page PrivateLinkServiceListResultPage
23268}
23269
23270// NextWithContext advances to the next value.  If there was an error making
23271// the request the iterator does not advance and the error is returned.
23272func (iter *PrivateLinkServiceListResultIterator) NextWithContext(ctx context.Context) (err error) {
23273	if tracing.IsEnabled() {
23274		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultIterator.NextWithContext")
23275		defer func() {
23276			sc := -1
23277			if iter.Response().Response.Response != nil {
23278				sc = iter.Response().Response.Response.StatusCode
23279			}
23280			tracing.EndSpan(ctx, sc, err)
23281		}()
23282	}
23283	iter.i++
23284	if iter.i < len(iter.page.Values()) {
23285		return nil
23286	}
23287	err = iter.page.NextWithContext(ctx)
23288	if err != nil {
23289		iter.i--
23290		return err
23291	}
23292	iter.i = 0
23293	return nil
23294}
23295
23296// Next advances to the next value.  If there was an error making
23297// the request the iterator does not advance and the error is returned.
23298// Deprecated: Use NextWithContext() instead.
23299func (iter *PrivateLinkServiceListResultIterator) Next() error {
23300	return iter.NextWithContext(context.Background())
23301}
23302
23303// NotDone returns true if the enumeration should be started or is not yet complete.
23304func (iter PrivateLinkServiceListResultIterator) NotDone() bool {
23305	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23306}
23307
23308// Response returns the raw server response from the last page request.
23309func (iter PrivateLinkServiceListResultIterator) Response() PrivateLinkServiceListResult {
23310	return iter.page.Response()
23311}
23312
23313// Value returns the current value or a zero-initialized value if the
23314// iterator has advanced beyond the end of the collection.
23315func (iter PrivateLinkServiceListResultIterator) Value() PrivateLinkService {
23316	if !iter.page.NotDone() {
23317		return PrivateLinkService{}
23318	}
23319	return iter.page.Values()[iter.i]
23320}
23321
23322// Creates a new instance of the PrivateLinkServiceListResultIterator type.
23323func NewPrivateLinkServiceListResultIterator(page PrivateLinkServiceListResultPage) PrivateLinkServiceListResultIterator {
23324	return PrivateLinkServiceListResultIterator{page: page}
23325}
23326
23327// IsEmpty returns true if the ListResult contains no values.
23328func (plslr PrivateLinkServiceListResult) IsEmpty() bool {
23329	return plslr.Value == nil || len(*plslr.Value) == 0
23330}
23331
23332// privateLinkServiceListResultPreparer prepares a request to retrieve the next set of results.
23333// It returns nil if no more results exist.
23334func (plslr PrivateLinkServiceListResult) privateLinkServiceListResultPreparer(ctx context.Context) (*http.Request, error) {
23335	if plslr.NextLink == nil || len(to.String(plslr.NextLink)) < 1 {
23336		return nil, nil
23337	}
23338	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23339		autorest.AsJSON(),
23340		autorest.AsGet(),
23341		autorest.WithBaseURL(to.String(plslr.NextLink)))
23342}
23343
23344// PrivateLinkServiceListResultPage contains a page of PrivateLinkService values.
23345type PrivateLinkServiceListResultPage struct {
23346	fn    func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)
23347	plslr PrivateLinkServiceListResult
23348}
23349
23350// NextWithContext advances to the next page of values.  If there was an error making
23351// the request the page does not advance and the error is returned.
23352func (page *PrivateLinkServiceListResultPage) NextWithContext(ctx context.Context) (err error) {
23353	if tracing.IsEnabled() {
23354		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultPage.NextWithContext")
23355		defer func() {
23356			sc := -1
23357			if page.Response().Response.Response != nil {
23358				sc = page.Response().Response.Response.StatusCode
23359			}
23360			tracing.EndSpan(ctx, sc, err)
23361		}()
23362	}
23363	next, err := page.fn(ctx, page.plslr)
23364	if err != nil {
23365		return err
23366	}
23367	page.plslr = next
23368	return nil
23369}
23370
23371// Next advances to the next page of values.  If there was an error making
23372// the request the page does not advance and the error is returned.
23373// Deprecated: Use NextWithContext() instead.
23374func (page *PrivateLinkServiceListResultPage) Next() error {
23375	return page.NextWithContext(context.Background())
23376}
23377
23378// NotDone returns true if the page enumeration should be started or is not yet complete.
23379func (page PrivateLinkServiceListResultPage) NotDone() bool {
23380	return !page.plslr.IsEmpty()
23381}
23382
23383// Response returns the raw server response from the last page request.
23384func (page PrivateLinkServiceListResultPage) Response() PrivateLinkServiceListResult {
23385	return page.plslr
23386}
23387
23388// Values returns the slice of values for the current page or nil if there are no values.
23389func (page PrivateLinkServiceListResultPage) Values() []PrivateLinkService {
23390	if page.plslr.IsEmpty() {
23391		return nil
23392	}
23393	return *page.plslr.Value
23394}
23395
23396// Creates a new instance of the PrivateLinkServiceListResultPage type.
23397func NewPrivateLinkServiceListResultPage(getNextPage func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)) PrivateLinkServiceListResultPage {
23398	return PrivateLinkServiceListResultPage{fn: getNextPage}
23399}
23400
23401// PrivateLinkServiceProperties properties of the private link service.
23402type PrivateLinkServiceProperties struct {
23403	// LoadBalancerFrontendIPConfigurations - An array of references to the load balancer IP configurations.
23404	LoadBalancerFrontendIPConfigurations *[]FrontendIPConfiguration `json:"loadBalancerFrontendIpConfigurations,omitempty"`
23405	// IPConfigurations - An array of private link service IP configurations.
23406	IPConfigurations *[]PrivateLinkServiceIPConfiguration `json:"ipConfigurations,omitempty"`
23407	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private link service.
23408	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
23409	// ProvisioningState - The provisioning state of the private link service resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23410	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23411	// PrivateEndpointConnections - An array of list about connections to the private endpoint.
23412	PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"`
23413	// Visibility - The visibility list of the private link service.
23414	Visibility *PrivateLinkServicePropertiesVisibility `json:"visibility,omitempty"`
23415	// AutoApproval - The auto-approval list of the private link service.
23416	AutoApproval *PrivateLinkServicePropertiesAutoApproval `json:"autoApproval,omitempty"`
23417	// Fqdns - The list of Fqdn.
23418	Fqdns *[]string `json:"fqdns,omitempty"`
23419	// Alias - READ-ONLY; The alias of the private link service.
23420	Alias *string `json:"alias,omitempty"`
23421}
23422
23423// PrivateLinkServicePropertiesAutoApproval the auto-approval list of the private link service.
23424type PrivateLinkServicePropertiesAutoApproval struct {
23425	// Subscriptions - The list of subscriptions.
23426	Subscriptions *[]string `json:"subscriptions,omitempty"`
23427}
23428
23429// PrivateLinkServicePropertiesVisibility the visibility list of the private link service.
23430type PrivateLinkServicePropertiesVisibility struct {
23431	// Subscriptions - The list of subscriptions.
23432	Subscriptions *[]string `json:"subscriptions,omitempty"`
23433}
23434
23435// PrivateLinkServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23436// long-running operation.
23437type PrivateLinkServicesCreateOrUpdateFuture struct {
23438	azure.Future
23439}
23440
23441// Result returns the result of the asynchronous operation.
23442// If the operation has not completed it will return an error.
23443func (future *PrivateLinkServicesCreateOrUpdateFuture) Result(client PrivateLinkServicesClient) (pls PrivateLinkService, err error) {
23444	var done bool
23445	done, err = future.DoneWithContext(context.Background(), client)
23446	if err != nil {
23447		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23448		return
23449	}
23450	if !done {
23451		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCreateOrUpdateFuture")
23452		return
23453	}
23454	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23455	if pls.Response.Response, err = future.GetResult(sender); err == nil && pls.Response.Response.StatusCode != http.StatusNoContent {
23456		pls, err = client.CreateOrUpdateResponder(pls.Response.Response)
23457		if err != nil {
23458			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", pls.Response.Response, "Failure responding to request")
23459		}
23460	}
23461	return
23462}
23463
23464// PrivateLinkServicesDeleteFuture an abstraction for monitoring and retrieving the results of a
23465// long-running operation.
23466type PrivateLinkServicesDeleteFuture struct {
23467	azure.Future
23468}
23469
23470// Result returns the result of the asynchronous operation.
23471// If the operation has not completed it will return an error.
23472func (future *PrivateLinkServicesDeleteFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
23473	var done bool
23474	done, err = future.DoneWithContext(context.Background(), client)
23475	if err != nil {
23476		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeleteFuture", "Result", future.Response(), "Polling failure")
23477		return
23478	}
23479	if !done {
23480		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeleteFuture")
23481		return
23482	}
23483	ar.Response = future.Response()
23484	return
23485}
23486
23487// PrivateLinkServicesDeletePrivateEndpointConnectionFuture an abstraction for monitoring and retrieving
23488// the results of a long-running operation.
23489type PrivateLinkServicesDeletePrivateEndpointConnectionFuture struct {
23490	azure.Future
23491}
23492
23493// Result returns the result of the asynchronous operation.
23494// If the operation has not completed it will return an error.
23495func (future *PrivateLinkServicesDeletePrivateEndpointConnectionFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
23496	var done bool
23497	done, err = future.DoneWithContext(context.Background(), client)
23498	if err != nil {
23499		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure")
23500		return
23501	}
23502	if !done {
23503		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture")
23504		return
23505	}
23506	ar.Response = future.Response()
23507	return
23508}
23509
23510// PrivateLinkServiceVisibility response for the CheckPrivateLinkServiceVisibility API service call.
23511type PrivateLinkServiceVisibility struct {
23512	autorest.Response `json:"-"`
23513	// Visible - Private Link Service Visibility (True/False).
23514	Visible *bool `json:"visible,omitempty"`
23515}
23516
23517// Probe a load balancer probe.
23518type Probe struct {
23519	autorest.Response `json:"-"`
23520	// ProbePropertiesFormat - Properties of load balancer probe.
23521	*ProbePropertiesFormat `json:"properties,omitempty"`
23522	// Name - The name of the resource that is unique within the set of probes used by the load balancer. This name can be used to access the resource.
23523	Name *string `json:"name,omitempty"`
23524	// Etag - A unique read-only string that changes whenever the resource is updated.
23525	Etag *string `json:"etag,omitempty"`
23526	// Type - READ-ONLY; Type of the resource.
23527	Type *string `json:"type,omitempty"`
23528	// ID - Resource ID.
23529	ID *string `json:"id,omitempty"`
23530}
23531
23532// MarshalJSON is the custom marshaler for Probe.
23533func (p Probe) MarshalJSON() ([]byte, error) {
23534	objectMap := make(map[string]interface{})
23535	if p.ProbePropertiesFormat != nil {
23536		objectMap["properties"] = p.ProbePropertiesFormat
23537	}
23538	if p.Name != nil {
23539		objectMap["name"] = p.Name
23540	}
23541	if p.Etag != nil {
23542		objectMap["etag"] = p.Etag
23543	}
23544	if p.ID != nil {
23545		objectMap["id"] = p.ID
23546	}
23547	return json.Marshal(objectMap)
23548}
23549
23550// UnmarshalJSON is the custom unmarshaler for Probe struct.
23551func (p *Probe) UnmarshalJSON(body []byte) error {
23552	var m map[string]*json.RawMessage
23553	err := json.Unmarshal(body, &m)
23554	if err != nil {
23555		return err
23556	}
23557	for k, v := range m {
23558		switch k {
23559		case "properties":
23560			if v != nil {
23561				var probePropertiesFormat ProbePropertiesFormat
23562				err = json.Unmarshal(*v, &probePropertiesFormat)
23563				if err != nil {
23564					return err
23565				}
23566				p.ProbePropertiesFormat = &probePropertiesFormat
23567			}
23568		case "name":
23569			if v != nil {
23570				var name string
23571				err = json.Unmarshal(*v, &name)
23572				if err != nil {
23573					return err
23574				}
23575				p.Name = &name
23576			}
23577		case "etag":
23578			if v != nil {
23579				var etag string
23580				err = json.Unmarshal(*v, &etag)
23581				if err != nil {
23582					return err
23583				}
23584				p.Etag = &etag
23585			}
23586		case "type":
23587			if v != nil {
23588				var typeVar string
23589				err = json.Unmarshal(*v, &typeVar)
23590				if err != nil {
23591					return err
23592				}
23593				p.Type = &typeVar
23594			}
23595		case "id":
23596			if v != nil {
23597				var ID string
23598				err = json.Unmarshal(*v, &ID)
23599				if err != nil {
23600					return err
23601				}
23602				p.ID = &ID
23603			}
23604		}
23605	}
23606
23607	return nil
23608}
23609
23610// ProbePropertiesFormat load balancer probe resource.
23611type ProbePropertiesFormat struct {
23612	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
23613	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
23614	// Protocol - The protocol of the end point. If 'Tcp' is specified, a received ACK is required for the probe to be successful. If 'Http' or 'Https' is specified, a 200 OK response from the specifies URI is required for the probe to be successful. Possible values include: 'ProbeProtocolHTTP', 'ProbeProtocolTCP', 'ProbeProtocolHTTPS'
23615	Protocol ProbeProtocol `json:"protocol,omitempty"`
23616	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
23617	Port *int32 `json:"port,omitempty"`
23618	// IntervalInSeconds - The interval, in seconds, for how frequently to probe the endpoint for health status. Typically, the interval is slightly less than half the allocated timeout period (in seconds) which allows two full probes before taking the instance out of rotation. The default value is 15, the minimum value is 5.
23619	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
23620	// NumberOfProbes - The number of probes where if no response, will result in stopping further traffic from being delivered to the endpoint. This values allows endpoints to be taken out of rotation faster or slower than the typical times used in Azure.
23621	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
23622	// RequestPath - The URI used for requesting health status from the VM. Path is required if a protocol is set to http. Otherwise, it is not allowed. There is no default value.
23623	RequestPath *string `json:"requestPath,omitempty"`
23624	// ProvisioningState - The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23625	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23626}
23627
23628// Profile network profile resource.
23629type Profile struct {
23630	autorest.Response `json:"-"`
23631	// ProfilePropertiesFormat - Network profile properties.
23632	*ProfilePropertiesFormat `json:"properties,omitempty"`
23633	// Etag - A unique read-only string that changes whenever the resource is updated.
23634	Etag *string `json:"etag,omitempty"`
23635	// ID - Resource ID.
23636	ID *string `json:"id,omitempty"`
23637	// Name - READ-ONLY; Resource name.
23638	Name *string `json:"name,omitempty"`
23639	// Type - READ-ONLY; Resource type.
23640	Type *string `json:"type,omitempty"`
23641	// Location - Resource location.
23642	Location *string `json:"location,omitempty"`
23643	// Tags - Resource tags.
23644	Tags map[string]*string `json:"tags"`
23645}
23646
23647// MarshalJSON is the custom marshaler for Profile.
23648func (p Profile) MarshalJSON() ([]byte, error) {
23649	objectMap := make(map[string]interface{})
23650	if p.ProfilePropertiesFormat != nil {
23651		objectMap["properties"] = p.ProfilePropertiesFormat
23652	}
23653	if p.Etag != nil {
23654		objectMap["etag"] = p.Etag
23655	}
23656	if p.ID != nil {
23657		objectMap["id"] = p.ID
23658	}
23659	if p.Location != nil {
23660		objectMap["location"] = p.Location
23661	}
23662	if p.Tags != nil {
23663		objectMap["tags"] = p.Tags
23664	}
23665	return json.Marshal(objectMap)
23666}
23667
23668// UnmarshalJSON is the custom unmarshaler for Profile struct.
23669func (p *Profile) UnmarshalJSON(body []byte) error {
23670	var m map[string]*json.RawMessage
23671	err := json.Unmarshal(body, &m)
23672	if err != nil {
23673		return err
23674	}
23675	for k, v := range m {
23676		switch k {
23677		case "properties":
23678			if v != nil {
23679				var profilePropertiesFormat ProfilePropertiesFormat
23680				err = json.Unmarshal(*v, &profilePropertiesFormat)
23681				if err != nil {
23682					return err
23683				}
23684				p.ProfilePropertiesFormat = &profilePropertiesFormat
23685			}
23686		case "etag":
23687			if v != nil {
23688				var etag string
23689				err = json.Unmarshal(*v, &etag)
23690				if err != nil {
23691					return err
23692				}
23693				p.Etag = &etag
23694			}
23695		case "id":
23696			if v != nil {
23697				var ID string
23698				err = json.Unmarshal(*v, &ID)
23699				if err != nil {
23700					return err
23701				}
23702				p.ID = &ID
23703			}
23704		case "name":
23705			if v != nil {
23706				var name string
23707				err = json.Unmarshal(*v, &name)
23708				if err != nil {
23709					return err
23710				}
23711				p.Name = &name
23712			}
23713		case "type":
23714			if v != nil {
23715				var typeVar string
23716				err = json.Unmarshal(*v, &typeVar)
23717				if err != nil {
23718					return err
23719				}
23720				p.Type = &typeVar
23721			}
23722		case "location":
23723			if v != nil {
23724				var location string
23725				err = json.Unmarshal(*v, &location)
23726				if err != nil {
23727					return err
23728				}
23729				p.Location = &location
23730			}
23731		case "tags":
23732			if v != nil {
23733				var tags map[string]*string
23734				err = json.Unmarshal(*v, &tags)
23735				if err != nil {
23736					return err
23737				}
23738				p.Tags = tags
23739			}
23740		}
23741	}
23742
23743	return nil
23744}
23745
23746// ProfileListResult response for ListNetworkProfiles API service call.
23747type ProfileListResult struct {
23748	autorest.Response `json:"-"`
23749	// Value - A list of network profiles that exist in a resource group.
23750	Value *[]Profile `json:"value,omitempty"`
23751	// NextLink - The URL to get the next set of results.
23752	NextLink *string `json:"nextLink,omitempty"`
23753}
23754
23755// ProfileListResultIterator provides access to a complete listing of Profile values.
23756type ProfileListResultIterator struct {
23757	i    int
23758	page ProfileListResultPage
23759}
23760
23761// NextWithContext advances to the next value.  If there was an error making
23762// the request the iterator does not advance and the error is returned.
23763func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
23764	if tracing.IsEnabled() {
23765		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
23766		defer func() {
23767			sc := -1
23768			if iter.Response().Response.Response != nil {
23769				sc = iter.Response().Response.Response.StatusCode
23770			}
23771			tracing.EndSpan(ctx, sc, err)
23772		}()
23773	}
23774	iter.i++
23775	if iter.i < len(iter.page.Values()) {
23776		return nil
23777	}
23778	err = iter.page.NextWithContext(ctx)
23779	if err != nil {
23780		iter.i--
23781		return err
23782	}
23783	iter.i = 0
23784	return nil
23785}
23786
23787// Next advances to the next value.  If there was an error making
23788// the request the iterator does not advance and the error is returned.
23789// Deprecated: Use NextWithContext() instead.
23790func (iter *ProfileListResultIterator) Next() error {
23791	return iter.NextWithContext(context.Background())
23792}
23793
23794// NotDone returns true if the enumeration should be started or is not yet complete.
23795func (iter ProfileListResultIterator) NotDone() bool {
23796	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23797}
23798
23799// Response returns the raw server response from the last page request.
23800func (iter ProfileListResultIterator) Response() ProfileListResult {
23801	return iter.page.Response()
23802}
23803
23804// Value returns the current value or a zero-initialized value if the
23805// iterator has advanced beyond the end of the collection.
23806func (iter ProfileListResultIterator) Value() Profile {
23807	if !iter.page.NotDone() {
23808		return Profile{}
23809	}
23810	return iter.page.Values()[iter.i]
23811}
23812
23813// Creates a new instance of the ProfileListResultIterator type.
23814func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
23815	return ProfileListResultIterator{page: page}
23816}
23817
23818// IsEmpty returns true if the ListResult contains no values.
23819func (plr ProfileListResult) IsEmpty() bool {
23820	return plr.Value == nil || len(*plr.Value) == 0
23821}
23822
23823// profileListResultPreparer prepares a request to retrieve the next set of results.
23824// It returns nil if no more results exist.
23825func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
23826	if plr.NextLink == nil || len(to.String(plr.NextLink)) < 1 {
23827		return nil, nil
23828	}
23829	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23830		autorest.AsJSON(),
23831		autorest.AsGet(),
23832		autorest.WithBaseURL(to.String(plr.NextLink)))
23833}
23834
23835// ProfileListResultPage contains a page of Profile values.
23836type ProfileListResultPage struct {
23837	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
23838	plr ProfileListResult
23839}
23840
23841// NextWithContext advances to the next page of values.  If there was an error making
23842// the request the page does not advance and the error is returned.
23843func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
23844	if tracing.IsEnabled() {
23845		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
23846		defer func() {
23847			sc := -1
23848			if page.Response().Response.Response != nil {
23849				sc = page.Response().Response.Response.StatusCode
23850			}
23851			tracing.EndSpan(ctx, sc, err)
23852		}()
23853	}
23854	next, err := page.fn(ctx, page.plr)
23855	if err != nil {
23856		return err
23857	}
23858	page.plr = next
23859	return nil
23860}
23861
23862// Next advances to the next page of values.  If there was an error making
23863// the request the page does not advance and the error is returned.
23864// Deprecated: Use NextWithContext() instead.
23865func (page *ProfileListResultPage) Next() error {
23866	return page.NextWithContext(context.Background())
23867}
23868
23869// NotDone returns true if the page enumeration should be started or is not yet complete.
23870func (page ProfileListResultPage) NotDone() bool {
23871	return !page.plr.IsEmpty()
23872}
23873
23874// Response returns the raw server response from the last page request.
23875func (page ProfileListResultPage) Response() ProfileListResult {
23876	return page.plr
23877}
23878
23879// Values returns the slice of values for the current page or nil if there are no values.
23880func (page ProfileListResultPage) Values() []Profile {
23881	if page.plr.IsEmpty() {
23882		return nil
23883	}
23884	return *page.plr.Value
23885}
23886
23887// Creates a new instance of the ProfileListResultPage type.
23888func NewProfileListResultPage(getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
23889	return ProfileListResultPage{fn: getNextPage}
23890}
23891
23892// ProfilePropertiesFormat network profile properties.
23893type ProfilePropertiesFormat struct {
23894	// ContainerNetworkInterfaces - List of child container network interfaces.
23895	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
23896	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
23897	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
23898	// ResourceGUID - READ-ONLY; The resource GUID property of the network profile resource.
23899	ResourceGUID *string `json:"resourceGuid,omitempty"`
23900	// ProvisioningState - READ-ONLY; The provisioning state of the network profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23901	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23902}
23903
23904// ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23905// operation.
23906type ProfilesDeleteFuture struct {
23907	azure.Future
23908}
23909
23910// Result returns the result of the asynchronous operation.
23911// If the operation has not completed it will return an error.
23912func (future *ProfilesDeleteFuture) Result(client ProfilesClient) (ar autorest.Response, err error) {
23913	var done bool
23914	done, err = future.DoneWithContext(context.Background(), client)
23915	if err != nil {
23916		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
23917		return
23918	}
23919	if !done {
23920		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
23921		return
23922	}
23923	ar.Response = future.Response()
23924	return
23925}
23926
23927// ProtocolConfiguration configuration of the protocol.
23928type ProtocolConfiguration struct {
23929	// HTTPConfiguration - HTTP configuration of the connectivity check.
23930	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
23931}
23932
23933// ProtocolCustomSettingsFormat dDoS custom policy properties.
23934type ProtocolCustomSettingsFormat struct {
23935	// Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn'
23936	Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"`
23937	// TriggerRateOverride - The customized DDoS protection trigger rate.
23938	TriggerRateOverride *string `json:"triggerRateOverride,omitempty"`
23939	// SourceRateOverride - The customized DDoS protection source rate.
23940	SourceRateOverride *string `json:"sourceRateOverride,omitempty"`
23941	// TriggerSensitivityOverride - The customized DDoS protection trigger rate sensitivity degrees. High: Trigger rate set with most sensitivity w.r.t. normal traffic. Default: Trigger rate set with moderate sensitivity w.r.t. normal traffic. Low: Trigger rate set with less sensitivity w.r.t. normal traffic. Relaxed: Trigger rate set with least sensitivity w.r.t. normal traffic. Possible values include: 'Relaxed', 'Low', 'Default', 'High'
23942	TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"`
23943}
23944
23945// PublicIPAddress public IP address resource.
23946type PublicIPAddress struct {
23947	autorest.Response `json:"-"`
23948	// Sku - The public IP address SKU.
23949	Sku *PublicIPAddressSku `json:"sku,omitempty"`
23950	// PublicIPAddressPropertiesFormat - Public IP address properties.
23951	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
23952	// Etag - A unique read-only string that changes whenever the resource is updated.
23953	Etag *string `json:"etag,omitempty"`
23954	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
23955	Zones *[]string `json:"zones,omitempty"`
23956	// ID - Resource ID.
23957	ID *string `json:"id,omitempty"`
23958	// Name - READ-ONLY; Resource name.
23959	Name *string `json:"name,omitempty"`
23960	// Type - READ-ONLY; Resource type.
23961	Type *string `json:"type,omitempty"`
23962	// Location - Resource location.
23963	Location *string `json:"location,omitempty"`
23964	// Tags - Resource tags.
23965	Tags map[string]*string `json:"tags"`
23966}
23967
23968// MarshalJSON is the custom marshaler for PublicIPAddress.
23969func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
23970	objectMap := make(map[string]interface{})
23971	if pia.Sku != nil {
23972		objectMap["sku"] = pia.Sku
23973	}
23974	if pia.PublicIPAddressPropertiesFormat != nil {
23975		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
23976	}
23977	if pia.Etag != nil {
23978		objectMap["etag"] = pia.Etag
23979	}
23980	if pia.Zones != nil {
23981		objectMap["zones"] = pia.Zones
23982	}
23983	if pia.ID != nil {
23984		objectMap["id"] = pia.ID
23985	}
23986	if pia.Location != nil {
23987		objectMap["location"] = pia.Location
23988	}
23989	if pia.Tags != nil {
23990		objectMap["tags"] = pia.Tags
23991	}
23992	return json.Marshal(objectMap)
23993}
23994
23995// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
23996func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
23997	var m map[string]*json.RawMessage
23998	err := json.Unmarshal(body, &m)
23999	if err != nil {
24000		return err
24001	}
24002	for k, v := range m {
24003		switch k {
24004		case "sku":
24005			if v != nil {
24006				var sku PublicIPAddressSku
24007				err = json.Unmarshal(*v, &sku)
24008				if err != nil {
24009					return err
24010				}
24011				pia.Sku = &sku
24012			}
24013		case "properties":
24014			if v != nil {
24015				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
24016				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
24017				if err != nil {
24018					return err
24019				}
24020				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
24021			}
24022		case "etag":
24023			if v != nil {
24024				var etag string
24025				err = json.Unmarshal(*v, &etag)
24026				if err != nil {
24027					return err
24028				}
24029				pia.Etag = &etag
24030			}
24031		case "zones":
24032			if v != nil {
24033				var zones []string
24034				err = json.Unmarshal(*v, &zones)
24035				if err != nil {
24036					return err
24037				}
24038				pia.Zones = &zones
24039			}
24040		case "id":
24041			if v != nil {
24042				var ID string
24043				err = json.Unmarshal(*v, &ID)
24044				if err != nil {
24045					return err
24046				}
24047				pia.ID = &ID
24048			}
24049		case "name":
24050			if v != nil {
24051				var name string
24052				err = json.Unmarshal(*v, &name)
24053				if err != nil {
24054					return err
24055				}
24056				pia.Name = &name
24057			}
24058		case "type":
24059			if v != nil {
24060				var typeVar string
24061				err = json.Unmarshal(*v, &typeVar)
24062				if err != nil {
24063					return err
24064				}
24065				pia.Type = &typeVar
24066			}
24067		case "location":
24068			if v != nil {
24069				var location string
24070				err = json.Unmarshal(*v, &location)
24071				if err != nil {
24072					return err
24073				}
24074				pia.Location = &location
24075			}
24076		case "tags":
24077			if v != nil {
24078				var tags map[string]*string
24079				err = json.Unmarshal(*v, &tags)
24080				if err != nil {
24081					return err
24082				}
24083				pia.Tags = tags
24084			}
24085		}
24086	}
24087
24088	return nil
24089}
24090
24091// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address.
24092type PublicIPAddressDNSSettings struct {
24093	// DomainNameLabel - The domain name label. The concatenation of the domain name label and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address. If a domain name label is specified, an A DNS record is created for the public IP in the Microsoft Azure DNS system.
24094	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
24095	// Fqdn - The Fully Qualified Domain Name of the A DNS record associated with the public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone.
24096	Fqdn *string `json:"fqdn,omitempty"`
24097	// ReverseFqdn - The reverse FQDN. A user-visible, fully qualified domain name that resolves to this public IP address. If the reverseFqdn is specified, then a PTR DNS record is created pointing from the IP address in the in-addr.arpa domain to the reverse FQDN.
24098	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
24099}
24100
24101// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24102// long-running operation.
24103type PublicIPAddressesCreateOrUpdateFuture struct {
24104	azure.Future
24105}
24106
24107// Result returns the result of the asynchronous operation.
24108// If the operation has not completed it will return an error.
24109func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
24110	var done bool
24111	done, err = future.DoneWithContext(context.Background(), client)
24112	if err != nil {
24113		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24114		return
24115	}
24116	if !done {
24117		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
24118		return
24119	}
24120	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24121	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
24122		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
24123		if err != nil {
24124			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
24125		}
24126	}
24127	return
24128}
24129
24130// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24131// operation.
24132type PublicIPAddressesDeleteFuture struct {
24133	azure.Future
24134}
24135
24136// Result returns the result of the asynchronous operation.
24137// If the operation has not completed it will return an error.
24138func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
24139	var done bool
24140	done, err = future.DoneWithContext(context.Background(), client)
24141	if err != nil {
24142		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
24143		return
24144	}
24145	if !done {
24146		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
24147		return
24148	}
24149	ar.Response = future.Response()
24150	return
24151}
24152
24153// PublicIPAddressesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
24154// long-running operation.
24155type PublicIPAddressesUpdateTagsFuture struct {
24156	azure.Future
24157}
24158
24159// Result returns the result of the asynchronous operation.
24160// If the operation has not completed it will return an error.
24161func (future *PublicIPAddressesUpdateTagsFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
24162	var done bool
24163	done, err = future.DoneWithContext(context.Background(), client)
24164	if err != nil {
24165		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
24166		return
24167	}
24168	if !done {
24169		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesUpdateTagsFuture")
24170		return
24171	}
24172	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24173	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
24174		pia, err = client.UpdateTagsResponder(pia.Response.Response)
24175		if err != nil {
24176			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", pia.Response.Response, "Failure responding to request")
24177		}
24178	}
24179	return
24180}
24181
24182// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
24183type PublicIPAddressListResult struct {
24184	autorest.Response `json:"-"`
24185	// Value - A list of public IP addresses that exists in a resource group.
24186	Value *[]PublicIPAddress `json:"value,omitempty"`
24187	// NextLink - The URL to get the next set of results.
24188	NextLink *string `json:"nextLink,omitempty"`
24189}
24190
24191// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
24192type PublicIPAddressListResultIterator struct {
24193	i    int
24194	page PublicIPAddressListResultPage
24195}
24196
24197// NextWithContext advances to the next value.  If there was an error making
24198// the request the iterator does not advance and the error is returned.
24199func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
24200	if tracing.IsEnabled() {
24201		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
24202		defer func() {
24203			sc := -1
24204			if iter.Response().Response.Response != nil {
24205				sc = iter.Response().Response.Response.StatusCode
24206			}
24207			tracing.EndSpan(ctx, sc, err)
24208		}()
24209	}
24210	iter.i++
24211	if iter.i < len(iter.page.Values()) {
24212		return nil
24213	}
24214	err = iter.page.NextWithContext(ctx)
24215	if err != nil {
24216		iter.i--
24217		return err
24218	}
24219	iter.i = 0
24220	return nil
24221}
24222
24223// Next advances to the next value.  If there was an error making
24224// the request the iterator does not advance and the error is returned.
24225// Deprecated: Use NextWithContext() instead.
24226func (iter *PublicIPAddressListResultIterator) Next() error {
24227	return iter.NextWithContext(context.Background())
24228}
24229
24230// NotDone returns true if the enumeration should be started or is not yet complete.
24231func (iter PublicIPAddressListResultIterator) NotDone() bool {
24232	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24233}
24234
24235// Response returns the raw server response from the last page request.
24236func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
24237	return iter.page.Response()
24238}
24239
24240// Value returns the current value or a zero-initialized value if the
24241// iterator has advanced beyond the end of the collection.
24242func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
24243	if !iter.page.NotDone() {
24244		return PublicIPAddress{}
24245	}
24246	return iter.page.Values()[iter.i]
24247}
24248
24249// Creates a new instance of the PublicIPAddressListResultIterator type.
24250func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
24251	return PublicIPAddressListResultIterator{page: page}
24252}
24253
24254// IsEmpty returns true if the ListResult contains no values.
24255func (pialr PublicIPAddressListResult) IsEmpty() bool {
24256	return pialr.Value == nil || len(*pialr.Value) == 0
24257}
24258
24259// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
24260// It returns nil if no more results exist.
24261func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
24262	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
24263		return nil, nil
24264	}
24265	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24266		autorest.AsJSON(),
24267		autorest.AsGet(),
24268		autorest.WithBaseURL(to.String(pialr.NextLink)))
24269}
24270
24271// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
24272type PublicIPAddressListResultPage struct {
24273	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
24274	pialr PublicIPAddressListResult
24275}
24276
24277// NextWithContext advances to the next page of values.  If there was an error making
24278// the request the page does not advance and the error is returned.
24279func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
24280	if tracing.IsEnabled() {
24281		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
24282		defer func() {
24283			sc := -1
24284			if page.Response().Response.Response != nil {
24285				sc = page.Response().Response.Response.StatusCode
24286			}
24287			tracing.EndSpan(ctx, sc, err)
24288		}()
24289	}
24290	next, err := page.fn(ctx, page.pialr)
24291	if err != nil {
24292		return err
24293	}
24294	page.pialr = next
24295	return nil
24296}
24297
24298// Next advances to the next page of values.  If there was an error making
24299// the request the page does not advance and the error is returned.
24300// Deprecated: Use NextWithContext() instead.
24301func (page *PublicIPAddressListResultPage) Next() error {
24302	return page.NextWithContext(context.Background())
24303}
24304
24305// NotDone returns true if the page enumeration should be started or is not yet complete.
24306func (page PublicIPAddressListResultPage) NotDone() bool {
24307	return !page.pialr.IsEmpty()
24308}
24309
24310// Response returns the raw server response from the last page request.
24311func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
24312	return page.pialr
24313}
24314
24315// Values returns the slice of values for the current page or nil if there are no values.
24316func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
24317	if page.pialr.IsEmpty() {
24318		return nil
24319	}
24320	return *page.pialr.Value
24321}
24322
24323// Creates a new instance of the PublicIPAddressListResultPage type.
24324func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
24325	return PublicIPAddressListResultPage{fn: getNextPage}
24326}
24327
24328// PublicIPAddressPropertiesFormat public IP address properties.
24329type PublicIPAddressPropertiesFormat struct {
24330	// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
24331	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
24332	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
24333	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
24334	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
24335	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
24336	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
24337	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
24338	// DdosSettings - The DDoS protection custom policy associated with the public IP address.
24339	DdosSettings *DdosSettings `json:"ddosSettings,omitempty"`
24340	// IPTags - The list of tags associated with the public IP address.
24341	IPTags *[]IPTag `json:"ipTags,omitempty"`
24342	// IPAddress - The IP address associated with the public IP address resource.
24343	IPAddress *string `json:"ipAddress,omitempty"`
24344	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
24345	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
24346	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
24347	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
24348	// ResourceGUID - The resource GUID property of the public IP address resource.
24349	ResourceGUID *string `json:"resourceGuid,omitempty"`
24350	// ProvisioningState - The provisioning state of the public IP address resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24351	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24352}
24353
24354// PublicIPAddressSku SKU of a public IP address.
24355type PublicIPAddressSku struct {
24356	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
24357	Name PublicIPAddressSkuName `json:"name,omitempty"`
24358}
24359
24360// PublicIPPrefix public IP prefix resource.
24361type PublicIPPrefix struct {
24362	autorest.Response `json:"-"`
24363	// Sku - The public IP prefix SKU.
24364	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
24365	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
24366	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
24367	// Etag - A unique read-only string that changes whenever the resource is updated.
24368	Etag *string `json:"etag,omitempty"`
24369	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
24370	Zones *[]string `json:"zones,omitempty"`
24371	// ID - Resource ID.
24372	ID *string `json:"id,omitempty"`
24373	// Name - READ-ONLY; Resource name.
24374	Name *string `json:"name,omitempty"`
24375	// Type - READ-ONLY; Resource type.
24376	Type *string `json:"type,omitempty"`
24377	// Location - Resource location.
24378	Location *string `json:"location,omitempty"`
24379	// Tags - Resource tags.
24380	Tags map[string]*string `json:"tags"`
24381}
24382
24383// MarshalJSON is the custom marshaler for PublicIPPrefix.
24384func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
24385	objectMap := make(map[string]interface{})
24386	if pip.Sku != nil {
24387		objectMap["sku"] = pip.Sku
24388	}
24389	if pip.PublicIPPrefixPropertiesFormat != nil {
24390		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
24391	}
24392	if pip.Etag != nil {
24393		objectMap["etag"] = pip.Etag
24394	}
24395	if pip.Zones != nil {
24396		objectMap["zones"] = pip.Zones
24397	}
24398	if pip.ID != nil {
24399		objectMap["id"] = pip.ID
24400	}
24401	if pip.Location != nil {
24402		objectMap["location"] = pip.Location
24403	}
24404	if pip.Tags != nil {
24405		objectMap["tags"] = pip.Tags
24406	}
24407	return json.Marshal(objectMap)
24408}
24409
24410// UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
24411func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
24412	var m map[string]*json.RawMessage
24413	err := json.Unmarshal(body, &m)
24414	if err != nil {
24415		return err
24416	}
24417	for k, v := range m {
24418		switch k {
24419		case "sku":
24420			if v != nil {
24421				var sku PublicIPPrefixSku
24422				err = json.Unmarshal(*v, &sku)
24423				if err != nil {
24424					return err
24425				}
24426				pip.Sku = &sku
24427			}
24428		case "properties":
24429			if v != nil {
24430				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
24431				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
24432				if err != nil {
24433					return err
24434				}
24435				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
24436			}
24437		case "etag":
24438			if v != nil {
24439				var etag string
24440				err = json.Unmarshal(*v, &etag)
24441				if err != nil {
24442					return err
24443				}
24444				pip.Etag = &etag
24445			}
24446		case "zones":
24447			if v != nil {
24448				var zones []string
24449				err = json.Unmarshal(*v, &zones)
24450				if err != nil {
24451					return err
24452				}
24453				pip.Zones = &zones
24454			}
24455		case "id":
24456			if v != nil {
24457				var ID string
24458				err = json.Unmarshal(*v, &ID)
24459				if err != nil {
24460					return err
24461				}
24462				pip.ID = &ID
24463			}
24464		case "name":
24465			if v != nil {
24466				var name string
24467				err = json.Unmarshal(*v, &name)
24468				if err != nil {
24469					return err
24470				}
24471				pip.Name = &name
24472			}
24473		case "type":
24474			if v != nil {
24475				var typeVar string
24476				err = json.Unmarshal(*v, &typeVar)
24477				if err != nil {
24478					return err
24479				}
24480				pip.Type = &typeVar
24481			}
24482		case "location":
24483			if v != nil {
24484				var location string
24485				err = json.Unmarshal(*v, &location)
24486				if err != nil {
24487					return err
24488				}
24489				pip.Location = &location
24490			}
24491		case "tags":
24492			if v != nil {
24493				var tags map[string]*string
24494				err = json.Unmarshal(*v, &tags)
24495				if err != nil {
24496					return err
24497				}
24498				pip.Tags = tags
24499			}
24500		}
24501	}
24502
24503	return nil
24504}
24505
24506// PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24507// long-running operation.
24508type PublicIPPrefixesCreateOrUpdateFuture struct {
24509	azure.Future
24510}
24511
24512// Result returns the result of the asynchronous operation.
24513// If the operation has not completed it will return an error.
24514func (future *PublicIPPrefixesCreateOrUpdateFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
24515	var done bool
24516	done, err = future.DoneWithContext(context.Background(), client)
24517	if err != nil {
24518		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24519		return
24520	}
24521	if !done {
24522		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
24523		return
24524	}
24525	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24526	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
24527		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
24528		if err != nil {
24529			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
24530		}
24531	}
24532	return
24533}
24534
24535// PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24536// operation.
24537type PublicIPPrefixesDeleteFuture struct {
24538	azure.Future
24539}
24540
24541// Result returns the result of the asynchronous operation.
24542// If the operation has not completed it will return an error.
24543func (future *PublicIPPrefixesDeleteFuture) Result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
24544	var done bool
24545	done, err = future.DoneWithContext(context.Background(), client)
24546	if err != nil {
24547		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
24548		return
24549	}
24550	if !done {
24551		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
24552		return
24553	}
24554	ar.Response = future.Response()
24555	return
24556}
24557
24558// PublicIPPrefixesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
24559// long-running operation.
24560type PublicIPPrefixesUpdateTagsFuture struct {
24561	azure.Future
24562}
24563
24564// Result returns the result of the asynchronous operation.
24565// If the operation has not completed it will return an error.
24566func (future *PublicIPPrefixesUpdateTagsFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
24567	var done bool
24568	done, err = future.DoneWithContext(context.Background(), client)
24569	if err != nil {
24570		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
24571		return
24572	}
24573	if !done {
24574		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesUpdateTagsFuture")
24575		return
24576	}
24577	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24578	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
24579		pip, err = client.UpdateTagsResponder(pip.Response.Response)
24580		if err != nil {
24581			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", pip.Response.Response, "Failure responding to request")
24582		}
24583	}
24584	return
24585}
24586
24587// PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
24588type PublicIPPrefixListResult struct {
24589	autorest.Response `json:"-"`
24590	// Value - A list of public IP prefixes that exists in a resource group.
24591	Value *[]PublicIPPrefix `json:"value,omitempty"`
24592	// NextLink - The URL to get the next set of results.
24593	NextLink *string `json:"nextLink,omitempty"`
24594}
24595
24596// PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
24597type PublicIPPrefixListResultIterator struct {
24598	i    int
24599	page PublicIPPrefixListResultPage
24600}
24601
24602// NextWithContext advances to the next value.  If there was an error making
24603// the request the iterator does not advance and the error is returned.
24604func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
24605	if tracing.IsEnabled() {
24606		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
24607		defer func() {
24608			sc := -1
24609			if iter.Response().Response.Response != nil {
24610				sc = iter.Response().Response.Response.StatusCode
24611			}
24612			tracing.EndSpan(ctx, sc, err)
24613		}()
24614	}
24615	iter.i++
24616	if iter.i < len(iter.page.Values()) {
24617		return nil
24618	}
24619	err = iter.page.NextWithContext(ctx)
24620	if err != nil {
24621		iter.i--
24622		return err
24623	}
24624	iter.i = 0
24625	return nil
24626}
24627
24628// Next advances to the next value.  If there was an error making
24629// the request the iterator does not advance and the error is returned.
24630// Deprecated: Use NextWithContext() instead.
24631func (iter *PublicIPPrefixListResultIterator) Next() error {
24632	return iter.NextWithContext(context.Background())
24633}
24634
24635// NotDone returns true if the enumeration should be started or is not yet complete.
24636func (iter PublicIPPrefixListResultIterator) NotDone() bool {
24637	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24638}
24639
24640// Response returns the raw server response from the last page request.
24641func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
24642	return iter.page.Response()
24643}
24644
24645// Value returns the current value or a zero-initialized value if the
24646// iterator has advanced beyond the end of the collection.
24647func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
24648	if !iter.page.NotDone() {
24649		return PublicIPPrefix{}
24650	}
24651	return iter.page.Values()[iter.i]
24652}
24653
24654// Creates a new instance of the PublicIPPrefixListResultIterator type.
24655func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
24656	return PublicIPPrefixListResultIterator{page: page}
24657}
24658
24659// IsEmpty returns true if the ListResult contains no values.
24660func (piplr PublicIPPrefixListResult) IsEmpty() bool {
24661	return piplr.Value == nil || len(*piplr.Value) == 0
24662}
24663
24664// publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
24665// It returns nil if no more results exist.
24666func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
24667	if piplr.NextLink == nil || len(to.String(piplr.NextLink)) < 1 {
24668		return nil, nil
24669	}
24670	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24671		autorest.AsJSON(),
24672		autorest.AsGet(),
24673		autorest.WithBaseURL(to.String(piplr.NextLink)))
24674}
24675
24676// PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
24677type PublicIPPrefixListResultPage struct {
24678	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
24679	piplr PublicIPPrefixListResult
24680}
24681
24682// NextWithContext advances to the next page of values.  If there was an error making
24683// the request the page does not advance and the error is returned.
24684func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
24685	if tracing.IsEnabled() {
24686		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
24687		defer func() {
24688			sc := -1
24689			if page.Response().Response.Response != nil {
24690				sc = page.Response().Response.Response.StatusCode
24691			}
24692			tracing.EndSpan(ctx, sc, err)
24693		}()
24694	}
24695	next, err := page.fn(ctx, page.piplr)
24696	if err != nil {
24697		return err
24698	}
24699	page.piplr = next
24700	return nil
24701}
24702
24703// Next advances to the next page of values.  If there was an error making
24704// the request the page does not advance and the error is returned.
24705// Deprecated: Use NextWithContext() instead.
24706func (page *PublicIPPrefixListResultPage) Next() error {
24707	return page.NextWithContext(context.Background())
24708}
24709
24710// NotDone returns true if the page enumeration should be started or is not yet complete.
24711func (page PublicIPPrefixListResultPage) NotDone() bool {
24712	return !page.piplr.IsEmpty()
24713}
24714
24715// Response returns the raw server response from the last page request.
24716func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
24717	return page.piplr
24718}
24719
24720// Values returns the slice of values for the current page or nil if there are no values.
24721func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
24722	if page.piplr.IsEmpty() {
24723		return nil
24724	}
24725	return *page.piplr.Value
24726}
24727
24728// Creates a new instance of the PublicIPPrefixListResultPage type.
24729func NewPublicIPPrefixListResultPage(getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
24730	return PublicIPPrefixListResultPage{fn: getNextPage}
24731}
24732
24733// PublicIPPrefixPropertiesFormat public IP prefix properties.
24734type PublicIPPrefixPropertiesFormat struct {
24735	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
24736	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
24737	// IPTags - The list of tags associated with the public IP prefix.
24738	IPTags *[]IPTag `json:"ipTags,omitempty"`
24739	// PrefixLength - The Length of the Public IP Prefix.
24740	PrefixLength *int32 `json:"prefixLength,omitempty"`
24741	// IPPrefix - The allocated Prefix.
24742	IPPrefix *string `json:"ipPrefix,omitempty"`
24743	// PublicIPAddresses - The list of all referenced PublicIPAddresses.
24744	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
24745	// LoadBalancerFrontendIPConfiguration - READ-ONLY; The reference to load balancer frontend IP configuration associated with the public IP prefix.
24746	LoadBalancerFrontendIPConfiguration *SubResource `json:"loadBalancerFrontendIpConfiguration,omitempty"`
24747	// ResourceGUID - The resource GUID property of the public IP prefix resource.
24748	ResourceGUID *string `json:"resourceGuid,omitempty"`
24749	// ProvisioningState - The provisioning state of the public IP prefix resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24750	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24751}
24752
24753// PublicIPPrefixSku SKU of a public IP prefix.
24754type PublicIPPrefixSku struct {
24755	// Name - Name of a public IP prefix SKU. Possible values include: 'PublicIPPrefixSkuNameStandard'
24756	Name PublicIPPrefixSkuName `json:"name,omitempty"`
24757}
24758
24759// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
24760type QueryTroubleshootingParameters struct {
24761	// TargetResourceID - The target resource ID to query the troubleshooting result.
24762	TargetResourceID *string `json:"targetResourceId,omitempty"`
24763}
24764
24765// ReferencedPublicIPAddress reference to a public IP address.
24766type ReferencedPublicIPAddress struct {
24767	// ID - The PublicIPAddress Reference.
24768	ID *string `json:"id,omitempty"`
24769}
24770
24771// Resource common resource representation.
24772type Resource struct {
24773	// ID - Resource ID.
24774	ID *string `json:"id,omitempty"`
24775	// Name - READ-ONLY; Resource name.
24776	Name *string `json:"name,omitempty"`
24777	// Type - READ-ONLY; Resource type.
24778	Type *string `json:"type,omitempty"`
24779	// Location - Resource location.
24780	Location *string `json:"location,omitempty"`
24781	// Tags - Resource tags.
24782	Tags map[string]*string `json:"tags"`
24783}
24784
24785// MarshalJSON is the custom marshaler for Resource.
24786func (r Resource) MarshalJSON() ([]byte, error) {
24787	objectMap := make(map[string]interface{})
24788	if r.ID != nil {
24789		objectMap["id"] = r.ID
24790	}
24791	if r.Location != nil {
24792		objectMap["location"] = r.Location
24793	}
24794	if r.Tags != nil {
24795		objectMap["tags"] = r.Tags
24796	}
24797	return json.Marshal(objectMap)
24798}
24799
24800// ResourceNavigationLink resourceNavigationLink resource.
24801type ResourceNavigationLink struct {
24802	// ResourceNavigationLinkFormat - Resource navigation link properties format.
24803	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
24804	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
24805	Name *string `json:"name,omitempty"`
24806	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
24807	Etag *string `json:"etag,omitempty"`
24808	// Type - READ-ONLY; Resource type.
24809	Type *string `json:"type,omitempty"`
24810	// ID - Resource ID.
24811	ID *string `json:"id,omitempty"`
24812}
24813
24814// MarshalJSON is the custom marshaler for ResourceNavigationLink.
24815func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
24816	objectMap := make(map[string]interface{})
24817	if rnl.ResourceNavigationLinkFormat != nil {
24818		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
24819	}
24820	if rnl.Name != nil {
24821		objectMap["name"] = rnl.Name
24822	}
24823	if rnl.ID != nil {
24824		objectMap["id"] = rnl.ID
24825	}
24826	return json.Marshal(objectMap)
24827}
24828
24829// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
24830func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
24831	var m map[string]*json.RawMessage
24832	err := json.Unmarshal(body, &m)
24833	if err != nil {
24834		return err
24835	}
24836	for k, v := range m {
24837		switch k {
24838		case "properties":
24839			if v != nil {
24840				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
24841				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
24842				if err != nil {
24843					return err
24844				}
24845				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
24846			}
24847		case "name":
24848			if v != nil {
24849				var name string
24850				err = json.Unmarshal(*v, &name)
24851				if err != nil {
24852					return err
24853				}
24854				rnl.Name = &name
24855			}
24856		case "etag":
24857			if v != nil {
24858				var etag string
24859				err = json.Unmarshal(*v, &etag)
24860				if err != nil {
24861					return err
24862				}
24863				rnl.Etag = &etag
24864			}
24865		case "type":
24866			if v != nil {
24867				var typeVar string
24868				err = json.Unmarshal(*v, &typeVar)
24869				if err != nil {
24870					return err
24871				}
24872				rnl.Type = &typeVar
24873			}
24874		case "id":
24875			if v != nil {
24876				var ID string
24877				err = json.Unmarshal(*v, &ID)
24878				if err != nil {
24879					return err
24880				}
24881				rnl.ID = &ID
24882			}
24883		}
24884	}
24885
24886	return nil
24887}
24888
24889// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
24890type ResourceNavigationLinkFormat struct {
24891	// LinkedResourceType - Resource type of the linked resource.
24892	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
24893	// Link - Link to the external resource.
24894	Link *string `json:"link,omitempty"`
24895	// ProvisioningState - READ-ONLY; The provisioning state of the resource navigation link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24896	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24897}
24898
24899// ResourceNavigationLinksListResult response for ResourceNavigationLinks_List operation.
24900type ResourceNavigationLinksListResult struct {
24901	autorest.Response `json:"-"`
24902	// Value - The resource navigation links in a subnet.
24903	Value *[]ResourceNavigationLink `json:"value,omitempty"`
24904	// NextLink - READ-ONLY; The URL to get the next set of results.
24905	NextLink *string `json:"nextLink,omitempty"`
24906}
24907
24908// ResourceSet the base resource set for visibility and auto-approval.
24909type ResourceSet struct {
24910	// Subscriptions - The list of subscriptions.
24911	Subscriptions *[]string `json:"subscriptions,omitempty"`
24912}
24913
24914// RetentionPolicyParameters parameters that define the retention policy for flow log.
24915type RetentionPolicyParameters struct {
24916	// Days - Number of days to retain flow log records.
24917	Days *int32 `json:"days,omitempty"`
24918	// Enabled - Flag to enable/disable retention.
24919	Enabled *bool `json:"enabled,omitempty"`
24920}
24921
24922// Route route resource.
24923type Route struct {
24924	autorest.Response `json:"-"`
24925	// RoutePropertiesFormat - Properties of the route.
24926	*RoutePropertiesFormat `json:"properties,omitempty"`
24927	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
24928	Name *string `json:"name,omitempty"`
24929	// Etag - A unique read-only string that changes whenever the resource is updated.
24930	Etag *string `json:"etag,omitempty"`
24931	// ID - Resource ID.
24932	ID *string `json:"id,omitempty"`
24933}
24934
24935// MarshalJSON is the custom marshaler for Route.
24936func (r Route) MarshalJSON() ([]byte, error) {
24937	objectMap := make(map[string]interface{})
24938	if r.RoutePropertiesFormat != nil {
24939		objectMap["properties"] = r.RoutePropertiesFormat
24940	}
24941	if r.Name != nil {
24942		objectMap["name"] = r.Name
24943	}
24944	if r.Etag != nil {
24945		objectMap["etag"] = r.Etag
24946	}
24947	if r.ID != nil {
24948		objectMap["id"] = r.ID
24949	}
24950	return json.Marshal(objectMap)
24951}
24952
24953// UnmarshalJSON is the custom unmarshaler for Route struct.
24954func (r *Route) UnmarshalJSON(body []byte) error {
24955	var m map[string]*json.RawMessage
24956	err := json.Unmarshal(body, &m)
24957	if err != nil {
24958		return err
24959	}
24960	for k, v := range m {
24961		switch k {
24962		case "properties":
24963			if v != nil {
24964				var routePropertiesFormat RoutePropertiesFormat
24965				err = json.Unmarshal(*v, &routePropertiesFormat)
24966				if err != nil {
24967					return err
24968				}
24969				r.RoutePropertiesFormat = &routePropertiesFormat
24970			}
24971		case "name":
24972			if v != nil {
24973				var name string
24974				err = json.Unmarshal(*v, &name)
24975				if err != nil {
24976					return err
24977				}
24978				r.Name = &name
24979			}
24980		case "etag":
24981			if v != nil {
24982				var etag string
24983				err = json.Unmarshal(*v, &etag)
24984				if err != nil {
24985					return err
24986				}
24987				r.Etag = &etag
24988			}
24989		case "id":
24990			if v != nil {
24991				var ID string
24992				err = json.Unmarshal(*v, &ID)
24993				if err != nil {
24994					return err
24995				}
24996				r.ID = &ID
24997			}
24998		}
24999	}
25000
25001	return nil
25002}
25003
25004// RouteFilter route Filter Resource.
25005type RouteFilter struct {
25006	autorest.Response `json:"-"`
25007	// RouteFilterPropertiesFormat - Properties of the route filter.
25008	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
25009	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25010	Etag *string `json:"etag,omitempty"`
25011	// ID - Resource ID.
25012	ID *string `json:"id,omitempty"`
25013	// Name - READ-ONLY; Resource name.
25014	Name *string `json:"name,omitempty"`
25015	// Type - READ-ONLY; Resource type.
25016	Type *string `json:"type,omitempty"`
25017	// Location - Resource location.
25018	Location *string `json:"location,omitempty"`
25019	// Tags - Resource tags.
25020	Tags map[string]*string `json:"tags"`
25021}
25022
25023// MarshalJSON is the custom marshaler for RouteFilter.
25024func (rf RouteFilter) MarshalJSON() ([]byte, error) {
25025	objectMap := make(map[string]interface{})
25026	if rf.RouteFilterPropertiesFormat != nil {
25027		objectMap["properties"] = rf.RouteFilterPropertiesFormat
25028	}
25029	if rf.ID != nil {
25030		objectMap["id"] = rf.ID
25031	}
25032	if rf.Location != nil {
25033		objectMap["location"] = rf.Location
25034	}
25035	if rf.Tags != nil {
25036		objectMap["tags"] = rf.Tags
25037	}
25038	return json.Marshal(objectMap)
25039}
25040
25041// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
25042func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
25043	var m map[string]*json.RawMessage
25044	err := json.Unmarshal(body, &m)
25045	if err != nil {
25046		return err
25047	}
25048	for k, v := range m {
25049		switch k {
25050		case "properties":
25051			if v != nil {
25052				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
25053				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
25054				if err != nil {
25055					return err
25056				}
25057				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
25058			}
25059		case "etag":
25060			if v != nil {
25061				var etag string
25062				err = json.Unmarshal(*v, &etag)
25063				if err != nil {
25064					return err
25065				}
25066				rf.Etag = &etag
25067			}
25068		case "id":
25069			if v != nil {
25070				var ID string
25071				err = json.Unmarshal(*v, &ID)
25072				if err != nil {
25073					return err
25074				}
25075				rf.ID = &ID
25076			}
25077		case "name":
25078			if v != nil {
25079				var name string
25080				err = json.Unmarshal(*v, &name)
25081				if err != nil {
25082					return err
25083				}
25084				rf.Name = &name
25085			}
25086		case "type":
25087			if v != nil {
25088				var typeVar string
25089				err = json.Unmarshal(*v, &typeVar)
25090				if err != nil {
25091					return err
25092				}
25093				rf.Type = &typeVar
25094			}
25095		case "location":
25096			if v != nil {
25097				var location string
25098				err = json.Unmarshal(*v, &location)
25099				if err != nil {
25100					return err
25101				}
25102				rf.Location = &location
25103			}
25104		case "tags":
25105			if v != nil {
25106				var tags map[string]*string
25107				err = json.Unmarshal(*v, &tags)
25108				if err != nil {
25109					return err
25110				}
25111				rf.Tags = tags
25112			}
25113		}
25114	}
25115
25116	return nil
25117}
25118
25119// RouteFilterListResult response for the ListRouteFilters API service call.
25120type RouteFilterListResult struct {
25121	autorest.Response `json:"-"`
25122	// Value - A list of route filters in a resource group.
25123	Value *[]RouteFilter `json:"value,omitempty"`
25124	// NextLink - The URL to get the next set of results.
25125	NextLink *string `json:"nextLink,omitempty"`
25126}
25127
25128// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
25129type RouteFilterListResultIterator struct {
25130	i    int
25131	page RouteFilterListResultPage
25132}
25133
25134// NextWithContext advances to the next value.  If there was an error making
25135// the request the iterator does not advance and the error is returned.
25136func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
25137	if tracing.IsEnabled() {
25138		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
25139		defer func() {
25140			sc := -1
25141			if iter.Response().Response.Response != nil {
25142				sc = iter.Response().Response.Response.StatusCode
25143			}
25144			tracing.EndSpan(ctx, sc, err)
25145		}()
25146	}
25147	iter.i++
25148	if iter.i < len(iter.page.Values()) {
25149		return nil
25150	}
25151	err = iter.page.NextWithContext(ctx)
25152	if err != nil {
25153		iter.i--
25154		return err
25155	}
25156	iter.i = 0
25157	return nil
25158}
25159
25160// Next advances to the next value.  If there was an error making
25161// the request the iterator does not advance and the error is returned.
25162// Deprecated: Use NextWithContext() instead.
25163func (iter *RouteFilterListResultIterator) Next() error {
25164	return iter.NextWithContext(context.Background())
25165}
25166
25167// NotDone returns true if the enumeration should be started or is not yet complete.
25168func (iter RouteFilterListResultIterator) NotDone() bool {
25169	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25170}
25171
25172// Response returns the raw server response from the last page request.
25173func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
25174	return iter.page.Response()
25175}
25176
25177// Value returns the current value or a zero-initialized value if the
25178// iterator has advanced beyond the end of the collection.
25179func (iter RouteFilterListResultIterator) Value() RouteFilter {
25180	if !iter.page.NotDone() {
25181		return RouteFilter{}
25182	}
25183	return iter.page.Values()[iter.i]
25184}
25185
25186// Creates a new instance of the RouteFilterListResultIterator type.
25187func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
25188	return RouteFilterListResultIterator{page: page}
25189}
25190
25191// IsEmpty returns true if the ListResult contains no values.
25192func (rflr RouteFilterListResult) IsEmpty() bool {
25193	return rflr.Value == nil || len(*rflr.Value) == 0
25194}
25195
25196// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
25197// It returns nil if no more results exist.
25198func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
25199	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
25200		return nil, nil
25201	}
25202	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25203		autorest.AsJSON(),
25204		autorest.AsGet(),
25205		autorest.WithBaseURL(to.String(rflr.NextLink)))
25206}
25207
25208// RouteFilterListResultPage contains a page of RouteFilter values.
25209type RouteFilterListResultPage struct {
25210	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
25211	rflr RouteFilterListResult
25212}
25213
25214// NextWithContext advances to the next page of values.  If there was an error making
25215// the request the page does not advance and the error is returned.
25216func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
25217	if tracing.IsEnabled() {
25218		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
25219		defer func() {
25220			sc := -1
25221			if page.Response().Response.Response != nil {
25222				sc = page.Response().Response.Response.StatusCode
25223			}
25224			tracing.EndSpan(ctx, sc, err)
25225		}()
25226	}
25227	next, err := page.fn(ctx, page.rflr)
25228	if err != nil {
25229		return err
25230	}
25231	page.rflr = next
25232	return nil
25233}
25234
25235// Next advances to the next page of values.  If there was an error making
25236// the request the page does not advance and the error is returned.
25237// Deprecated: Use NextWithContext() instead.
25238func (page *RouteFilterListResultPage) Next() error {
25239	return page.NextWithContext(context.Background())
25240}
25241
25242// NotDone returns true if the page enumeration should be started or is not yet complete.
25243func (page RouteFilterListResultPage) NotDone() bool {
25244	return !page.rflr.IsEmpty()
25245}
25246
25247// Response returns the raw server response from the last page request.
25248func (page RouteFilterListResultPage) Response() RouteFilterListResult {
25249	return page.rflr
25250}
25251
25252// Values returns the slice of values for the current page or nil if there are no values.
25253func (page RouteFilterListResultPage) Values() []RouteFilter {
25254	if page.rflr.IsEmpty() {
25255		return nil
25256	}
25257	return *page.rflr.Value
25258}
25259
25260// Creates a new instance of the RouteFilterListResultPage type.
25261func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
25262	return RouteFilterListResultPage{fn: getNextPage}
25263}
25264
25265// RouteFilterPropertiesFormat route Filter Resource.
25266type RouteFilterPropertiesFormat struct {
25267	// Rules - Collection of RouteFilterRules contained within a route filter.
25268	Rules *[]RouteFilterRule `json:"rules,omitempty"`
25269	// Peerings - A collection of references to express route circuit peerings.
25270	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
25271	// Ipv6Peerings - A collection of references to express route circuit ipv6 peerings.
25272	Ipv6Peerings *[]ExpressRouteCircuitPeering `json:"ipv6Peerings,omitempty"`
25273	// ProvisioningState - READ-ONLY; The provisioning state of the route filter resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25274	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25275}
25276
25277// RouteFilterRule route Filter Rule Resource.
25278type RouteFilterRule struct {
25279	autorest.Response `json:"-"`
25280	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
25281	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
25282	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
25283	Name *string `json:"name,omitempty"`
25284	// Location - Resource location.
25285	Location *string `json:"location,omitempty"`
25286	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25287	Etag *string `json:"etag,omitempty"`
25288	// ID - Resource ID.
25289	ID *string `json:"id,omitempty"`
25290}
25291
25292// MarshalJSON is the custom marshaler for RouteFilterRule.
25293func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
25294	objectMap := make(map[string]interface{})
25295	if rfr.RouteFilterRulePropertiesFormat != nil {
25296		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
25297	}
25298	if rfr.Name != nil {
25299		objectMap["name"] = rfr.Name
25300	}
25301	if rfr.Location != nil {
25302		objectMap["location"] = rfr.Location
25303	}
25304	if rfr.ID != nil {
25305		objectMap["id"] = rfr.ID
25306	}
25307	return json.Marshal(objectMap)
25308}
25309
25310// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
25311func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
25312	var m map[string]*json.RawMessage
25313	err := json.Unmarshal(body, &m)
25314	if err != nil {
25315		return err
25316	}
25317	for k, v := range m {
25318		switch k {
25319		case "properties":
25320			if v != nil {
25321				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
25322				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
25323				if err != nil {
25324					return err
25325				}
25326				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
25327			}
25328		case "name":
25329			if v != nil {
25330				var name string
25331				err = json.Unmarshal(*v, &name)
25332				if err != nil {
25333					return err
25334				}
25335				rfr.Name = &name
25336			}
25337		case "location":
25338			if v != nil {
25339				var location string
25340				err = json.Unmarshal(*v, &location)
25341				if err != nil {
25342					return err
25343				}
25344				rfr.Location = &location
25345			}
25346		case "etag":
25347			if v != nil {
25348				var etag string
25349				err = json.Unmarshal(*v, &etag)
25350				if err != nil {
25351					return err
25352				}
25353				rfr.Etag = &etag
25354			}
25355		case "id":
25356			if v != nil {
25357				var ID string
25358				err = json.Unmarshal(*v, &ID)
25359				if err != nil {
25360					return err
25361				}
25362				rfr.ID = &ID
25363			}
25364		}
25365	}
25366
25367	return nil
25368}
25369
25370// RouteFilterRuleListResult response for the ListRouteFilterRules API service call.
25371type RouteFilterRuleListResult struct {
25372	autorest.Response `json:"-"`
25373	// Value - A list of RouteFilterRules in a resource group.
25374	Value *[]RouteFilterRule `json:"value,omitempty"`
25375	// NextLink - The URL to get the next set of results.
25376	NextLink *string `json:"nextLink,omitempty"`
25377}
25378
25379// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
25380type RouteFilterRuleListResultIterator struct {
25381	i    int
25382	page RouteFilterRuleListResultPage
25383}
25384
25385// NextWithContext advances to the next value.  If there was an error making
25386// the request the iterator does not advance and the error is returned.
25387func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
25388	if tracing.IsEnabled() {
25389		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
25390		defer func() {
25391			sc := -1
25392			if iter.Response().Response.Response != nil {
25393				sc = iter.Response().Response.Response.StatusCode
25394			}
25395			tracing.EndSpan(ctx, sc, err)
25396		}()
25397	}
25398	iter.i++
25399	if iter.i < len(iter.page.Values()) {
25400		return nil
25401	}
25402	err = iter.page.NextWithContext(ctx)
25403	if err != nil {
25404		iter.i--
25405		return err
25406	}
25407	iter.i = 0
25408	return nil
25409}
25410
25411// Next advances to the next value.  If there was an error making
25412// the request the iterator does not advance and the error is returned.
25413// Deprecated: Use NextWithContext() instead.
25414func (iter *RouteFilterRuleListResultIterator) Next() error {
25415	return iter.NextWithContext(context.Background())
25416}
25417
25418// NotDone returns true if the enumeration should be started or is not yet complete.
25419func (iter RouteFilterRuleListResultIterator) NotDone() bool {
25420	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25421}
25422
25423// Response returns the raw server response from the last page request.
25424func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
25425	return iter.page.Response()
25426}
25427
25428// Value returns the current value or a zero-initialized value if the
25429// iterator has advanced beyond the end of the collection.
25430func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
25431	if !iter.page.NotDone() {
25432		return RouteFilterRule{}
25433	}
25434	return iter.page.Values()[iter.i]
25435}
25436
25437// Creates a new instance of the RouteFilterRuleListResultIterator type.
25438func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
25439	return RouteFilterRuleListResultIterator{page: page}
25440}
25441
25442// IsEmpty returns true if the ListResult contains no values.
25443func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
25444	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
25445}
25446
25447// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
25448// It returns nil if no more results exist.
25449func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
25450	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
25451		return nil, nil
25452	}
25453	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25454		autorest.AsJSON(),
25455		autorest.AsGet(),
25456		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
25457}
25458
25459// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
25460type RouteFilterRuleListResultPage struct {
25461	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
25462	rfrlr RouteFilterRuleListResult
25463}
25464
25465// NextWithContext advances to the next page of values.  If there was an error making
25466// the request the page does not advance and the error is returned.
25467func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
25468	if tracing.IsEnabled() {
25469		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
25470		defer func() {
25471			sc := -1
25472			if page.Response().Response.Response != nil {
25473				sc = page.Response().Response.Response.StatusCode
25474			}
25475			tracing.EndSpan(ctx, sc, err)
25476		}()
25477	}
25478	next, err := page.fn(ctx, page.rfrlr)
25479	if err != nil {
25480		return err
25481	}
25482	page.rfrlr = next
25483	return nil
25484}
25485
25486// Next advances to the next page of values.  If there was an error making
25487// the request the page does not advance and the error is returned.
25488// Deprecated: Use NextWithContext() instead.
25489func (page *RouteFilterRuleListResultPage) Next() error {
25490	return page.NextWithContext(context.Background())
25491}
25492
25493// NotDone returns true if the page enumeration should be started or is not yet complete.
25494func (page RouteFilterRuleListResultPage) NotDone() bool {
25495	return !page.rfrlr.IsEmpty()
25496}
25497
25498// Response returns the raw server response from the last page request.
25499func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
25500	return page.rfrlr
25501}
25502
25503// Values returns the slice of values for the current page or nil if there are no values.
25504func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
25505	if page.rfrlr.IsEmpty() {
25506		return nil
25507	}
25508	return *page.rfrlr.Value
25509}
25510
25511// Creates a new instance of the RouteFilterRuleListResultPage type.
25512func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
25513	return RouteFilterRuleListResultPage{fn: getNextPage}
25514}
25515
25516// RouteFilterRulePropertiesFormat route Filter Rule Resource.
25517type RouteFilterRulePropertiesFormat struct {
25518	// Access - The access type of the rule. Possible values include: 'Allow', 'Deny'
25519	Access Access `json:"access,omitempty"`
25520	// RouteFilterRuleType - The rule type of the rule.
25521	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
25522	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
25523	Communities *[]string `json:"communities,omitempty"`
25524	// ProvisioningState - READ-ONLY; The provisioning state of the route filter rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25525	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25526}
25527
25528// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25529// long-running operation.
25530type RouteFilterRulesCreateOrUpdateFuture struct {
25531	azure.Future
25532}
25533
25534// Result returns the result of the asynchronous operation.
25535// If the operation has not completed it will return an error.
25536func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
25537	var done bool
25538	done, err = future.DoneWithContext(context.Background(), client)
25539	if err != nil {
25540		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25541		return
25542	}
25543	if !done {
25544		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
25545		return
25546	}
25547	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25548	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
25549		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
25550		if err != nil {
25551			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
25552		}
25553	}
25554	return
25555}
25556
25557// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25558// operation.
25559type RouteFilterRulesDeleteFuture struct {
25560	azure.Future
25561}
25562
25563// Result returns the result of the asynchronous operation.
25564// If the operation has not completed it will return an error.
25565func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
25566	var done bool
25567	done, err = future.DoneWithContext(context.Background(), client)
25568	if err != nil {
25569		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
25570		return
25571	}
25572	if !done {
25573		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
25574		return
25575	}
25576	ar.Response = future.Response()
25577	return
25578}
25579
25580// RouteFilterRulesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
25581// operation.
25582type RouteFilterRulesUpdateFuture struct {
25583	azure.Future
25584}
25585
25586// Result returns the result of the asynchronous operation.
25587// If the operation has not completed it will return an error.
25588func (future *RouteFilterRulesUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
25589	var done bool
25590	done, err = future.DoneWithContext(context.Background(), client)
25591	if err != nil {
25592		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", future.Response(), "Polling failure")
25593		return
25594	}
25595	if !done {
25596		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesUpdateFuture")
25597		return
25598	}
25599	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25600	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
25601		rfr, err = client.UpdateResponder(rfr.Response.Response)
25602		if err != nil {
25603			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
25604		}
25605	}
25606	return
25607}
25608
25609// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25610// long-running operation.
25611type RouteFiltersCreateOrUpdateFuture struct {
25612	azure.Future
25613}
25614
25615// Result returns the result of the asynchronous operation.
25616// If the operation has not completed it will return an error.
25617func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
25618	var done bool
25619	done, err = future.DoneWithContext(context.Background(), client)
25620	if err != nil {
25621		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25622		return
25623	}
25624	if !done {
25625		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
25626		return
25627	}
25628	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25629	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
25630		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
25631		if err != nil {
25632			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
25633		}
25634	}
25635	return
25636}
25637
25638// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25639// operation.
25640type RouteFiltersDeleteFuture struct {
25641	azure.Future
25642}
25643
25644// Result returns the result of the asynchronous operation.
25645// If the operation has not completed it will return an error.
25646func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
25647	var done bool
25648	done, err = future.DoneWithContext(context.Background(), client)
25649	if err != nil {
25650		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
25651		return
25652	}
25653	if !done {
25654		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
25655		return
25656	}
25657	ar.Response = future.Response()
25658	return
25659}
25660
25661// RouteFiltersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
25662// operation.
25663type RouteFiltersUpdateFuture struct {
25664	azure.Future
25665}
25666
25667// Result returns the result of the asynchronous operation.
25668// If the operation has not completed it will return an error.
25669func (future *RouteFiltersUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
25670	var done bool
25671	done, err = future.DoneWithContext(context.Background(), client)
25672	if err != nil {
25673		err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", future.Response(), "Polling failure")
25674		return
25675	}
25676	if !done {
25677		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersUpdateFuture")
25678		return
25679	}
25680	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25681	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
25682		rf, err = client.UpdateResponder(rf.Response.Response)
25683		if err != nil {
25684			err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
25685		}
25686	}
25687	return
25688}
25689
25690// RouteListResult response for the ListRoute API service call.
25691type RouteListResult struct {
25692	autorest.Response `json:"-"`
25693	// Value - A list of routes in a resource group.
25694	Value *[]Route `json:"value,omitempty"`
25695	// NextLink - The URL to get the next set of results.
25696	NextLink *string `json:"nextLink,omitempty"`
25697}
25698
25699// RouteListResultIterator provides access to a complete listing of Route values.
25700type RouteListResultIterator struct {
25701	i    int
25702	page RouteListResultPage
25703}
25704
25705// NextWithContext advances to the next value.  If there was an error making
25706// the request the iterator does not advance and the error is returned.
25707func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
25708	if tracing.IsEnabled() {
25709		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
25710		defer func() {
25711			sc := -1
25712			if iter.Response().Response.Response != nil {
25713				sc = iter.Response().Response.Response.StatusCode
25714			}
25715			tracing.EndSpan(ctx, sc, err)
25716		}()
25717	}
25718	iter.i++
25719	if iter.i < len(iter.page.Values()) {
25720		return nil
25721	}
25722	err = iter.page.NextWithContext(ctx)
25723	if err != nil {
25724		iter.i--
25725		return err
25726	}
25727	iter.i = 0
25728	return nil
25729}
25730
25731// Next advances to the next value.  If there was an error making
25732// the request the iterator does not advance and the error is returned.
25733// Deprecated: Use NextWithContext() instead.
25734func (iter *RouteListResultIterator) Next() error {
25735	return iter.NextWithContext(context.Background())
25736}
25737
25738// NotDone returns true if the enumeration should be started or is not yet complete.
25739func (iter RouteListResultIterator) NotDone() bool {
25740	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25741}
25742
25743// Response returns the raw server response from the last page request.
25744func (iter RouteListResultIterator) Response() RouteListResult {
25745	return iter.page.Response()
25746}
25747
25748// Value returns the current value or a zero-initialized value if the
25749// iterator has advanced beyond the end of the collection.
25750func (iter RouteListResultIterator) Value() Route {
25751	if !iter.page.NotDone() {
25752		return Route{}
25753	}
25754	return iter.page.Values()[iter.i]
25755}
25756
25757// Creates a new instance of the RouteListResultIterator type.
25758func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
25759	return RouteListResultIterator{page: page}
25760}
25761
25762// IsEmpty returns true if the ListResult contains no values.
25763func (rlr RouteListResult) IsEmpty() bool {
25764	return rlr.Value == nil || len(*rlr.Value) == 0
25765}
25766
25767// routeListResultPreparer prepares a request to retrieve the next set of results.
25768// It returns nil if no more results exist.
25769func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
25770	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
25771		return nil, nil
25772	}
25773	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25774		autorest.AsJSON(),
25775		autorest.AsGet(),
25776		autorest.WithBaseURL(to.String(rlr.NextLink)))
25777}
25778
25779// RouteListResultPage contains a page of Route values.
25780type RouteListResultPage struct {
25781	fn  func(context.Context, RouteListResult) (RouteListResult, error)
25782	rlr RouteListResult
25783}
25784
25785// NextWithContext advances to the next page of values.  If there was an error making
25786// the request the page does not advance and the error is returned.
25787func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
25788	if tracing.IsEnabled() {
25789		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
25790		defer func() {
25791			sc := -1
25792			if page.Response().Response.Response != nil {
25793				sc = page.Response().Response.Response.StatusCode
25794			}
25795			tracing.EndSpan(ctx, sc, err)
25796		}()
25797	}
25798	next, err := page.fn(ctx, page.rlr)
25799	if err != nil {
25800		return err
25801	}
25802	page.rlr = next
25803	return nil
25804}
25805
25806// Next advances to the next page of values.  If there was an error making
25807// the request the page does not advance and the error is returned.
25808// Deprecated: Use NextWithContext() instead.
25809func (page *RouteListResultPage) Next() error {
25810	return page.NextWithContext(context.Background())
25811}
25812
25813// NotDone returns true if the page enumeration should be started or is not yet complete.
25814func (page RouteListResultPage) NotDone() bool {
25815	return !page.rlr.IsEmpty()
25816}
25817
25818// Response returns the raw server response from the last page request.
25819func (page RouteListResultPage) Response() RouteListResult {
25820	return page.rlr
25821}
25822
25823// Values returns the slice of values for the current page or nil if there are no values.
25824func (page RouteListResultPage) Values() []Route {
25825	if page.rlr.IsEmpty() {
25826		return nil
25827	}
25828	return *page.rlr.Value
25829}
25830
25831// Creates a new instance of the RouteListResultPage type.
25832func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
25833	return RouteListResultPage{fn: getNextPage}
25834}
25835
25836// RoutePropertiesFormat route resource.
25837type RoutePropertiesFormat struct {
25838	// AddressPrefix - The destination CIDR to which the route applies.
25839	AddressPrefix *string `json:"addressPrefix,omitempty"`
25840	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
25841	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
25842	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
25843	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
25844	// ProvisioningState - The provisioning state of the route resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25845	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25846}
25847
25848// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
25849// operation.
25850type RoutesCreateOrUpdateFuture struct {
25851	azure.Future
25852}
25853
25854// Result returns the result of the asynchronous operation.
25855// If the operation has not completed it will return an error.
25856func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
25857	var done bool
25858	done, err = future.DoneWithContext(context.Background(), client)
25859	if err != nil {
25860		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25861		return
25862	}
25863	if !done {
25864		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
25865		return
25866	}
25867	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25868	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
25869		r, err = client.CreateOrUpdateResponder(r.Response.Response)
25870		if err != nil {
25871			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
25872		}
25873	}
25874	return
25875}
25876
25877// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
25878type RoutesDeleteFuture struct {
25879	azure.Future
25880}
25881
25882// Result returns the result of the asynchronous operation.
25883// If the operation has not completed it will return an error.
25884func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
25885	var done bool
25886	done, err = future.DoneWithContext(context.Background(), client)
25887	if err != nil {
25888		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
25889		return
25890	}
25891	if !done {
25892		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
25893		return
25894	}
25895	ar.Response = future.Response()
25896	return
25897}
25898
25899// RouteTable route table resource.
25900type RouteTable struct {
25901	autorest.Response `json:"-"`
25902	// RouteTablePropertiesFormat - Properties of the route table.
25903	*RouteTablePropertiesFormat `json:"properties,omitempty"`
25904	// Etag - A unique read-only string that changes whenever the resource is updated.
25905	Etag *string `json:"etag,omitempty"`
25906	// ID - Resource ID.
25907	ID *string `json:"id,omitempty"`
25908	// Name - READ-ONLY; Resource name.
25909	Name *string `json:"name,omitempty"`
25910	// Type - READ-ONLY; Resource type.
25911	Type *string `json:"type,omitempty"`
25912	// Location - Resource location.
25913	Location *string `json:"location,omitempty"`
25914	// Tags - Resource tags.
25915	Tags map[string]*string `json:"tags"`
25916}
25917
25918// MarshalJSON is the custom marshaler for RouteTable.
25919func (rt RouteTable) MarshalJSON() ([]byte, error) {
25920	objectMap := make(map[string]interface{})
25921	if rt.RouteTablePropertiesFormat != nil {
25922		objectMap["properties"] = rt.RouteTablePropertiesFormat
25923	}
25924	if rt.Etag != nil {
25925		objectMap["etag"] = rt.Etag
25926	}
25927	if rt.ID != nil {
25928		objectMap["id"] = rt.ID
25929	}
25930	if rt.Location != nil {
25931		objectMap["location"] = rt.Location
25932	}
25933	if rt.Tags != nil {
25934		objectMap["tags"] = rt.Tags
25935	}
25936	return json.Marshal(objectMap)
25937}
25938
25939// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
25940func (rt *RouteTable) UnmarshalJSON(body []byte) error {
25941	var m map[string]*json.RawMessage
25942	err := json.Unmarshal(body, &m)
25943	if err != nil {
25944		return err
25945	}
25946	for k, v := range m {
25947		switch k {
25948		case "properties":
25949			if v != nil {
25950				var routeTablePropertiesFormat RouteTablePropertiesFormat
25951				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
25952				if err != nil {
25953					return err
25954				}
25955				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
25956			}
25957		case "etag":
25958			if v != nil {
25959				var etag string
25960				err = json.Unmarshal(*v, &etag)
25961				if err != nil {
25962					return err
25963				}
25964				rt.Etag = &etag
25965			}
25966		case "id":
25967			if v != nil {
25968				var ID string
25969				err = json.Unmarshal(*v, &ID)
25970				if err != nil {
25971					return err
25972				}
25973				rt.ID = &ID
25974			}
25975		case "name":
25976			if v != nil {
25977				var name string
25978				err = json.Unmarshal(*v, &name)
25979				if err != nil {
25980					return err
25981				}
25982				rt.Name = &name
25983			}
25984		case "type":
25985			if v != nil {
25986				var typeVar string
25987				err = json.Unmarshal(*v, &typeVar)
25988				if err != nil {
25989					return err
25990				}
25991				rt.Type = &typeVar
25992			}
25993		case "location":
25994			if v != nil {
25995				var location string
25996				err = json.Unmarshal(*v, &location)
25997				if err != nil {
25998					return err
25999				}
26000				rt.Location = &location
26001			}
26002		case "tags":
26003			if v != nil {
26004				var tags map[string]*string
26005				err = json.Unmarshal(*v, &tags)
26006				if err != nil {
26007					return err
26008				}
26009				rt.Tags = tags
26010			}
26011		}
26012	}
26013
26014	return nil
26015}
26016
26017// RouteTableListResult response for the ListRouteTable API service call.
26018type RouteTableListResult struct {
26019	autorest.Response `json:"-"`
26020	// Value - A list of route tables in a resource group.
26021	Value *[]RouteTable `json:"value,omitempty"`
26022	// NextLink - The URL to get the next set of results.
26023	NextLink *string `json:"nextLink,omitempty"`
26024}
26025
26026// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
26027type RouteTableListResultIterator struct {
26028	i    int
26029	page RouteTableListResultPage
26030}
26031
26032// NextWithContext advances to the next value.  If there was an error making
26033// the request the iterator does not advance and the error is returned.
26034func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
26035	if tracing.IsEnabled() {
26036		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
26037		defer func() {
26038			sc := -1
26039			if iter.Response().Response.Response != nil {
26040				sc = iter.Response().Response.Response.StatusCode
26041			}
26042			tracing.EndSpan(ctx, sc, err)
26043		}()
26044	}
26045	iter.i++
26046	if iter.i < len(iter.page.Values()) {
26047		return nil
26048	}
26049	err = iter.page.NextWithContext(ctx)
26050	if err != nil {
26051		iter.i--
26052		return err
26053	}
26054	iter.i = 0
26055	return nil
26056}
26057
26058// Next advances to the next value.  If there was an error making
26059// the request the iterator does not advance and the error is returned.
26060// Deprecated: Use NextWithContext() instead.
26061func (iter *RouteTableListResultIterator) Next() error {
26062	return iter.NextWithContext(context.Background())
26063}
26064
26065// NotDone returns true if the enumeration should be started or is not yet complete.
26066func (iter RouteTableListResultIterator) NotDone() bool {
26067	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26068}
26069
26070// Response returns the raw server response from the last page request.
26071func (iter RouteTableListResultIterator) Response() RouteTableListResult {
26072	return iter.page.Response()
26073}
26074
26075// Value returns the current value or a zero-initialized value if the
26076// iterator has advanced beyond the end of the collection.
26077func (iter RouteTableListResultIterator) Value() RouteTable {
26078	if !iter.page.NotDone() {
26079		return RouteTable{}
26080	}
26081	return iter.page.Values()[iter.i]
26082}
26083
26084// Creates a new instance of the RouteTableListResultIterator type.
26085func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
26086	return RouteTableListResultIterator{page: page}
26087}
26088
26089// IsEmpty returns true if the ListResult contains no values.
26090func (rtlr RouteTableListResult) IsEmpty() bool {
26091	return rtlr.Value == nil || len(*rtlr.Value) == 0
26092}
26093
26094// routeTableListResultPreparer prepares a request to retrieve the next set of results.
26095// It returns nil if no more results exist.
26096func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
26097	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
26098		return nil, nil
26099	}
26100	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26101		autorest.AsJSON(),
26102		autorest.AsGet(),
26103		autorest.WithBaseURL(to.String(rtlr.NextLink)))
26104}
26105
26106// RouteTableListResultPage contains a page of RouteTable values.
26107type RouteTableListResultPage struct {
26108	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
26109	rtlr RouteTableListResult
26110}
26111
26112// NextWithContext advances to the next page of values.  If there was an error making
26113// the request the page does not advance and the error is returned.
26114func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
26115	if tracing.IsEnabled() {
26116		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
26117		defer func() {
26118			sc := -1
26119			if page.Response().Response.Response != nil {
26120				sc = page.Response().Response.Response.StatusCode
26121			}
26122			tracing.EndSpan(ctx, sc, err)
26123		}()
26124	}
26125	next, err := page.fn(ctx, page.rtlr)
26126	if err != nil {
26127		return err
26128	}
26129	page.rtlr = next
26130	return nil
26131}
26132
26133// Next advances to the next page of values.  If there was an error making
26134// the request the page does not advance and the error is returned.
26135// Deprecated: Use NextWithContext() instead.
26136func (page *RouteTableListResultPage) Next() error {
26137	return page.NextWithContext(context.Background())
26138}
26139
26140// NotDone returns true if the page enumeration should be started or is not yet complete.
26141func (page RouteTableListResultPage) NotDone() bool {
26142	return !page.rtlr.IsEmpty()
26143}
26144
26145// Response returns the raw server response from the last page request.
26146func (page RouteTableListResultPage) Response() RouteTableListResult {
26147	return page.rtlr
26148}
26149
26150// Values returns the slice of values for the current page or nil if there are no values.
26151func (page RouteTableListResultPage) Values() []RouteTable {
26152	if page.rtlr.IsEmpty() {
26153		return nil
26154	}
26155	return *page.rtlr.Value
26156}
26157
26158// Creates a new instance of the RouteTableListResultPage type.
26159func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
26160	return RouteTableListResultPage{fn: getNextPage}
26161}
26162
26163// RouteTablePropertiesFormat route Table resource.
26164type RouteTablePropertiesFormat struct {
26165	// Routes - Collection of routes contained within a route table.
26166	Routes *[]Route `json:"routes,omitempty"`
26167	// Subnets - READ-ONLY; A collection of references to subnets.
26168	Subnets *[]Subnet `json:"subnets,omitempty"`
26169	// DisableBgpRoutePropagation - Whether to disable the routes learned by BGP on that route table. True means disable.
26170	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
26171	// ProvisioningState - The provisioning state of the route table resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26172	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26173}
26174
26175// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26176// long-running operation.
26177type RouteTablesCreateOrUpdateFuture struct {
26178	azure.Future
26179}
26180
26181// Result returns the result of the asynchronous operation.
26182// If the operation has not completed it will return an error.
26183func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
26184	var done bool
26185	done, err = future.DoneWithContext(context.Background(), client)
26186	if err != nil {
26187		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26188		return
26189	}
26190	if !done {
26191		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
26192		return
26193	}
26194	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26195	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
26196		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
26197		if err != nil {
26198			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
26199		}
26200	}
26201	return
26202}
26203
26204// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26205// operation.
26206type RouteTablesDeleteFuture struct {
26207	azure.Future
26208}
26209
26210// Result returns the result of the asynchronous operation.
26211// If the operation has not completed it will return an error.
26212func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
26213	var done bool
26214	done, err = future.DoneWithContext(context.Background(), client)
26215	if err != nil {
26216		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
26217		return
26218	}
26219	if !done {
26220		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
26221		return
26222	}
26223	ar.Response = future.Response()
26224	return
26225}
26226
26227// RouteTablesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
26228// operation.
26229type RouteTablesUpdateTagsFuture struct {
26230	azure.Future
26231}
26232
26233// Result returns the result of the asynchronous operation.
26234// If the operation has not completed it will return an error.
26235func (future *RouteTablesUpdateTagsFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
26236	var done bool
26237	done, err = future.DoneWithContext(context.Background(), client)
26238	if err != nil {
26239		err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26240		return
26241	}
26242	if !done {
26243		err = azure.NewAsyncOpIncompleteError("network.RouteTablesUpdateTagsFuture")
26244		return
26245	}
26246	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26247	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
26248		rt, err = client.UpdateTagsResponder(rt.Response.Response)
26249		if err != nil {
26250			err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", rt.Response.Response, "Failure responding to request")
26251		}
26252	}
26253	return
26254}
26255
26256// RuleCondition rule condition of type network.
26257type RuleCondition struct {
26258	// IPProtocols - Array of FirewallPolicyRuleConditionNetworkProtocols.
26259	IPProtocols *[]FirewallPolicyRuleConditionNetworkProtocol `json:"ipProtocols,omitempty"`
26260	// SourceAddresses - List of source IP addresses for this rule.
26261	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
26262	// DestinationAddresses - List of destination IP addresses or Service Tags.
26263	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
26264	// DestinationPorts - List of destination ports.
26265	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
26266	// Name - Name of the rule condition.
26267	Name *string `json:"name,omitempty"`
26268	// Description - Description of the rule condition.
26269	Description *string `json:"description,omitempty"`
26270	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
26271	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
26272}
26273
26274// MarshalJSON is the custom marshaler for RuleCondition.
26275func (rc RuleCondition) MarshalJSON() ([]byte, error) {
26276	rc.RuleConditionType = RuleConditionTypeNetworkRuleCondition
26277	objectMap := make(map[string]interface{})
26278	if rc.IPProtocols != nil {
26279		objectMap["ipProtocols"] = rc.IPProtocols
26280	}
26281	if rc.SourceAddresses != nil {
26282		objectMap["sourceAddresses"] = rc.SourceAddresses
26283	}
26284	if rc.DestinationAddresses != nil {
26285		objectMap["destinationAddresses"] = rc.DestinationAddresses
26286	}
26287	if rc.DestinationPorts != nil {
26288		objectMap["destinationPorts"] = rc.DestinationPorts
26289	}
26290	if rc.Name != nil {
26291		objectMap["name"] = rc.Name
26292	}
26293	if rc.Description != nil {
26294		objectMap["description"] = rc.Description
26295	}
26296	if rc.RuleConditionType != "" {
26297		objectMap["ruleConditionType"] = rc.RuleConditionType
26298	}
26299	return json.Marshal(objectMap)
26300}
26301
26302// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26303func (rc RuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
26304	return nil, false
26305}
26306
26307// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26308func (rc RuleCondition) AsRuleCondition() (*RuleCondition, bool) {
26309	return &rc, true
26310}
26311
26312// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26313func (rc RuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
26314	return nil, false
26315}
26316
26317// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26318func (rc RuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
26319	return &rc, true
26320}
26321
26322// SecurityGroup networkSecurityGroup resource.
26323type SecurityGroup struct {
26324	autorest.Response `json:"-"`
26325	// SecurityGroupPropertiesFormat - Properties of the network security group.
26326	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
26327	// Etag - A unique read-only string that changes whenever the resource is updated.
26328	Etag *string `json:"etag,omitempty"`
26329	// ID - Resource ID.
26330	ID *string `json:"id,omitempty"`
26331	// Name - READ-ONLY; Resource name.
26332	Name *string `json:"name,omitempty"`
26333	// Type - READ-ONLY; Resource type.
26334	Type *string `json:"type,omitempty"`
26335	// Location - Resource location.
26336	Location *string `json:"location,omitempty"`
26337	// Tags - Resource tags.
26338	Tags map[string]*string `json:"tags"`
26339}
26340
26341// MarshalJSON is the custom marshaler for SecurityGroup.
26342func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
26343	objectMap := make(map[string]interface{})
26344	if sg.SecurityGroupPropertiesFormat != nil {
26345		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
26346	}
26347	if sg.Etag != nil {
26348		objectMap["etag"] = sg.Etag
26349	}
26350	if sg.ID != nil {
26351		objectMap["id"] = sg.ID
26352	}
26353	if sg.Location != nil {
26354		objectMap["location"] = sg.Location
26355	}
26356	if sg.Tags != nil {
26357		objectMap["tags"] = sg.Tags
26358	}
26359	return json.Marshal(objectMap)
26360}
26361
26362// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
26363func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
26364	var m map[string]*json.RawMessage
26365	err := json.Unmarshal(body, &m)
26366	if err != nil {
26367		return err
26368	}
26369	for k, v := range m {
26370		switch k {
26371		case "properties":
26372			if v != nil {
26373				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
26374				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
26375				if err != nil {
26376					return err
26377				}
26378				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
26379			}
26380		case "etag":
26381			if v != nil {
26382				var etag string
26383				err = json.Unmarshal(*v, &etag)
26384				if err != nil {
26385					return err
26386				}
26387				sg.Etag = &etag
26388			}
26389		case "id":
26390			if v != nil {
26391				var ID string
26392				err = json.Unmarshal(*v, &ID)
26393				if err != nil {
26394					return err
26395				}
26396				sg.ID = &ID
26397			}
26398		case "name":
26399			if v != nil {
26400				var name string
26401				err = json.Unmarshal(*v, &name)
26402				if err != nil {
26403					return err
26404				}
26405				sg.Name = &name
26406			}
26407		case "type":
26408			if v != nil {
26409				var typeVar string
26410				err = json.Unmarshal(*v, &typeVar)
26411				if err != nil {
26412					return err
26413				}
26414				sg.Type = &typeVar
26415			}
26416		case "location":
26417			if v != nil {
26418				var location string
26419				err = json.Unmarshal(*v, &location)
26420				if err != nil {
26421					return err
26422				}
26423				sg.Location = &location
26424			}
26425		case "tags":
26426			if v != nil {
26427				var tags map[string]*string
26428				err = json.Unmarshal(*v, &tags)
26429				if err != nil {
26430					return err
26431				}
26432				sg.Tags = tags
26433			}
26434		}
26435	}
26436
26437	return nil
26438}
26439
26440// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
26441type SecurityGroupListResult struct {
26442	autorest.Response `json:"-"`
26443	// Value - A list of NetworkSecurityGroup resources.
26444	Value *[]SecurityGroup `json:"value,omitempty"`
26445	// NextLink - The URL to get the next set of results.
26446	NextLink *string `json:"nextLink,omitempty"`
26447}
26448
26449// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
26450type SecurityGroupListResultIterator struct {
26451	i    int
26452	page SecurityGroupListResultPage
26453}
26454
26455// NextWithContext advances to the next value.  If there was an error making
26456// the request the iterator does not advance and the error is returned.
26457func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
26458	if tracing.IsEnabled() {
26459		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
26460		defer func() {
26461			sc := -1
26462			if iter.Response().Response.Response != nil {
26463				sc = iter.Response().Response.Response.StatusCode
26464			}
26465			tracing.EndSpan(ctx, sc, err)
26466		}()
26467	}
26468	iter.i++
26469	if iter.i < len(iter.page.Values()) {
26470		return nil
26471	}
26472	err = iter.page.NextWithContext(ctx)
26473	if err != nil {
26474		iter.i--
26475		return err
26476	}
26477	iter.i = 0
26478	return nil
26479}
26480
26481// Next advances to the next value.  If there was an error making
26482// the request the iterator does not advance and the error is returned.
26483// Deprecated: Use NextWithContext() instead.
26484func (iter *SecurityGroupListResultIterator) Next() error {
26485	return iter.NextWithContext(context.Background())
26486}
26487
26488// NotDone returns true if the enumeration should be started or is not yet complete.
26489func (iter SecurityGroupListResultIterator) NotDone() bool {
26490	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26491}
26492
26493// Response returns the raw server response from the last page request.
26494func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
26495	return iter.page.Response()
26496}
26497
26498// Value returns the current value or a zero-initialized value if the
26499// iterator has advanced beyond the end of the collection.
26500func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
26501	if !iter.page.NotDone() {
26502		return SecurityGroup{}
26503	}
26504	return iter.page.Values()[iter.i]
26505}
26506
26507// Creates a new instance of the SecurityGroupListResultIterator type.
26508func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
26509	return SecurityGroupListResultIterator{page: page}
26510}
26511
26512// IsEmpty returns true if the ListResult contains no values.
26513func (sglr SecurityGroupListResult) IsEmpty() bool {
26514	return sglr.Value == nil || len(*sglr.Value) == 0
26515}
26516
26517// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
26518// It returns nil if no more results exist.
26519func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
26520	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
26521		return nil, nil
26522	}
26523	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26524		autorest.AsJSON(),
26525		autorest.AsGet(),
26526		autorest.WithBaseURL(to.String(sglr.NextLink)))
26527}
26528
26529// SecurityGroupListResultPage contains a page of SecurityGroup values.
26530type SecurityGroupListResultPage struct {
26531	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
26532	sglr SecurityGroupListResult
26533}
26534
26535// NextWithContext advances to the next page of values.  If there was an error making
26536// the request the page does not advance and the error is returned.
26537func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
26538	if tracing.IsEnabled() {
26539		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
26540		defer func() {
26541			sc := -1
26542			if page.Response().Response.Response != nil {
26543				sc = page.Response().Response.Response.StatusCode
26544			}
26545			tracing.EndSpan(ctx, sc, err)
26546		}()
26547	}
26548	next, err := page.fn(ctx, page.sglr)
26549	if err != nil {
26550		return err
26551	}
26552	page.sglr = next
26553	return nil
26554}
26555
26556// Next advances to the next page of values.  If there was an error making
26557// the request the page does not advance and the error is returned.
26558// Deprecated: Use NextWithContext() instead.
26559func (page *SecurityGroupListResultPage) Next() error {
26560	return page.NextWithContext(context.Background())
26561}
26562
26563// NotDone returns true if the page enumeration should be started or is not yet complete.
26564func (page SecurityGroupListResultPage) NotDone() bool {
26565	return !page.sglr.IsEmpty()
26566}
26567
26568// Response returns the raw server response from the last page request.
26569func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
26570	return page.sglr
26571}
26572
26573// Values returns the slice of values for the current page or nil if there are no values.
26574func (page SecurityGroupListResultPage) Values() []SecurityGroup {
26575	if page.sglr.IsEmpty() {
26576		return nil
26577	}
26578	return *page.sglr.Value
26579}
26580
26581// Creates a new instance of the SecurityGroupListResultPage type.
26582func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
26583	return SecurityGroupListResultPage{fn: getNextPage}
26584}
26585
26586// SecurityGroupNetworkInterface network interface and all its associated security rules.
26587type SecurityGroupNetworkInterface struct {
26588	// ID - ID of the network interface.
26589	ID *string `json:"id,omitempty"`
26590	// SecurityRuleAssociations - All security rules associated with the network interface.
26591	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
26592}
26593
26594// SecurityGroupPropertiesFormat network Security Group resource.
26595type SecurityGroupPropertiesFormat struct {
26596	// SecurityRules - A collection of security rules of the network security group.
26597	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
26598	// DefaultSecurityRules - The default security rules of network security group.
26599	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
26600	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
26601	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
26602	// Subnets - READ-ONLY; A collection of references to subnets.
26603	Subnets *[]Subnet `json:"subnets,omitempty"`
26604	// ResourceGUID - The resource GUID property of the network security group resource.
26605	ResourceGUID *string `json:"resourceGuid,omitempty"`
26606	// ProvisioningState - The provisioning state of the network security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26607	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26608}
26609
26610// SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
26611type SecurityGroupResult struct {
26612	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
26613	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
26614	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
26615	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
26616}
26617
26618// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26619// long-running operation.
26620type SecurityGroupsCreateOrUpdateFuture struct {
26621	azure.Future
26622}
26623
26624// Result returns the result of the asynchronous operation.
26625// If the operation has not completed it will return an error.
26626func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
26627	var done bool
26628	done, err = future.DoneWithContext(context.Background(), client)
26629	if err != nil {
26630		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26631		return
26632	}
26633	if !done {
26634		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
26635		return
26636	}
26637	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26638	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
26639		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
26640		if err != nil {
26641			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
26642		}
26643	}
26644	return
26645}
26646
26647// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26648// operation.
26649type SecurityGroupsDeleteFuture struct {
26650	azure.Future
26651}
26652
26653// Result returns the result of the asynchronous operation.
26654// If the operation has not completed it will return an error.
26655func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
26656	var done bool
26657	done, err = future.DoneWithContext(context.Background(), client)
26658	if err != nil {
26659		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
26660		return
26661	}
26662	if !done {
26663		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
26664		return
26665	}
26666	ar.Response = future.Response()
26667	return
26668}
26669
26670// SecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
26671// long-running operation.
26672type SecurityGroupsUpdateTagsFuture struct {
26673	azure.Future
26674}
26675
26676// Result returns the result of the asynchronous operation.
26677// If the operation has not completed it will return an error.
26678func (future *SecurityGroupsUpdateTagsFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
26679	var done bool
26680	done, err = future.DoneWithContext(context.Background(), client)
26681	if err != nil {
26682		err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26683		return
26684	}
26685	if !done {
26686		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsUpdateTagsFuture")
26687		return
26688	}
26689	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26690	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
26691		sg, err = client.UpdateTagsResponder(sg.Response.Response)
26692		if err != nil {
26693			err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", sg.Response.Response, "Failure responding to request")
26694		}
26695	}
26696	return
26697}
26698
26699// SecurityGroupViewParameters parameters that define the VM to check security groups for.
26700type SecurityGroupViewParameters struct {
26701	// TargetResourceID - ID of the target VM.
26702	TargetResourceID *string `json:"targetResourceId,omitempty"`
26703}
26704
26705// SecurityGroupViewResult the information about security rules applied to the specified VM.
26706type SecurityGroupViewResult struct {
26707	autorest.Response `json:"-"`
26708	// NetworkInterfaces - List of network interfaces on the specified VM.
26709	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
26710}
26711
26712// SecurityRule network security rule.
26713type SecurityRule struct {
26714	autorest.Response `json:"-"`
26715	// SecurityRulePropertiesFormat - Properties of the security rule.
26716	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
26717	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26718	Name *string `json:"name,omitempty"`
26719	// Etag - A unique read-only string that changes whenever the resource is updated.
26720	Etag *string `json:"etag,omitempty"`
26721	// ID - Resource ID.
26722	ID *string `json:"id,omitempty"`
26723}
26724
26725// MarshalJSON is the custom marshaler for SecurityRule.
26726func (sr SecurityRule) MarshalJSON() ([]byte, error) {
26727	objectMap := make(map[string]interface{})
26728	if sr.SecurityRulePropertiesFormat != nil {
26729		objectMap["properties"] = sr.SecurityRulePropertiesFormat
26730	}
26731	if sr.Name != nil {
26732		objectMap["name"] = sr.Name
26733	}
26734	if sr.Etag != nil {
26735		objectMap["etag"] = sr.Etag
26736	}
26737	if sr.ID != nil {
26738		objectMap["id"] = sr.ID
26739	}
26740	return json.Marshal(objectMap)
26741}
26742
26743// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
26744func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
26745	var m map[string]*json.RawMessage
26746	err := json.Unmarshal(body, &m)
26747	if err != nil {
26748		return err
26749	}
26750	for k, v := range m {
26751		switch k {
26752		case "properties":
26753			if v != nil {
26754				var securityRulePropertiesFormat SecurityRulePropertiesFormat
26755				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
26756				if err != nil {
26757					return err
26758				}
26759				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
26760			}
26761		case "name":
26762			if v != nil {
26763				var name string
26764				err = json.Unmarshal(*v, &name)
26765				if err != nil {
26766					return err
26767				}
26768				sr.Name = &name
26769			}
26770		case "etag":
26771			if v != nil {
26772				var etag string
26773				err = json.Unmarshal(*v, &etag)
26774				if err != nil {
26775					return err
26776				}
26777				sr.Etag = &etag
26778			}
26779		case "id":
26780			if v != nil {
26781				var ID string
26782				err = json.Unmarshal(*v, &ID)
26783				if err != nil {
26784					return err
26785				}
26786				sr.ID = &ID
26787			}
26788		}
26789	}
26790
26791	return nil
26792}
26793
26794// SecurityRuleAssociations all security rules associated with the network interface.
26795type SecurityRuleAssociations struct {
26796	// NetworkInterfaceAssociation - Network interface and it's custom security rules.
26797	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
26798	// SubnetAssociation - Subnet and it's custom security rules.
26799	SubnetAssociation *SubnetAssociation `json:"subnetAssociation,omitempty"`
26800	// DefaultSecurityRules - Collection of default security rules of the network security group.
26801	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
26802	// EffectiveSecurityRules - Collection of effective security rules.
26803	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
26804}
26805
26806// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
26807// belongs to a network security group.
26808type SecurityRuleListResult struct {
26809	autorest.Response `json:"-"`
26810	// Value - The security rules in a network security group.
26811	Value *[]SecurityRule `json:"value,omitempty"`
26812	// NextLink - The URL to get the next set of results.
26813	NextLink *string `json:"nextLink,omitempty"`
26814}
26815
26816// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
26817type SecurityRuleListResultIterator struct {
26818	i    int
26819	page SecurityRuleListResultPage
26820}
26821
26822// NextWithContext advances to the next value.  If there was an error making
26823// the request the iterator does not advance and the error is returned.
26824func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
26825	if tracing.IsEnabled() {
26826		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
26827		defer func() {
26828			sc := -1
26829			if iter.Response().Response.Response != nil {
26830				sc = iter.Response().Response.Response.StatusCode
26831			}
26832			tracing.EndSpan(ctx, sc, err)
26833		}()
26834	}
26835	iter.i++
26836	if iter.i < len(iter.page.Values()) {
26837		return nil
26838	}
26839	err = iter.page.NextWithContext(ctx)
26840	if err != nil {
26841		iter.i--
26842		return err
26843	}
26844	iter.i = 0
26845	return nil
26846}
26847
26848// Next advances to the next value.  If there was an error making
26849// the request the iterator does not advance and the error is returned.
26850// Deprecated: Use NextWithContext() instead.
26851func (iter *SecurityRuleListResultIterator) Next() error {
26852	return iter.NextWithContext(context.Background())
26853}
26854
26855// NotDone returns true if the enumeration should be started or is not yet complete.
26856func (iter SecurityRuleListResultIterator) NotDone() bool {
26857	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26858}
26859
26860// Response returns the raw server response from the last page request.
26861func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
26862	return iter.page.Response()
26863}
26864
26865// Value returns the current value or a zero-initialized value if the
26866// iterator has advanced beyond the end of the collection.
26867func (iter SecurityRuleListResultIterator) Value() SecurityRule {
26868	if !iter.page.NotDone() {
26869		return SecurityRule{}
26870	}
26871	return iter.page.Values()[iter.i]
26872}
26873
26874// Creates a new instance of the SecurityRuleListResultIterator type.
26875func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
26876	return SecurityRuleListResultIterator{page: page}
26877}
26878
26879// IsEmpty returns true if the ListResult contains no values.
26880func (srlr SecurityRuleListResult) IsEmpty() bool {
26881	return srlr.Value == nil || len(*srlr.Value) == 0
26882}
26883
26884// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
26885// It returns nil if no more results exist.
26886func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
26887	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
26888		return nil, nil
26889	}
26890	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26891		autorest.AsJSON(),
26892		autorest.AsGet(),
26893		autorest.WithBaseURL(to.String(srlr.NextLink)))
26894}
26895
26896// SecurityRuleListResultPage contains a page of SecurityRule values.
26897type SecurityRuleListResultPage struct {
26898	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
26899	srlr SecurityRuleListResult
26900}
26901
26902// NextWithContext advances to the next page of values.  If there was an error making
26903// the request the page does not advance and the error is returned.
26904func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
26905	if tracing.IsEnabled() {
26906		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
26907		defer func() {
26908			sc := -1
26909			if page.Response().Response.Response != nil {
26910				sc = page.Response().Response.Response.StatusCode
26911			}
26912			tracing.EndSpan(ctx, sc, err)
26913		}()
26914	}
26915	next, err := page.fn(ctx, page.srlr)
26916	if err != nil {
26917		return err
26918	}
26919	page.srlr = next
26920	return nil
26921}
26922
26923// Next advances to the next page of values.  If there was an error making
26924// the request the page does not advance and the error is returned.
26925// Deprecated: Use NextWithContext() instead.
26926func (page *SecurityRuleListResultPage) Next() error {
26927	return page.NextWithContext(context.Background())
26928}
26929
26930// NotDone returns true if the page enumeration should be started or is not yet complete.
26931func (page SecurityRuleListResultPage) NotDone() bool {
26932	return !page.srlr.IsEmpty()
26933}
26934
26935// Response returns the raw server response from the last page request.
26936func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
26937	return page.srlr
26938}
26939
26940// Values returns the slice of values for the current page or nil if there are no values.
26941func (page SecurityRuleListResultPage) Values() []SecurityRule {
26942	if page.srlr.IsEmpty() {
26943		return nil
26944	}
26945	return *page.srlr.Value
26946}
26947
26948// Creates a new instance of the SecurityRuleListResultPage type.
26949func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
26950	return SecurityRuleListResultPage{fn: getNextPage}
26951}
26952
26953// SecurityRulePropertiesFormat security rule resource.
26954type SecurityRulePropertiesFormat struct {
26955	// Description - A description for this rule. Restricted to 140 chars.
26956	Description *string `json:"description,omitempty"`
26957	// Protocol - Network protocol this rule applies to. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolIcmp', 'SecurityRuleProtocolEsp', 'SecurityRuleProtocolAsterisk', 'SecurityRuleProtocolAh'
26958	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
26959	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
26960	SourcePortRange *string `json:"sourcePortRange,omitempty"`
26961	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
26962	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
26963	// SourceAddressPrefix - The CIDR or source IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If this is an ingress rule, specifies where network traffic originates from.
26964	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
26965	// SourceAddressPrefixes - The CIDR or source IP ranges.
26966	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
26967	// SourceApplicationSecurityGroups - The application security group specified as source.
26968	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
26969	// DestinationAddressPrefix - The destination address prefix. CIDR or destination IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used.
26970	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
26971	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
26972	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
26973	// DestinationApplicationSecurityGroups - The application security group specified as destination.
26974	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
26975	// SourcePortRanges - The source port ranges.
26976	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
26977	// DestinationPortRanges - The destination port ranges.
26978	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
26979	// Access - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
26980	Access SecurityRuleAccess `json:"access,omitempty"`
26981	// Priority - The priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule.
26982	Priority *int32 `json:"priority,omitempty"`
26983	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
26984	Direction SecurityRuleDirection `json:"direction,omitempty"`
26985	// ProvisioningState - The provisioning state of the security rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26986	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26987}
26988
26989// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26990// long-running operation.
26991type SecurityRulesCreateOrUpdateFuture struct {
26992	azure.Future
26993}
26994
26995// Result returns the result of the asynchronous operation.
26996// If the operation has not completed it will return an error.
26997func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
26998	var done bool
26999	done, err = future.DoneWithContext(context.Background(), client)
27000	if err != nil {
27001		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27002		return
27003	}
27004	if !done {
27005		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
27006		return
27007	}
27008	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27009	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
27010		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
27011		if err != nil {
27012			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
27013		}
27014	}
27015	return
27016}
27017
27018// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27019// operation.
27020type SecurityRulesDeleteFuture struct {
27021	azure.Future
27022}
27023
27024// Result returns the result of the asynchronous operation.
27025// If the operation has not completed it will return an error.
27026func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
27027	var done bool
27028	done, err = future.DoneWithContext(context.Background(), client)
27029	if err != nil {
27030		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
27031		return
27032	}
27033	if !done {
27034		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
27035		return
27036	}
27037	ar.Response = future.Response()
27038	return
27039}
27040
27041// SecurityRulesEvaluationResult network security rules evaluation result.
27042type SecurityRulesEvaluationResult struct {
27043	// Name - Name of the network security rule.
27044	Name *string `json:"name,omitempty"`
27045	// ProtocolMatched - Value indicating whether protocol is matched.
27046	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
27047	// SourceMatched - Value indicating whether source is matched.
27048	SourceMatched *bool `json:"sourceMatched,omitempty"`
27049	// SourcePortMatched - Value indicating whether source port is matched.
27050	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
27051	// DestinationMatched - Value indicating whether destination is matched.
27052	DestinationMatched *bool `json:"destinationMatched,omitempty"`
27053	// DestinationPortMatched - Value indicating whether destination port is matched.
27054	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
27055}
27056
27057// ServiceAssociationLink serviceAssociationLink resource.
27058type ServiceAssociationLink struct {
27059	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
27060	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
27061	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
27062	Name *string `json:"name,omitempty"`
27063	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
27064	Etag *string `json:"etag,omitempty"`
27065	// Type - Resource type.
27066	Type *string `json:"type,omitempty"`
27067	// ID - Resource ID.
27068	ID *string `json:"id,omitempty"`
27069}
27070
27071// MarshalJSON is the custom marshaler for ServiceAssociationLink.
27072func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
27073	objectMap := make(map[string]interface{})
27074	if sal.ServiceAssociationLinkPropertiesFormat != nil {
27075		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
27076	}
27077	if sal.Name != nil {
27078		objectMap["name"] = sal.Name
27079	}
27080	if sal.Type != nil {
27081		objectMap["type"] = sal.Type
27082	}
27083	if sal.ID != nil {
27084		objectMap["id"] = sal.ID
27085	}
27086	return json.Marshal(objectMap)
27087}
27088
27089// UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
27090func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
27091	var m map[string]*json.RawMessage
27092	err := json.Unmarshal(body, &m)
27093	if err != nil {
27094		return err
27095	}
27096	for k, v := range m {
27097		switch k {
27098		case "properties":
27099			if v != nil {
27100				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
27101				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
27102				if err != nil {
27103					return err
27104				}
27105				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
27106			}
27107		case "name":
27108			if v != nil {
27109				var name string
27110				err = json.Unmarshal(*v, &name)
27111				if err != nil {
27112					return err
27113				}
27114				sal.Name = &name
27115			}
27116		case "etag":
27117			if v != nil {
27118				var etag string
27119				err = json.Unmarshal(*v, &etag)
27120				if err != nil {
27121					return err
27122				}
27123				sal.Etag = &etag
27124			}
27125		case "type":
27126			if v != nil {
27127				var typeVar string
27128				err = json.Unmarshal(*v, &typeVar)
27129				if err != nil {
27130					return err
27131				}
27132				sal.Type = &typeVar
27133			}
27134		case "id":
27135			if v != nil {
27136				var ID string
27137				err = json.Unmarshal(*v, &ID)
27138				if err != nil {
27139					return err
27140				}
27141				sal.ID = &ID
27142			}
27143		}
27144	}
27145
27146	return nil
27147}
27148
27149// ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
27150type ServiceAssociationLinkPropertiesFormat struct {
27151	// LinkedResourceType - Resource type of the linked resource.
27152	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
27153	// Link - Link to the external resource.
27154	Link *string `json:"link,omitempty"`
27155	// ProvisioningState - READ-ONLY; The provisioning state of the service association link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27156	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27157	// AllowDelete - If true, the resource can be deleted.
27158	AllowDelete *bool `json:"allowDelete,omitempty"`
27159	// Locations - A list of locations.
27160	Locations *[]string `json:"locations,omitempty"`
27161}
27162
27163// ServiceAssociationLinksListResult response for ServiceAssociationLinks_List operation.
27164type ServiceAssociationLinksListResult struct {
27165	autorest.Response `json:"-"`
27166	// Value - The service association links in a subnet.
27167	Value *[]ServiceAssociationLink `json:"value,omitempty"`
27168	// NextLink - READ-ONLY; The URL to get the next set of results.
27169	NextLink *string `json:"nextLink,omitempty"`
27170}
27171
27172// ServiceDelegationPropertiesFormat properties of a service delegation.
27173type ServiceDelegationPropertiesFormat struct {
27174	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers).
27175	ServiceName *string `json:"serviceName,omitempty"`
27176	// Actions - Describes the actions permitted to the service upon delegation.
27177	Actions *[]string `json:"actions,omitempty"`
27178	// ProvisioningState - READ-ONLY; The provisioning state of the service delegation resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27179	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27180}
27181
27182// ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
27183// a long-running operation.
27184type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
27185	azure.Future
27186}
27187
27188// Result returns the result of the asynchronous operation.
27189// If the operation has not completed it will return an error.
27190func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
27191	var done bool
27192	done, err = future.DoneWithContext(context.Background(), client)
27193	if err != nil {
27194		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27195		return
27196	}
27197	if !done {
27198		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
27199		return
27200	}
27201	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27202	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
27203		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
27204		if err != nil {
27205			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
27206		}
27207	}
27208	return
27209}
27210
27211// ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
27212// long-running operation.
27213type ServiceEndpointPoliciesDeleteFuture struct {
27214	azure.Future
27215}
27216
27217// Result returns the result of the asynchronous operation.
27218// If the operation has not completed it will return an error.
27219func (future *ServiceEndpointPoliciesDeleteFuture) Result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
27220	var done bool
27221	done, err = future.DoneWithContext(context.Background(), client)
27222	if err != nil {
27223		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
27224		return
27225	}
27226	if !done {
27227		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
27228		return
27229	}
27230	ar.Response = future.Response()
27231	return
27232}
27233
27234// ServiceEndpointPoliciesUpdateFuture an abstraction for monitoring and retrieving the results of a
27235// long-running operation.
27236type ServiceEndpointPoliciesUpdateFuture struct {
27237	azure.Future
27238}
27239
27240// Result returns the result of the asynchronous operation.
27241// If the operation has not completed it will return an error.
27242func (future *ServiceEndpointPoliciesUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
27243	var done bool
27244	done, err = future.DoneWithContext(context.Background(), client)
27245	if err != nil {
27246		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", future.Response(), "Polling failure")
27247		return
27248	}
27249	if !done {
27250		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesUpdateFuture")
27251		return
27252	}
27253	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27254	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
27255		sep, err = client.UpdateResponder(sep.Response.Response)
27256		if err != nil {
27257			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
27258		}
27259	}
27260	return
27261}
27262
27263// ServiceEndpointPolicy service End point policy resource.
27264type ServiceEndpointPolicy struct {
27265	autorest.Response `json:"-"`
27266	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy.
27267	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
27268	// Etag - A unique read-only string that changes whenever the resource is updated.
27269	Etag *string `json:"etag,omitempty"`
27270	// ID - Resource ID.
27271	ID *string `json:"id,omitempty"`
27272	// Name - READ-ONLY; Resource name.
27273	Name *string `json:"name,omitempty"`
27274	// Type - READ-ONLY; Resource type.
27275	Type *string `json:"type,omitempty"`
27276	// Location - Resource location.
27277	Location *string `json:"location,omitempty"`
27278	// Tags - Resource tags.
27279	Tags map[string]*string `json:"tags"`
27280}
27281
27282// MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
27283func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
27284	objectMap := make(map[string]interface{})
27285	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
27286		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
27287	}
27288	if sep.Etag != nil {
27289		objectMap["etag"] = sep.Etag
27290	}
27291	if sep.ID != nil {
27292		objectMap["id"] = sep.ID
27293	}
27294	if sep.Location != nil {
27295		objectMap["location"] = sep.Location
27296	}
27297	if sep.Tags != nil {
27298		objectMap["tags"] = sep.Tags
27299	}
27300	return json.Marshal(objectMap)
27301}
27302
27303// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
27304func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
27305	var m map[string]*json.RawMessage
27306	err := json.Unmarshal(body, &m)
27307	if err != nil {
27308		return err
27309	}
27310	for k, v := range m {
27311		switch k {
27312		case "properties":
27313			if v != nil {
27314				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
27315				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
27316				if err != nil {
27317					return err
27318				}
27319				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
27320			}
27321		case "etag":
27322			if v != nil {
27323				var etag string
27324				err = json.Unmarshal(*v, &etag)
27325				if err != nil {
27326					return err
27327				}
27328				sep.Etag = &etag
27329			}
27330		case "id":
27331			if v != nil {
27332				var ID string
27333				err = json.Unmarshal(*v, &ID)
27334				if err != nil {
27335					return err
27336				}
27337				sep.ID = &ID
27338			}
27339		case "name":
27340			if v != nil {
27341				var name string
27342				err = json.Unmarshal(*v, &name)
27343				if err != nil {
27344					return err
27345				}
27346				sep.Name = &name
27347			}
27348		case "type":
27349			if v != nil {
27350				var typeVar string
27351				err = json.Unmarshal(*v, &typeVar)
27352				if err != nil {
27353					return err
27354				}
27355				sep.Type = &typeVar
27356			}
27357		case "location":
27358			if v != nil {
27359				var location string
27360				err = json.Unmarshal(*v, &location)
27361				if err != nil {
27362					return err
27363				}
27364				sep.Location = &location
27365			}
27366		case "tags":
27367			if v != nil {
27368				var tags map[string]*string
27369				err = json.Unmarshal(*v, &tags)
27370				if err != nil {
27371					return err
27372				}
27373				sep.Tags = tags
27374			}
27375		}
27376	}
27377
27378	return nil
27379}
27380
27381// ServiceEndpointPolicyDefinition service Endpoint policy definitions.
27382type ServiceEndpointPolicyDefinition struct {
27383	autorest.Response `json:"-"`
27384	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition.
27385	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
27386	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27387	Name *string `json:"name,omitempty"`
27388	// Etag - A unique read-only string that changes whenever the resource is updated.
27389	Etag *string `json:"etag,omitempty"`
27390	// ID - Resource ID.
27391	ID *string `json:"id,omitempty"`
27392}
27393
27394// MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
27395func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
27396	objectMap := make(map[string]interface{})
27397	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
27398		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
27399	}
27400	if sepd.Name != nil {
27401		objectMap["name"] = sepd.Name
27402	}
27403	if sepd.Etag != nil {
27404		objectMap["etag"] = sepd.Etag
27405	}
27406	if sepd.ID != nil {
27407		objectMap["id"] = sepd.ID
27408	}
27409	return json.Marshal(objectMap)
27410}
27411
27412// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
27413func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
27414	var m map[string]*json.RawMessage
27415	err := json.Unmarshal(body, &m)
27416	if err != nil {
27417		return err
27418	}
27419	for k, v := range m {
27420		switch k {
27421		case "properties":
27422			if v != nil {
27423				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
27424				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
27425				if err != nil {
27426					return err
27427				}
27428				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
27429			}
27430		case "name":
27431			if v != nil {
27432				var name string
27433				err = json.Unmarshal(*v, &name)
27434				if err != nil {
27435					return err
27436				}
27437				sepd.Name = &name
27438			}
27439		case "etag":
27440			if v != nil {
27441				var etag string
27442				err = json.Unmarshal(*v, &etag)
27443				if err != nil {
27444					return err
27445				}
27446				sepd.Etag = &etag
27447			}
27448		case "id":
27449			if v != nil {
27450				var ID string
27451				err = json.Unmarshal(*v, &ID)
27452				if err != nil {
27453					return err
27454				}
27455				sepd.ID = &ID
27456			}
27457		}
27458	}
27459
27460	return nil
27461}
27462
27463// ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
27464// call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
27465type ServiceEndpointPolicyDefinitionListResult struct {
27466	autorest.Response `json:"-"`
27467	// Value - The service endpoint policy definition in a service endpoint policy.
27468	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
27469	// NextLink - The URL to get the next set of results.
27470	NextLink *string `json:"nextLink,omitempty"`
27471}
27472
27473// ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
27474// ServiceEndpointPolicyDefinition values.
27475type ServiceEndpointPolicyDefinitionListResultIterator struct {
27476	i    int
27477	page ServiceEndpointPolicyDefinitionListResultPage
27478}
27479
27480// NextWithContext advances to the next value.  If there was an error making
27481// the request the iterator does not advance and the error is returned.
27482func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
27483	if tracing.IsEnabled() {
27484		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
27485		defer func() {
27486			sc := -1
27487			if iter.Response().Response.Response != nil {
27488				sc = iter.Response().Response.Response.StatusCode
27489			}
27490			tracing.EndSpan(ctx, sc, err)
27491		}()
27492	}
27493	iter.i++
27494	if iter.i < len(iter.page.Values()) {
27495		return nil
27496	}
27497	err = iter.page.NextWithContext(ctx)
27498	if err != nil {
27499		iter.i--
27500		return err
27501	}
27502	iter.i = 0
27503	return nil
27504}
27505
27506// Next advances to the next value.  If there was an error making
27507// the request the iterator does not advance and the error is returned.
27508// Deprecated: Use NextWithContext() instead.
27509func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
27510	return iter.NextWithContext(context.Background())
27511}
27512
27513// NotDone returns true if the enumeration should be started or is not yet complete.
27514func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
27515	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27516}
27517
27518// Response returns the raw server response from the last page request.
27519func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
27520	return iter.page.Response()
27521}
27522
27523// Value returns the current value or a zero-initialized value if the
27524// iterator has advanced beyond the end of the collection.
27525func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
27526	if !iter.page.NotDone() {
27527		return ServiceEndpointPolicyDefinition{}
27528	}
27529	return iter.page.Values()[iter.i]
27530}
27531
27532// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
27533func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
27534	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
27535}
27536
27537// IsEmpty returns true if the ListResult contains no values.
27538func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
27539	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
27540}
27541
27542// serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
27543// It returns nil if no more results exist.
27544func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
27545	if sepdlr.NextLink == nil || len(to.String(sepdlr.NextLink)) < 1 {
27546		return nil, nil
27547	}
27548	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27549		autorest.AsJSON(),
27550		autorest.AsGet(),
27551		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
27552}
27553
27554// ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
27555type ServiceEndpointPolicyDefinitionListResultPage struct {
27556	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
27557	sepdlr ServiceEndpointPolicyDefinitionListResult
27558}
27559
27560// NextWithContext advances to the next page of values.  If there was an error making
27561// the request the page does not advance and the error is returned.
27562func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
27563	if tracing.IsEnabled() {
27564		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
27565		defer func() {
27566			sc := -1
27567			if page.Response().Response.Response != nil {
27568				sc = page.Response().Response.Response.StatusCode
27569			}
27570			tracing.EndSpan(ctx, sc, err)
27571		}()
27572	}
27573	next, err := page.fn(ctx, page.sepdlr)
27574	if err != nil {
27575		return err
27576	}
27577	page.sepdlr = next
27578	return nil
27579}
27580
27581// Next advances to the next page of values.  If there was an error making
27582// the request the page does not advance and the error is returned.
27583// Deprecated: Use NextWithContext() instead.
27584func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
27585	return page.NextWithContext(context.Background())
27586}
27587
27588// NotDone returns true if the page enumeration should be started or is not yet complete.
27589func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
27590	return !page.sepdlr.IsEmpty()
27591}
27592
27593// Response returns the raw server response from the last page request.
27594func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
27595	return page.sepdlr
27596}
27597
27598// Values returns the slice of values for the current page or nil if there are no values.
27599func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
27600	if page.sepdlr.IsEmpty() {
27601		return nil
27602	}
27603	return *page.sepdlr.Value
27604}
27605
27606// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
27607func NewServiceEndpointPolicyDefinitionListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
27608	return ServiceEndpointPolicyDefinitionListResultPage{fn: getNextPage}
27609}
27610
27611// ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
27612type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
27613	// Description - A description for this rule. Restricted to 140 chars.
27614	Description *string `json:"description,omitempty"`
27615	// Service - Service endpoint name.
27616	Service *string `json:"service,omitempty"`
27617	// ServiceResources - A list of service resources.
27618	ServiceResources *[]string `json:"serviceResources,omitempty"`
27619	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy definition resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27620	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27621}
27622
27623// ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
27624// results of a long-running operation.
27625type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
27626	azure.Future
27627}
27628
27629// Result returns the result of the asynchronous operation.
27630// If the operation has not completed it will return an error.
27631func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
27632	var done bool
27633	done, err = future.DoneWithContext(context.Background(), client)
27634	if err != nil {
27635		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27636		return
27637	}
27638	if !done {
27639		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
27640		return
27641	}
27642	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27643	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
27644		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
27645		if err != nil {
27646			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
27647		}
27648	}
27649	return
27650}
27651
27652// ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
27653// a long-running operation.
27654type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
27655	azure.Future
27656}
27657
27658// Result returns the result of the asynchronous operation.
27659// If the operation has not completed it will return an error.
27660func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
27661	var done bool
27662	done, err = future.DoneWithContext(context.Background(), client)
27663	if err != nil {
27664		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
27665		return
27666	}
27667	if !done {
27668		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
27669		return
27670	}
27671	ar.Response = future.Response()
27672	return
27673}
27674
27675// ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
27676type ServiceEndpointPolicyListResult struct {
27677	autorest.Response `json:"-"`
27678	// Value - A list of ServiceEndpointPolicy resources.
27679	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
27680	// NextLink - READ-ONLY; The URL to get the next set of results.
27681	NextLink *string `json:"nextLink,omitempty"`
27682}
27683
27684// ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
27685// values.
27686type ServiceEndpointPolicyListResultIterator struct {
27687	i    int
27688	page ServiceEndpointPolicyListResultPage
27689}
27690
27691// NextWithContext advances to the next value.  If there was an error making
27692// the request the iterator does not advance and the error is returned.
27693func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
27694	if tracing.IsEnabled() {
27695		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
27696		defer func() {
27697			sc := -1
27698			if iter.Response().Response.Response != nil {
27699				sc = iter.Response().Response.Response.StatusCode
27700			}
27701			tracing.EndSpan(ctx, sc, err)
27702		}()
27703	}
27704	iter.i++
27705	if iter.i < len(iter.page.Values()) {
27706		return nil
27707	}
27708	err = iter.page.NextWithContext(ctx)
27709	if err != nil {
27710		iter.i--
27711		return err
27712	}
27713	iter.i = 0
27714	return nil
27715}
27716
27717// Next advances to the next value.  If there was an error making
27718// the request the iterator does not advance and the error is returned.
27719// Deprecated: Use NextWithContext() instead.
27720func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
27721	return iter.NextWithContext(context.Background())
27722}
27723
27724// NotDone returns true if the enumeration should be started or is not yet complete.
27725func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
27726	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27727}
27728
27729// Response returns the raw server response from the last page request.
27730func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
27731	return iter.page.Response()
27732}
27733
27734// Value returns the current value or a zero-initialized value if the
27735// iterator has advanced beyond the end of the collection.
27736func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
27737	if !iter.page.NotDone() {
27738		return ServiceEndpointPolicy{}
27739	}
27740	return iter.page.Values()[iter.i]
27741}
27742
27743// Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
27744func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
27745	return ServiceEndpointPolicyListResultIterator{page: page}
27746}
27747
27748// IsEmpty returns true if the ListResult contains no values.
27749func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
27750	return seplr.Value == nil || len(*seplr.Value) == 0
27751}
27752
27753// serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
27754// It returns nil if no more results exist.
27755func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
27756	if seplr.NextLink == nil || len(to.String(seplr.NextLink)) < 1 {
27757		return nil, nil
27758	}
27759	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27760		autorest.AsJSON(),
27761		autorest.AsGet(),
27762		autorest.WithBaseURL(to.String(seplr.NextLink)))
27763}
27764
27765// ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
27766type ServiceEndpointPolicyListResultPage struct {
27767	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
27768	seplr ServiceEndpointPolicyListResult
27769}
27770
27771// NextWithContext advances to the next page of values.  If there was an error making
27772// the request the page does not advance and the error is returned.
27773func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
27774	if tracing.IsEnabled() {
27775		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
27776		defer func() {
27777			sc := -1
27778			if page.Response().Response.Response != nil {
27779				sc = page.Response().Response.Response.StatusCode
27780			}
27781			tracing.EndSpan(ctx, sc, err)
27782		}()
27783	}
27784	next, err := page.fn(ctx, page.seplr)
27785	if err != nil {
27786		return err
27787	}
27788	page.seplr = next
27789	return nil
27790}
27791
27792// Next advances to the next page of values.  If there was an error making
27793// the request the page does not advance and the error is returned.
27794// Deprecated: Use NextWithContext() instead.
27795func (page *ServiceEndpointPolicyListResultPage) Next() error {
27796	return page.NextWithContext(context.Background())
27797}
27798
27799// NotDone returns true if the page enumeration should be started or is not yet complete.
27800func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
27801	return !page.seplr.IsEmpty()
27802}
27803
27804// Response returns the raw server response from the last page request.
27805func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
27806	return page.seplr
27807}
27808
27809// Values returns the slice of values for the current page or nil if there are no values.
27810func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
27811	if page.seplr.IsEmpty() {
27812		return nil
27813	}
27814	return *page.seplr.Value
27815}
27816
27817// Creates a new instance of the ServiceEndpointPolicyListResultPage type.
27818func NewServiceEndpointPolicyListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
27819	return ServiceEndpointPolicyListResultPage{fn: getNextPage}
27820}
27821
27822// ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
27823type ServiceEndpointPolicyPropertiesFormat struct {
27824	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
27825	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
27826	// Subnets - READ-ONLY; A collection of references to subnets.
27827	Subnets *[]Subnet `json:"subnets,omitempty"`
27828	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
27829	ResourceGUID *string `json:"resourceGuid,omitempty"`
27830	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27831	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27832}
27833
27834// ServiceEndpointPropertiesFormat the service endpoint properties.
27835type ServiceEndpointPropertiesFormat struct {
27836	// Service - The type of the endpoint service.
27837	Service *string `json:"service,omitempty"`
27838	// Locations - A list of locations.
27839	Locations *[]string `json:"locations,omitempty"`
27840	// ProvisioningState - The provisioning state of the service endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27841	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27842}
27843
27844// ServiceTagInformation the service tag information.
27845type ServiceTagInformation struct {
27846	// Properties - READ-ONLY; Properties of the service tag information.
27847	Properties *ServiceTagInformationPropertiesFormat `json:"properties,omitempty"`
27848	// Name - READ-ONLY; The name of service tag.
27849	Name *string `json:"name,omitempty"`
27850	// ID - READ-ONLY; The ID of service tag.
27851	ID *string `json:"id,omitempty"`
27852}
27853
27854// ServiceTagInformationPropertiesFormat properties of the service tag information.
27855type ServiceTagInformationPropertiesFormat struct {
27856	// ChangeNumber - READ-ONLY; The iteration number of service tag.
27857	ChangeNumber *string `json:"changeNumber,omitempty"`
27858	// Region - READ-ONLY; The region of service tag.
27859	Region *string `json:"region,omitempty"`
27860	// SystemService - READ-ONLY; The name of system service.
27861	SystemService *string `json:"systemService,omitempty"`
27862	// AddressPrefixes - READ-ONLY; The list of IP address prefixes.
27863	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
27864}
27865
27866// ServiceTagsListResult response for the ListServiceTags API service call.
27867type ServiceTagsListResult struct {
27868	autorest.Response `json:"-"`
27869	// Name - READ-ONLY; The name of the cloud.
27870	Name *string `json:"name,omitempty"`
27871	// ID - READ-ONLY; The ID of the cloud.
27872	ID *string `json:"id,omitempty"`
27873	// Type - READ-ONLY; The azure resource type.
27874	Type *string `json:"type,omitempty"`
27875	// ChangeNumber - READ-ONLY; The iteration number.
27876	ChangeNumber *string `json:"changeNumber,omitempty"`
27877	// Cloud - READ-ONLY; The name of the cloud.
27878	Cloud *string `json:"cloud,omitempty"`
27879	// Values - READ-ONLY; The list of service tag information resources.
27880	Values *[]ServiceTagInformation `json:"values,omitempty"`
27881}
27882
27883// String ...
27884type String struct {
27885	autorest.Response `json:"-"`
27886	Value             *string `json:"value,omitempty"`
27887}
27888
27889// Subnet subnet in a virtual network resource.
27890type Subnet struct {
27891	autorest.Response `json:"-"`
27892	// SubnetPropertiesFormat - Properties of the subnet.
27893	*SubnetPropertiesFormat `json:"properties,omitempty"`
27894	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27895	Name *string `json:"name,omitempty"`
27896	// Etag - A unique read-only string that changes whenever the resource is updated.
27897	Etag *string `json:"etag,omitempty"`
27898	// ID - Resource ID.
27899	ID *string `json:"id,omitempty"`
27900}
27901
27902// MarshalJSON is the custom marshaler for Subnet.
27903func (s Subnet) MarshalJSON() ([]byte, error) {
27904	objectMap := make(map[string]interface{})
27905	if s.SubnetPropertiesFormat != nil {
27906		objectMap["properties"] = s.SubnetPropertiesFormat
27907	}
27908	if s.Name != nil {
27909		objectMap["name"] = s.Name
27910	}
27911	if s.Etag != nil {
27912		objectMap["etag"] = s.Etag
27913	}
27914	if s.ID != nil {
27915		objectMap["id"] = s.ID
27916	}
27917	return json.Marshal(objectMap)
27918}
27919
27920// UnmarshalJSON is the custom unmarshaler for Subnet struct.
27921func (s *Subnet) UnmarshalJSON(body []byte) error {
27922	var m map[string]*json.RawMessage
27923	err := json.Unmarshal(body, &m)
27924	if err != nil {
27925		return err
27926	}
27927	for k, v := range m {
27928		switch k {
27929		case "properties":
27930			if v != nil {
27931				var subnetPropertiesFormat SubnetPropertiesFormat
27932				err = json.Unmarshal(*v, &subnetPropertiesFormat)
27933				if err != nil {
27934					return err
27935				}
27936				s.SubnetPropertiesFormat = &subnetPropertiesFormat
27937			}
27938		case "name":
27939			if v != nil {
27940				var name string
27941				err = json.Unmarshal(*v, &name)
27942				if err != nil {
27943					return err
27944				}
27945				s.Name = &name
27946			}
27947		case "etag":
27948			if v != nil {
27949				var etag string
27950				err = json.Unmarshal(*v, &etag)
27951				if err != nil {
27952					return err
27953				}
27954				s.Etag = &etag
27955			}
27956		case "id":
27957			if v != nil {
27958				var ID string
27959				err = json.Unmarshal(*v, &ID)
27960				if err != nil {
27961					return err
27962				}
27963				s.ID = &ID
27964			}
27965		}
27966	}
27967
27968	return nil
27969}
27970
27971// SubnetAssociation subnet and it's custom security rules.
27972type SubnetAssociation struct {
27973	// ID - READ-ONLY; Subnet ID.
27974	ID *string `json:"id,omitempty"`
27975	// SecurityRules - Collection of custom security rules.
27976	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
27977}
27978
27979// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
27980// network.
27981type SubnetListResult struct {
27982	autorest.Response `json:"-"`
27983	// Value - The subnets in a virtual network.
27984	Value *[]Subnet `json:"value,omitempty"`
27985	// NextLink - The URL to get the next set of results.
27986	NextLink *string `json:"nextLink,omitempty"`
27987}
27988
27989// SubnetListResultIterator provides access to a complete listing of Subnet values.
27990type SubnetListResultIterator struct {
27991	i    int
27992	page SubnetListResultPage
27993}
27994
27995// NextWithContext advances to the next value.  If there was an error making
27996// the request the iterator does not advance and the error is returned.
27997func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
27998	if tracing.IsEnabled() {
27999		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
28000		defer func() {
28001			sc := -1
28002			if iter.Response().Response.Response != nil {
28003				sc = iter.Response().Response.Response.StatusCode
28004			}
28005			tracing.EndSpan(ctx, sc, err)
28006		}()
28007	}
28008	iter.i++
28009	if iter.i < len(iter.page.Values()) {
28010		return nil
28011	}
28012	err = iter.page.NextWithContext(ctx)
28013	if err != nil {
28014		iter.i--
28015		return err
28016	}
28017	iter.i = 0
28018	return nil
28019}
28020
28021// Next advances to the next value.  If there was an error making
28022// the request the iterator does not advance and the error is returned.
28023// Deprecated: Use NextWithContext() instead.
28024func (iter *SubnetListResultIterator) Next() error {
28025	return iter.NextWithContext(context.Background())
28026}
28027
28028// NotDone returns true if the enumeration should be started or is not yet complete.
28029func (iter SubnetListResultIterator) NotDone() bool {
28030	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28031}
28032
28033// Response returns the raw server response from the last page request.
28034func (iter SubnetListResultIterator) Response() SubnetListResult {
28035	return iter.page.Response()
28036}
28037
28038// Value returns the current value or a zero-initialized value if the
28039// iterator has advanced beyond the end of the collection.
28040func (iter SubnetListResultIterator) Value() Subnet {
28041	if !iter.page.NotDone() {
28042		return Subnet{}
28043	}
28044	return iter.page.Values()[iter.i]
28045}
28046
28047// Creates a new instance of the SubnetListResultIterator type.
28048func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
28049	return SubnetListResultIterator{page: page}
28050}
28051
28052// IsEmpty returns true if the ListResult contains no values.
28053func (slr SubnetListResult) IsEmpty() bool {
28054	return slr.Value == nil || len(*slr.Value) == 0
28055}
28056
28057// subnetListResultPreparer prepares a request to retrieve the next set of results.
28058// It returns nil if no more results exist.
28059func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
28060	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
28061		return nil, nil
28062	}
28063	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28064		autorest.AsJSON(),
28065		autorest.AsGet(),
28066		autorest.WithBaseURL(to.String(slr.NextLink)))
28067}
28068
28069// SubnetListResultPage contains a page of Subnet values.
28070type SubnetListResultPage struct {
28071	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
28072	slr SubnetListResult
28073}
28074
28075// NextWithContext advances to the next page of values.  If there was an error making
28076// the request the page does not advance and the error is returned.
28077func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
28078	if tracing.IsEnabled() {
28079		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
28080		defer func() {
28081			sc := -1
28082			if page.Response().Response.Response != nil {
28083				sc = page.Response().Response.Response.StatusCode
28084			}
28085			tracing.EndSpan(ctx, sc, err)
28086		}()
28087	}
28088	next, err := page.fn(ctx, page.slr)
28089	if err != nil {
28090		return err
28091	}
28092	page.slr = next
28093	return nil
28094}
28095
28096// Next advances to the next page of values.  If there was an error making
28097// the request the page does not advance and the error is returned.
28098// Deprecated: Use NextWithContext() instead.
28099func (page *SubnetListResultPage) Next() error {
28100	return page.NextWithContext(context.Background())
28101}
28102
28103// NotDone returns true if the page enumeration should be started or is not yet complete.
28104func (page SubnetListResultPage) NotDone() bool {
28105	return !page.slr.IsEmpty()
28106}
28107
28108// Response returns the raw server response from the last page request.
28109func (page SubnetListResultPage) Response() SubnetListResult {
28110	return page.slr
28111}
28112
28113// Values returns the slice of values for the current page or nil if there are no values.
28114func (page SubnetListResultPage) Values() []Subnet {
28115	if page.slr.IsEmpty() {
28116		return nil
28117	}
28118	return *page.slr.Value
28119}
28120
28121// Creates a new instance of the SubnetListResultPage type.
28122func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
28123	return SubnetListResultPage{fn: getNextPage}
28124}
28125
28126// SubnetPropertiesFormat properties of the subnet.
28127type SubnetPropertiesFormat struct {
28128	// AddressPrefix - The address prefix for the subnet.
28129	AddressPrefix *string `json:"addressPrefix,omitempty"`
28130	// AddressPrefixes - List of address prefixes for the subnet.
28131	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
28132	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
28133	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
28134	// RouteTable - The reference of the RouteTable resource.
28135	RouteTable *RouteTable `json:"routeTable,omitempty"`
28136	// NatGateway - Nat gateway associated with this subnet.
28137	NatGateway *SubResource `json:"natGateway,omitempty"`
28138	// ServiceEndpoints - An array of service endpoints.
28139	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
28140	// ServiceEndpointPolicies - An array of service endpoint policies.
28141	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
28142	// PrivateEndpoints - READ-ONLY; An array of references to private endpoints.
28143	PrivateEndpoints *[]PrivateEndpoint `json:"privateEndpoints,omitempty"`
28144	// IPConfigurations - READ-ONLY; An array of references to the network interface IP configurations using subnet.
28145	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
28146	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
28147	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
28148	// ResourceNavigationLinks - An array of references to the external resources using subnet.
28149	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
28150	// ServiceAssociationLinks - An array of references to services injecting into this subnet.
28151	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
28152	// Delegations - An array of references to the delegations on the subnet.
28153	Delegations *[]Delegation `json:"delegations,omitempty"`
28154	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
28155	Purpose *string `json:"purpose,omitempty"`
28156	// ProvisioningState - The provisioning state of the subnet resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28157	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28158	// PrivateEndpointNetworkPolicies - Enable or Disable apply network policies on private end point in the subnet.
28159	PrivateEndpointNetworkPolicies *string `json:"privateEndpointNetworkPolicies,omitempty"`
28160	// PrivateLinkServiceNetworkPolicies - Enable or Disable apply network policies on private link service in the subnet.
28161	PrivateLinkServiceNetworkPolicies *string `json:"privateLinkServiceNetworkPolicies,omitempty"`
28162}
28163
28164// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
28165// operation.
28166type SubnetsCreateOrUpdateFuture struct {
28167	azure.Future
28168}
28169
28170// Result returns the result of the asynchronous operation.
28171// If the operation has not completed it will return an error.
28172func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
28173	var done bool
28174	done, err = future.DoneWithContext(context.Background(), client)
28175	if err != nil {
28176		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28177		return
28178	}
28179	if !done {
28180		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
28181		return
28182	}
28183	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28184	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
28185		s, err = client.CreateOrUpdateResponder(s.Response.Response)
28186		if err != nil {
28187			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
28188		}
28189	}
28190	return
28191}
28192
28193// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28194// operation.
28195type SubnetsDeleteFuture struct {
28196	azure.Future
28197}
28198
28199// Result returns the result of the asynchronous operation.
28200// If the operation has not completed it will return an error.
28201func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
28202	var done bool
28203	done, err = future.DoneWithContext(context.Background(), client)
28204	if err != nil {
28205		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
28206		return
28207	}
28208	if !done {
28209		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
28210		return
28211	}
28212	ar.Response = future.Response()
28213	return
28214}
28215
28216// SubnetsPrepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
28217// long-running operation.
28218type SubnetsPrepareNetworkPoliciesFuture struct {
28219	azure.Future
28220}
28221
28222// Result returns the result of the asynchronous operation.
28223// If the operation has not completed it will return an error.
28224func (future *SubnetsPrepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
28225	var done bool
28226	done, err = future.DoneWithContext(context.Background(), client)
28227	if err != nil {
28228		err = autorest.NewErrorWithError(err, "network.SubnetsPrepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
28229		return
28230	}
28231	if !done {
28232		err = azure.NewAsyncOpIncompleteError("network.SubnetsPrepareNetworkPoliciesFuture")
28233		return
28234	}
28235	ar.Response = future.Response()
28236	return
28237}
28238
28239// SubnetsUnprepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
28240// long-running operation.
28241type SubnetsUnprepareNetworkPoliciesFuture struct {
28242	azure.Future
28243}
28244
28245// Result returns the result of the asynchronous operation.
28246// If the operation has not completed it will return an error.
28247func (future *SubnetsUnprepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
28248	var done bool
28249	done, err = future.DoneWithContext(context.Background(), client)
28250	if err != nil {
28251		err = autorest.NewErrorWithError(err, "network.SubnetsUnprepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
28252		return
28253	}
28254	if !done {
28255		err = azure.NewAsyncOpIncompleteError("network.SubnetsUnprepareNetworkPoliciesFuture")
28256		return
28257	}
28258	ar.Response = future.Response()
28259	return
28260}
28261
28262// SubResource reference to another subresource.
28263type SubResource struct {
28264	// ID - Resource ID.
28265	ID *string `json:"id,omitempty"`
28266}
28267
28268// TagsObject tags object for patch operations.
28269type TagsObject struct {
28270	// Tags - Resource tags.
28271	Tags map[string]*string `json:"tags"`
28272}
28273
28274// MarshalJSON is the custom marshaler for TagsObject.
28275func (toVar TagsObject) MarshalJSON() ([]byte, error) {
28276	objectMap := make(map[string]interface{})
28277	if toVar.Tags != nil {
28278		objectMap["tags"] = toVar.Tags
28279	}
28280	return json.Marshal(objectMap)
28281}
28282
28283// Topology topology of the specified resource group.
28284type Topology struct {
28285	autorest.Response `json:"-"`
28286	// ID - READ-ONLY; GUID representing the operation id.
28287	ID *string `json:"id,omitempty"`
28288	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
28289	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
28290	// LastModified - READ-ONLY; The datetime when the topology was last modified.
28291	LastModified *date.Time `json:"lastModified,omitempty"`
28292	// Resources - A list of topology resources.
28293	Resources *[]TopologyResource `json:"resources,omitempty"`
28294}
28295
28296// TopologyAssociation resources that have an association with the parent resource.
28297type TopologyAssociation struct {
28298	// Name - The name of the resource that is associated with the parent resource.
28299	Name *string `json:"name,omitempty"`
28300	// ResourceID - The ID of the resource that is associated with the parent resource.
28301	ResourceID *string `json:"resourceId,omitempty"`
28302	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
28303	AssociationType AssociationType `json:"associationType,omitempty"`
28304}
28305
28306// TopologyParameters parameters that define the representation of topology.
28307type TopologyParameters struct {
28308	// TargetResourceGroupName - The name of the target resource group to perform topology on.
28309	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
28310	// TargetVirtualNetwork - The reference of the Virtual Network resource.
28311	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
28312	// TargetSubnet - The reference of the Subnet resource.
28313	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
28314}
28315
28316// TopologyResource the network resource topology information for the given resource group.
28317type TopologyResource struct {
28318	// Name - Name of the resource.
28319	Name *string `json:"name,omitempty"`
28320	// ID - ID of the resource.
28321	ID *string `json:"id,omitempty"`
28322	// Location - Resource location.
28323	Location *string `json:"location,omitempty"`
28324	// Associations - Holds the associations the resource has with other resources in the resource group.
28325	Associations *[]TopologyAssociation `json:"associations,omitempty"`
28326}
28327
28328// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
28329type TrafficAnalyticsConfigurationProperties struct {
28330	// Enabled - Flag to enable/disable traffic analytics.
28331	Enabled *bool `json:"enabled,omitempty"`
28332	// WorkspaceID - The resource guid of the attached workspace.
28333	WorkspaceID *string `json:"workspaceId,omitempty"`
28334	// WorkspaceRegion - The location of the attached workspace.
28335	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
28336	// WorkspaceResourceID - Resource Id of the attached workspace.
28337	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
28338	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics.
28339	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
28340}
28341
28342// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
28343type TrafficAnalyticsProperties struct {
28344	// NetworkWatcherFlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
28345	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
28346}
28347
28348// TrafficSelectorPolicy an traffic selector policy for a virtual network gateway connection.
28349type TrafficSelectorPolicy struct {
28350	// LocalAddressRanges - A collection of local address spaces in CIDR format
28351	LocalAddressRanges *[]string `json:"localAddressRanges,omitempty"`
28352	// RemoteAddressRanges - A collection of remote address spaces in CIDR format
28353	RemoteAddressRanges *[]string `json:"remoteAddressRanges,omitempty"`
28354}
28355
28356// TroubleshootingDetails information gained from troubleshooting of specified resource.
28357type TroubleshootingDetails struct {
28358	// ID - The id of the get troubleshoot operation.
28359	ID *string `json:"id,omitempty"`
28360	// ReasonType - Reason type of failure.
28361	ReasonType *string `json:"reasonType,omitempty"`
28362	// Summary - A summary of troubleshooting.
28363	Summary *string `json:"summary,omitempty"`
28364	// Detail - Details on troubleshooting results.
28365	Detail *string `json:"detail,omitempty"`
28366	// RecommendedActions - List of recommended actions.
28367	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
28368}
28369
28370// TroubleshootingParameters parameters that define the resource to troubleshoot.
28371type TroubleshootingParameters struct {
28372	// TargetResourceID - The target resource to troubleshoot.
28373	TargetResourceID *string `json:"targetResourceId,omitempty"`
28374	// TroubleshootingProperties - Properties of the troubleshooting resource.
28375	*TroubleshootingProperties `json:"properties,omitempty"`
28376}
28377
28378// MarshalJSON is the custom marshaler for TroubleshootingParameters.
28379func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
28380	objectMap := make(map[string]interface{})
28381	if tp.TargetResourceID != nil {
28382		objectMap["targetResourceId"] = tp.TargetResourceID
28383	}
28384	if tp.TroubleshootingProperties != nil {
28385		objectMap["properties"] = tp.TroubleshootingProperties
28386	}
28387	return json.Marshal(objectMap)
28388}
28389
28390// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
28391func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
28392	var m map[string]*json.RawMessage
28393	err := json.Unmarshal(body, &m)
28394	if err != nil {
28395		return err
28396	}
28397	for k, v := range m {
28398		switch k {
28399		case "targetResourceId":
28400			if v != nil {
28401				var targetResourceID string
28402				err = json.Unmarshal(*v, &targetResourceID)
28403				if err != nil {
28404					return err
28405				}
28406				tp.TargetResourceID = &targetResourceID
28407			}
28408		case "properties":
28409			if v != nil {
28410				var troubleshootingProperties TroubleshootingProperties
28411				err = json.Unmarshal(*v, &troubleshootingProperties)
28412				if err != nil {
28413					return err
28414				}
28415				tp.TroubleshootingProperties = &troubleshootingProperties
28416			}
28417		}
28418	}
28419
28420	return nil
28421}
28422
28423// TroubleshootingProperties storage location provided for troubleshoot.
28424type TroubleshootingProperties struct {
28425	// StorageID - The ID for the storage account to save the troubleshoot result.
28426	StorageID *string `json:"storageId,omitempty"`
28427	// StoragePath - The path to the blob to save the troubleshoot result in.
28428	StoragePath *string `json:"storagePath,omitempty"`
28429}
28430
28431// TroubleshootingRecommendedActions recommended actions based on discovered issues.
28432type TroubleshootingRecommendedActions struct {
28433	// ActionID - ID of the recommended action.
28434	ActionID *string `json:"actionId,omitempty"`
28435	// ActionText - Description of recommended actions.
28436	ActionText *string `json:"actionText,omitempty"`
28437	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
28438	ActionURI *string `json:"actionUri,omitempty"`
28439	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
28440	ActionURIText *string `json:"actionUriText,omitempty"`
28441}
28442
28443// TroubleshootingResult troubleshooting information gained from specified resource.
28444type TroubleshootingResult struct {
28445	autorest.Response `json:"-"`
28446	// StartTime - The start time of the troubleshooting.
28447	StartTime *date.Time `json:"startTime,omitempty"`
28448	// EndTime - The end time of the troubleshooting.
28449	EndTime *date.Time `json:"endTime,omitempty"`
28450	// Code - The result code of the troubleshooting.
28451	Code *string `json:"code,omitempty"`
28452	// Results - Information from troubleshooting.
28453	Results *[]TroubleshootingDetails `json:"results,omitempty"`
28454}
28455
28456// TunnelConnectionHealth virtualNetworkGatewayConnection properties.
28457type TunnelConnectionHealth struct {
28458	// Tunnel - READ-ONLY; Tunnel name.
28459	Tunnel *string `json:"tunnel,omitempty"`
28460	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
28461	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
28462	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection.
28463	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
28464	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection.
28465	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
28466	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
28467	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
28468}
28469
28470// UnprepareNetworkPoliciesRequest details of UnprepareNetworkPolicies for Subnet.
28471type UnprepareNetworkPoliciesRequest struct {
28472	// ServiceName - The name of the service for which subnet is being unprepared for.
28473	ServiceName *string `json:"serviceName,omitempty"`
28474}
28475
28476// Usage describes network resource usage.
28477type Usage struct {
28478	// ID - READ-ONLY; Resource identifier.
28479	ID *string `json:"id,omitempty"`
28480	// Unit - An enum describing the unit of measurement.
28481	Unit *string `json:"unit,omitempty"`
28482	// CurrentValue - The current value of the usage.
28483	CurrentValue *int64 `json:"currentValue,omitempty"`
28484	// Limit - The limit of usage.
28485	Limit *int64 `json:"limit,omitempty"`
28486	// Name - The name of the type of usage.
28487	Name *UsageName `json:"name,omitempty"`
28488}
28489
28490// UsageName the usage names.
28491type UsageName struct {
28492	// Value - A string describing the resource name.
28493	Value *string `json:"value,omitempty"`
28494	// LocalizedValue - A localized string describing the resource name.
28495	LocalizedValue *string `json:"localizedValue,omitempty"`
28496}
28497
28498// UsagesListResult the list usages operation response.
28499type UsagesListResult struct {
28500	autorest.Response `json:"-"`
28501	// Value - The list network resource usages.
28502	Value *[]Usage `json:"value,omitempty"`
28503	// NextLink - URL to get the next set of results.
28504	NextLink *string `json:"nextLink,omitempty"`
28505}
28506
28507// UsagesListResultIterator provides access to a complete listing of Usage values.
28508type UsagesListResultIterator struct {
28509	i    int
28510	page UsagesListResultPage
28511}
28512
28513// NextWithContext advances to the next value.  If there was an error making
28514// the request the iterator does not advance and the error is returned.
28515func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
28516	if tracing.IsEnabled() {
28517		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
28518		defer func() {
28519			sc := -1
28520			if iter.Response().Response.Response != nil {
28521				sc = iter.Response().Response.Response.StatusCode
28522			}
28523			tracing.EndSpan(ctx, sc, err)
28524		}()
28525	}
28526	iter.i++
28527	if iter.i < len(iter.page.Values()) {
28528		return nil
28529	}
28530	err = iter.page.NextWithContext(ctx)
28531	if err != nil {
28532		iter.i--
28533		return err
28534	}
28535	iter.i = 0
28536	return nil
28537}
28538
28539// Next advances to the next value.  If there was an error making
28540// the request the iterator does not advance and the error is returned.
28541// Deprecated: Use NextWithContext() instead.
28542func (iter *UsagesListResultIterator) Next() error {
28543	return iter.NextWithContext(context.Background())
28544}
28545
28546// NotDone returns true if the enumeration should be started or is not yet complete.
28547func (iter UsagesListResultIterator) NotDone() bool {
28548	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28549}
28550
28551// Response returns the raw server response from the last page request.
28552func (iter UsagesListResultIterator) Response() UsagesListResult {
28553	return iter.page.Response()
28554}
28555
28556// Value returns the current value or a zero-initialized value if the
28557// iterator has advanced beyond the end of the collection.
28558func (iter UsagesListResultIterator) Value() Usage {
28559	if !iter.page.NotDone() {
28560		return Usage{}
28561	}
28562	return iter.page.Values()[iter.i]
28563}
28564
28565// Creates a new instance of the UsagesListResultIterator type.
28566func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
28567	return UsagesListResultIterator{page: page}
28568}
28569
28570// IsEmpty returns true if the ListResult contains no values.
28571func (ulr UsagesListResult) IsEmpty() bool {
28572	return ulr.Value == nil || len(*ulr.Value) == 0
28573}
28574
28575// usagesListResultPreparer prepares a request to retrieve the next set of results.
28576// It returns nil if no more results exist.
28577func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
28578	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
28579		return nil, nil
28580	}
28581	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28582		autorest.AsJSON(),
28583		autorest.AsGet(),
28584		autorest.WithBaseURL(to.String(ulr.NextLink)))
28585}
28586
28587// UsagesListResultPage contains a page of Usage values.
28588type UsagesListResultPage struct {
28589	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
28590	ulr UsagesListResult
28591}
28592
28593// NextWithContext advances to the next page of values.  If there was an error making
28594// the request the page does not advance and the error is returned.
28595func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
28596	if tracing.IsEnabled() {
28597		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
28598		defer func() {
28599			sc := -1
28600			if page.Response().Response.Response != nil {
28601				sc = page.Response().Response.Response.StatusCode
28602			}
28603			tracing.EndSpan(ctx, sc, err)
28604		}()
28605	}
28606	next, err := page.fn(ctx, page.ulr)
28607	if err != nil {
28608		return err
28609	}
28610	page.ulr = next
28611	return nil
28612}
28613
28614// Next advances to the next page of values.  If there was an error making
28615// the request the page does not advance and the error is returned.
28616// Deprecated: Use NextWithContext() instead.
28617func (page *UsagesListResultPage) Next() error {
28618	return page.NextWithContext(context.Background())
28619}
28620
28621// NotDone returns true if the page enumeration should be started or is not yet complete.
28622func (page UsagesListResultPage) NotDone() bool {
28623	return !page.ulr.IsEmpty()
28624}
28625
28626// Response returns the raw server response from the last page request.
28627func (page UsagesListResultPage) Response() UsagesListResult {
28628	return page.ulr
28629}
28630
28631// Values returns the slice of values for the current page or nil if there are no values.
28632func (page UsagesListResultPage) Values() []Usage {
28633	if page.ulr.IsEmpty() {
28634		return nil
28635	}
28636	return *page.ulr.Value
28637}
28638
28639// Creates a new instance of the UsagesListResultPage type.
28640func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
28641	return UsagesListResultPage{fn: getNextPage}
28642}
28643
28644// VerificationIPFlowParameters parameters that define the IP flow to be verified.
28645type VerificationIPFlowParameters struct {
28646	// TargetResourceID - The ID of the target resource to perform next-hop on.
28647	TargetResourceID *string `json:"targetResourceId,omitempty"`
28648	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
28649	Direction Direction `json:"direction,omitempty"`
28650	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
28651	Protocol IPFlowProtocol `json:"protocol,omitempty"`
28652	// LocalPort - The local port. Acceptable values are a single integer in the range (0-65535). Support for * for the source port, which depends on the direction.
28653	LocalPort *string `json:"localPort,omitempty"`
28654	// RemotePort - The remote port. Acceptable values are a single integer in the range (0-65535). Support for * for the source port, which depends on the direction.
28655	RemotePort *string `json:"remotePort,omitempty"`
28656	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
28657	LocalIPAddress *string `json:"localIPAddress,omitempty"`
28658	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
28659	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
28660	// TargetNicResourceID - The NIC ID. (If VM has multiple NICs and IP forwarding is enabled on any of them, then this parameter must be specified. Otherwise optional).
28661	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
28662}
28663
28664// VerificationIPFlowResult results of IP flow verification on the target resource.
28665type VerificationIPFlowResult struct {
28666	autorest.Response `json:"-"`
28667	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
28668	Access Access `json:"access,omitempty"`
28669	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
28670	RuleName *string `json:"ruleName,omitempty"`
28671}
28672
28673// VirtualHub virtualHub Resource.
28674type VirtualHub struct {
28675	autorest.Response `json:"-"`
28676	// VirtualHubProperties - Properties of the virtual hub.
28677	*VirtualHubProperties `json:"properties,omitempty"`
28678	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28679	Etag *string `json:"etag,omitempty"`
28680	// ID - Resource ID.
28681	ID *string `json:"id,omitempty"`
28682	// Name - READ-ONLY; Resource name.
28683	Name *string `json:"name,omitempty"`
28684	// Type - READ-ONLY; Resource type.
28685	Type *string `json:"type,omitempty"`
28686	// Location - Resource location.
28687	Location *string `json:"location,omitempty"`
28688	// Tags - Resource tags.
28689	Tags map[string]*string `json:"tags"`
28690}
28691
28692// MarshalJSON is the custom marshaler for VirtualHub.
28693func (vh VirtualHub) MarshalJSON() ([]byte, error) {
28694	objectMap := make(map[string]interface{})
28695	if vh.VirtualHubProperties != nil {
28696		objectMap["properties"] = vh.VirtualHubProperties
28697	}
28698	if vh.ID != nil {
28699		objectMap["id"] = vh.ID
28700	}
28701	if vh.Location != nil {
28702		objectMap["location"] = vh.Location
28703	}
28704	if vh.Tags != nil {
28705		objectMap["tags"] = vh.Tags
28706	}
28707	return json.Marshal(objectMap)
28708}
28709
28710// UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
28711func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
28712	var m map[string]*json.RawMessage
28713	err := json.Unmarshal(body, &m)
28714	if err != nil {
28715		return err
28716	}
28717	for k, v := range m {
28718		switch k {
28719		case "properties":
28720			if v != nil {
28721				var virtualHubProperties VirtualHubProperties
28722				err = json.Unmarshal(*v, &virtualHubProperties)
28723				if err != nil {
28724					return err
28725				}
28726				vh.VirtualHubProperties = &virtualHubProperties
28727			}
28728		case "etag":
28729			if v != nil {
28730				var etag string
28731				err = json.Unmarshal(*v, &etag)
28732				if err != nil {
28733					return err
28734				}
28735				vh.Etag = &etag
28736			}
28737		case "id":
28738			if v != nil {
28739				var ID string
28740				err = json.Unmarshal(*v, &ID)
28741				if err != nil {
28742					return err
28743				}
28744				vh.ID = &ID
28745			}
28746		case "name":
28747			if v != nil {
28748				var name string
28749				err = json.Unmarshal(*v, &name)
28750				if err != nil {
28751					return err
28752				}
28753				vh.Name = &name
28754			}
28755		case "type":
28756			if v != nil {
28757				var typeVar string
28758				err = json.Unmarshal(*v, &typeVar)
28759				if err != nil {
28760					return err
28761				}
28762				vh.Type = &typeVar
28763			}
28764		case "location":
28765			if v != nil {
28766				var location string
28767				err = json.Unmarshal(*v, &location)
28768				if err != nil {
28769					return err
28770				}
28771				vh.Location = &location
28772			}
28773		case "tags":
28774			if v != nil {
28775				var tags map[string]*string
28776				err = json.Unmarshal(*v, &tags)
28777				if err != nil {
28778					return err
28779				}
28780				vh.Tags = tags
28781			}
28782		}
28783	}
28784
28785	return nil
28786}
28787
28788// VirtualHubID virtual Hub identifier.
28789type VirtualHubID struct {
28790	// ID - The resource URI for the Virtual Hub where the ExpressRoute gateway is or will be deployed. The Virtual Hub resource and the ExpressRoute gateway resource reside in the same subscription.
28791	ID *string `json:"id,omitempty"`
28792}
28793
28794// VirtualHubProperties parameters for VirtualHub.
28795type VirtualHubProperties struct {
28796	// VirtualWan - The VirtualWAN to which the VirtualHub belongs.
28797	VirtualWan *SubResource `json:"virtualWan,omitempty"`
28798	// VpnGateway - The VpnGateway associated with this VirtualHub.
28799	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
28800	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub.
28801	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
28802	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub.
28803	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
28804	// AzureFirewall - The azureFirewall associated with this VirtualHub.
28805	AzureFirewall *SubResource `json:"azureFirewall,omitempty"`
28806	// VirtualNetworkConnections - List of all vnet connections with this VirtualHub.
28807	VirtualNetworkConnections *[]HubVirtualNetworkConnection `json:"virtualNetworkConnections,omitempty"`
28808	// AddressPrefix - Address-prefix for this VirtualHub.
28809	AddressPrefix *string `json:"addressPrefix,omitempty"`
28810	// RouteTable - The routeTable associated with this virtual hub.
28811	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
28812	// ProvisioningState - The provisioning state of the virtual hub resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28813	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28814	// SecurityProviderName - The Security Provider name.
28815	SecurityProviderName *string `json:"securityProviderName,omitempty"`
28816}
28817
28818// VirtualHubRoute virtualHub route.
28819type VirtualHubRoute struct {
28820	// AddressPrefixes - List of all addressPrefixes.
28821	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
28822	// NextHopIPAddress - NextHop ip address.
28823	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
28824}
28825
28826// VirtualHubRouteTable virtualHub route table.
28827type VirtualHubRouteTable struct {
28828	// Routes - List of all routes.
28829	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
28830}
28831
28832// VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28833// long-running operation.
28834type VirtualHubsCreateOrUpdateFuture struct {
28835	azure.Future
28836}
28837
28838// Result returns the result of the asynchronous operation.
28839// If the operation has not completed it will return an error.
28840func (future *VirtualHubsCreateOrUpdateFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
28841	var done bool
28842	done, err = future.DoneWithContext(context.Background(), client)
28843	if err != nil {
28844		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28845		return
28846	}
28847	if !done {
28848		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
28849		return
28850	}
28851	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28852	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
28853		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
28854		if err != nil {
28855			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
28856		}
28857	}
28858	return
28859}
28860
28861// VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28862// operation.
28863type VirtualHubsDeleteFuture struct {
28864	azure.Future
28865}
28866
28867// Result returns the result of the asynchronous operation.
28868// If the operation has not completed it will return an error.
28869func (future *VirtualHubsDeleteFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
28870	var done bool
28871	done, err = future.DoneWithContext(context.Background(), client)
28872	if err != nil {
28873		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
28874		return
28875	}
28876	if !done {
28877		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
28878		return
28879	}
28880	ar.Response = future.Response()
28881	return
28882}
28883
28884// VirtualHubsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
28885// operation.
28886type VirtualHubsUpdateTagsFuture struct {
28887	azure.Future
28888}
28889
28890// Result returns the result of the asynchronous operation.
28891// If the operation has not completed it will return an error.
28892func (future *VirtualHubsUpdateTagsFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
28893	var done bool
28894	done, err = future.DoneWithContext(context.Background(), client)
28895	if err != nil {
28896		err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
28897		return
28898	}
28899	if !done {
28900		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsUpdateTagsFuture")
28901		return
28902	}
28903	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28904	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
28905		vh, err = client.UpdateTagsResponder(vh.Response.Response)
28906		if err != nil {
28907			err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", vh.Response.Response, "Failure responding to request")
28908		}
28909	}
28910	return
28911}
28912
28913// VirtualNetwork virtual Network resource.
28914type VirtualNetwork struct {
28915	autorest.Response `json:"-"`
28916	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
28917	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
28918	// Etag - A unique read-only string that changes whenever the resource is updated.
28919	Etag *string `json:"etag,omitempty"`
28920	// ID - Resource ID.
28921	ID *string `json:"id,omitempty"`
28922	// Name - READ-ONLY; Resource name.
28923	Name *string `json:"name,omitempty"`
28924	// Type - READ-ONLY; Resource type.
28925	Type *string `json:"type,omitempty"`
28926	// Location - Resource location.
28927	Location *string `json:"location,omitempty"`
28928	// Tags - Resource tags.
28929	Tags map[string]*string `json:"tags"`
28930}
28931
28932// MarshalJSON is the custom marshaler for VirtualNetwork.
28933func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
28934	objectMap := make(map[string]interface{})
28935	if vn.VirtualNetworkPropertiesFormat != nil {
28936		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
28937	}
28938	if vn.Etag != nil {
28939		objectMap["etag"] = vn.Etag
28940	}
28941	if vn.ID != nil {
28942		objectMap["id"] = vn.ID
28943	}
28944	if vn.Location != nil {
28945		objectMap["location"] = vn.Location
28946	}
28947	if vn.Tags != nil {
28948		objectMap["tags"] = vn.Tags
28949	}
28950	return json.Marshal(objectMap)
28951}
28952
28953// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
28954func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
28955	var m map[string]*json.RawMessage
28956	err := json.Unmarshal(body, &m)
28957	if err != nil {
28958		return err
28959	}
28960	for k, v := range m {
28961		switch k {
28962		case "properties":
28963			if v != nil {
28964				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
28965				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
28966				if err != nil {
28967					return err
28968				}
28969				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
28970			}
28971		case "etag":
28972			if v != nil {
28973				var etag string
28974				err = json.Unmarshal(*v, &etag)
28975				if err != nil {
28976					return err
28977				}
28978				vn.Etag = &etag
28979			}
28980		case "id":
28981			if v != nil {
28982				var ID string
28983				err = json.Unmarshal(*v, &ID)
28984				if err != nil {
28985					return err
28986				}
28987				vn.ID = &ID
28988			}
28989		case "name":
28990			if v != nil {
28991				var name string
28992				err = json.Unmarshal(*v, &name)
28993				if err != nil {
28994					return err
28995				}
28996				vn.Name = &name
28997			}
28998		case "type":
28999			if v != nil {
29000				var typeVar string
29001				err = json.Unmarshal(*v, &typeVar)
29002				if err != nil {
29003					return err
29004				}
29005				vn.Type = &typeVar
29006			}
29007		case "location":
29008			if v != nil {
29009				var location string
29010				err = json.Unmarshal(*v, &location)
29011				if err != nil {
29012					return err
29013				}
29014				vn.Location = &location
29015			}
29016		case "tags":
29017			if v != nil {
29018				var tags map[string]*string
29019				err = json.Unmarshal(*v, &tags)
29020				if err != nil {
29021					return err
29022				}
29023				vn.Tags = tags
29024			}
29025		}
29026	}
29027
29028	return nil
29029}
29030
29031// VirtualNetworkBgpCommunities bgp Communities sent over ExpressRoute with each route corresponding to a
29032// prefix in this VNET.
29033type VirtualNetworkBgpCommunities struct {
29034	// VirtualNetworkCommunity - The BGP community associated with the virtual network
29035	VirtualNetworkCommunity *string `json:"virtualNetworkCommunity,omitempty"`
29036	// RegionalCommunity - READ-ONLY; The BGP community associated with the region of the virtual network
29037	RegionalCommunity *string `json:"regionalCommunity,omitempty"`
29038}
29039
29040// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
29041// resource.
29042type VirtualNetworkConnectionGatewayReference struct {
29043	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
29044	ID *string `json:"id,omitempty"`
29045}
29046
29047// VirtualNetworkGateway a common class for general resource information.
29048type VirtualNetworkGateway struct {
29049	autorest.Response `json:"-"`
29050	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
29051	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
29052	// Etag - A unique read-only string that changes whenever the resource is updated.
29053	Etag *string `json:"etag,omitempty"`
29054	// ID - Resource ID.
29055	ID *string `json:"id,omitempty"`
29056	// Name - READ-ONLY; Resource name.
29057	Name *string `json:"name,omitempty"`
29058	// Type - READ-ONLY; Resource type.
29059	Type *string `json:"type,omitempty"`
29060	// Location - Resource location.
29061	Location *string `json:"location,omitempty"`
29062	// Tags - Resource tags.
29063	Tags map[string]*string `json:"tags"`
29064}
29065
29066// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
29067func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
29068	objectMap := make(map[string]interface{})
29069	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
29070		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
29071	}
29072	if vng.Etag != nil {
29073		objectMap["etag"] = vng.Etag
29074	}
29075	if vng.ID != nil {
29076		objectMap["id"] = vng.ID
29077	}
29078	if vng.Location != nil {
29079		objectMap["location"] = vng.Location
29080	}
29081	if vng.Tags != nil {
29082		objectMap["tags"] = vng.Tags
29083	}
29084	return json.Marshal(objectMap)
29085}
29086
29087// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
29088func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
29089	var m map[string]*json.RawMessage
29090	err := json.Unmarshal(body, &m)
29091	if err != nil {
29092		return err
29093	}
29094	for k, v := range m {
29095		switch k {
29096		case "properties":
29097			if v != nil {
29098				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
29099				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
29100				if err != nil {
29101					return err
29102				}
29103				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
29104			}
29105		case "etag":
29106			if v != nil {
29107				var etag string
29108				err = json.Unmarshal(*v, &etag)
29109				if err != nil {
29110					return err
29111				}
29112				vng.Etag = &etag
29113			}
29114		case "id":
29115			if v != nil {
29116				var ID string
29117				err = json.Unmarshal(*v, &ID)
29118				if err != nil {
29119					return err
29120				}
29121				vng.ID = &ID
29122			}
29123		case "name":
29124			if v != nil {
29125				var name string
29126				err = json.Unmarshal(*v, &name)
29127				if err != nil {
29128					return err
29129				}
29130				vng.Name = &name
29131			}
29132		case "type":
29133			if v != nil {
29134				var typeVar string
29135				err = json.Unmarshal(*v, &typeVar)
29136				if err != nil {
29137					return err
29138				}
29139				vng.Type = &typeVar
29140			}
29141		case "location":
29142			if v != nil {
29143				var location string
29144				err = json.Unmarshal(*v, &location)
29145				if err != nil {
29146					return err
29147				}
29148				vng.Location = &location
29149			}
29150		case "tags":
29151			if v != nil {
29152				var tags map[string]*string
29153				err = json.Unmarshal(*v, &tags)
29154				if err != nil {
29155					return err
29156				}
29157				vng.Tags = tags
29158			}
29159		}
29160	}
29161
29162	return nil
29163}
29164
29165// VirtualNetworkGatewayConnection a common class for general resource information.
29166type VirtualNetworkGatewayConnection struct {
29167	autorest.Response `json:"-"`
29168	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
29169	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
29170	// Etag - A unique read-only string that changes whenever the resource is updated.
29171	Etag *string `json:"etag,omitempty"`
29172	// ID - Resource ID.
29173	ID *string `json:"id,omitempty"`
29174	// Name - READ-ONLY; Resource name.
29175	Name *string `json:"name,omitempty"`
29176	// Type - READ-ONLY; Resource type.
29177	Type *string `json:"type,omitempty"`
29178	// Location - Resource location.
29179	Location *string `json:"location,omitempty"`
29180	// Tags - Resource tags.
29181	Tags map[string]*string `json:"tags"`
29182}
29183
29184// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
29185func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
29186	objectMap := make(map[string]interface{})
29187	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
29188		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
29189	}
29190	if vngc.Etag != nil {
29191		objectMap["etag"] = vngc.Etag
29192	}
29193	if vngc.ID != nil {
29194		objectMap["id"] = vngc.ID
29195	}
29196	if vngc.Location != nil {
29197		objectMap["location"] = vngc.Location
29198	}
29199	if vngc.Tags != nil {
29200		objectMap["tags"] = vngc.Tags
29201	}
29202	return json.Marshal(objectMap)
29203}
29204
29205// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
29206func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
29207	var m map[string]*json.RawMessage
29208	err := json.Unmarshal(body, &m)
29209	if err != nil {
29210		return err
29211	}
29212	for k, v := range m {
29213		switch k {
29214		case "properties":
29215			if v != nil {
29216				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
29217				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
29218				if err != nil {
29219					return err
29220				}
29221				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
29222			}
29223		case "etag":
29224			if v != nil {
29225				var etag string
29226				err = json.Unmarshal(*v, &etag)
29227				if err != nil {
29228					return err
29229				}
29230				vngc.Etag = &etag
29231			}
29232		case "id":
29233			if v != nil {
29234				var ID string
29235				err = json.Unmarshal(*v, &ID)
29236				if err != nil {
29237					return err
29238				}
29239				vngc.ID = &ID
29240			}
29241		case "name":
29242			if v != nil {
29243				var name string
29244				err = json.Unmarshal(*v, &name)
29245				if err != nil {
29246					return err
29247				}
29248				vngc.Name = &name
29249			}
29250		case "type":
29251			if v != nil {
29252				var typeVar string
29253				err = json.Unmarshal(*v, &typeVar)
29254				if err != nil {
29255					return err
29256				}
29257				vngc.Type = &typeVar
29258			}
29259		case "location":
29260			if v != nil {
29261				var location string
29262				err = json.Unmarshal(*v, &location)
29263				if err != nil {
29264					return err
29265				}
29266				vngc.Location = &location
29267			}
29268		case "tags":
29269			if v != nil {
29270				var tags map[string]*string
29271				err = json.Unmarshal(*v, &tags)
29272				if err != nil {
29273					return err
29274				}
29275				vngc.Tags = tags
29276			}
29277		}
29278	}
29279
29280	return nil
29281}
29282
29283// VirtualNetworkGatewayConnectionListEntity a common class for general resource information.
29284type VirtualNetworkGatewayConnectionListEntity struct {
29285	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
29286	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
29287	// Etag - A unique read-only string that changes whenever the resource is updated.
29288	Etag *string `json:"etag,omitempty"`
29289	// ID - Resource ID.
29290	ID *string `json:"id,omitempty"`
29291	// Name - READ-ONLY; Resource name.
29292	Name *string `json:"name,omitempty"`
29293	// Type - READ-ONLY; Resource type.
29294	Type *string `json:"type,omitempty"`
29295	// Location - Resource location.
29296	Location *string `json:"location,omitempty"`
29297	// Tags - Resource tags.
29298	Tags map[string]*string `json:"tags"`
29299}
29300
29301// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
29302func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
29303	objectMap := make(map[string]interface{})
29304	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
29305		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
29306	}
29307	if vngcle.Etag != nil {
29308		objectMap["etag"] = vngcle.Etag
29309	}
29310	if vngcle.ID != nil {
29311		objectMap["id"] = vngcle.ID
29312	}
29313	if vngcle.Location != nil {
29314		objectMap["location"] = vngcle.Location
29315	}
29316	if vngcle.Tags != nil {
29317		objectMap["tags"] = vngcle.Tags
29318	}
29319	return json.Marshal(objectMap)
29320}
29321
29322// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
29323func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
29324	var m map[string]*json.RawMessage
29325	err := json.Unmarshal(body, &m)
29326	if err != nil {
29327		return err
29328	}
29329	for k, v := range m {
29330		switch k {
29331		case "properties":
29332			if v != nil {
29333				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
29334				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
29335				if err != nil {
29336					return err
29337				}
29338				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
29339			}
29340		case "etag":
29341			if v != nil {
29342				var etag string
29343				err = json.Unmarshal(*v, &etag)
29344				if err != nil {
29345					return err
29346				}
29347				vngcle.Etag = &etag
29348			}
29349		case "id":
29350			if v != nil {
29351				var ID string
29352				err = json.Unmarshal(*v, &ID)
29353				if err != nil {
29354					return err
29355				}
29356				vngcle.ID = &ID
29357			}
29358		case "name":
29359			if v != nil {
29360				var name string
29361				err = json.Unmarshal(*v, &name)
29362				if err != nil {
29363					return err
29364				}
29365				vngcle.Name = &name
29366			}
29367		case "type":
29368			if v != nil {
29369				var typeVar string
29370				err = json.Unmarshal(*v, &typeVar)
29371				if err != nil {
29372					return err
29373				}
29374				vngcle.Type = &typeVar
29375			}
29376		case "location":
29377			if v != nil {
29378				var location string
29379				err = json.Unmarshal(*v, &location)
29380				if err != nil {
29381					return err
29382				}
29383				vngcle.Location = &location
29384			}
29385		case "tags":
29386			if v != nil {
29387				var tags map[string]*string
29388				err = json.Unmarshal(*v, &tags)
29389				if err != nil {
29390					return err
29391				}
29392				vngcle.Tags = tags
29393			}
29394		}
29395	}
29396
29397	return nil
29398}
29399
29400// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties.
29401type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
29402	// AuthorizationKey - The authorizationKey.
29403	AuthorizationKey *string `json:"authorizationKey,omitempty"`
29404	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
29405	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
29406	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
29407	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
29408	// LocalNetworkGateway2 - The reference to local network gateway resource.
29409	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
29410	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
29411	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
29412	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
29413	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
29414	// RoutingWeight - The routing weight.
29415	RoutingWeight *int32 `json:"routingWeight,omitempty"`
29416	// SharedKey - The IPSec shared key.
29417	SharedKey *string `json:"sharedKey,omitempty"`
29418	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
29419	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
29420	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
29421	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
29422	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
29423	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
29424	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
29425	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
29426	// Peer - The reference to peerings resource.
29427	Peer *SubResource `json:"peer,omitempty"`
29428	// EnableBgp - EnableBgp flag.
29429	EnableBgp *bool `json:"enableBgp,omitempty"`
29430	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
29431	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
29432	// IpsecPolicies - The IPSec Policies to be considered by this connection.
29433	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
29434	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
29435	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
29436	// ResourceGUID - The resource GUID property of the virtual network gateway connection resource.
29437	ResourceGUID *string `json:"resourceGuid,omitempty"`
29438	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29439	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29440	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
29441	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
29442}
29443
29444// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
29445// service call.
29446type VirtualNetworkGatewayConnectionListResult struct {
29447	autorest.Response `json:"-"`
29448	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
29449	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
29450	// NextLink - READ-ONLY; The URL to get the next set of results.
29451	NextLink *string `json:"nextLink,omitempty"`
29452}
29453
29454// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
29455// VirtualNetworkGatewayConnection values.
29456type VirtualNetworkGatewayConnectionListResultIterator struct {
29457	i    int
29458	page VirtualNetworkGatewayConnectionListResultPage
29459}
29460
29461// NextWithContext advances to the next value.  If there was an error making
29462// the request the iterator does not advance and the error is returned.
29463func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
29464	if tracing.IsEnabled() {
29465		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
29466		defer func() {
29467			sc := -1
29468			if iter.Response().Response.Response != nil {
29469				sc = iter.Response().Response.Response.StatusCode
29470			}
29471			tracing.EndSpan(ctx, sc, err)
29472		}()
29473	}
29474	iter.i++
29475	if iter.i < len(iter.page.Values()) {
29476		return nil
29477	}
29478	err = iter.page.NextWithContext(ctx)
29479	if err != nil {
29480		iter.i--
29481		return err
29482	}
29483	iter.i = 0
29484	return nil
29485}
29486
29487// Next advances to the next value.  If there was an error making
29488// the request the iterator does not advance and the error is returned.
29489// Deprecated: Use NextWithContext() instead.
29490func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
29491	return iter.NextWithContext(context.Background())
29492}
29493
29494// NotDone returns true if the enumeration should be started or is not yet complete.
29495func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
29496	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29497}
29498
29499// Response returns the raw server response from the last page request.
29500func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
29501	return iter.page.Response()
29502}
29503
29504// Value returns the current value or a zero-initialized value if the
29505// iterator has advanced beyond the end of the collection.
29506func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
29507	if !iter.page.NotDone() {
29508		return VirtualNetworkGatewayConnection{}
29509	}
29510	return iter.page.Values()[iter.i]
29511}
29512
29513// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
29514func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
29515	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
29516}
29517
29518// IsEmpty returns true if the ListResult contains no values.
29519func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
29520	return vngclr.Value == nil || len(*vngclr.Value) == 0
29521}
29522
29523// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
29524// It returns nil if no more results exist.
29525func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
29526	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
29527		return nil, nil
29528	}
29529	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29530		autorest.AsJSON(),
29531		autorest.AsGet(),
29532		autorest.WithBaseURL(to.String(vngclr.NextLink)))
29533}
29534
29535// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
29536type VirtualNetworkGatewayConnectionListResultPage struct {
29537	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
29538	vngclr VirtualNetworkGatewayConnectionListResult
29539}
29540
29541// NextWithContext advances to the next page of values.  If there was an error making
29542// the request the page does not advance and the error is returned.
29543func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
29544	if tracing.IsEnabled() {
29545		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
29546		defer func() {
29547			sc := -1
29548			if page.Response().Response.Response != nil {
29549				sc = page.Response().Response.Response.StatusCode
29550			}
29551			tracing.EndSpan(ctx, sc, err)
29552		}()
29553	}
29554	next, err := page.fn(ctx, page.vngclr)
29555	if err != nil {
29556		return err
29557	}
29558	page.vngclr = next
29559	return nil
29560}
29561
29562// Next advances to the next page of values.  If there was an error making
29563// the request the page does not advance and the error is returned.
29564// Deprecated: Use NextWithContext() instead.
29565func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
29566	return page.NextWithContext(context.Background())
29567}
29568
29569// NotDone returns true if the page enumeration should be started or is not yet complete.
29570func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
29571	return !page.vngclr.IsEmpty()
29572}
29573
29574// Response returns the raw server response from the last page request.
29575func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
29576	return page.vngclr
29577}
29578
29579// Values returns the slice of values for the current page or nil if there are no values.
29580func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
29581	if page.vngclr.IsEmpty() {
29582		return nil
29583	}
29584	return *page.vngclr.Value
29585}
29586
29587// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
29588func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
29589	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
29590}
29591
29592// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties.
29593type VirtualNetworkGatewayConnectionPropertiesFormat struct {
29594	// AuthorizationKey - The authorizationKey.
29595	AuthorizationKey *string `json:"authorizationKey,omitempty"`
29596	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
29597	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
29598	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
29599	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
29600	// LocalNetworkGateway2 - The reference to local network gateway resource.
29601	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
29602	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
29603	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
29604	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
29605	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
29606	// RoutingWeight - The routing weight.
29607	RoutingWeight *int32 `json:"routingWeight,omitempty"`
29608	// SharedKey - The IPSec shared key.
29609	SharedKey *string `json:"sharedKey,omitempty"`
29610	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
29611	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
29612	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
29613	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
29614	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
29615	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
29616	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
29617	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
29618	// Peer - The reference to peerings resource.
29619	Peer *SubResource `json:"peer,omitempty"`
29620	// EnableBgp - EnableBgp flag.
29621	EnableBgp *bool `json:"enableBgp,omitempty"`
29622	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
29623	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
29624	// IpsecPolicies - The IPSec Policies to be considered by this connection.
29625	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
29626	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
29627	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
29628	// ResourceGUID - The resource GUID property of the virtual network gateway connection resource.
29629	ResourceGUID *string `json:"resourceGuid,omitempty"`
29630	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29631	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29632	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
29633	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
29634}
29635
29636// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
29637// results of a long-running operation.
29638type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
29639	azure.Future
29640}
29641
29642// Result returns the result of the asynchronous operation.
29643// If the operation has not completed it will return an error.
29644func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
29645	var done bool
29646	done, err = future.DoneWithContext(context.Background(), client)
29647	if err != nil {
29648		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29649		return
29650	}
29651	if !done {
29652		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
29653		return
29654	}
29655	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29656	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
29657		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
29658		if err != nil {
29659			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
29660		}
29661	}
29662	return
29663}
29664
29665// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
29666// a long-running operation.
29667type VirtualNetworkGatewayConnectionsDeleteFuture struct {
29668	azure.Future
29669}
29670
29671// Result returns the result of the asynchronous operation.
29672// If the operation has not completed it will return an error.
29673func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
29674	var done bool
29675	done, err = future.DoneWithContext(context.Background(), client)
29676	if err != nil {
29677		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
29678		return
29679	}
29680	if !done {
29681		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
29682		return
29683	}
29684	ar.Response = future.Response()
29685	return
29686}
29687
29688// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
29689// results of a long-running operation.
29690type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
29691	azure.Future
29692}
29693
29694// Result returns the result of the asynchronous operation.
29695// If the operation has not completed it will return an error.
29696func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
29697	var done bool
29698	done, err = future.DoneWithContext(context.Background(), client)
29699	if err != nil {
29700		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
29701		return
29702	}
29703	if !done {
29704		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
29705		return
29706	}
29707	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29708	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
29709		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
29710		if err != nil {
29711			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
29712		}
29713	}
29714	return
29715}
29716
29717// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
29718// results of a long-running operation.
29719type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
29720	azure.Future
29721}
29722
29723// Result returns the result of the asynchronous operation.
29724// If the operation has not completed it will return an error.
29725func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
29726	var done bool
29727	done, err = future.DoneWithContext(context.Background(), client)
29728	if err != nil {
29729		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
29730		return
29731	}
29732	if !done {
29733		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
29734		return
29735	}
29736	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29737	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
29738		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
29739		if err != nil {
29740			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
29741		}
29742	}
29743	return
29744}
29745
29746// VirtualNetworkGatewayConnectionsStartPacketCaptureFuture an abstraction for monitoring and retrieving
29747// the results of a long-running operation.
29748type VirtualNetworkGatewayConnectionsStartPacketCaptureFuture struct {
29749	azure.Future
29750}
29751
29752// Result returns the result of the asynchronous operation.
29753// If the operation has not completed it will return an error.
29754func (future *VirtualNetworkGatewayConnectionsStartPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
29755	var done bool
29756	done, err = future.DoneWithContext(context.Background(), client)
29757	if err != nil {
29758		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
29759		return
29760	}
29761	if !done {
29762		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture")
29763		return
29764	}
29765	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29766	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
29767		s, err = client.StartPacketCaptureResponder(s.Response.Response)
29768		if err != nil {
29769			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
29770		}
29771	}
29772	return
29773}
29774
29775// VirtualNetworkGatewayConnectionsStopPacketCaptureFuture an abstraction for monitoring and retrieving the
29776// results of a long-running operation.
29777type VirtualNetworkGatewayConnectionsStopPacketCaptureFuture struct {
29778	azure.Future
29779}
29780
29781// Result returns the result of the asynchronous operation.
29782// If the operation has not completed it will return an error.
29783func (future *VirtualNetworkGatewayConnectionsStopPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
29784	var done bool
29785	done, err = future.DoneWithContext(context.Background(), client)
29786	if err != nil {
29787		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
29788		return
29789	}
29790	if !done {
29791		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture")
29792		return
29793	}
29794	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29795	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
29796		s, err = client.StopPacketCaptureResponder(s.Response.Response)
29797		if err != nil {
29798			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
29799		}
29800	}
29801	return
29802}
29803
29804// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
29805// results of a long-running operation.
29806type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
29807	azure.Future
29808}
29809
29810// Result returns the result of the asynchronous operation.
29811// If the operation has not completed it will return an error.
29812func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
29813	var done bool
29814	done, err = future.DoneWithContext(context.Background(), client)
29815	if err != nil {
29816		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
29817		return
29818	}
29819	if !done {
29820		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
29821		return
29822	}
29823	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29824	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
29825		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
29826		if err != nil {
29827			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
29828		}
29829	}
29830	return
29831}
29832
29833// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway.
29834type VirtualNetworkGatewayIPConfiguration struct {
29835	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
29836	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
29837	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
29838	Name *string `json:"name,omitempty"`
29839	// Etag - A unique read-only string that changes whenever the resource is updated.
29840	Etag *string `json:"etag,omitempty"`
29841	// ID - Resource ID.
29842	ID *string `json:"id,omitempty"`
29843}
29844
29845// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
29846func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
29847	objectMap := make(map[string]interface{})
29848	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
29849		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
29850	}
29851	if vngic.Name != nil {
29852		objectMap["name"] = vngic.Name
29853	}
29854	if vngic.Etag != nil {
29855		objectMap["etag"] = vngic.Etag
29856	}
29857	if vngic.ID != nil {
29858		objectMap["id"] = vngic.ID
29859	}
29860	return json.Marshal(objectMap)
29861}
29862
29863// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
29864func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
29865	var m map[string]*json.RawMessage
29866	err := json.Unmarshal(body, &m)
29867	if err != nil {
29868		return err
29869	}
29870	for k, v := range m {
29871		switch k {
29872		case "properties":
29873			if v != nil {
29874				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
29875				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
29876				if err != nil {
29877					return err
29878				}
29879				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
29880			}
29881		case "name":
29882			if v != nil {
29883				var name string
29884				err = json.Unmarshal(*v, &name)
29885				if err != nil {
29886					return err
29887				}
29888				vngic.Name = &name
29889			}
29890		case "etag":
29891			if v != nil {
29892				var etag string
29893				err = json.Unmarshal(*v, &etag)
29894				if err != nil {
29895					return err
29896				}
29897				vngic.Etag = &etag
29898			}
29899		case "id":
29900			if v != nil {
29901				var ID string
29902				err = json.Unmarshal(*v, &ID)
29903				if err != nil {
29904					return err
29905				}
29906				vngic.ID = &ID
29907			}
29908		}
29909	}
29910
29911	return nil
29912}
29913
29914// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration.
29915type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
29916	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
29917	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
29918	// Subnet - The reference of the subnet resource.
29919	Subnet *SubResource `json:"subnet,omitempty"`
29920	// PublicIPAddress - The reference of the public IP resource.
29921	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
29922	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29923	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29924}
29925
29926// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
29927// service call.
29928type VirtualNetworkGatewayListConnectionsResult struct {
29929	autorest.Response `json:"-"`
29930	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
29931	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
29932	// NextLink - READ-ONLY; The URL to get the next set of results.
29933	NextLink *string `json:"nextLink,omitempty"`
29934}
29935
29936// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
29937// VirtualNetworkGatewayConnectionListEntity values.
29938type VirtualNetworkGatewayListConnectionsResultIterator struct {
29939	i    int
29940	page VirtualNetworkGatewayListConnectionsResultPage
29941}
29942
29943// NextWithContext advances to the next value.  If there was an error making
29944// the request the iterator does not advance and the error is returned.
29945func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
29946	if tracing.IsEnabled() {
29947		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
29948		defer func() {
29949			sc := -1
29950			if iter.Response().Response.Response != nil {
29951				sc = iter.Response().Response.Response.StatusCode
29952			}
29953			tracing.EndSpan(ctx, sc, err)
29954		}()
29955	}
29956	iter.i++
29957	if iter.i < len(iter.page.Values()) {
29958		return nil
29959	}
29960	err = iter.page.NextWithContext(ctx)
29961	if err != nil {
29962		iter.i--
29963		return err
29964	}
29965	iter.i = 0
29966	return nil
29967}
29968
29969// Next advances to the next value.  If there was an error making
29970// the request the iterator does not advance and the error is returned.
29971// Deprecated: Use NextWithContext() instead.
29972func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
29973	return iter.NextWithContext(context.Background())
29974}
29975
29976// NotDone returns true if the enumeration should be started or is not yet complete.
29977func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
29978	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29979}
29980
29981// Response returns the raw server response from the last page request.
29982func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
29983	return iter.page.Response()
29984}
29985
29986// Value returns the current value or a zero-initialized value if the
29987// iterator has advanced beyond the end of the collection.
29988func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
29989	if !iter.page.NotDone() {
29990		return VirtualNetworkGatewayConnectionListEntity{}
29991	}
29992	return iter.page.Values()[iter.i]
29993}
29994
29995// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
29996func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
29997	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
29998}
29999
30000// IsEmpty returns true if the ListResult contains no values.
30001func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
30002	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
30003}
30004
30005// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
30006// It returns nil if no more results exist.
30007func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
30008	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
30009		return nil, nil
30010	}
30011	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30012		autorest.AsJSON(),
30013		autorest.AsGet(),
30014		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
30015}
30016
30017// VirtualNetworkGatewayListConnectionsResultPage contains a page of
30018// VirtualNetworkGatewayConnectionListEntity values.
30019type VirtualNetworkGatewayListConnectionsResultPage struct {
30020	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
30021	vnglcr VirtualNetworkGatewayListConnectionsResult
30022}
30023
30024// NextWithContext advances to the next page of values.  If there was an error making
30025// the request the page does not advance and the error is returned.
30026func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
30027	if tracing.IsEnabled() {
30028		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
30029		defer func() {
30030			sc := -1
30031			if page.Response().Response.Response != nil {
30032				sc = page.Response().Response.Response.StatusCode
30033			}
30034			tracing.EndSpan(ctx, sc, err)
30035		}()
30036	}
30037	next, err := page.fn(ctx, page.vnglcr)
30038	if err != nil {
30039		return err
30040	}
30041	page.vnglcr = next
30042	return nil
30043}
30044
30045// Next advances to the next page of values.  If there was an error making
30046// the request the page does not advance and the error is returned.
30047// Deprecated: Use NextWithContext() instead.
30048func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
30049	return page.NextWithContext(context.Background())
30050}
30051
30052// NotDone returns true if the page enumeration should be started or is not yet complete.
30053func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
30054	return !page.vnglcr.IsEmpty()
30055}
30056
30057// Response returns the raw server response from the last page request.
30058func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
30059	return page.vnglcr
30060}
30061
30062// Values returns the slice of values for the current page or nil if there are no values.
30063func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
30064	if page.vnglcr.IsEmpty() {
30065		return nil
30066	}
30067	return *page.vnglcr.Value
30068}
30069
30070// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
30071func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
30072	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
30073}
30074
30075// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
30076type VirtualNetworkGatewayListResult struct {
30077	autorest.Response `json:"-"`
30078	// Value - A list of VirtualNetworkGateway resources that exists in a resource group.
30079	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
30080	// NextLink - READ-ONLY; The URL to get the next set of results.
30081	NextLink *string `json:"nextLink,omitempty"`
30082}
30083
30084// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
30085// values.
30086type VirtualNetworkGatewayListResultIterator struct {
30087	i    int
30088	page VirtualNetworkGatewayListResultPage
30089}
30090
30091// NextWithContext advances to the next value.  If there was an error making
30092// the request the iterator does not advance and the error is returned.
30093func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
30094	if tracing.IsEnabled() {
30095		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
30096		defer func() {
30097			sc := -1
30098			if iter.Response().Response.Response != nil {
30099				sc = iter.Response().Response.Response.StatusCode
30100			}
30101			tracing.EndSpan(ctx, sc, err)
30102		}()
30103	}
30104	iter.i++
30105	if iter.i < len(iter.page.Values()) {
30106		return nil
30107	}
30108	err = iter.page.NextWithContext(ctx)
30109	if err != nil {
30110		iter.i--
30111		return err
30112	}
30113	iter.i = 0
30114	return nil
30115}
30116
30117// Next advances to the next value.  If there was an error making
30118// the request the iterator does not advance and the error is returned.
30119// Deprecated: Use NextWithContext() instead.
30120func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
30121	return iter.NextWithContext(context.Background())
30122}
30123
30124// NotDone returns true if the enumeration should be started or is not yet complete.
30125func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
30126	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30127}
30128
30129// Response returns the raw server response from the last page request.
30130func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
30131	return iter.page.Response()
30132}
30133
30134// Value returns the current value or a zero-initialized value if the
30135// iterator has advanced beyond the end of the collection.
30136func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
30137	if !iter.page.NotDone() {
30138		return VirtualNetworkGateway{}
30139	}
30140	return iter.page.Values()[iter.i]
30141}
30142
30143// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
30144func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
30145	return VirtualNetworkGatewayListResultIterator{page: page}
30146}
30147
30148// IsEmpty returns true if the ListResult contains no values.
30149func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
30150	return vnglr.Value == nil || len(*vnglr.Value) == 0
30151}
30152
30153// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
30154// It returns nil if no more results exist.
30155func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
30156	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
30157		return nil, nil
30158	}
30159	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30160		autorest.AsJSON(),
30161		autorest.AsGet(),
30162		autorest.WithBaseURL(to.String(vnglr.NextLink)))
30163}
30164
30165// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
30166type VirtualNetworkGatewayListResultPage struct {
30167	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
30168	vnglr VirtualNetworkGatewayListResult
30169}
30170
30171// NextWithContext advances to the next page of values.  If there was an error making
30172// the request the page does not advance and the error is returned.
30173func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
30174	if tracing.IsEnabled() {
30175		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
30176		defer func() {
30177			sc := -1
30178			if page.Response().Response.Response != nil {
30179				sc = page.Response().Response.Response.StatusCode
30180			}
30181			tracing.EndSpan(ctx, sc, err)
30182		}()
30183	}
30184	next, err := page.fn(ctx, page.vnglr)
30185	if err != nil {
30186		return err
30187	}
30188	page.vnglr = next
30189	return nil
30190}
30191
30192// Next advances to the next page of values.  If there was an error making
30193// the request the page does not advance and the error is returned.
30194// Deprecated: Use NextWithContext() instead.
30195func (page *VirtualNetworkGatewayListResultPage) Next() error {
30196	return page.NextWithContext(context.Background())
30197}
30198
30199// NotDone returns true if the page enumeration should be started or is not yet complete.
30200func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
30201	return !page.vnglr.IsEmpty()
30202}
30203
30204// Response returns the raw server response from the last page request.
30205func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
30206	return page.vnglr
30207}
30208
30209// Values returns the slice of values for the current page or nil if there are no values.
30210func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
30211	if page.vnglr.IsEmpty() {
30212		return nil
30213	}
30214	return *page.vnglr.Value
30215}
30216
30217// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
30218func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
30219	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
30220}
30221
30222// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties.
30223type VirtualNetworkGatewayPropertiesFormat struct {
30224	// IPConfigurations - IP configurations for virtual network gateway.
30225	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
30226	// GatewayType - The type of this virtual network gateway. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
30227	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
30228	// VpnType - The type of this virtual network gateway. Possible values include: 'PolicyBased', 'RouteBased'
30229	VpnType VpnType `json:"vpnType,omitempty"`
30230	// VpnGatewayGeneration - The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN. Possible values include: 'VpnGatewayGenerationNone', 'VpnGatewayGenerationGeneration1', 'VpnGatewayGenerationGeneration2'
30231	VpnGatewayGeneration VpnGatewayGeneration `json:"vpnGatewayGeneration,omitempty"`
30232	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
30233	EnableBgp *bool `json:"enableBgp,omitempty"`
30234	// ActiveActive - ActiveActive flag.
30235	ActiveActive *bool `json:"activeActive,omitempty"`
30236	// GatewayDefaultSite - The reference of the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.
30237	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
30238	// Sku - The reference of the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
30239	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
30240	// VpnClientConfiguration - The reference of the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
30241	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
30242	// BgpSettings - Virtual network gateway's BGP speaker settings.
30243	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
30244	// CustomRoutes - The reference of the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.
30245	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
30246	// ResourceGUID - The resource GUID property of the virtual network gateway resource.
30247	ResourceGUID *string `json:"resourceGuid,omitempty"`
30248	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30249	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30250	// EnableDNSForwarding - Whether dns forwarding is enabled or not.
30251	EnableDNSForwarding *bool `json:"enableDnsForwarding,omitempty"`
30252	// InboundDNSForwardingEndpoint - READ-ONLY; The IP address allocated by the gateway to which dns requests can be sent.
30253	InboundDNSForwardingEndpoint *string `json:"inboundDnsForwardingEndpoint,omitempty"`
30254}
30255
30256// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30257// long-running operation.
30258type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
30259	azure.Future
30260}
30261
30262// Result returns the result of the asynchronous operation.
30263// If the operation has not completed it will return an error.
30264func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
30265	var done bool
30266	done, err = future.DoneWithContext(context.Background(), client)
30267	if err != nil {
30268		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30269		return
30270	}
30271	if !done {
30272		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
30273		return
30274	}
30275	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30276	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
30277		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
30278		if err != nil {
30279			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
30280		}
30281	}
30282	return
30283}
30284
30285// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
30286// long-running operation.
30287type VirtualNetworkGatewaysDeleteFuture struct {
30288	azure.Future
30289}
30290
30291// Result returns the result of the asynchronous operation.
30292// If the operation has not completed it will return an error.
30293func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
30294	var done bool
30295	done, err = future.DoneWithContext(context.Background(), client)
30296	if err != nil {
30297		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
30298		return
30299	}
30300	if !done {
30301		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
30302		return
30303	}
30304	ar.Response = future.Response()
30305	return
30306}
30307
30308// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
30309// results of a long-running operation.
30310type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
30311	azure.Future
30312}
30313
30314// Result returns the result of the asynchronous operation.
30315// If the operation has not completed it will return an error.
30316func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30317	var done bool
30318	done, err = future.DoneWithContext(context.Background(), client)
30319	if err != nil {
30320		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
30321		return
30322	}
30323	if !done {
30324		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
30325		return
30326	}
30327	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30328	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30329		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
30330		if err != nil {
30331			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
30332		}
30333	}
30334	return
30335}
30336
30337// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
30338// of a long-running operation.
30339type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
30340	azure.Future
30341}
30342
30343// Result returns the result of the asynchronous operation.
30344// If the operation has not completed it will return an error.
30345func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30346	var done bool
30347	done, err = future.DoneWithContext(context.Background(), client)
30348	if err != nil {
30349		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
30350		return
30351	}
30352	if !done {
30353		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
30354		return
30355	}
30356	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30357	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30358		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
30359		if err != nil {
30360			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
30361		}
30362	}
30363	return
30364}
30365
30366// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
30367// of a long-running operation.
30368type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
30369	azure.Future
30370}
30371
30372// Result returns the result of the asynchronous operation.
30373// If the operation has not completed it will return an error.
30374func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
30375	var done bool
30376	done, err = future.DoneWithContext(context.Background(), client)
30377	if err != nil {
30378		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
30379		return
30380	}
30381	if !done {
30382		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
30383		return
30384	}
30385	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30386	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
30387		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
30388		if err != nil {
30389			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
30390		}
30391	}
30392	return
30393}
30394
30395// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
30396// a long-running operation.
30397type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
30398	azure.Future
30399}
30400
30401// Result returns the result of the asynchronous operation.
30402// If the operation has not completed it will return an error.
30403func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
30404	var done bool
30405	done, err = future.DoneWithContext(context.Background(), client)
30406	if err != nil {
30407		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
30408		return
30409	}
30410	if !done {
30411		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
30412		return
30413	}
30414	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30415	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
30416		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
30417		if err != nil {
30418			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
30419		}
30420	}
30421	return
30422}
30423
30424// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
30425// a long-running operation.
30426type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
30427	azure.Future
30428}
30429
30430// Result returns the result of the asynchronous operation.
30431// If the operation has not completed it will return an error.
30432func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
30433	var done bool
30434	done, err = future.DoneWithContext(context.Background(), client)
30435	if err != nil {
30436		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
30437		return
30438	}
30439	if !done {
30440		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
30441		return
30442	}
30443	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30444	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
30445		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
30446		if err != nil {
30447			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
30448		}
30449	}
30450	return
30451}
30452
30453// VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture an abstraction for monitoring and retrieving
30454// the results of a long-running operation.
30455type VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture struct {
30456	azure.Future
30457}
30458
30459// Result returns the result of the asynchronous operation.
30460// If the operation has not completed it will return an error.
30461func (future *VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture) Result(client VirtualNetworkGatewaysClient) (vcchdlr VpnClientConnectionHealthDetailListResult, err error) {
30462	var done bool
30463	done, err = future.DoneWithContext(context.Background(), client)
30464	if err != nil {
30465		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", future.Response(), "Polling failure")
30466		return
30467	}
30468	if !done {
30469		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture")
30470		return
30471	}
30472	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30473	if vcchdlr.Response.Response, err = future.GetResult(sender); err == nil && vcchdlr.Response.Response.StatusCode != http.StatusNoContent {
30474		vcchdlr, err = client.GetVpnclientConnectionHealthResponder(vcchdlr.Response.Response)
30475		if err != nil {
30476			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", vcchdlr.Response.Response, "Failure responding to request")
30477		}
30478	}
30479	return
30480}
30481
30482// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
30483// results of a long-running operation.
30484type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
30485	azure.Future
30486}
30487
30488// Result returns the result of the asynchronous operation.
30489// If the operation has not completed it will return an error.
30490func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
30491	var done bool
30492	done, err = future.DoneWithContext(context.Background(), client)
30493	if err != nil {
30494		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
30495		return
30496	}
30497	if !done {
30498		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
30499		return
30500	}
30501	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30502	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
30503		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
30504		if err != nil {
30505			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
30506		}
30507	}
30508	return
30509}
30510
30511// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
30512// results of a long-running operation.
30513type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
30514	azure.Future
30515}
30516
30517// Result returns the result of the asynchronous operation.
30518// If the operation has not completed it will return an error.
30519func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30520	var done bool
30521	done, err = future.DoneWithContext(context.Background(), client)
30522	if err != nil {
30523		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
30524		return
30525	}
30526	if !done {
30527		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
30528		return
30529	}
30530	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30531	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30532		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
30533		if err != nil {
30534			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
30535		}
30536	}
30537	return
30538}
30539
30540// VirtualNetworkGatewaySku virtualNetworkGatewaySku details.
30541type VirtualNetworkGatewaySku struct {
30542	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw4', 'VirtualNetworkGatewaySkuNameVpnGw5', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameVpnGw4AZ', 'VirtualNetworkGatewaySkuNameVpnGw5AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
30543	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
30544	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw4', 'VirtualNetworkGatewaySkuTierVpnGw5', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierVpnGw4AZ', 'VirtualNetworkGatewaySkuTierVpnGw5AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
30545	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
30546	// Capacity - The capacity.
30547	Capacity *int32 `json:"capacity,omitempty"`
30548}
30549
30550// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
30551// long-running operation.
30552type VirtualNetworkGatewaysResetFuture struct {
30553	azure.Future
30554}
30555
30556// Result returns the result of the asynchronous operation.
30557// If the operation has not completed it will return an error.
30558func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
30559	var done bool
30560	done, err = future.DoneWithContext(context.Background(), client)
30561	if err != nil {
30562		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
30563		return
30564	}
30565	if !done {
30566		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
30567		return
30568	}
30569	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30570	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
30571		vng, err = client.ResetResponder(vng.Response.Response)
30572		if err != nil {
30573			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
30574		}
30575	}
30576	return
30577}
30578
30579// VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
30580// results of a long-running operation.
30581type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
30582	azure.Future
30583}
30584
30585// Result returns the result of the asynchronous operation.
30586// If the operation has not completed it will return an error.
30587func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
30588	var done bool
30589	done, err = future.DoneWithContext(context.Background(), client)
30590	if err != nil {
30591		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
30592		return
30593	}
30594	if !done {
30595		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
30596		return
30597	}
30598	ar.Response = future.Response()
30599	return
30600}
30601
30602// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
30603// results of a long-running operation.
30604type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
30605	azure.Future
30606}
30607
30608// Result returns the result of the asynchronous operation.
30609// If the operation has not completed it will return an error.
30610func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
30611	var done bool
30612	done, err = future.DoneWithContext(context.Background(), client)
30613	if err != nil {
30614		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
30615		return
30616	}
30617	if !done {
30618		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
30619		return
30620	}
30621	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30622	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
30623		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
30624		if err != nil {
30625			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
30626		}
30627	}
30628	return
30629}
30630
30631// VirtualNetworkGatewaysStartPacketCaptureFuture an abstraction for monitoring and retrieving the results
30632// of a long-running operation.
30633type VirtualNetworkGatewaysStartPacketCaptureFuture struct {
30634	azure.Future
30635}
30636
30637// Result returns the result of the asynchronous operation.
30638// If the operation has not completed it will return an error.
30639func (future *VirtualNetworkGatewaysStartPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30640	var done bool
30641	done, err = future.DoneWithContext(context.Background(), client)
30642	if err != nil {
30643		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
30644		return
30645	}
30646	if !done {
30647		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStartPacketCaptureFuture")
30648		return
30649	}
30650	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30651	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30652		s, err = client.StartPacketCaptureResponder(s.Response.Response)
30653		if err != nil {
30654			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
30655		}
30656	}
30657	return
30658}
30659
30660// VirtualNetworkGatewaysStopPacketCaptureFuture an abstraction for monitoring and retrieving the results
30661// of a long-running operation.
30662type VirtualNetworkGatewaysStopPacketCaptureFuture struct {
30663	azure.Future
30664}
30665
30666// Result returns the result of the asynchronous operation.
30667// If the operation has not completed it will return an error.
30668func (future *VirtualNetworkGatewaysStopPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30669	var done bool
30670	done, err = future.DoneWithContext(context.Background(), client)
30671	if err != nil {
30672		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
30673		return
30674	}
30675	if !done {
30676		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStopPacketCaptureFuture")
30677		return
30678	}
30679	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30680	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30681		s, err = client.StopPacketCaptureResponder(s.Response.Response)
30682		if err != nil {
30683			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
30684		}
30685	}
30686	return
30687}
30688
30689// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
30690// long-running operation.
30691type VirtualNetworkGatewaysUpdateTagsFuture struct {
30692	azure.Future
30693}
30694
30695// Result returns the result of the asynchronous operation.
30696// If the operation has not completed it will return an error.
30697func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
30698	var done bool
30699	done, err = future.DoneWithContext(context.Background(), client)
30700	if err != nil {
30701		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
30702		return
30703	}
30704	if !done {
30705		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
30706		return
30707	}
30708	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30709	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
30710		vng, err = client.UpdateTagsResponder(vng.Response.Response)
30711		if err != nil {
30712			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
30713		}
30714	}
30715	return
30716}
30717
30718// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
30719type VirtualNetworkListResult struct {
30720	autorest.Response `json:"-"`
30721	// Value - A list of VirtualNetwork resources in a resource group.
30722	Value *[]VirtualNetwork `json:"value,omitempty"`
30723	// NextLink - The URL to get the next set of results.
30724	NextLink *string `json:"nextLink,omitempty"`
30725}
30726
30727// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
30728type VirtualNetworkListResultIterator struct {
30729	i    int
30730	page VirtualNetworkListResultPage
30731}
30732
30733// NextWithContext advances to the next value.  If there was an error making
30734// the request the iterator does not advance and the error is returned.
30735func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
30736	if tracing.IsEnabled() {
30737		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
30738		defer func() {
30739			sc := -1
30740			if iter.Response().Response.Response != nil {
30741				sc = iter.Response().Response.Response.StatusCode
30742			}
30743			tracing.EndSpan(ctx, sc, err)
30744		}()
30745	}
30746	iter.i++
30747	if iter.i < len(iter.page.Values()) {
30748		return nil
30749	}
30750	err = iter.page.NextWithContext(ctx)
30751	if err != nil {
30752		iter.i--
30753		return err
30754	}
30755	iter.i = 0
30756	return nil
30757}
30758
30759// Next advances to the next value.  If there was an error making
30760// the request the iterator does not advance and the error is returned.
30761// Deprecated: Use NextWithContext() instead.
30762func (iter *VirtualNetworkListResultIterator) Next() error {
30763	return iter.NextWithContext(context.Background())
30764}
30765
30766// NotDone returns true if the enumeration should be started or is not yet complete.
30767func (iter VirtualNetworkListResultIterator) NotDone() bool {
30768	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30769}
30770
30771// Response returns the raw server response from the last page request.
30772func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
30773	return iter.page.Response()
30774}
30775
30776// Value returns the current value or a zero-initialized value if the
30777// iterator has advanced beyond the end of the collection.
30778func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
30779	if !iter.page.NotDone() {
30780		return VirtualNetwork{}
30781	}
30782	return iter.page.Values()[iter.i]
30783}
30784
30785// Creates a new instance of the VirtualNetworkListResultIterator type.
30786func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
30787	return VirtualNetworkListResultIterator{page: page}
30788}
30789
30790// IsEmpty returns true if the ListResult contains no values.
30791func (vnlr VirtualNetworkListResult) IsEmpty() bool {
30792	return vnlr.Value == nil || len(*vnlr.Value) == 0
30793}
30794
30795// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
30796// It returns nil if no more results exist.
30797func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
30798	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
30799		return nil, nil
30800	}
30801	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30802		autorest.AsJSON(),
30803		autorest.AsGet(),
30804		autorest.WithBaseURL(to.String(vnlr.NextLink)))
30805}
30806
30807// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
30808type VirtualNetworkListResultPage struct {
30809	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
30810	vnlr VirtualNetworkListResult
30811}
30812
30813// NextWithContext advances to the next page of values.  If there was an error making
30814// the request the page does not advance and the error is returned.
30815func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
30816	if tracing.IsEnabled() {
30817		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
30818		defer func() {
30819			sc := -1
30820			if page.Response().Response.Response != nil {
30821				sc = page.Response().Response.Response.StatusCode
30822			}
30823			tracing.EndSpan(ctx, sc, err)
30824		}()
30825	}
30826	next, err := page.fn(ctx, page.vnlr)
30827	if err != nil {
30828		return err
30829	}
30830	page.vnlr = next
30831	return nil
30832}
30833
30834// Next advances to the next page of values.  If there was an error making
30835// the request the page does not advance and the error is returned.
30836// Deprecated: Use NextWithContext() instead.
30837func (page *VirtualNetworkListResultPage) Next() error {
30838	return page.NextWithContext(context.Background())
30839}
30840
30841// NotDone returns true if the page enumeration should be started or is not yet complete.
30842func (page VirtualNetworkListResultPage) NotDone() bool {
30843	return !page.vnlr.IsEmpty()
30844}
30845
30846// Response returns the raw server response from the last page request.
30847func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
30848	return page.vnlr
30849}
30850
30851// Values returns the slice of values for the current page or nil if there are no values.
30852func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
30853	if page.vnlr.IsEmpty() {
30854		return nil
30855	}
30856	return *page.vnlr.Value
30857}
30858
30859// Creates a new instance of the VirtualNetworkListResultPage type.
30860func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
30861	return VirtualNetworkListResultPage{fn: getNextPage}
30862}
30863
30864// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
30865type VirtualNetworkListUsageResult struct {
30866	autorest.Response `json:"-"`
30867	// Value - READ-ONLY; VirtualNetwork usage stats.
30868	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
30869	// NextLink - The URL to get the next set of results.
30870	NextLink *string `json:"nextLink,omitempty"`
30871}
30872
30873// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
30874// values.
30875type VirtualNetworkListUsageResultIterator struct {
30876	i    int
30877	page VirtualNetworkListUsageResultPage
30878}
30879
30880// NextWithContext advances to the next value.  If there was an error making
30881// the request the iterator does not advance and the error is returned.
30882func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
30883	if tracing.IsEnabled() {
30884		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
30885		defer func() {
30886			sc := -1
30887			if iter.Response().Response.Response != nil {
30888				sc = iter.Response().Response.Response.StatusCode
30889			}
30890			tracing.EndSpan(ctx, sc, err)
30891		}()
30892	}
30893	iter.i++
30894	if iter.i < len(iter.page.Values()) {
30895		return nil
30896	}
30897	err = iter.page.NextWithContext(ctx)
30898	if err != nil {
30899		iter.i--
30900		return err
30901	}
30902	iter.i = 0
30903	return nil
30904}
30905
30906// Next advances to the next value.  If there was an error making
30907// the request the iterator does not advance and the error is returned.
30908// Deprecated: Use NextWithContext() instead.
30909func (iter *VirtualNetworkListUsageResultIterator) Next() error {
30910	return iter.NextWithContext(context.Background())
30911}
30912
30913// NotDone returns true if the enumeration should be started or is not yet complete.
30914func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
30915	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30916}
30917
30918// Response returns the raw server response from the last page request.
30919func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
30920	return iter.page.Response()
30921}
30922
30923// Value returns the current value or a zero-initialized value if the
30924// iterator has advanced beyond the end of the collection.
30925func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
30926	if !iter.page.NotDone() {
30927		return VirtualNetworkUsage{}
30928	}
30929	return iter.page.Values()[iter.i]
30930}
30931
30932// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
30933func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
30934	return VirtualNetworkListUsageResultIterator{page: page}
30935}
30936
30937// IsEmpty returns true if the ListResult contains no values.
30938func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
30939	return vnlur.Value == nil || len(*vnlur.Value) == 0
30940}
30941
30942// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
30943// It returns nil if no more results exist.
30944func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
30945	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
30946		return nil, nil
30947	}
30948	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30949		autorest.AsJSON(),
30950		autorest.AsGet(),
30951		autorest.WithBaseURL(to.String(vnlur.NextLink)))
30952}
30953
30954// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
30955type VirtualNetworkListUsageResultPage struct {
30956	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
30957	vnlur VirtualNetworkListUsageResult
30958}
30959
30960// NextWithContext advances to the next page of values.  If there was an error making
30961// the request the page does not advance and the error is returned.
30962func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
30963	if tracing.IsEnabled() {
30964		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
30965		defer func() {
30966			sc := -1
30967			if page.Response().Response.Response != nil {
30968				sc = page.Response().Response.Response.StatusCode
30969			}
30970			tracing.EndSpan(ctx, sc, err)
30971		}()
30972	}
30973	next, err := page.fn(ctx, page.vnlur)
30974	if err != nil {
30975		return err
30976	}
30977	page.vnlur = next
30978	return nil
30979}
30980
30981// Next advances to the next page of values.  If there was an error making
30982// the request the page does not advance and the error is returned.
30983// Deprecated: Use NextWithContext() instead.
30984func (page *VirtualNetworkListUsageResultPage) Next() error {
30985	return page.NextWithContext(context.Background())
30986}
30987
30988// NotDone returns true if the page enumeration should be started or is not yet complete.
30989func (page VirtualNetworkListUsageResultPage) NotDone() bool {
30990	return !page.vnlur.IsEmpty()
30991}
30992
30993// Response returns the raw server response from the last page request.
30994func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
30995	return page.vnlur
30996}
30997
30998// Values returns the slice of values for the current page or nil if there are no values.
30999func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
31000	if page.vnlur.IsEmpty() {
31001		return nil
31002	}
31003	return *page.vnlur.Value
31004}
31005
31006// Creates a new instance of the VirtualNetworkListUsageResultPage type.
31007func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
31008	return VirtualNetworkListUsageResultPage{fn: getNextPage}
31009}
31010
31011// VirtualNetworkPeering peerings in a virtual network resource.
31012type VirtualNetworkPeering struct {
31013	autorest.Response `json:"-"`
31014	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
31015	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
31016	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
31017	Name *string `json:"name,omitempty"`
31018	// Etag - A unique read-only string that changes whenever the resource is updated.
31019	Etag *string `json:"etag,omitempty"`
31020	// ID - Resource ID.
31021	ID *string `json:"id,omitempty"`
31022}
31023
31024// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
31025func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
31026	objectMap := make(map[string]interface{})
31027	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
31028		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
31029	}
31030	if vnp.Name != nil {
31031		objectMap["name"] = vnp.Name
31032	}
31033	if vnp.Etag != nil {
31034		objectMap["etag"] = vnp.Etag
31035	}
31036	if vnp.ID != nil {
31037		objectMap["id"] = vnp.ID
31038	}
31039	return json.Marshal(objectMap)
31040}
31041
31042// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
31043func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
31044	var m map[string]*json.RawMessage
31045	err := json.Unmarshal(body, &m)
31046	if err != nil {
31047		return err
31048	}
31049	for k, v := range m {
31050		switch k {
31051		case "properties":
31052			if v != nil {
31053				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
31054				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
31055				if err != nil {
31056					return err
31057				}
31058				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
31059			}
31060		case "name":
31061			if v != nil {
31062				var name string
31063				err = json.Unmarshal(*v, &name)
31064				if err != nil {
31065					return err
31066				}
31067				vnp.Name = &name
31068			}
31069		case "etag":
31070			if v != nil {
31071				var etag string
31072				err = json.Unmarshal(*v, &etag)
31073				if err != nil {
31074					return err
31075				}
31076				vnp.Etag = &etag
31077			}
31078		case "id":
31079			if v != nil {
31080				var ID string
31081				err = json.Unmarshal(*v, &ID)
31082				if err != nil {
31083					return err
31084				}
31085				vnp.ID = &ID
31086			}
31087		}
31088	}
31089
31090	return nil
31091}
31092
31093// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
31094// belong to a virtual network.
31095type VirtualNetworkPeeringListResult struct {
31096	autorest.Response `json:"-"`
31097	// Value - The peerings in a virtual network.
31098	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
31099	// NextLink - The URL to get the next set of results.
31100	NextLink *string `json:"nextLink,omitempty"`
31101}
31102
31103// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
31104// values.
31105type VirtualNetworkPeeringListResultIterator struct {
31106	i    int
31107	page VirtualNetworkPeeringListResultPage
31108}
31109
31110// NextWithContext advances to the next value.  If there was an error making
31111// the request the iterator does not advance and the error is returned.
31112func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
31113	if tracing.IsEnabled() {
31114		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
31115		defer func() {
31116			sc := -1
31117			if iter.Response().Response.Response != nil {
31118				sc = iter.Response().Response.Response.StatusCode
31119			}
31120			tracing.EndSpan(ctx, sc, err)
31121		}()
31122	}
31123	iter.i++
31124	if iter.i < len(iter.page.Values()) {
31125		return nil
31126	}
31127	err = iter.page.NextWithContext(ctx)
31128	if err != nil {
31129		iter.i--
31130		return err
31131	}
31132	iter.i = 0
31133	return nil
31134}
31135
31136// Next advances to the next value.  If there was an error making
31137// the request the iterator does not advance and the error is returned.
31138// Deprecated: Use NextWithContext() instead.
31139func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
31140	return iter.NextWithContext(context.Background())
31141}
31142
31143// NotDone returns true if the enumeration should be started or is not yet complete.
31144func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
31145	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31146}
31147
31148// Response returns the raw server response from the last page request.
31149func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
31150	return iter.page.Response()
31151}
31152
31153// Value returns the current value or a zero-initialized value if the
31154// iterator has advanced beyond the end of the collection.
31155func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
31156	if !iter.page.NotDone() {
31157		return VirtualNetworkPeering{}
31158	}
31159	return iter.page.Values()[iter.i]
31160}
31161
31162// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
31163func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
31164	return VirtualNetworkPeeringListResultIterator{page: page}
31165}
31166
31167// IsEmpty returns true if the ListResult contains no values.
31168func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
31169	return vnplr.Value == nil || len(*vnplr.Value) == 0
31170}
31171
31172// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
31173// It returns nil if no more results exist.
31174func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
31175	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
31176		return nil, nil
31177	}
31178	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31179		autorest.AsJSON(),
31180		autorest.AsGet(),
31181		autorest.WithBaseURL(to.String(vnplr.NextLink)))
31182}
31183
31184// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
31185type VirtualNetworkPeeringListResultPage struct {
31186	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
31187	vnplr VirtualNetworkPeeringListResult
31188}
31189
31190// NextWithContext advances to the next page of values.  If there was an error making
31191// the request the page does not advance and the error is returned.
31192func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
31193	if tracing.IsEnabled() {
31194		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
31195		defer func() {
31196			sc := -1
31197			if page.Response().Response.Response != nil {
31198				sc = page.Response().Response.Response.StatusCode
31199			}
31200			tracing.EndSpan(ctx, sc, err)
31201		}()
31202	}
31203	next, err := page.fn(ctx, page.vnplr)
31204	if err != nil {
31205		return err
31206	}
31207	page.vnplr = next
31208	return nil
31209}
31210
31211// Next advances to the next page of values.  If there was an error making
31212// the request the page does not advance and the error is returned.
31213// Deprecated: Use NextWithContext() instead.
31214func (page *VirtualNetworkPeeringListResultPage) Next() error {
31215	return page.NextWithContext(context.Background())
31216}
31217
31218// NotDone returns true if the page enumeration should be started or is not yet complete.
31219func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
31220	return !page.vnplr.IsEmpty()
31221}
31222
31223// Response returns the raw server response from the last page request.
31224func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
31225	return page.vnplr
31226}
31227
31228// Values returns the slice of values for the current page or nil if there are no values.
31229func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
31230	if page.vnplr.IsEmpty() {
31231		return nil
31232	}
31233	return *page.vnplr.Value
31234}
31235
31236// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
31237func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
31238	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
31239}
31240
31241// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
31242type VirtualNetworkPeeringPropertiesFormat struct {
31243	// AllowVirtualNetworkAccess - Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.
31244	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
31245	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.
31246	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
31247	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
31248	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
31249	// UseRemoteGateways - If remote gateways can be used on this virtual network. If the flag is set to true, and allowGatewayTransit on remote peering is also true, virtual network will use gateways of remote virtual network for transit. Only one peering can have this flag set to true. This flag cannot be set if virtual network already has a gateway.
31250	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
31251	// RemoteVirtualNetwork - The reference of the remote virtual network. The remote virtual network can be in the same or different region (preview). See here to register for the preview and learn more (https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-create-peering).
31252	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
31253	// RemoteAddressSpace - The reference of the remote virtual network address space.
31254	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
31255	// PeeringState - The status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
31256	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
31257	// ProvisioningState - The provisioning state of the virtual network peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31258	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31259}
31260
31261// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31262// long-running operation.
31263type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
31264	azure.Future
31265}
31266
31267// Result returns the result of the asynchronous operation.
31268// If the operation has not completed it will return an error.
31269func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
31270	var done bool
31271	done, err = future.DoneWithContext(context.Background(), client)
31272	if err != nil {
31273		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31274		return
31275	}
31276	if !done {
31277		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
31278		return
31279	}
31280	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31281	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
31282		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
31283		if err != nil {
31284			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
31285		}
31286	}
31287	return
31288}
31289
31290// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
31291// long-running operation.
31292type VirtualNetworkPeeringsDeleteFuture struct {
31293	azure.Future
31294}
31295
31296// Result returns the result of the asynchronous operation.
31297// If the operation has not completed it will return an error.
31298func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
31299	var done bool
31300	done, err = future.DoneWithContext(context.Background(), client)
31301	if err != nil {
31302		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
31303		return
31304	}
31305	if !done {
31306		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
31307		return
31308	}
31309	ar.Response = future.Response()
31310	return
31311}
31312
31313// VirtualNetworkPropertiesFormat properties of the virtual network.
31314type VirtualNetworkPropertiesFormat struct {
31315	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
31316	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
31317	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
31318	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
31319	// Subnets - A list of subnets in a Virtual Network.
31320	Subnets *[]Subnet `json:"subnets,omitempty"`
31321	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
31322	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
31323	// ResourceGUID - The resourceGuid property of the Virtual Network resource.
31324	ResourceGUID *string `json:"resourceGuid,omitempty"`
31325	// ProvisioningState - The provisioning state of the virtual network resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31326	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31327	// EnableDdosProtection - Indicates if DDoS protection is enabled for all the protected resources in the virtual network. It requires a DDoS protection plan associated with the resource.
31328	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
31329	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
31330	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
31331	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
31332	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
31333	// BgpCommunities - Bgp Communities sent over ExpressRoute with each route corresponding to a prefix in this VNET.
31334	BgpCommunities *VirtualNetworkBgpCommunities `json:"bgpCommunities,omitempty"`
31335}
31336
31337// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31338// long-running operation.
31339type VirtualNetworksCreateOrUpdateFuture struct {
31340	azure.Future
31341}
31342
31343// Result returns the result of the asynchronous operation.
31344// If the operation has not completed it will return an error.
31345func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
31346	var done bool
31347	done, err = future.DoneWithContext(context.Background(), client)
31348	if err != nil {
31349		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31350		return
31351	}
31352	if !done {
31353		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
31354		return
31355	}
31356	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31357	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
31358		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
31359		if err != nil {
31360			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
31361		}
31362	}
31363	return
31364}
31365
31366// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
31367// operation.
31368type VirtualNetworksDeleteFuture struct {
31369	azure.Future
31370}
31371
31372// Result returns the result of the asynchronous operation.
31373// If the operation has not completed it will return an error.
31374func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
31375	var done bool
31376	done, err = future.DoneWithContext(context.Background(), client)
31377	if err != nil {
31378		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
31379		return
31380	}
31381	if !done {
31382		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
31383		return
31384	}
31385	ar.Response = future.Response()
31386	return
31387}
31388
31389// VirtualNetworksUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
31390// long-running operation.
31391type VirtualNetworksUpdateTagsFuture struct {
31392	azure.Future
31393}
31394
31395// Result returns the result of the asynchronous operation.
31396// If the operation has not completed it will return an error.
31397func (future *VirtualNetworksUpdateTagsFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
31398	var done bool
31399	done, err = future.DoneWithContext(context.Background(), client)
31400	if err != nil {
31401		err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", future.Response(), "Polling failure")
31402		return
31403	}
31404	if !done {
31405		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksUpdateTagsFuture")
31406		return
31407	}
31408	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31409	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
31410		vn, err = client.UpdateTagsResponder(vn.Response.Response)
31411		if err != nil {
31412			err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", vn.Response.Response, "Failure responding to request")
31413		}
31414	}
31415	return
31416}
31417
31418// VirtualNetworkTap virtual Network Tap resource.
31419type VirtualNetworkTap struct {
31420	autorest.Response `json:"-"`
31421	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
31422	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
31423	// Etag - A unique read-only string that changes whenever the resource is updated.
31424	Etag *string `json:"etag,omitempty"`
31425	// ID - Resource ID.
31426	ID *string `json:"id,omitempty"`
31427	// Name - READ-ONLY; Resource name.
31428	Name *string `json:"name,omitempty"`
31429	// Type - READ-ONLY; Resource type.
31430	Type *string `json:"type,omitempty"`
31431	// Location - Resource location.
31432	Location *string `json:"location,omitempty"`
31433	// Tags - Resource tags.
31434	Tags map[string]*string `json:"tags"`
31435}
31436
31437// MarshalJSON is the custom marshaler for VirtualNetworkTap.
31438func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
31439	objectMap := make(map[string]interface{})
31440	if vnt.VirtualNetworkTapPropertiesFormat != nil {
31441		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
31442	}
31443	if vnt.Etag != nil {
31444		objectMap["etag"] = vnt.Etag
31445	}
31446	if vnt.ID != nil {
31447		objectMap["id"] = vnt.ID
31448	}
31449	if vnt.Location != nil {
31450		objectMap["location"] = vnt.Location
31451	}
31452	if vnt.Tags != nil {
31453		objectMap["tags"] = vnt.Tags
31454	}
31455	return json.Marshal(objectMap)
31456}
31457
31458// UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
31459func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
31460	var m map[string]*json.RawMessage
31461	err := json.Unmarshal(body, &m)
31462	if err != nil {
31463		return err
31464	}
31465	for k, v := range m {
31466		switch k {
31467		case "properties":
31468			if v != nil {
31469				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
31470				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
31471				if err != nil {
31472					return err
31473				}
31474				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
31475			}
31476		case "etag":
31477			if v != nil {
31478				var etag string
31479				err = json.Unmarshal(*v, &etag)
31480				if err != nil {
31481					return err
31482				}
31483				vnt.Etag = &etag
31484			}
31485		case "id":
31486			if v != nil {
31487				var ID string
31488				err = json.Unmarshal(*v, &ID)
31489				if err != nil {
31490					return err
31491				}
31492				vnt.ID = &ID
31493			}
31494		case "name":
31495			if v != nil {
31496				var name string
31497				err = json.Unmarshal(*v, &name)
31498				if err != nil {
31499					return err
31500				}
31501				vnt.Name = &name
31502			}
31503		case "type":
31504			if v != nil {
31505				var typeVar string
31506				err = json.Unmarshal(*v, &typeVar)
31507				if err != nil {
31508					return err
31509				}
31510				vnt.Type = &typeVar
31511			}
31512		case "location":
31513			if v != nil {
31514				var location string
31515				err = json.Unmarshal(*v, &location)
31516				if err != nil {
31517					return err
31518				}
31519				vnt.Location = &location
31520			}
31521		case "tags":
31522			if v != nil {
31523				var tags map[string]*string
31524				err = json.Unmarshal(*v, &tags)
31525				if err != nil {
31526					return err
31527				}
31528				vnt.Tags = tags
31529			}
31530		}
31531	}
31532
31533	return nil
31534}
31535
31536// VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
31537type VirtualNetworkTapListResult struct {
31538	autorest.Response `json:"-"`
31539	// Value - A list of VirtualNetworkTaps in a resource group.
31540	Value *[]VirtualNetworkTap `json:"value,omitempty"`
31541	// NextLink - The URL to get the next set of results.
31542	NextLink *string `json:"nextLink,omitempty"`
31543}
31544
31545// VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
31546type VirtualNetworkTapListResultIterator struct {
31547	i    int
31548	page VirtualNetworkTapListResultPage
31549}
31550
31551// NextWithContext advances to the next value.  If there was an error making
31552// the request the iterator does not advance and the error is returned.
31553func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
31554	if tracing.IsEnabled() {
31555		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
31556		defer func() {
31557			sc := -1
31558			if iter.Response().Response.Response != nil {
31559				sc = iter.Response().Response.Response.StatusCode
31560			}
31561			tracing.EndSpan(ctx, sc, err)
31562		}()
31563	}
31564	iter.i++
31565	if iter.i < len(iter.page.Values()) {
31566		return nil
31567	}
31568	err = iter.page.NextWithContext(ctx)
31569	if err != nil {
31570		iter.i--
31571		return err
31572	}
31573	iter.i = 0
31574	return nil
31575}
31576
31577// Next advances to the next value.  If there was an error making
31578// the request the iterator does not advance and the error is returned.
31579// Deprecated: Use NextWithContext() instead.
31580func (iter *VirtualNetworkTapListResultIterator) Next() error {
31581	return iter.NextWithContext(context.Background())
31582}
31583
31584// NotDone returns true if the enumeration should be started or is not yet complete.
31585func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
31586	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31587}
31588
31589// Response returns the raw server response from the last page request.
31590func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
31591	return iter.page.Response()
31592}
31593
31594// Value returns the current value or a zero-initialized value if the
31595// iterator has advanced beyond the end of the collection.
31596func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
31597	if !iter.page.NotDone() {
31598		return VirtualNetworkTap{}
31599	}
31600	return iter.page.Values()[iter.i]
31601}
31602
31603// Creates a new instance of the VirtualNetworkTapListResultIterator type.
31604func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
31605	return VirtualNetworkTapListResultIterator{page: page}
31606}
31607
31608// IsEmpty returns true if the ListResult contains no values.
31609func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
31610	return vntlr.Value == nil || len(*vntlr.Value) == 0
31611}
31612
31613// virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
31614// It returns nil if no more results exist.
31615func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
31616	if vntlr.NextLink == nil || len(to.String(vntlr.NextLink)) < 1 {
31617		return nil, nil
31618	}
31619	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31620		autorest.AsJSON(),
31621		autorest.AsGet(),
31622		autorest.WithBaseURL(to.String(vntlr.NextLink)))
31623}
31624
31625// VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
31626type VirtualNetworkTapListResultPage struct {
31627	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
31628	vntlr VirtualNetworkTapListResult
31629}
31630
31631// NextWithContext advances to the next page of values.  If there was an error making
31632// the request the page does not advance and the error is returned.
31633func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
31634	if tracing.IsEnabled() {
31635		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
31636		defer func() {
31637			sc := -1
31638			if page.Response().Response.Response != nil {
31639				sc = page.Response().Response.Response.StatusCode
31640			}
31641			tracing.EndSpan(ctx, sc, err)
31642		}()
31643	}
31644	next, err := page.fn(ctx, page.vntlr)
31645	if err != nil {
31646		return err
31647	}
31648	page.vntlr = next
31649	return nil
31650}
31651
31652// Next advances to the next page of values.  If there was an error making
31653// the request the page does not advance and the error is returned.
31654// Deprecated: Use NextWithContext() instead.
31655func (page *VirtualNetworkTapListResultPage) Next() error {
31656	return page.NextWithContext(context.Background())
31657}
31658
31659// NotDone returns true if the page enumeration should be started or is not yet complete.
31660func (page VirtualNetworkTapListResultPage) NotDone() bool {
31661	return !page.vntlr.IsEmpty()
31662}
31663
31664// Response returns the raw server response from the last page request.
31665func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
31666	return page.vntlr
31667}
31668
31669// Values returns the slice of values for the current page or nil if there are no values.
31670func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
31671	if page.vntlr.IsEmpty() {
31672		return nil
31673	}
31674	return *page.vntlr.Value
31675}
31676
31677// Creates a new instance of the VirtualNetworkTapListResultPage type.
31678func NewVirtualNetworkTapListResultPage(getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
31679	return VirtualNetworkTapListResultPage{fn: getNextPage}
31680}
31681
31682// VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
31683type VirtualNetworkTapPropertiesFormat struct {
31684	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
31685	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
31686	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network tap resource.
31687	ResourceGUID *string `json:"resourceGuid,omitempty"`
31688	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31689	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31690	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap.
31691	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
31692	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap.
31693	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
31694	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
31695	DestinationPort *int32 `json:"destinationPort,omitempty"`
31696}
31697
31698// VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31699// long-running operation.
31700type VirtualNetworkTapsCreateOrUpdateFuture struct {
31701	azure.Future
31702}
31703
31704// Result returns the result of the asynchronous operation.
31705// If the operation has not completed it will return an error.
31706func (future *VirtualNetworkTapsCreateOrUpdateFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
31707	var done bool
31708	done, err = future.DoneWithContext(context.Background(), client)
31709	if err != nil {
31710		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31711		return
31712	}
31713	if !done {
31714		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
31715		return
31716	}
31717	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31718	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
31719		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
31720		if err != nil {
31721			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
31722		}
31723	}
31724	return
31725}
31726
31727// VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
31728// long-running operation.
31729type VirtualNetworkTapsDeleteFuture struct {
31730	azure.Future
31731}
31732
31733// Result returns the result of the asynchronous operation.
31734// If the operation has not completed it will return an error.
31735func (future *VirtualNetworkTapsDeleteFuture) Result(client VirtualNetworkTapsClient) (ar autorest.Response, err error) {
31736	var done bool
31737	done, err = future.DoneWithContext(context.Background(), client)
31738	if err != nil {
31739		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
31740		return
31741	}
31742	if !done {
31743		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
31744		return
31745	}
31746	ar.Response = future.Response()
31747	return
31748}
31749
31750// VirtualNetworkTapsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
31751// long-running operation.
31752type VirtualNetworkTapsUpdateTagsFuture struct {
31753	azure.Future
31754}
31755
31756// Result returns the result of the asynchronous operation.
31757// If the operation has not completed it will return an error.
31758func (future *VirtualNetworkTapsUpdateTagsFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
31759	var done bool
31760	done, err = future.DoneWithContext(context.Background(), client)
31761	if err != nil {
31762		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
31763		return
31764	}
31765	if !done {
31766		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsUpdateTagsFuture")
31767		return
31768	}
31769	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31770	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
31771		vnt, err = client.UpdateTagsResponder(vnt.Response.Response)
31772		if err != nil {
31773			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", vnt.Response.Response, "Failure responding to request")
31774		}
31775	}
31776	return
31777}
31778
31779// VirtualNetworkUsage usage details for subnet.
31780type VirtualNetworkUsage struct {
31781	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
31782	CurrentValue *float64 `json:"currentValue,omitempty"`
31783	// ID - READ-ONLY; Subnet identifier.
31784	ID *string `json:"id,omitempty"`
31785	// Limit - READ-ONLY; Indicates the size of the subnet.
31786	Limit *float64 `json:"limit,omitempty"`
31787	// Name - READ-ONLY; The name containing common and localized value for usage.
31788	Name *VirtualNetworkUsageName `json:"name,omitempty"`
31789	// Unit - READ-ONLY; Usage units. Returns 'Count'.
31790	Unit *string `json:"unit,omitempty"`
31791}
31792
31793// VirtualNetworkUsageName usage strings container.
31794type VirtualNetworkUsageName struct {
31795	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
31796	LocalizedValue *string `json:"localizedValue,omitempty"`
31797	// Value - READ-ONLY; Subnet size and usage string.
31798	Value *string `json:"value,omitempty"`
31799}
31800
31801// VirtualRouter virtualRouter Resource.
31802type VirtualRouter struct {
31803	autorest.Response `json:"-"`
31804	// VirtualRouterPropertiesFormat - Properties of the Virtual Router.
31805	*VirtualRouterPropertiesFormat `json:"properties,omitempty"`
31806	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
31807	Etag *string `json:"etag,omitempty"`
31808	// ID - Resource ID.
31809	ID *string `json:"id,omitempty"`
31810	// Name - READ-ONLY; Resource name.
31811	Name *string `json:"name,omitempty"`
31812	// Type - READ-ONLY; Resource type.
31813	Type *string `json:"type,omitempty"`
31814	// Location - Resource location.
31815	Location *string `json:"location,omitempty"`
31816	// Tags - Resource tags.
31817	Tags map[string]*string `json:"tags"`
31818}
31819
31820// MarshalJSON is the custom marshaler for VirtualRouter.
31821func (vr VirtualRouter) MarshalJSON() ([]byte, error) {
31822	objectMap := make(map[string]interface{})
31823	if vr.VirtualRouterPropertiesFormat != nil {
31824		objectMap["properties"] = vr.VirtualRouterPropertiesFormat
31825	}
31826	if vr.ID != nil {
31827		objectMap["id"] = vr.ID
31828	}
31829	if vr.Location != nil {
31830		objectMap["location"] = vr.Location
31831	}
31832	if vr.Tags != nil {
31833		objectMap["tags"] = vr.Tags
31834	}
31835	return json.Marshal(objectMap)
31836}
31837
31838// UnmarshalJSON is the custom unmarshaler for VirtualRouter struct.
31839func (vr *VirtualRouter) UnmarshalJSON(body []byte) error {
31840	var m map[string]*json.RawMessage
31841	err := json.Unmarshal(body, &m)
31842	if err != nil {
31843		return err
31844	}
31845	for k, v := range m {
31846		switch k {
31847		case "properties":
31848			if v != nil {
31849				var virtualRouterPropertiesFormat VirtualRouterPropertiesFormat
31850				err = json.Unmarshal(*v, &virtualRouterPropertiesFormat)
31851				if err != nil {
31852					return err
31853				}
31854				vr.VirtualRouterPropertiesFormat = &virtualRouterPropertiesFormat
31855			}
31856		case "etag":
31857			if v != nil {
31858				var etag string
31859				err = json.Unmarshal(*v, &etag)
31860				if err != nil {
31861					return err
31862				}
31863				vr.Etag = &etag
31864			}
31865		case "id":
31866			if v != nil {
31867				var ID string
31868				err = json.Unmarshal(*v, &ID)
31869				if err != nil {
31870					return err
31871				}
31872				vr.ID = &ID
31873			}
31874		case "name":
31875			if v != nil {
31876				var name string
31877				err = json.Unmarshal(*v, &name)
31878				if err != nil {
31879					return err
31880				}
31881				vr.Name = &name
31882			}
31883		case "type":
31884			if v != nil {
31885				var typeVar string
31886				err = json.Unmarshal(*v, &typeVar)
31887				if err != nil {
31888					return err
31889				}
31890				vr.Type = &typeVar
31891			}
31892		case "location":
31893			if v != nil {
31894				var location string
31895				err = json.Unmarshal(*v, &location)
31896				if err != nil {
31897					return err
31898				}
31899				vr.Location = &location
31900			}
31901		case "tags":
31902			if v != nil {
31903				var tags map[string]*string
31904				err = json.Unmarshal(*v, &tags)
31905				if err != nil {
31906					return err
31907				}
31908				vr.Tags = tags
31909			}
31910		}
31911	}
31912
31913	return nil
31914}
31915
31916// VirtualRouterListResult response for ListVirtualRouters API service call.
31917type VirtualRouterListResult struct {
31918	autorest.Response `json:"-"`
31919	// Value - List of Virtual Routers.
31920	Value *[]VirtualRouter `json:"value,omitempty"`
31921	// NextLink - URL to get the next set of results.
31922	NextLink *string `json:"nextLink,omitempty"`
31923}
31924
31925// VirtualRouterListResultIterator provides access to a complete listing of VirtualRouter values.
31926type VirtualRouterListResultIterator struct {
31927	i    int
31928	page VirtualRouterListResultPage
31929}
31930
31931// NextWithContext advances to the next value.  If there was an error making
31932// the request the iterator does not advance and the error is returned.
31933func (iter *VirtualRouterListResultIterator) NextWithContext(ctx context.Context) (err error) {
31934	if tracing.IsEnabled() {
31935		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultIterator.NextWithContext")
31936		defer func() {
31937			sc := -1
31938			if iter.Response().Response.Response != nil {
31939				sc = iter.Response().Response.Response.StatusCode
31940			}
31941			tracing.EndSpan(ctx, sc, err)
31942		}()
31943	}
31944	iter.i++
31945	if iter.i < len(iter.page.Values()) {
31946		return nil
31947	}
31948	err = iter.page.NextWithContext(ctx)
31949	if err != nil {
31950		iter.i--
31951		return err
31952	}
31953	iter.i = 0
31954	return nil
31955}
31956
31957// Next advances to the next value.  If there was an error making
31958// the request the iterator does not advance and the error is returned.
31959// Deprecated: Use NextWithContext() instead.
31960func (iter *VirtualRouterListResultIterator) Next() error {
31961	return iter.NextWithContext(context.Background())
31962}
31963
31964// NotDone returns true if the enumeration should be started or is not yet complete.
31965func (iter VirtualRouterListResultIterator) NotDone() bool {
31966	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31967}
31968
31969// Response returns the raw server response from the last page request.
31970func (iter VirtualRouterListResultIterator) Response() VirtualRouterListResult {
31971	return iter.page.Response()
31972}
31973
31974// Value returns the current value or a zero-initialized value if the
31975// iterator has advanced beyond the end of the collection.
31976func (iter VirtualRouterListResultIterator) Value() VirtualRouter {
31977	if !iter.page.NotDone() {
31978		return VirtualRouter{}
31979	}
31980	return iter.page.Values()[iter.i]
31981}
31982
31983// Creates a new instance of the VirtualRouterListResultIterator type.
31984func NewVirtualRouterListResultIterator(page VirtualRouterListResultPage) VirtualRouterListResultIterator {
31985	return VirtualRouterListResultIterator{page: page}
31986}
31987
31988// IsEmpty returns true if the ListResult contains no values.
31989func (vrlr VirtualRouterListResult) IsEmpty() bool {
31990	return vrlr.Value == nil || len(*vrlr.Value) == 0
31991}
31992
31993// virtualRouterListResultPreparer prepares a request to retrieve the next set of results.
31994// It returns nil if no more results exist.
31995func (vrlr VirtualRouterListResult) virtualRouterListResultPreparer(ctx context.Context) (*http.Request, error) {
31996	if vrlr.NextLink == nil || len(to.String(vrlr.NextLink)) < 1 {
31997		return nil, nil
31998	}
31999	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32000		autorest.AsJSON(),
32001		autorest.AsGet(),
32002		autorest.WithBaseURL(to.String(vrlr.NextLink)))
32003}
32004
32005// VirtualRouterListResultPage contains a page of VirtualRouter values.
32006type VirtualRouterListResultPage struct {
32007	fn   func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)
32008	vrlr VirtualRouterListResult
32009}
32010
32011// NextWithContext advances to the next page of values.  If there was an error making
32012// the request the page does not advance and the error is returned.
32013func (page *VirtualRouterListResultPage) NextWithContext(ctx context.Context) (err error) {
32014	if tracing.IsEnabled() {
32015		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultPage.NextWithContext")
32016		defer func() {
32017			sc := -1
32018			if page.Response().Response.Response != nil {
32019				sc = page.Response().Response.Response.StatusCode
32020			}
32021			tracing.EndSpan(ctx, sc, err)
32022		}()
32023	}
32024	next, err := page.fn(ctx, page.vrlr)
32025	if err != nil {
32026		return err
32027	}
32028	page.vrlr = next
32029	return nil
32030}
32031
32032// Next advances to the next page of values.  If there was an error making
32033// the request the page does not advance and the error is returned.
32034// Deprecated: Use NextWithContext() instead.
32035func (page *VirtualRouterListResultPage) Next() error {
32036	return page.NextWithContext(context.Background())
32037}
32038
32039// NotDone returns true if the page enumeration should be started or is not yet complete.
32040func (page VirtualRouterListResultPage) NotDone() bool {
32041	return !page.vrlr.IsEmpty()
32042}
32043
32044// Response returns the raw server response from the last page request.
32045func (page VirtualRouterListResultPage) Response() VirtualRouterListResult {
32046	return page.vrlr
32047}
32048
32049// Values returns the slice of values for the current page or nil if there are no values.
32050func (page VirtualRouterListResultPage) Values() []VirtualRouter {
32051	if page.vrlr.IsEmpty() {
32052		return nil
32053	}
32054	return *page.vrlr.Value
32055}
32056
32057// Creates a new instance of the VirtualRouterListResultPage type.
32058func NewVirtualRouterListResultPage(getNextPage func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)) VirtualRouterListResultPage {
32059	return VirtualRouterListResultPage{fn: getNextPage}
32060}
32061
32062// VirtualRouterPeering virtual Router Peering resource
32063type VirtualRouterPeering struct {
32064	autorest.Response `json:"-"`
32065	// VirtualRouterPeeringProperties - The properties of the Virtual Router Peering.
32066	*VirtualRouterPeeringProperties `json:"properties,omitempty"`
32067	// Name - Gets name of the peering unique to VirtualRouter. This name can be used to access the resource.
32068	Name *string `json:"name,omitempty"`
32069	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
32070	Etag *string `json:"etag,omitempty"`
32071	// Type - READ-ONLY; Peering type.
32072	Type *string `json:"type,omitempty"`
32073	// ID - Resource ID.
32074	ID *string `json:"id,omitempty"`
32075}
32076
32077// MarshalJSON is the custom marshaler for VirtualRouterPeering.
32078func (vrp VirtualRouterPeering) MarshalJSON() ([]byte, error) {
32079	objectMap := make(map[string]interface{})
32080	if vrp.VirtualRouterPeeringProperties != nil {
32081		objectMap["properties"] = vrp.VirtualRouterPeeringProperties
32082	}
32083	if vrp.Name != nil {
32084		objectMap["name"] = vrp.Name
32085	}
32086	if vrp.ID != nil {
32087		objectMap["id"] = vrp.ID
32088	}
32089	return json.Marshal(objectMap)
32090}
32091
32092// UnmarshalJSON is the custom unmarshaler for VirtualRouterPeering struct.
32093func (vrp *VirtualRouterPeering) UnmarshalJSON(body []byte) error {
32094	var m map[string]*json.RawMessage
32095	err := json.Unmarshal(body, &m)
32096	if err != nil {
32097		return err
32098	}
32099	for k, v := range m {
32100		switch k {
32101		case "properties":
32102			if v != nil {
32103				var virtualRouterPeeringProperties VirtualRouterPeeringProperties
32104				err = json.Unmarshal(*v, &virtualRouterPeeringProperties)
32105				if err != nil {
32106					return err
32107				}
32108				vrp.VirtualRouterPeeringProperties = &virtualRouterPeeringProperties
32109			}
32110		case "name":
32111			if v != nil {
32112				var name string
32113				err = json.Unmarshal(*v, &name)
32114				if err != nil {
32115					return err
32116				}
32117				vrp.Name = &name
32118			}
32119		case "etag":
32120			if v != nil {
32121				var etag string
32122				err = json.Unmarshal(*v, &etag)
32123				if err != nil {
32124					return err
32125				}
32126				vrp.Etag = &etag
32127			}
32128		case "type":
32129			if v != nil {
32130				var typeVar string
32131				err = json.Unmarshal(*v, &typeVar)
32132				if err != nil {
32133					return err
32134				}
32135				vrp.Type = &typeVar
32136			}
32137		case "id":
32138			if v != nil {
32139				var ID string
32140				err = json.Unmarshal(*v, &ID)
32141				if err != nil {
32142					return err
32143				}
32144				vrp.ID = &ID
32145			}
32146		}
32147	}
32148
32149	return nil
32150}
32151
32152// VirtualRouterPeeringListResult response for ListVirtualRouterPeerings API service call.
32153type VirtualRouterPeeringListResult struct {
32154	autorest.Response `json:"-"`
32155	// Value - List of VirtualRouterPeerings in a VirtualRouter.
32156	Value *[]VirtualRouterPeering `json:"value,omitempty"`
32157	// NextLink - URL to get the next set of results.
32158	NextLink *string `json:"nextLink,omitempty"`
32159}
32160
32161// VirtualRouterPeeringListResultIterator provides access to a complete listing of VirtualRouterPeering
32162// values.
32163type VirtualRouterPeeringListResultIterator struct {
32164	i    int
32165	page VirtualRouterPeeringListResultPage
32166}
32167
32168// NextWithContext advances to the next value.  If there was an error making
32169// the request the iterator does not advance and the error is returned.
32170func (iter *VirtualRouterPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
32171	if tracing.IsEnabled() {
32172		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultIterator.NextWithContext")
32173		defer func() {
32174			sc := -1
32175			if iter.Response().Response.Response != nil {
32176				sc = iter.Response().Response.Response.StatusCode
32177			}
32178			tracing.EndSpan(ctx, sc, err)
32179		}()
32180	}
32181	iter.i++
32182	if iter.i < len(iter.page.Values()) {
32183		return nil
32184	}
32185	err = iter.page.NextWithContext(ctx)
32186	if err != nil {
32187		iter.i--
32188		return err
32189	}
32190	iter.i = 0
32191	return nil
32192}
32193
32194// Next advances to the next value.  If there was an error making
32195// the request the iterator does not advance and the error is returned.
32196// Deprecated: Use NextWithContext() instead.
32197func (iter *VirtualRouterPeeringListResultIterator) Next() error {
32198	return iter.NextWithContext(context.Background())
32199}
32200
32201// NotDone returns true if the enumeration should be started or is not yet complete.
32202func (iter VirtualRouterPeeringListResultIterator) NotDone() bool {
32203	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32204}
32205
32206// Response returns the raw server response from the last page request.
32207func (iter VirtualRouterPeeringListResultIterator) Response() VirtualRouterPeeringListResult {
32208	return iter.page.Response()
32209}
32210
32211// Value returns the current value or a zero-initialized value if the
32212// iterator has advanced beyond the end of the collection.
32213func (iter VirtualRouterPeeringListResultIterator) Value() VirtualRouterPeering {
32214	if !iter.page.NotDone() {
32215		return VirtualRouterPeering{}
32216	}
32217	return iter.page.Values()[iter.i]
32218}
32219
32220// Creates a new instance of the VirtualRouterPeeringListResultIterator type.
32221func NewVirtualRouterPeeringListResultIterator(page VirtualRouterPeeringListResultPage) VirtualRouterPeeringListResultIterator {
32222	return VirtualRouterPeeringListResultIterator{page: page}
32223}
32224
32225// IsEmpty returns true if the ListResult contains no values.
32226func (vrplr VirtualRouterPeeringListResult) IsEmpty() bool {
32227	return vrplr.Value == nil || len(*vrplr.Value) == 0
32228}
32229
32230// virtualRouterPeeringListResultPreparer prepares a request to retrieve the next set of results.
32231// It returns nil if no more results exist.
32232func (vrplr VirtualRouterPeeringListResult) virtualRouterPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
32233	if vrplr.NextLink == nil || len(to.String(vrplr.NextLink)) < 1 {
32234		return nil, nil
32235	}
32236	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32237		autorest.AsJSON(),
32238		autorest.AsGet(),
32239		autorest.WithBaseURL(to.String(vrplr.NextLink)))
32240}
32241
32242// VirtualRouterPeeringListResultPage contains a page of VirtualRouterPeering values.
32243type VirtualRouterPeeringListResultPage struct {
32244	fn    func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)
32245	vrplr VirtualRouterPeeringListResult
32246}
32247
32248// NextWithContext advances to the next page of values.  If there was an error making
32249// the request the page does not advance and the error is returned.
32250func (page *VirtualRouterPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
32251	if tracing.IsEnabled() {
32252		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultPage.NextWithContext")
32253		defer func() {
32254			sc := -1
32255			if page.Response().Response.Response != nil {
32256				sc = page.Response().Response.Response.StatusCode
32257			}
32258			tracing.EndSpan(ctx, sc, err)
32259		}()
32260	}
32261	next, err := page.fn(ctx, page.vrplr)
32262	if err != nil {
32263		return err
32264	}
32265	page.vrplr = next
32266	return nil
32267}
32268
32269// Next advances to the next page of values.  If there was an error making
32270// the request the page does not advance and the error is returned.
32271// Deprecated: Use NextWithContext() instead.
32272func (page *VirtualRouterPeeringListResultPage) Next() error {
32273	return page.NextWithContext(context.Background())
32274}
32275
32276// NotDone returns true if the page enumeration should be started or is not yet complete.
32277func (page VirtualRouterPeeringListResultPage) NotDone() bool {
32278	return !page.vrplr.IsEmpty()
32279}
32280
32281// Response returns the raw server response from the last page request.
32282func (page VirtualRouterPeeringListResultPage) Response() VirtualRouterPeeringListResult {
32283	return page.vrplr
32284}
32285
32286// Values returns the slice of values for the current page or nil if there are no values.
32287func (page VirtualRouterPeeringListResultPage) Values() []VirtualRouterPeering {
32288	if page.vrplr.IsEmpty() {
32289		return nil
32290	}
32291	return *page.vrplr.Value
32292}
32293
32294// Creates a new instance of the VirtualRouterPeeringListResultPage type.
32295func NewVirtualRouterPeeringListResultPage(getNextPage func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)) VirtualRouterPeeringListResultPage {
32296	return VirtualRouterPeeringListResultPage{fn: getNextPage}
32297}
32298
32299// VirtualRouterPeeringProperties properties of the rule group.
32300type VirtualRouterPeeringProperties struct {
32301	// PeerAsn - Peer ASN.
32302	PeerAsn *int64 `json:"peerAsn,omitempty"`
32303	// PeerIP - Peer IP.
32304	PeerIP *string `json:"peerIp,omitempty"`
32305	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32306	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32307}
32308
32309// VirtualRouterPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32310// long-running operation.
32311type VirtualRouterPeeringsCreateOrUpdateFuture struct {
32312	azure.Future
32313}
32314
32315// Result returns the result of the asynchronous operation.
32316// If the operation has not completed it will return an error.
32317func (future *VirtualRouterPeeringsCreateOrUpdateFuture) Result(client VirtualRouterPeeringsClient) (vrp VirtualRouterPeering, err error) {
32318	var done bool
32319	done, err = future.DoneWithContext(context.Background(), client)
32320	if err != nil {
32321		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32322		return
32323	}
32324	if !done {
32325		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsCreateOrUpdateFuture")
32326		return
32327	}
32328	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32329	if vrp.Response.Response, err = future.GetResult(sender); err == nil && vrp.Response.Response.StatusCode != http.StatusNoContent {
32330		vrp, err = client.CreateOrUpdateResponder(vrp.Response.Response)
32331		if err != nil {
32332			err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", vrp.Response.Response, "Failure responding to request")
32333		}
32334	}
32335	return
32336}
32337
32338// VirtualRouterPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
32339// long-running operation.
32340type VirtualRouterPeeringsDeleteFuture struct {
32341	azure.Future
32342}
32343
32344// Result returns the result of the asynchronous operation.
32345// If the operation has not completed it will return an error.
32346func (future *VirtualRouterPeeringsDeleteFuture) Result(client VirtualRouterPeeringsClient) (ar autorest.Response, err error) {
32347	var done bool
32348	done, err = future.DoneWithContext(context.Background(), client)
32349	if err != nil {
32350		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
32351		return
32352	}
32353	if !done {
32354		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsDeleteFuture")
32355		return
32356	}
32357	ar.Response = future.Response()
32358	return
32359}
32360
32361// VirtualRouterPropertiesFormat virtual Router definition
32362type VirtualRouterPropertiesFormat struct {
32363	// VirtualRouterAsn - VirtualRouter ASN.
32364	VirtualRouterAsn *int64 `json:"virtualRouterAsn,omitempty"`
32365	// VirtualRouterIps - VirtualRouter IPs
32366	VirtualRouterIps *[]string `json:"virtualRouterIps,omitempty"`
32367	// HostedSubnet - The Subnet on which VirtualRouter is hosted.
32368	HostedSubnet *SubResource `json:"hostedSubnet,omitempty"`
32369	// HostedGateway - The Gateway on which VirtualRouter is hosted.
32370	HostedGateway *SubResource `json:"hostedGateway,omitempty"`
32371	// Peerings - READ-ONLY; List of references to VirtualRouterPeerings
32372	Peerings *[]SubResource `json:"peerings,omitempty"`
32373	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32374	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32375}
32376
32377// VirtualRoutersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32378// long-running operation.
32379type VirtualRoutersCreateOrUpdateFuture struct {
32380	azure.Future
32381}
32382
32383// Result returns the result of the asynchronous operation.
32384// If the operation has not completed it will return an error.
32385func (future *VirtualRoutersCreateOrUpdateFuture) Result(client VirtualRoutersClient) (vr VirtualRouter, err error) {
32386	var done bool
32387	done, err = future.DoneWithContext(context.Background(), client)
32388	if err != nil {
32389		err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32390		return
32391	}
32392	if !done {
32393		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersCreateOrUpdateFuture")
32394		return
32395	}
32396	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32397	if vr.Response.Response, err = future.GetResult(sender); err == nil && vr.Response.Response.StatusCode != http.StatusNoContent {
32398		vr, err = client.CreateOrUpdateResponder(vr.Response.Response)
32399		if err != nil {
32400			err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", vr.Response.Response, "Failure responding to request")
32401		}
32402	}
32403	return
32404}
32405
32406// VirtualRoutersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
32407// operation.
32408type VirtualRoutersDeleteFuture struct {
32409	azure.Future
32410}
32411
32412// Result returns the result of the asynchronous operation.
32413// If the operation has not completed it will return an error.
32414func (future *VirtualRoutersDeleteFuture) Result(client VirtualRoutersClient) (ar autorest.Response, err error) {
32415	var done bool
32416	done, err = future.DoneWithContext(context.Background(), client)
32417	if err != nil {
32418		err = autorest.NewErrorWithError(err, "network.VirtualRoutersDeleteFuture", "Result", future.Response(), "Polling failure")
32419		return
32420	}
32421	if !done {
32422		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersDeleteFuture")
32423		return
32424	}
32425	ar.Response = future.Response()
32426	return
32427}
32428
32429// VirtualWAN virtualWAN Resource.
32430type VirtualWAN struct {
32431	autorest.Response `json:"-"`
32432	// VirtualWanProperties - Properties of the virtual WAN.
32433	*VirtualWanProperties `json:"properties,omitempty"`
32434	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32435	Etag *string `json:"etag,omitempty"`
32436	// ID - Resource ID.
32437	ID *string `json:"id,omitempty"`
32438	// Name - READ-ONLY; Resource name.
32439	Name *string `json:"name,omitempty"`
32440	// Type - READ-ONLY; Resource type.
32441	Type *string `json:"type,omitempty"`
32442	// Location - Resource location.
32443	Location *string `json:"location,omitempty"`
32444	// Tags - Resource tags.
32445	Tags map[string]*string `json:"tags"`
32446}
32447
32448// MarshalJSON is the custom marshaler for VirtualWAN.
32449func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
32450	objectMap := make(map[string]interface{})
32451	if vw.VirtualWanProperties != nil {
32452		objectMap["properties"] = vw.VirtualWanProperties
32453	}
32454	if vw.ID != nil {
32455		objectMap["id"] = vw.ID
32456	}
32457	if vw.Location != nil {
32458		objectMap["location"] = vw.Location
32459	}
32460	if vw.Tags != nil {
32461		objectMap["tags"] = vw.Tags
32462	}
32463	return json.Marshal(objectMap)
32464}
32465
32466// UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
32467func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
32468	var m map[string]*json.RawMessage
32469	err := json.Unmarshal(body, &m)
32470	if err != nil {
32471		return err
32472	}
32473	for k, v := range m {
32474		switch k {
32475		case "properties":
32476			if v != nil {
32477				var virtualWanProperties VirtualWanProperties
32478				err = json.Unmarshal(*v, &virtualWanProperties)
32479				if err != nil {
32480					return err
32481				}
32482				vw.VirtualWanProperties = &virtualWanProperties
32483			}
32484		case "etag":
32485			if v != nil {
32486				var etag string
32487				err = json.Unmarshal(*v, &etag)
32488				if err != nil {
32489					return err
32490				}
32491				vw.Etag = &etag
32492			}
32493		case "id":
32494			if v != nil {
32495				var ID string
32496				err = json.Unmarshal(*v, &ID)
32497				if err != nil {
32498					return err
32499				}
32500				vw.ID = &ID
32501			}
32502		case "name":
32503			if v != nil {
32504				var name string
32505				err = json.Unmarshal(*v, &name)
32506				if err != nil {
32507					return err
32508				}
32509				vw.Name = &name
32510			}
32511		case "type":
32512			if v != nil {
32513				var typeVar string
32514				err = json.Unmarshal(*v, &typeVar)
32515				if err != nil {
32516					return err
32517				}
32518				vw.Type = &typeVar
32519			}
32520		case "location":
32521			if v != nil {
32522				var location string
32523				err = json.Unmarshal(*v, &location)
32524				if err != nil {
32525					return err
32526				}
32527				vw.Location = &location
32528			}
32529		case "tags":
32530			if v != nil {
32531				var tags map[string]*string
32532				err = json.Unmarshal(*v, &tags)
32533				if err != nil {
32534					return err
32535				}
32536				vw.Tags = tags
32537			}
32538		}
32539	}
32540
32541	return nil
32542}
32543
32544// VirtualWanProperties parameters for VirtualWAN.
32545type VirtualWanProperties struct {
32546	// DisableVpnEncryption - Vpn encryption to be disabled or not.
32547	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
32548	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
32549	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
32550	// VpnSites - READ-ONLY; List of VpnSites in the VirtualWAN.
32551	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
32552	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
32553	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
32554	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
32555	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
32556	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
32557	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
32558	// ProvisioningState - The provisioning state of the virtual WAN resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32559	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32560}
32561
32562// VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32563// long-running operation.
32564type VirtualWansCreateOrUpdateFuture struct {
32565	azure.Future
32566}
32567
32568// Result returns the result of the asynchronous operation.
32569// If the operation has not completed it will return an error.
32570func (future *VirtualWansCreateOrUpdateFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
32571	var done bool
32572	done, err = future.DoneWithContext(context.Background(), client)
32573	if err != nil {
32574		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32575		return
32576	}
32577	if !done {
32578		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
32579		return
32580	}
32581	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32582	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
32583		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
32584		if err != nil {
32585			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
32586		}
32587	}
32588	return
32589}
32590
32591// VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
32592// operation.
32593type VirtualWansDeleteFuture struct {
32594	azure.Future
32595}
32596
32597// Result returns the result of the asynchronous operation.
32598// If the operation has not completed it will return an error.
32599func (future *VirtualWansDeleteFuture) Result(client VirtualWansClient) (ar autorest.Response, err error) {
32600	var done bool
32601	done, err = future.DoneWithContext(context.Background(), client)
32602	if err != nil {
32603		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
32604		return
32605	}
32606	if !done {
32607		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
32608		return
32609	}
32610	ar.Response = future.Response()
32611	return
32612}
32613
32614// VirtualWanSecurityProvider collection of SecurityProviders.
32615type VirtualWanSecurityProvider struct {
32616	// Name - Name of the security provider.
32617	Name *string `json:"name,omitempty"`
32618	// URL - Url of the security provider.
32619	URL *string `json:"url,omitempty"`
32620	// Type - Name of the security provider. Possible values include: 'External', 'Native'
32621	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
32622}
32623
32624// VirtualWanSecurityProviders collection of SecurityProviders.
32625type VirtualWanSecurityProviders struct {
32626	autorest.Response `json:"-"`
32627	// SupportedProviders - List of VirtualWAN security providers.
32628	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
32629}
32630
32631// VirtualWansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
32632// operation.
32633type VirtualWansUpdateTagsFuture struct {
32634	azure.Future
32635}
32636
32637// Result returns the result of the asynchronous operation.
32638// If the operation has not completed it will return an error.
32639func (future *VirtualWansUpdateTagsFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
32640	var done bool
32641	done, err = future.DoneWithContext(context.Background(), client)
32642	if err != nil {
32643		err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
32644		return
32645	}
32646	if !done {
32647		err = azure.NewAsyncOpIncompleteError("network.VirtualWansUpdateTagsFuture")
32648		return
32649	}
32650	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32651	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
32652		vw, err = client.UpdateTagsResponder(vw.Response.Response)
32653		if err != nil {
32654			err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", vw.Response.Response, "Failure responding to request")
32655		}
32656	}
32657	return
32658}
32659
32660// VirtualWanVpnProfileParameters virtual Wan Vpn profile parameters Vpn profile generation.
32661type VirtualWanVpnProfileParameters struct {
32662	// VpnServerConfigurationResourceID - VpnServerConfiguration partial resource uri with which VirtualWan is associated to.
32663	VpnServerConfigurationResourceID *string `json:"vpnServerConfigurationResourceId,omitempty"`
32664	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
32665	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
32666}
32667
32668// VpnClientConfiguration vpnClientConfiguration for P2S client.
32669type VpnClientConfiguration struct {
32670	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
32671	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
32672	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
32673	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
32674	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
32675	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
32676	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
32677	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
32678	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
32679	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
32680	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
32681	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
32682	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
32683	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
32684	// AadTenant - The AADTenant property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
32685	AadTenant *string `json:"aadTenant,omitempty"`
32686	// AadAudience - The AADAudience property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
32687	AadAudience *string `json:"aadAudience,omitempty"`
32688	// AadIssuer - The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
32689	AadIssuer *string `json:"aadIssuer,omitempty"`
32690}
32691
32692// VpnClientConnectionHealth vpnClientConnectionHealth properties.
32693type VpnClientConnectionHealth struct {
32694	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection.
32695	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
32696	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection.
32697	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
32698	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
32699	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
32700	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
32701	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
32702}
32703
32704// VpnClientConnectionHealthDetail VPN client connection health detail.
32705type VpnClientConnectionHealthDetail struct {
32706	// VpnConnectionID - READ-ONLY; The vpn client Id.
32707	VpnConnectionID *string `json:"vpnConnectionId,omitempty"`
32708	// VpnConnectionDuration - READ-ONLY; The duration time of a connected vpn client.
32709	VpnConnectionDuration *int64 `json:"vpnConnectionDuration,omitempty"`
32710	// VpnConnectionTime - READ-ONLY; The start time of a connected vpn client.
32711	VpnConnectionTime *string `json:"vpnConnectionTime,omitempty"`
32712	// PublicIPAddress - READ-ONLY; The public Ip of a connected vpn client.
32713	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
32714	// PrivateIPAddress - READ-ONLY; The assigned private Ip of a connected vpn client.
32715	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
32716	// VpnUserName - READ-ONLY; The user name of a connected vpn client.
32717	VpnUserName *string `json:"vpnUserName,omitempty"`
32718	// MaxBandwidth - READ-ONLY; The max band width.
32719	MaxBandwidth *int64 `json:"maxBandwidth,omitempty"`
32720	// EgressPacketsTransferred - READ-ONLY; The egress packets per second.
32721	EgressPacketsTransferred *int64 `json:"egressPacketsTransferred,omitempty"`
32722	// EgressBytesTransferred - READ-ONLY; The egress bytes per second.
32723	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
32724	// IngressPacketsTransferred - READ-ONLY; The ingress packets per second.
32725	IngressPacketsTransferred *int64 `json:"ingressPacketsTransferred,omitempty"`
32726	// IngressBytesTransferred - READ-ONLY; The ingress bytes per second.
32727	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
32728	// MaxPacketsPerSecond - READ-ONLY; The max packets transferred per second.
32729	MaxPacketsPerSecond *int64 `json:"maxPacketsPerSecond,omitempty"`
32730}
32731
32732// VpnClientConnectionHealthDetailListResult list of virtual network gateway vpn client connection health.
32733type VpnClientConnectionHealthDetailListResult struct {
32734	autorest.Response `json:"-"`
32735	// Value - List of vpn client connection health.
32736	Value *[]VpnClientConnectionHealthDetail `json:"value,omitempty"`
32737}
32738
32739// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
32740type VpnClientIPsecParameters struct {
32741	autorest.Response `json:"-"`
32742	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
32743	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
32744	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
32745	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
32746	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
32747	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
32748	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
32749	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
32750	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
32751	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
32752	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
32753	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
32754	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
32755	DhGroup DhGroup `json:"dhGroup,omitempty"`
32756	// PfsGroup - The Pfs Group used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
32757	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
32758}
32759
32760// VpnClientParameters vpn Client Parameters for package generation.
32761type VpnClientParameters struct {
32762	// ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'Amd64', 'X86'
32763	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
32764	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
32765	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
32766	// RadiusServerAuthCertificate - The public certificate data for the radius server authentication certificate as a Base-64 encoded string. Required only if external radius authentication has been configured with EAPTLS authentication.
32767	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
32768	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
32769	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
32770}
32771
32772// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
32773type VpnClientRevokedCertificate struct {
32774	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
32775	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
32776	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32777	Name *string `json:"name,omitempty"`
32778	// Etag - A unique read-only string that changes whenever the resource is updated.
32779	Etag *string `json:"etag,omitempty"`
32780	// ID - Resource ID.
32781	ID *string `json:"id,omitempty"`
32782}
32783
32784// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
32785func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
32786	objectMap := make(map[string]interface{})
32787	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
32788		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
32789	}
32790	if vcrc.Name != nil {
32791		objectMap["name"] = vcrc.Name
32792	}
32793	if vcrc.Etag != nil {
32794		objectMap["etag"] = vcrc.Etag
32795	}
32796	if vcrc.ID != nil {
32797		objectMap["id"] = vcrc.ID
32798	}
32799	return json.Marshal(objectMap)
32800}
32801
32802// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
32803func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
32804	var m map[string]*json.RawMessage
32805	err := json.Unmarshal(body, &m)
32806	if err != nil {
32807		return err
32808	}
32809	for k, v := range m {
32810		switch k {
32811		case "properties":
32812			if v != nil {
32813				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
32814				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
32815				if err != nil {
32816					return err
32817				}
32818				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
32819			}
32820		case "name":
32821			if v != nil {
32822				var name string
32823				err = json.Unmarshal(*v, &name)
32824				if err != nil {
32825					return err
32826				}
32827				vcrc.Name = &name
32828			}
32829		case "etag":
32830			if v != nil {
32831				var etag string
32832				err = json.Unmarshal(*v, &etag)
32833				if err != nil {
32834					return err
32835				}
32836				vcrc.Etag = &etag
32837			}
32838		case "id":
32839			if v != nil {
32840				var ID string
32841				err = json.Unmarshal(*v, &ID)
32842				if err != nil {
32843					return err
32844				}
32845				vcrc.ID = &ID
32846			}
32847		}
32848	}
32849
32850	return nil
32851}
32852
32853// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
32854// network gateway.
32855type VpnClientRevokedCertificatePropertiesFormat struct {
32856	// Thumbprint - The revoked VPN client certificate thumbprint.
32857	Thumbprint *string `json:"thumbprint,omitempty"`
32858	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32859	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32860}
32861
32862// VpnClientRootCertificate VPN client root certificate of virtual network gateway.
32863type VpnClientRootCertificate struct {
32864	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
32865	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
32866	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32867	Name *string `json:"name,omitempty"`
32868	// Etag - A unique read-only string that changes whenever the resource is updated.
32869	Etag *string `json:"etag,omitempty"`
32870	// ID - Resource ID.
32871	ID *string `json:"id,omitempty"`
32872}
32873
32874// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
32875func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
32876	objectMap := make(map[string]interface{})
32877	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
32878		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
32879	}
32880	if vcrc.Name != nil {
32881		objectMap["name"] = vcrc.Name
32882	}
32883	if vcrc.Etag != nil {
32884		objectMap["etag"] = vcrc.Etag
32885	}
32886	if vcrc.ID != nil {
32887		objectMap["id"] = vcrc.ID
32888	}
32889	return json.Marshal(objectMap)
32890}
32891
32892// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
32893func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
32894	var m map[string]*json.RawMessage
32895	err := json.Unmarshal(body, &m)
32896	if err != nil {
32897		return err
32898	}
32899	for k, v := range m {
32900		switch k {
32901		case "properties":
32902			if v != nil {
32903				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
32904				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
32905				if err != nil {
32906					return err
32907				}
32908				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
32909			}
32910		case "name":
32911			if v != nil {
32912				var name string
32913				err = json.Unmarshal(*v, &name)
32914				if err != nil {
32915					return err
32916				}
32917				vcrc.Name = &name
32918			}
32919		case "etag":
32920			if v != nil {
32921				var etag string
32922				err = json.Unmarshal(*v, &etag)
32923				if err != nil {
32924					return err
32925				}
32926				vcrc.Etag = &etag
32927			}
32928		case "id":
32929			if v != nil {
32930				var ID string
32931				err = json.Unmarshal(*v, &ID)
32932				if err != nil {
32933					return err
32934				}
32935				vcrc.ID = &ID
32936			}
32937		}
32938	}
32939
32940	return nil
32941}
32942
32943// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway.
32944type VpnClientRootCertificatePropertiesFormat struct {
32945	// PublicCertData - The certificate public data.
32946	PublicCertData *string `json:"publicCertData,omitempty"`
32947	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32948	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32949}
32950
32951// VpnConnection vpnConnection Resource.
32952type VpnConnection struct {
32953	autorest.Response `json:"-"`
32954	// VpnConnectionProperties - Properties of the VPN connection.
32955	*VpnConnectionProperties `json:"properties,omitempty"`
32956	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32957	Name *string `json:"name,omitempty"`
32958	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32959	Etag *string `json:"etag,omitempty"`
32960	// ID - Resource ID.
32961	ID *string `json:"id,omitempty"`
32962}
32963
32964// MarshalJSON is the custom marshaler for VpnConnection.
32965func (vc VpnConnection) MarshalJSON() ([]byte, error) {
32966	objectMap := make(map[string]interface{})
32967	if vc.VpnConnectionProperties != nil {
32968		objectMap["properties"] = vc.VpnConnectionProperties
32969	}
32970	if vc.Name != nil {
32971		objectMap["name"] = vc.Name
32972	}
32973	if vc.ID != nil {
32974		objectMap["id"] = vc.ID
32975	}
32976	return json.Marshal(objectMap)
32977}
32978
32979// UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
32980func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
32981	var m map[string]*json.RawMessage
32982	err := json.Unmarshal(body, &m)
32983	if err != nil {
32984		return err
32985	}
32986	for k, v := range m {
32987		switch k {
32988		case "properties":
32989			if v != nil {
32990				var vpnConnectionProperties VpnConnectionProperties
32991				err = json.Unmarshal(*v, &vpnConnectionProperties)
32992				if err != nil {
32993					return err
32994				}
32995				vc.VpnConnectionProperties = &vpnConnectionProperties
32996			}
32997		case "name":
32998			if v != nil {
32999				var name string
33000				err = json.Unmarshal(*v, &name)
33001				if err != nil {
33002					return err
33003				}
33004				vc.Name = &name
33005			}
33006		case "etag":
33007			if v != nil {
33008				var etag string
33009				err = json.Unmarshal(*v, &etag)
33010				if err != nil {
33011					return err
33012				}
33013				vc.Etag = &etag
33014			}
33015		case "id":
33016			if v != nil {
33017				var ID string
33018				err = json.Unmarshal(*v, &ID)
33019				if err != nil {
33020					return err
33021				}
33022				vc.ID = &ID
33023			}
33024		}
33025	}
33026
33027	return nil
33028}
33029
33030// VpnConnectionProperties parameters for VpnConnection.
33031type VpnConnectionProperties struct {
33032	// RemoteVpnSite - Id of the connected vpn site.
33033	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
33034	// RoutingWeight - Routing weight for vpn connection.
33035	RoutingWeight *int32 `json:"routingWeight,omitempty"`
33036	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
33037	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
33038	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
33039	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
33040	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
33041	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
33042	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
33043	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
33044	// ConnectionBandwidth - Expected bandwidth in MBPS.
33045	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
33046	// SharedKey - SharedKey for the vpn connection.
33047	SharedKey *string `json:"sharedKey,omitempty"`
33048	// EnableBgp - EnableBgp flag.
33049	EnableBgp *bool `json:"enableBgp,omitempty"`
33050	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
33051	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
33052	// IpsecPolicies - The IPSec Policies to be considered by this connection.
33053	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
33054	// EnableRateLimiting - EnableBgp flag.
33055	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
33056	// EnableInternetSecurity - Enable internet security.
33057	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
33058	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
33059	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
33060	// ProvisioningState - The provisioning state of the VPN connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33061	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33062	// VpnLinkConnections - List of all vpn site link connections to the gateway.
33063	VpnLinkConnections *[]VpnSiteLinkConnection `json:"vpnLinkConnections,omitempty"`
33064}
33065
33066// VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33067// long-running operation.
33068type VpnConnectionsCreateOrUpdateFuture struct {
33069	azure.Future
33070}
33071
33072// Result returns the result of the asynchronous operation.
33073// If the operation has not completed it will return an error.
33074func (future *VpnConnectionsCreateOrUpdateFuture) Result(client VpnConnectionsClient) (vc VpnConnection, err error) {
33075	var done bool
33076	done, err = future.DoneWithContext(context.Background(), client)
33077	if err != nil {
33078		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33079		return
33080	}
33081	if !done {
33082		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
33083		return
33084	}
33085	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33086	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
33087		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
33088		if err != nil {
33089			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
33090		}
33091	}
33092	return
33093}
33094
33095// VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33096// operation.
33097type VpnConnectionsDeleteFuture struct {
33098	azure.Future
33099}
33100
33101// Result returns the result of the asynchronous operation.
33102// If the operation has not completed it will return an error.
33103func (future *VpnConnectionsDeleteFuture) Result(client VpnConnectionsClient) (ar autorest.Response, err error) {
33104	var done bool
33105	done, err = future.DoneWithContext(context.Background(), client)
33106	if err != nil {
33107		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
33108		return
33109	}
33110	if !done {
33111		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
33112		return
33113	}
33114	ar.Response = future.Response()
33115	return
33116}
33117
33118// VpnDeviceScriptParameters vpn device configuration script generation parameters.
33119type VpnDeviceScriptParameters struct {
33120	// Vendor - The vendor for the vpn device.
33121	Vendor *string `json:"vendor,omitempty"`
33122	// DeviceFamily - The device family for the vpn device.
33123	DeviceFamily *string `json:"deviceFamily,omitempty"`
33124	// FirmwareVersion - The firmware version for the vpn device.
33125	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
33126}
33127
33128// VpnGateway vpnGateway Resource.
33129type VpnGateway struct {
33130	autorest.Response `json:"-"`
33131	// VpnGatewayProperties - Properties of the VPN gateway.
33132	*VpnGatewayProperties `json:"properties,omitempty"`
33133	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33134	Etag *string `json:"etag,omitempty"`
33135	// ID - Resource ID.
33136	ID *string `json:"id,omitempty"`
33137	// Name - READ-ONLY; Resource name.
33138	Name *string `json:"name,omitempty"`
33139	// Type - READ-ONLY; Resource type.
33140	Type *string `json:"type,omitempty"`
33141	// Location - Resource location.
33142	Location *string `json:"location,omitempty"`
33143	// Tags - Resource tags.
33144	Tags map[string]*string `json:"tags"`
33145}
33146
33147// MarshalJSON is the custom marshaler for VpnGateway.
33148func (vg VpnGateway) MarshalJSON() ([]byte, error) {
33149	objectMap := make(map[string]interface{})
33150	if vg.VpnGatewayProperties != nil {
33151		objectMap["properties"] = vg.VpnGatewayProperties
33152	}
33153	if vg.ID != nil {
33154		objectMap["id"] = vg.ID
33155	}
33156	if vg.Location != nil {
33157		objectMap["location"] = vg.Location
33158	}
33159	if vg.Tags != nil {
33160		objectMap["tags"] = vg.Tags
33161	}
33162	return json.Marshal(objectMap)
33163}
33164
33165// UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
33166func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
33167	var m map[string]*json.RawMessage
33168	err := json.Unmarshal(body, &m)
33169	if err != nil {
33170		return err
33171	}
33172	for k, v := range m {
33173		switch k {
33174		case "properties":
33175			if v != nil {
33176				var vpnGatewayProperties VpnGatewayProperties
33177				err = json.Unmarshal(*v, &vpnGatewayProperties)
33178				if err != nil {
33179					return err
33180				}
33181				vg.VpnGatewayProperties = &vpnGatewayProperties
33182			}
33183		case "etag":
33184			if v != nil {
33185				var etag string
33186				err = json.Unmarshal(*v, &etag)
33187				if err != nil {
33188					return err
33189				}
33190				vg.Etag = &etag
33191			}
33192		case "id":
33193			if v != nil {
33194				var ID string
33195				err = json.Unmarshal(*v, &ID)
33196				if err != nil {
33197					return err
33198				}
33199				vg.ID = &ID
33200			}
33201		case "name":
33202			if v != nil {
33203				var name string
33204				err = json.Unmarshal(*v, &name)
33205				if err != nil {
33206					return err
33207				}
33208				vg.Name = &name
33209			}
33210		case "type":
33211			if v != nil {
33212				var typeVar string
33213				err = json.Unmarshal(*v, &typeVar)
33214				if err != nil {
33215					return err
33216				}
33217				vg.Type = &typeVar
33218			}
33219		case "location":
33220			if v != nil {
33221				var location string
33222				err = json.Unmarshal(*v, &location)
33223				if err != nil {
33224					return err
33225				}
33226				vg.Location = &location
33227			}
33228		case "tags":
33229			if v != nil {
33230				var tags map[string]*string
33231				err = json.Unmarshal(*v, &tags)
33232				if err != nil {
33233					return err
33234				}
33235				vg.Tags = tags
33236			}
33237		}
33238	}
33239
33240	return nil
33241}
33242
33243// VpnGatewayProperties parameters for VpnGateway.
33244type VpnGatewayProperties struct {
33245	// VirtualHub - The VirtualHub to which the gateway belongs.
33246	VirtualHub *SubResource `json:"virtualHub,omitempty"`
33247	// Connections - List of all vpn connections to the gateway.
33248	Connections *[]VpnConnection `json:"connections,omitempty"`
33249	// BgpSettings - Local network gateway's BGP speaker settings.
33250	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
33251	// ProvisioningState - The provisioning state of the VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33252	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33253	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
33254	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
33255}
33256
33257// VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33258// long-running operation.
33259type VpnGatewaysCreateOrUpdateFuture struct {
33260	azure.Future
33261}
33262
33263// Result returns the result of the asynchronous operation.
33264// If the operation has not completed it will return an error.
33265func (future *VpnGatewaysCreateOrUpdateFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
33266	var done bool
33267	done, err = future.DoneWithContext(context.Background(), client)
33268	if err != nil {
33269		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33270		return
33271	}
33272	if !done {
33273		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
33274		return
33275	}
33276	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33277	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
33278		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
33279		if err != nil {
33280			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
33281		}
33282	}
33283	return
33284}
33285
33286// VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33287// operation.
33288type VpnGatewaysDeleteFuture struct {
33289	azure.Future
33290}
33291
33292// Result returns the result of the asynchronous operation.
33293// If the operation has not completed it will return an error.
33294func (future *VpnGatewaysDeleteFuture) Result(client VpnGatewaysClient) (ar autorest.Response, err error) {
33295	var done bool
33296	done, err = future.DoneWithContext(context.Background(), client)
33297	if err != nil {
33298		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
33299		return
33300	}
33301	if !done {
33302		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
33303		return
33304	}
33305	ar.Response = future.Response()
33306	return
33307}
33308
33309// VpnGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running
33310// operation.
33311type VpnGatewaysResetFuture struct {
33312	azure.Future
33313}
33314
33315// Result returns the result of the asynchronous operation.
33316// If the operation has not completed it will return an error.
33317func (future *VpnGatewaysResetFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
33318	var done bool
33319	done, err = future.DoneWithContext(context.Background(), client)
33320	if err != nil {
33321		err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", future.Response(), "Polling failure")
33322		return
33323	}
33324	if !done {
33325		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysResetFuture")
33326		return
33327	}
33328	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33329	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
33330		vg, err = client.ResetResponder(vg.Response.Response)
33331		if err != nil {
33332			err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", vg.Response.Response, "Failure responding to request")
33333		}
33334	}
33335	return
33336}
33337
33338// VpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
33339// operation.
33340type VpnGatewaysUpdateTagsFuture struct {
33341	azure.Future
33342}
33343
33344// Result returns the result of the asynchronous operation.
33345// If the operation has not completed it will return an error.
33346func (future *VpnGatewaysUpdateTagsFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
33347	var done bool
33348	done, err = future.DoneWithContext(context.Background(), client)
33349	if err != nil {
33350		err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
33351		return
33352	}
33353	if !done {
33354		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysUpdateTagsFuture")
33355		return
33356	}
33357	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33358	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
33359		vg, err = client.UpdateTagsResponder(vg.Response.Response)
33360		if err != nil {
33361			err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", vg.Response.Response, "Failure responding to request")
33362		}
33363	}
33364	return
33365}
33366
33367// VpnLinkBgpSettings BGP settings details for a link.
33368type VpnLinkBgpSettings struct {
33369	// Asn - The BGP speaker's ASN.
33370	Asn *int64 `json:"asn,omitempty"`
33371	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
33372	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
33373}
33374
33375// VpnLinkProviderProperties list of properties of a link provider.
33376type VpnLinkProviderProperties struct {
33377	// LinkProviderName - Name of the link provider.
33378	LinkProviderName *string `json:"linkProviderName,omitempty"`
33379	// LinkSpeedInMbps - Link speed.
33380	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
33381}
33382
33383// VpnPacketCaptureStartParameters start packet capture parameters on virtual network gateway.
33384type VpnPacketCaptureStartParameters struct {
33385	// FilterData - Start Packet capture parameters.
33386	FilterData *string `json:"filterData,omitempty"`
33387}
33388
33389// VpnPacketCaptureStopParameters stop packet capture parameters.
33390type VpnPacketCaptureStopParameters struct {
33391	// SasURL - SAS url for packet capture on virtual network gateway.
33392	SasURL *string `json:"sasUrl,omitempty"`
33393}
33394
33395// VpnProfileResponse vpn Profile Response for package generation.
33396type VpnProfileResponse struct {
33397	autorest.Response `json:"-"`
33398	// ProfileURL - URL to the VPN profile.
33399	ProfileURL *string `json:"profileUrl,omitempty"`
33400}
33401
33402// VpnServerConfigRadiusClientRootCertificate properties of the Radius client root certificate of
33403// VpnServerConfiguration.
33404type VpnServerConfigRadiusClientRootCertificate struct {
33405	// Name - The certificate name.
33406	Name *string `json:"name,omitempty"`
33407	// Thumbprint - The Radius client root certificate thumbprint.
33408	Thumbprint *string `json:"thumbprint,omitempty"`
33409}
33410
33411// VpnServerConfigRadiusServerRootCertificate properties of Radius Server root certificate of
33412// VpnServerConfiguration.
33413type VpnServerConfigRadiusServerRootCertificate struct {
33414	// Name - The certificate name.
33415	Name *string `json:"name,omitempty"`
33416	// PublicCertData - The certificate public data.
33417	PublicCertData *string `json:"publicCertData,omitempty"`
33418}
33419
33420// VpnServerConfiguration vpnServerConfiguration Resource.
33421type VpnServerConfiguration struct {
33422	autorest.Response `json:"-"`
33423	// VpnServerConfigurationProperties - Properties of the P2SVpnServer configuration.
33424	*VpnServerConfigurationProperties `json:"properties,omitempty"`
33425	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
33426	Etag *string `json:"etag,omitempty"`
33427	// ID - Resource ID.
33428	ID *string `json:"id,omitempty"`
33429	// Name - READ-ONLY; Resource name.
33430	Name *string `json:"name,omitempty"`
33431	// Type - READ-ONLY; Resource type.
33432	Type *string `json:"type,omitempty"`
33433	// Location - Resource location.
33434	Location *string `json:"location,omitempty"`
33435	// Tags - Resource tags.
33436	Tags map[string]*string `json:"tags"`
33437}
33438
33439// MarshalJSON is the custom marshaler for VpnServerConfiguration.
33440func (vsc VpnServerConfiguration) MarshalJSON() ([]byte, error) {
33441	objectMap := make(map[string]interface{})
33442	if vsc.VpnServerConfigurationProperties != nil {
33443		objectMap["properties"] = vsc.VpnServerConfigurationProperties
33444	}
33445	if vsc.ID != nil {
33446		objectMap["id"] = vsc.ID
33447	}
33448	if vsc.Location != nil {
33449		objectMap["location"] = vsc.Location
33450	}
33451	if vsc.Tags != nil {
33452		objectMap["tags"] = vsc.Tags
33453	}
33454	return json.Marshal(objectMap)
33455}
33456
33457// UnmarshalJSON is the custom unmarshaler for VpnServerConfiguration struct.
33458func (vsc *VpnServerConfiguration) UnmarshalJSON(body []byte) error {
33459	var m map[string]*json.RawMessage
33460	err := json.Unmarshal(body, &m)
33461	if err != nil {
33462		return err
33463	}
33464	for k, v := range m {
33465		switch k {
33466		case "properties":
33467			if v != nil {
33468				var vpnServerConfigurationProperties VpnServerConfigurationProperties
33469				err = json.Unmarshal(*v, &vpnServerConfigurationProperties)
33470				if err != nil {
33471					return err
33472				}
33473				vsc.VpnServerConfigurationProperties = &vpnServerConfigurationProperties
33474			}
33475		case "etag":
33476			if v != nil {
33477				var etag string
33478				err = json.Unmarshal(*v, &etag)
33479				if err != nil {
33480					return err
33481				}
33482				vsc.Etag = &etag
33483			}
33484		case "id":
33485			if v != nil {
33486				var ID string
33487				err = json.Unmarshal(*v, &ID)
33488				if err != nil {
33489					return err
33490				}
33491				vsc.ID = &ID
33492			}
33493		case "name":
33494			if v != nil {
33495				var name string
33496				err = json.Unmarshal(*v, &name)
33497				if err != nil {
33498					return err
33499				}
33500				vsc.Name = &name
33501			}
33502		case "type":
33503			if v != nil {
33504				var typeVar string
33505				err = json.Unmarshal(*v, &typeVar)
33506				if err != nil {
33507					return err
33508				}
33509				vsc.Type = &typeVar
33510			}
33511		case "location":
33512			if v != nil {
33513				var location string
33514				err = json.Unmarshal(*v, &location)
33515				if err != nil {
33516					return err
33517				}
33518				vsc.Location = &location
33519			}
33520		case "tags":
33521			if v != nil {
33522				var tags map[string]*string
33523				err = json.Unmarshal(*v, &tags)
33524				if err != nil {
33525					return err
33526				}
33527				vsc.Tags = tags
33528			}
33529		}
33530	}
33531
33532	return nil
33533}
33534
33535// VpnServerConfigurationProperties parameters for VpnServerConfiguration.
33536type VpnServerConfigurationProperties struct {
33537	// Name - The name of the VpnServerConfiguration that is unique within a resource group.
33538	Name *string `json:"name,omitempty"`
33539	// VpnProtocols - VPN protocols for the VpnServerConfiguration.
33540	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
33541	// VpnAuthenticationTypes - VPN authentication types for the VpnServerConfiguration.
33542	VpnAuthenticationTypes *[]VpnAuthenticationType `json:"vpnAuthenticationTypes,omitempty"`
33543	// VpnClientRootCertificates - VPN client root certificate of VpnServerConfiguration.
33544	VpnClientRootCertificates *[]VpnServerConfigVpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
33545	// VpnClientRevokedCertificates - VPN client revoked certificate of VpnServerConfiguration.
33546	VpnClientRevokedCertificates *[]VpnServerConfigVpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
33547	// RadiusServerRootCertificates - Radius Server root certificate of VpnServerConfiguration.
33548	RadiusServerRootCertificates *[]VpnServerConfigRadiusServerRootCertificate `json:"radiusServerRootCertificates,omitempty"`
33549	// RadiusClientRootCertificates - Radius client root certificate of VpnServerConfiguration.
33550	RadiusClientRootCertificates *[]VpnServerConfigRadiusClientRootCertificate `json:"radiusClientRootCertificates,omitempty"`
33551	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for VpnServerConfiguration.
33552	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
33553	// RadiusServerAddress - The radius server address property of the VpnServerConfiguration resource for point to site client connection.
33554	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
33555	// RadiusServerSecret - The radius secret property of the VpnServerConfiguration resource for point to site client connection.
33556	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
33557	// AadAuthenticationParameters - The set of aad vpn authentication parameters.
33558	AadAuthenticationParameters *AadAuthenticationParameters `json:"aadAuthenticationParameters,omitempty"`
33559	// ProvisioningState - READ-ONLY; The provisioning state of the VpnServerConfiguration resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
33560	ProvisioningState *string `json:"provisioningState,omitempty"`
33561	// P2SVpnGateways - READ-ONLY; List of references to P2SVpnGateways.
33562	P2SVpnGateways *[]P2SVpnGateway `json:"p2SVpnGateways,omitempty"`
33563	// Etag - A unique read-only string that changes whenever the resource is updated.
33564	Etag *string `json:"etag,omitempty"`
33565}
33566
33567// VpnServerConfigurationsAssociatedWithVirtualWanListFuture an abstraction for monitoring and retrieving
33568// the results of a long-running operation.
33569type VpnServerConfigurationsAssociatedWithVirtualWanListFuture struct {
33570	azure.Future
33571}
33572
33573// Result returns the result of the asynchronous operation.
33574// If the operation has not completed it will return an error.
33575func (future *VpnServerConfigurationsAssociatedWithVirtualWanListFuture) Result(client VpnServerConfigurationsAssociatedWithVirtualWanClient) (vscr VpnServerConfigurationsResponse, err error) {
33576	var done bool
33577	done, err = future.DoneWithContext(context.Background(), client)
33578	if err != nil {
33579		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", future.Response(), "Polling failure")
33580		return
33581	}
33582	if !done {
33583		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture")
33584		return
33585	}
33586	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33587	if vscr.Response.Response, err = future.GetResult(sender); err == nil && vscr.Response.Response.StatusCode != http.StatusNoContent {
33588		vscr, err = client.ListResponder(vscr.Response.Response)
33589		if err != nil {
33590			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", vscr.Response.Response, "Failure responding to request")
33591		}
33592	}
33593	return
33594}
33595
33596// VpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
33597// a long-running operation.
33598type VpnServerConfigurationsCreateOrUpdateFuture struct {
33599	azure.Future
33600}
33601
33602// Result returns the result of the asynchronous operation.
33603// If the operation has not completed it will return an error.
33604func (future *VpnServerConfigurationsCreateOrUpdateFuture) Result(client VpnServerConfigurationsClient) (vsc VpnServerConfiguration, err error) {
33605	var done bool
33606	done, err = future.DoneWithContext(context.Background(), client)
33607	if err != nil {
33608		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33609		return
33610	}
33611	if !done {
33612		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsCreateOrUpdateFuture")
33613		return
33614	}
33615	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33616	if vsc.Response.Response, err = future.GetResult(sender); err == nil && vsc.Response.Response.StatusCode != http.StatusNoContent {
33617		vsc, err = client.CreateOrUpdateResponder(vsc.Response.Response)
33618		if err != nil {
33619			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", vsc.Response.Response, "Failure responding to request")
33620		}
33621	}
33622	return
33623}
33624
33625// VpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
33626// long-running operation.
33627type VpnServerConfigurationsDeleteFuture struct {
33628	azure.Future
33629}
33630
33631// Result returns the result of the asynchronous operation.
33632// If the operation has not completed it will return an error.
33633func (future *VpnServerConfigurationsDeleteFuture) Result(client VpnServerConfigurationsClient) (ar autorest.Response, err error) {
33634	var done bool
33635	done, err = future.DoneWithContext(context.Background(), client)
33636	if err != nil {
33637		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
33638		return
33639	}
33640	if !done {
33641		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsDeleteFuture")
33642		return
33643	}
33644	ar.Response = future.Response()
33645	return
33646}
33647
33648// VpnServerConfigurationsResponse vpnServerConfigurations list associated with VirtualWan Response.
33649type VpnServerConfigurationsResponse struct {
33650	autorest.Response `json:"-"`
33651	// VpnServerConfigurationResourceIds - List of VpnServerConfigurations associated with VirtualWan.
33652	VpnServerConfigurationResourceIds *[]string `json:"vpnServerConfigurationResourceIds,omitempty"`
33653}
33654
33655// VpnServerConfigurationsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
33656// long-running operation.
33657type VpnServerConfigurationsUpdateTagsFuture struct {
33658	azure.Future
33659}
33660
33661// Result returns the result of the asynchronous operation.
33662// If the operation has not completed it will return an error.
33663func (future *VpnServerConfigurationsUpdateTagsFuture) Result(client VpnServerConfigurationsClient) (vsc VpnServerConfiguration, err error) {
33664	var done bool
33665	done, err = future.DoneWithContext(context.Background(), client)
33666	if err != nil {
33667		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
33668		return
33669	}
33670	if !done {
33671		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsUpdateTagsFuture")
33672		return
33673	}
33674	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33675	if vsc.Response.Response, err = future.GetResult(sender); err == nil && vsc.Response.Response.StatusCode != http.StatusNoContent {
33676		vsc, err = client.UpdateTagsResponder(vsc.Response.Response)
33677		if err != nil {
33678			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsUpdateTagsFuture", "Result", vsc.Response.Response, "Failure responding to request")
33679		}
33680	}
33681	return
33682}
33683
33684// VpnServerConfigVpnClientRevokedCertificate properties of the revoked VPN client certificate of
33685// VpnServerConfiguration.
33686type VpnServerConfigVpnClientRevokedCertificate struct {
33687	// Name - The certificate name.
33688	Name *string `json:"name,omitempty"`
33689	// Thumbprint - The revoked VPN client certificate thumbprint.
33690	Thumbprint *string `json:"thumbprint,omitempty"`
33691}
33692
33693// VpnServerConfigVpnClientRootCertificate properties of VPN client root certificate of
33694// VpnServerConfiguration.
33695type VpnServerConfigVpnClientRootCertificate struct {
33696	// Name - The certificate name.
33697	Name *string `json:"name,omitempty"`
33698	// PublicCertData - The certificate public data.
33699	PublicCertData *string `json:"publicCertData,omitempty"`
33700}
33701
33702// VpnSite vpnSite Resource.
33703type VpnSite struct {
33704	autorest.Response `json:"-"`
33705	// VpnSiteProperties - Properties of the VPN site.
33706	*VpnSiteProperties `json:"properties,omitempty"`
33707	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33708	Etag *string `json:"etag,omitempty"`
33709	// ID - Resource ID.
33710	ID *string `json:"id,omitempty"`
33711	// Name - READ-ONLY; Resource name.
33712	Name *string `json:"name,omitempty"`
33713	// Type - READ-ONLY; Resource type.
33714	Type *string `json:"type,omitempty"`
33715	// Location - Resource location.
33716	Location *string `json:"location,omitempty"`
33717	// Tags - Resource tags.
33718	Tags map[string]*string `json:"tags"`
33719}
33720
33721// MarshalJSON is the custom marshaler for VpnSite.
33722func (vs VpnSite) MarshalJSON() ([]byte, error) {
33723	objectMap := make(map[string]interface{})
33724	if vs.VpnSiteProperties != nil {
33725		objectMap["properties"] = vs.VpnSiteProperties
33726	}
33727	if vs.ID != nil {
33728		objectMap["id"] = vs.ID
33729	}
33730	if vs.Location != nil {
33731		objectMap["location"] = vs.Location
33732	}
33733	if vs.Tags != nil {
33734		objectMap["tags"] = vs.Tags
33735	}
33736	return json.Marshal(objectMap)
33737}
33738
33739// UnmarshalJSON is the custom unmarshaler for VpnSite struct.
33740func (vs *VpnSite) UnmarshalJSON(body []byte) error {
33741	var m map[string]*json.RawMessage
33742	err := json.Unmarshal(body, &m)
33743	if err != nil {
33744		return err
33745	}
33746	for k, v := range m {
33747		switch k {
33748		case "properties":
33749			if v != nil {
33750				var vpnSiteProperties VpnSiteProperties
33751				err = json.Unmarshal(*v, &vpnSiteProperties)
33752				if err != nil {
33753					return err
33754				}
33755				vs.VpnSiteProperties = &vpnSiteProperties
33756			}
33757		case "etag":
33758			if v != nil {
33759				var etag string
33760				err = json.Unmarshal(*v, &etag)
33761				if err != nil {
33762					return err
33763				}
33764				vs.Etag = &etag
33765			}
33766		case "id":
33767			if v != nil {
33768				var ID string
33769				err = json.Unmarshal(*v, &ID)
33770				if err != nil {
33771					return err
33772				}
33773				vs.ID = &ID
33774			}
33775		case "name":
33776			if v != nil {
33777				var name string
33778				err = json.Unmarshal(*v, &name)
33779				if err != nil {
33780					return err
33781				}
33782				vs.Name = &name
33783			}
33784		case "type":
33785			if v != nil {
33786				var typeVar string
33787				err = json.Unmarshal(*v, &typeVar)
33788				if err != nil {
33789					return err
33790				}
33791				vs.Type = &typeVar
33792			}
33793		case "location":
33794			if v != nil {
33795				var location string
33796				err = json.Unmarshal(*v, &location)
33797				if err != nil {
33798					return err
33799				}
33800				vs.Location = &location
33801			}
33802		case "tags":
33803			if v != nil {
33804				var tags map[string]*string
33805				err = json.Unmarshal(*v, &tags)
33806				if err != nil {
33807					return err
33808				}
33809				vs.Tags = tags
33810			}
33811		}
33812	}
33813
33814	return nil
33815}
33816
33817// VpnSiteID vpnSite Resource.
33818type VpnSiteID struct {
33819	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
33820	VpnSite *string `json:"vpnSite,omitempty"`
33821}
33822
33823// VpnSiteLink vpnSiteLink Resource.
33824type VpnSiteLink struct {
33825	autorest.Response `json:"-"`
33826	// VpnSiteLinkProperties - Properties of the VPN site link.
33827	*VpnSiteLinkProperties `json:"properties,omitempty"`
33828	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33829	Etag *string `json:"etag,omitempty"`
33830	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
33831	Name *string `json:"name,omitempty"`
33832	// Type - READ-ONLY; Resource type.
33833	Type *string `json:"type,omitempty"`
33834	// ID - Resource ID.
33835	ID *string `json:"id,omitempty"`
33836}
33837
33838// MarshalJSON is the custom marshaler for VpnSiteLink.
33839func (vsl VpnSiteLink) MarshalJSON() ([]byte, error) {
33840	objectMap := make(map[string]interface{})
33841	if vsl.VpnSiteLinkProperties != nil {
33842		objectMap["properties"] = vsl.VpnSiteLinkProperties
33843	}
33844	if vsl.Name != nil {
33845		objectMap["name"] = vsl.Name
33846	}
33847	if vsl.ID != nil {
33848		objectMap["id"] = vsl.ID
33849	}
33850	return json.Marshal(objectMap)
33851}
33852
33853// UnmarshalJSON is the custom unmarshaler for VpnSiteLink struct.
33854func (vsl *VpnSiteLink) UnmarshalJSON(body []byte) error {
33855	var m map[string]*json.RawMessage
33856	err := json.Unmarshal(body, &m)
33857	if err != nil {
33858		return err
33859	}
33860	for k, v := range m {
33861		switch k {
33862		case "properties":
33863			if v != nil {
33864				var vpnSiteLinkProperties VpnSiteLinkProperties
33865				err = json.Unmarshal(*v, &vpnSiteLinkProperties)
33866				if err != nil {
33867					return err
33868				}
33869				vsl.VpnSiteLinkProperties = &vpnSiteLinkProperties
33870			}
33871		case "etag":
33872			if v != nil {
33873				var etag string
33874				err = json.Unmarshal(*v, &etag)
33875				if err != nil {
33876					return err
33877				}
33878				vsl.Etag = &etag
33879			}
33880		case "name":
33881			if v != nil {
33882				var name string
33883				err = json.Unmarshal(*v, &name)
33884				if err != nil {
33885					return err
33886				}
33887				vsl.Name = &name
33888			}
33889		case "type":
33890			if v != nil {
33891				var typeVar string
33892				err = json.Unmarshal(*v, &typeVar)
33893				if err != nil {
33894					return err
33895				}
33896				vsl.Type = &typeVar
33897			}
33898		case "id":
33899			if v != nil {
33900				var ID string
33901				err = json.Unmarshal(*v, &ID)
33902				if err != nil {
33903					return err
33904				}
33905				vsl.ID = &ID
33906			}
33907		}
33908	}
33909
33910	return nil
33911}
33912
33913// VpnSiteLinkConnection vpnSiteLinkConnection Resource.
33914type VpnSiteLinkConnection struct {
33915	autorest.Response `json:"-"`
33916	// VpnSiteLinkConnectionProperties - Properties of the VPN site link connection.
33917	*VpnSiteLinkConnectionProperties `json:"properties,omitempty"`
33918	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
33919	Name *string `json:"name,omitempty"`
33920	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33921	Etag *string `json:"etag,omitempty"`
33922	// Type - READ-ONLY; Resource type.
33923	Type *string `json:"type,omitempty"`
33924	// ID - Resource ID.
33925	ID *string `json:"id,omitempty"`
33926}
33927
33928// MarshalJSON is the custom marshaler for VpnSiteLinkConnection.
33929func (vslc VpnSiteLinkConnection) MarshalJSON() ([]byte, error) {
33930	objectMap := make(map[string]interface{})
33931	if vslc.VpnSiteLinkConnectionProperties != nil {
33932		objectMap["properties"] = vslc.VpnSiteLinkConnectionProperties
33933	}
33934	if vslc.Name != nil {
33935		objectMap["name"] = vslc.Name
33936	}
33937	if vslc.ID != nil {
33938		objectMap["id"] = vslc.ID
33939	}
33940	return json.Marshal(objectMap)
33941}
33942
33943// UnmarshalJSON is the custom unmarshaler for VpnSiteLinkConnection struct.
33944func (vslc *VpnSiteLinkConnection) UnmarshalJSON(body []byte) error {
33945	var m map[string]*json.RawMessage
33946	err := json.Unmarshal(body, &m)
33947	if err != nil {
33948		return err
33949	}
33950	for k, v := range m {
33951		switch k {
33952		case "properties":
33953			if v != nil {
33954				var vpnSiteLinkConnectionProperties VpnSiteLinkConnectionProperties
33955				err = json.Unmarshal(*v, &vpnSiteLinkConnectionProperties)
33956				if err != nil {
33957					return err
33958				}
33959				vslc.VpnSiteLinkConnectionProperties = &vpnSiteLinkConnectionProperties
33960			}
33961		case "name":
33962			if v != nil {
33963				var name string
33964				err = json.Unmarshal(*v, &name)
33965				if err != nil {
33966					return err
33967				}
33968				vslc.Name = &name
33969			}
33970		case "etag":
33971			if v != nil {
33972				var etag string
33973				err = json.Unmarshal(*v, &etag)
33974				if err != nil {
33975					return err
33976				}
33977				vslc.Etag = &etag
33978			}
33979		case "type":
33980			if v != nil {
33981				var typeVar string
33982				err = json.Unmarshal(*v, &typeVar)
33983				if err != nil {
33984					return err
33985				}
33986				vslc.Type = &typeVar
33987			}
33988		case "id":
33989			if v != nil {
33990				var ID string
33991				err = json.Unmarshal(*v, &ID)
33992				if err != nil {
33993					return err
33994				}
33995				vslc.ID = &ID
33996			}
33997		}
33998	}
33999
34000	return nil
34001}
34002
34003// VpnSiteLinkConnectionProperties parameters for VpnConnection.
34004type VpnSiteLinkConnectionProperties struct {
34005	// VpnSiteLink - Id of the connected vpn site link.
34006	VpnSiteLink *SubResource `json:"vpnSiteLink,omitempty"`
34007	// RoutingWeight - Routing weight for vpn connection.
34008	RoutingWeight *int32 `json:"routingWeight,omitempty"`
34009	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
34010	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
34011	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
34012	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
34013	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
34014	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
34015	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
34016	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
34017	// ConnectionBandwidth - Expected bandwidth in MBPS.
34018	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
34019	// SharedKey - SharedKey for the vpn connection.
34020	SharedKey *string `json:"sharedKey,omitempty"`
34021	// EnableBgp - EnableBgp flag.
34022	EnableBgp *bool `json:"enableBgp,omitempty"`
34023	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
34024	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
34025	// IpsecPolicies - The IPSec Policies to be considered by this connection.
34026	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
34027	// EnableRateLimiting - EnableBgp flag.
34028	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
34029	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
34030	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
34031	// ProvisioningState - The provisioning state of the VPN site link connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34032	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34033}
34034
34035// VpnSiteLinkProperties parameters for VpnSite.
34036type VpnSiteLinkProperties struct {
34037	// LinkProperties - The link provider properties.
34038	LinkProperties *VpnLinkProviderProperties `json:"linkProperties,omitempty"`
34039	// IPAddress - The ip-address for the vpn-site-link.
34040	IPAddress *string `json:"ipAddress,omitempty"`
34041	// BgpProperties - The set of bgp properties.
34042	BgpProperties *VpnLinkBgpSettings `json:"bgpProperties,omitempty"`
34043	// ProvisioningState - The provisioning state of the VPN site link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34044	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34045}
34046
34047// VpnSiteProperties parameters for VpnSite.
34048type VpnSiteProperties struct {
34049	// VirtualWan - The VirtualWAN to which the vpnSite belongs.
34050	VirtualWan *SubResource `json:"virtualWan,omitempty"`
34051	// DeviceProperties - The device properties.
34052	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
34053	// IPAddress - The ip-address for the vpn-site.
34054	IPAddress *string `json:"ipAddress,omitempty"`
34055	// SiteKey - The key for vpn-site that can be used for connections.
34056	SiteKey *string `json:"siteKey,omitempty"`
34057	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
34058	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
34059	// BgpProperties - The set of bgp properties.
34060	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
34061	// ProvisioningState - The provisioning state of the VPN site resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34062	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34063	// IsSecuritySite - IsSecuritySite flag.
34064	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
34065	// VpnSiteLinks - List of all vpn site links.
34066	VpnSiteLinks *[]VpnSiteLink `json:"vpnSiteLinks,omitempty"`
34067}
34068
34069// VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
34070// long-running operation.
34071type VpnSitesConfigurationDownloadFuture struct {
34072	azure.Future
34073}
34074
34075// Result returns the result of the asynchronous operation.
34076// If the operation has not completed it will return an error.
34077func (future *VpnSitesConfigurationDownloadFuture) Result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
34078	var done bool
34079	done, err = future.DoneWithContext(context.Background(), client)
34080	if err != nil {
34081		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
34082		return
34083	}
34084	if !done {
34085		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
34086		return
34087	}
34088	ar.Response = future.Response()
34089	return
34090}
34091
34092// VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
34093// operation.
34094type VpnSitesCreateOrUpdateFuture struct {
34095	azure.Future
34096}
34097
34098// Result returns the result of the asynchronous operation.
34099// If the operation has not completed it will return an error.
34100func (future *VpnSitesCreateOrUpdateFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
34101	var done bool
34102	done, err = future.DoneWithContext(context.Background(), client)
34103	if err != nil {
34104		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34105		return
34106	}
34107	if !done {
34108		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
34109		return
34110	}
34111	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34112	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
34113		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
34114		if err != nil {
34115			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
34116		}
34117	}
34118	return
34119}
34120
34121// VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
34122// operation.
34123type VpnSitesDeleteFuture struct {
34124	azure.Future
34125}
34126
34127// Result returns the result of the asynchronous operation.
34128// If the operation has not completed it will return an error.
34129func (future *VpnSitesDeleteFuture) Result(client VpnSitesClient) (ar autorest.Response, err error) {
34130	var done bool
34131	done, err = future.DoneWithContext(context.Background(), client)
34132	if err != nil {
34133		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
34134		return
34135	}
34136	if !done {
34137		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
34138		return
34139	}
34140	ar.Response = future.Response()
34141	return
34142}
34143
34144// VpnSitesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
34145// operation.
34146type VpnSitesUpdateTagsFuture struct {
34147	azure.Future
34148}
34149
34150// Result returns the result of the asynchronous operation.
34151// If the operation has not completed it will return an error.
34152func (future *VpnSitesUpdateTagsFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
34153	var done bool
34154	done, err = future.DoneWithContext(context.Background(), client)
34155	if err != nil {
34156		err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
34157		return
34158	}
34159	if !done {
34160		err = azure.NewAsyncOpIncompleteError("network.VpnSitesUpdateTagsFuture")
34161		return
34162	}
34163	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34164	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
34165		vs, err = client.UpdateTagsResponder(vs.Response.Response)
34166		if err != nil {
34167			err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", vs.Response.Response, "Failure responding to request")
34168		}
34169	}
34170	return
34171}
34172
34173// Watcher network watcher in a resource group.
34174type Watcher struct {
34175	autorest.Response `json:"-"`
34176	// Etag - A unique read-only string that changes whenever the resource is updated.
34177	Etag *string `json:"etag,omitempty"`
34178	// WatcherPropertiesFormat - Properties of the network watcher.
34179	*WatcherPropertiesFormat `json:"properties,omitempty"`
34180	// ID - Resource ID.
34181	ID *string `json:"id,omitempty"`
34182	// Name - READ-ONLY; Resource name.
34183	Name *string `json:"name,omitempty"`
34184	// Type - READ-ONLY; Resource type.
34185	Type *string `json:"type,omitempty"`
34186	// Location - Resource location.
34187	Location *string `json:"location,omitempty"`
34188	// Tags - Resource tags.
34189	Tags map[string]*string `json:"tags"`
34190}
34191
34192// MarshalJSON is the custom marshaler for Watcher.
34193func (w Watcher) MarshalJSON() ([]byte, error) {
34194	objectMap := make(map[string]interface{})
34195	if w.Etag != nil {
34196		objectMap["etag"] = w.Etag
34197	}
34198	if w.WatcherPropertiesFormat != nil {
34199		objectMap["properties"] = w.WatcherPropertiesFormat
34200	}
34201	if w.ID != nil {
34202		objectMap["id"] = w.ID
34203	}
34204	if w.Location != nil {
34205		objectMap["location"] = w.Location
34206	}
34207	if w.Tags != nil {
34208		objectMap["tags"] = w.Tags
34209	}
34210	return json.Marshal(objectMap)
34211}
34212
34213// UnmarshalJSON is the custom unmarshaler for Watcher struct.
34214func (w *Watcher) UnmarshalJSON(body []byte) error {
34215	var m map[string]*json.RawMessage
34216	err := json.Unmarshal(body, &m)
34217	if err != nil {
34218		return err
34219	}
34220	for k, v := range m {
34221		switch k {
34222		case "etag":
34223			if v != nil {
34224				var etag string
34225				err = json.Unmarshal(*v, &etag)
34226				if err != nil {
34227					return err
34228				}
34229				w.Etag = &etag
34230			}
34231		case "properties":
34232			if v != nil {
34233				var watcherPropertiesFormat WatcherPropertiesFormat
34234				err = json.Unmarshal(*v, &watcherPropertiesFormat)
34235				if err != nil {
34236					return err
34237				}
34238				w.WatcherPropertiesFormat = &watcherPropertiesFormat
34239			}
34240		case "id":
34241			if v != nil {
34242				var ID string
34243				err = json.Unmarshal(*v, &ID)
34244				if err != nil {
34245					return err
34246				}
34247				w.ID = &ID
34248			}
34249		case "name":
34250			if v != nil {
34251				var name string
34252				err = json.Unmarshal(*v, &name)
34253				if err != nil {
34254					return err
34255				}
34256				w.Name = &name
34257			}
34258		case "type":
34259			if v != nil {
34260				var typeVar string
34261				err = json.Unmarshal(*v, &typeVar)
34262				if err != nil {
34263					return err
34264				}
34265				w.Type = &typeVar
34266			}
34267		case "location":
34268			if v != nil {
34269				var location string
34270				err = json.Unmarshal(*v, &location)
34271				if err != nil {
34272					return err
34273				}
34274				w.Location = &location
34275			}
34276		case "tags":
34277			if v != nil {
34278				var tags map[string]*string
34279				err = json.Unmarshal(*v, &tags)
34280				if err != nil {
34281					return err
34282				}
34283				w.Tags = tags
34284			}
34285		}
34286	}
34287
34288	return nil
34289}
34290
34291// WatcherListResult response for ListNetworkWatchers API service call.
34292type WatcherListResult struct {
34293	autorest.Response `json:"-"`
34294	// Value - List of network watcher resources.
34295	Value *[]Watcher `json:"value,omitempty"`
34296}
34297
34298// WatcherPropertiesFormat the network watcher properties.
34299type WatcherPropertiesFormat struct {
34300	// ProvisioningState - The provisioning state of the network watcher resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34301	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34302}
34303
34304// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
34305// long-running operation.
34306type WatchersCheckConnectivityFuture struct {
34307	azure.Future
34308}
34309
34310// Result returns the result of the asynchronous operation.
34311// If the operation has not completed it will return an error.
34312func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
34313	var done bool
34314	done, err = future.DoneWithContext(context.Background(), client)
34315	if err != nil {
34316		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
34317		return
34318	}
34319	if !done {
34320		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
34321		return
34322	}
34323	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34324	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
34325		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
34326		if err != nil {
34327			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
34328		}
34329	}
34330	return
34331}
34332
34333// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
34334// operation.
34335type WatchersDeleteFuture struct {
34336	azure.Future
34337}
34338
34339// Result returns the result of the asynchronous operation.
34340// If the operation has not completed it will return an error.
34341func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
34342	var done bool
34343	done, err = future.DoneWithContext(context.Background(), client)
34344	if err != nil {
34345		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
34346		return
34347	}
34348	if !done {
34349		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
34350		return
34351	}
34352	ar.Response = future.Response()
34353	return
34354}
34355
34356// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
34357// long-running operation.
34358type WatchersGetAzureReachabilityReportFuture struct {
34359	azure.Future
34360}
34361
34362// Result returns the result of the asynchronous operation.
34363// If the operation has not completed it will return an error.
34364func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
34365	var done bool
34366	done, err = future.DoneWithContext(context.Background(), client)
34367	if err != nil {
34368		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
34369		return
34370	}
34371	if !done {
34372		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
34373		return
34374	}
34375	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34376	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
34377		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
34378		if err != nil {
34379			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
34380		}
34381	}
34382	return
34383}
34384
34385// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
34386// long-running operation.
34387type WatchersGetFlowLogStatusFuture struct {
34388	azure.Future
34389}
34390
34391// Result returns the result of the asynchronous operation.
34392// If the operation has not completed it will return an error.
34393func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
34394	var done bool
34395	done, err = future.DoneWithContext(context.Background(), client)
34396	if err != nil {
34397		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
34398		return
34399	}
34400	if !done {
34401		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
34402		return
34403	}
34404	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34405	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
34406		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
34407		if err != nil {
34408			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
34409		}
34410	}
34411	return
34412}
34413
34414// WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
34415// of a long-running operation.
34416type WatchersGetNetworkConfigurationDiagnosticFuture struct {
34417	azure.Future
34418}
34419
34420// Result returns the result of the asynchronous operation.
34421// If the operation has not completed it will return an error.
34422func (future *WatchersGetNetworkConfigurationDiagnosticFuture) Result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
34423	var done bool
34424	done, err = future.DoneWithContext(context.Background(), client)
34425	if err != nil {
34426		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
34427		return
34428	}
34429	if !done {
34430		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
34431		return
34432	}
34433	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34434	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
34435		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
34436		if err != nil {
34437			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
34438		}
34439	}
34440	return
34441}
34442
34443// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
34444// operation.
34445type WatchersGetNextHopFuture struct {
34446	azure.Future
34447}
34448
34449// Result returns the result of the asynchronous operation.
34450// If the operation has not completed it will return an error.
34451func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
34452	var done bool
34453	done, err = future.DoneWithContext(context.Background(), client)
34454	if err != nil {
34455		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
34456		return
34457	}
34458	if !done {
34459		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
34460		return
34461	}
34462	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34463	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
34464		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
34465		if err != nil {
34466			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
34467		}
34468	}
34469	return
34470}
34471
34472// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
34473// long-running operation.
34474type WatchersGetTroubleshootingFuture struct {
34475	azure.Future
34476}
34477
34478// Result returns the result of the asynchronous operation.
34479// If the operation has not completed it will return an error.
34480func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
34481	var done bool
34482	done, err = future.DoneWithContext(context.Background(), client)
34483	if err != nil {
34484		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
34485		return
34486	}
34487	if !done {
34488		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
34489		return
34490	}
34491	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34492	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
34493		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
34494		if err != nil {
34495			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
34496		}
34497	}
34498	return
34499}
34500
34501// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
34502// long-running operation.
34503type WatchersGetTroubleshootingResultFuture struct {
34504	azure.Future
34505}
34506
34507// Result returns the result of the asynchronous operation.
34508// If the operation has not completed it will return an error.
34509func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
34510	var done bool
34511	done, err = future.DoneWithContext(context.Background(), client)
34512	if err != nil {
34513		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
34514		return
34515	}
34516	if !done {
34517		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
34518		return
34519	}
34520	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34521	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
34522		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
34523		if err != nil {
34524			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
34525		}
34526	}
34527	return
34528}
34529
34530// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
34531// long-running operation.
34532type WatchersGetVMSecurityRulesFuture struct {
34533	azure.Future
34534}
34535
34536// Result returns the result of the asynchronous operation.
34537// If the operation has not completed it will return an error.
34538func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
34539	var done bool
34540	done, err = future.DoneWithContext(context.Background(), client)
34541	if err != nil {
34542		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
34543		return
34544	}
34545	if !done {
34546		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
34547		return
34548	}
34549	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34550	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
34551		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
34552		if err != nil {
34553			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
34554		}
34555	}
34556	return
34557}
34558
34559// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
34560// long-running operation.
34561type WatchersListAvailableProvidersFuture struct {
34562	azure.Future
34563}
34564
34565// Result returns the result of the asynchronous operation.
34566// If the operation has not completed it will return an error.
34567func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
34568	var done bool
34569	done, err = future.DoneWithContext(context.Background(), client)
34570	if err != nil {
34571		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
34572		return
34573	}
34574	if !done {
34575		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
34576		return
34577	}
34578	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34579	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
34580		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
34581		if err != nil {
34582			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
34583		}
34584	}
34585	return
34586}
34587
34588// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
34589// long-running operation.
34590type WatchersSetFlowLogConfigurationFuture struct {
34591	azure.Future
34592}
34593
34594// Result returns the result of the asynchronous operation.
34595// If the operation has not completed it will return an error.
34596func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
34597	var done bool
34598	done, err = future.DoneWithContext(context.Background(), client)
34599	if err != nil {
34600		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
34601		return
34602	}
34603	if !done {
34604		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
34605		return
34606	}
34607	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34608	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
34609		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
34610		if err != nil {
34611			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
34612		}
34613	}
34614	return
34615}
34616
34617// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
34618// operation.
34619type WatchersVerifyIPFlowFuture struct {
34620	azure.Future
34621}
34622
34623// Result returns the result of the asynchronous operation.
34624// If the operation has not completed it will return an error.
34625func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
34626	var done bool
34627	done, err = future.DoneWithContext(context.Background(), client)
34628	if err != nil {
34629		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
34630		return
34631	}
34632	if !done {
34633		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
34634		return
34635	}
34636	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34637	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
34638		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
34639		if err != nil {
34640			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
34641		}
34642	}
34643	return
34644}
34645
34646// WebApplicationFirewallCustomRule defines contents of a web application rule.
34647type WebApplicationFirewallCustomRule struct {
34648	// Name - The name of the resource that is unique within a policy. This name can be used to access the resource.
34649	Name *string `json:"name,omitempty"`
34650	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34651	Etag *string `json:"etag,omitempty"`
34652	// Priority - Describes priority of the rule. Rules with a lower value will be evaluated before rules with a higher value.
34653	Priority *int32 `json:"priority,omitempty"`
34654	// RuleType - Describes type of rule. Possible values include: 'WebApplicationFirewallRuleTypeMatchRule', 'WebApplicationFirewallRuleTypeInvalid'
34655	RuleType WebApplicationFirewallRuleType `json:"ruleType,omitempty"`
34656	// MatchConditions - List of match conditions.
34657	MatchConditions *[]MatchCondition `json:"matchConditions,omitempty"`
34658	// Action - Type of Actions. Possible values include: 'WebApplicationFirewallActionAllow', 'WebApplicationFirewallActionBlock', 'WebApplicationFirewallActionLog'
34659	Action WebApplicationFirewallAction `json:"action,omitempty"`
34660}
34661
34662// WebApplicationFirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
34663// long-running operation.
34664type WebApplicationFirewallPoliciesDeleteFuture struct {
34665	azure.Future
34666}
34667
34668// Result returns the result of the asynchronous operation.
34669// If the operation has not completed it will return an error.
34670func (future *WebApplicationFirewallPoliciesDeleteFuture) Result(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
34671	var done bool
34672	done, err = future.DoneWithContext(context.Background(), client)
34673	if err != nil {
34674		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
34675		return
34676	}
34677	if !done {
34678		err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
34679		return
34680	}
34681	ar.Response = future.Response()
34682	return
34683}
34684
34685// WebApplicationFirewallPolicy defines web application firewall policy.
34686type WebApplicationFirewallPolicy struct {
34687	autorest.Response `json:"-"`
34688	// WebApplicationFirewallPolicyPropertiesFormat - Properties of the web application firewall policy.
34689	*WebApplicationFirewallPolicyPropertiesFormat `json:"properties,omitempty"`
34690	// Etag - A unique read-only string that changes whenever the resource is updated.
34691	Etag *string `json:"etag,omitempty"`
34692	// ID - Resource ID.
34693	ID *string `json:"id,omitempty"`
34694	// Name - READ-ONLY; Resource name.
34695	Name *string `json:"name,omitempty"`
34696	// Type - READ-ONLY; Resource type.
34697	Type *string `json:"type,omitempty"`
34698	// Location - Resource location.
34699	Location *string `json:"location,omitempty"`
34700	// Tags - Resource tags.
34701	Tags map[string]*string `json:"tags"`
34702}
34703
34704// MarshalJSON is the custom marshaler for WebApplicationFirewallPolicy.
34705func (wafp WebApplicationFirewallPolicy) MarshalJSON() ([]byte, error) {
34706	objectMap := make(map[string]interface{})
34707	if wafp.WebApplicationFirewallPolicyPropertiesFormat != nil {
34708		objectMap["properties"] = wafp.WebApplicationFirewallPolicyPropertiesFormat
34709	}
34710	if wafp.Etag != nil {
34711		objectMap["etag"] = wafp.Etag
34712	}
34713	if wafp.ID != nil {
34714		objectMap["id"] = wafp.ID
34715	}
34716	if wafp.Location != nil {
34717		objectMap["location"] = wafp.Location
34718	}
34719	if wafp.Tags != nil {
34720		objectMap["tags"] = wafp.Tags
34721	}
34722	return json.Marshal(objectMap)
34723}
34724
34725// UnmarshalJSON is the custom unmarshaler for WebApplicationFirewallPolicy struct.
34726func (wafp *WebApplicationFirewallPolicy) UnmarshalJSON(body []byte) error {
34727	var m map[string]*json.RawMessage
34728	err := json.Unmarshal(body, &m)
34729	if err != nil {
34730		return err
34731	}
34732	for k, v := range m {
34733		switch k {
34734		case "properties":
34735			if v != nil {
34736				var webApplicationFirewallPolicyPropertiesFormat WebApplicationFirewallPolicyPropertiesFormat
34737				err = json.Unmarshal(*v, &webApplicationFirewallPolicyPropertiesFormat)
34738				if err != nil {
34739					return err
34740				}
34741				wafp.WebApplicationFirewallPolicyPropertiesFormat = &webApplicationFirewallPolicyPropertiesFormat
34742			}
34743		case "etag":
34744			if v != nil {
34745				var etag string
34746				err = json.Unmarshal(*v, &etag)
34747				if err != nil {
34748					return err
34749				}
34750				wafp.Etag = &etag
34751			}
34752		case "id":
34753			if v != nil {
34754				var ID string
34755				err = json.Unmarshal(*v, &ID)
34756				if err != nil {
34757					return err
34758				}
34759				wafp.ID = &ID
34760			}
34761		case "name":
34762			if v != nil {
34763				var name string
34764				err = json.Unmarshal(*v, &name)
34765				if err != nil {
34766					return err
34767				}
34768				wafp.Name = &name
34769			}
34770		case "type":
34771			if v != nil {
34772				var typeVar string
34773				err = json.Unmarshal(*v, &typeVar)
34774				if err != nil {
34775					return err
34776				}
34777				wafp.Type = &typeVar
34778			}
34779		case "location":
34780			if v != nil {
34781				var location string
34782				err = json.Unmarshal(*v, &location)
34783				if err != nil {
34784					return err
34785				}
34786				wafp.Location = &location
34787			}
34788		case "tags":
34789			if v != nil {
34790				var tags map[string]*string
34791				err = json.Unmarshal(*v, &tags)
34792				if err != nil {
34793					return err
34794				}
34795				wafp.Tags = tags
34796			}
34797		}
34798	}
34799
34800	return nil
34801}
34802
34803// WebApplicationFirewallPolicyListResult result of the request to list WebApplicationFirewallPolicies. It
34804// contains a list of WebApplicationFirewallPolicy objects and a URL link to get the next set of results.
34805type WebApplicationFirewallPolicyListResult struct {
34806	autorest.Response `json:"-"`
34807	// Value - READ-ONLY; List of WebApplicationFirewallPolicies within a resource group.
34808	Value *[]WebApplicationFirewallPolicy `json:"value,omitempty"`
34809	// NextLink - READ-ONLY; URL to get the next set of WebApplicationFirewallPolicy objects if there are any.
34810	NextLink *string `json:"nextLink,omitempty"`
34811}
34812
34813// WebApplicationFirewallPolicyListResultIterator provides access to a complete listing of
34814// WebApplicationFirewallPolicy values.
34815type WebApplicationFirewallPolicyListResultIterator struct {
34816	i    int
34817	page WebApplicationFirewallPolicyListResultPage
34818}
34819
34820// NextWithContext advances to the next value.  If there was an error making
34821// the request the iterator does not advance and the error is returned.
34822func (iter *WebApplicationFirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
34823	if tracing.IsEnabled() {
34824		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultIterator.NextWithContext")
34825		defer func() {
34826			sc := -1
34827			if iter.Response().Response.Response != nil {
34828				sc = iter.Response().Response.Response.StatusCode
34829			}
34830			tracing.EndSpan(ctx, sc, err)
34831		}()
34832	}
34833	iter.i++
34834	if iter.i < len(iter.page.Values()) {
34835		return nil
34836	}
34837	err = iter.page.NextWithContext(ctx)
34838	if err != nil {
34839		iter.i--
34840		return err
34841	}
34842	iter.i = 0
34843	return nil
34844}
34845
34846// Next advances to the next value.  If there was an error making
34847// the request the iterator does not advance and the error is returned.
34848// Deprecated: Use NextWithContext() instead.
34849func (iter *WebApplicationFirewallPolicyListResultIterator) Next() error {
34850	return iter.NextWithContext(context.Background())
34851}
34852
34853// NotDone returns true if the enumeration should be started or is not yet complete.
34854func (iter WebApplicationFirewallPolicyListResultIterator) NotDone() bool {
34855	return iter.page.NotDone() && iter.i < len(iter.page.Values())
34856}
34857
34858// Response returns the raw server response from the last page request.
34859func (iter WebApplicationFirewallPolicyListResultIterator) Response() WebApplicationFirewallPolicyListResult {
34860	return iter.page.Response()
34861}
34862
34863// Value returns the current value or a zero-initialized value if the
34864// iterator has advanced beyond the end of the collection.
34865func (iter WebApplicationFirewallPolicyListResultIterator) Value() WebApplicationFirewallPolicy {
34866	if !iter.page.NotDone() {
34867		return WebApplicationFirewallPolicy{}
34868	}
34869	return iter.page.Values()[iter.i]
34870}
34871
34872// Creates a new instance of the WebApplicationFirewallPolicyListResultIterator type.
34873func NewWebApplicationFirewallPolicyListResultIterator(page WebApplicationFirewallPolicyListResultPage) WebApplicationFirewallPolicyListResultIterator {
34874	return WebApplicationFirewallPolicyListResultIterator{page: page}
34875}
34876
34877// IsEmpty returns true if the ListResult contains no values.
34878func (wafplr WebApplicationFirewallPolicyListResult) IsEmpty() bool {
34879	return wafplr.Value == nil || len(*wafplr.Value) == 0
34880}
34881
34882// webApplicationFirewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
34883// It returns nil if no more results exist.
34884func (wafplr WebApplicationFirewallPolicyListResult) webApplicationFirewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
34885	if wafplr.NextLink == nil || len(to.String(wafplr.NextLink)) < 1 {
34886		return nil, nil
34887	}
34888	return autorest.Prepare((&http.Request{}).WithContext(ctx),
34889		autorest.AsJSON(),
34890		autorest.AsGet(),
34891		autorest.WithBaseURL(to.String(wafplr.NextLink)))
34892}
34893
34894// WebApplicationFirewallPolicyListResultPage contains a page of WebApplicationFirewallPolicy values.
34895type WebApplicationFirewallPolicyListResultPage struct {
34896	fn     func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)
34897	wafplr WebApplicationFirewallPolicyListResult
34898}
34899
34900// NextWithContext advances to the next page of values.  If there was an error making
34901// the request the page does not advance and the error is returned.
34902func (page *WebApplicationFirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
34903	if tracing.IsEnabled() {
34904		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultPage.NextWithContext")
34905		defer func() {
34906			sc := -1
34907			if page.Response().Response.Response != nil {
34908				sc = page.Response().Response.Response.StatusCode
34909			}
34910			tracing.EndSpan(ctx, sc, err)
34911		}()
34912	}
34913	next, err := page.fn(ctx, page.wafplr)
34914	if err != nil {
34915		return err
34916	}
34917	page.wafplr = next
34918	return nil
34919}
34920
34921// Next advances to the next page of values.  If there was an error making
34922// the request the page does not advance and the error is returned.
34923// Deprecated: Use NextWithContext() instead.
34924func (page *WebApplicationFirewallPolicyListResultPage) Next() error {
34925	return page.NextWithContext(context.Background())
34926}
34927
34928// NotDone returns true if the page enumeration should be started or is not yet complete.
34929func (page WebApplicationFirewallPolicyListResultPage) NotDone() bool {
34930	return !page.wafplr.IsEmpty()
34931}
34932
34933// Response returns the raw server response from the last page request.
34934func (page WebApplicationFirewallPolicyListResultPage) Response() WebApplicationFirewallPolicyListResult {
34935	return page.wafplr
34936}
34937
34938// Values returns the slice of values for the current page or nil if there are no values.
34939func (page WebApplicationFirewallPolicyListResultPage) Values() []WebApplicationFirewallPolicy {
34940	if page.wafplr.IsEmpty() {
34941		return nil
34942	}
34943	return *page.wafplr.Value
34944}
34945
34946// Creates a new instance of the WebApplicationFirewallPolicyListResultPage type.
34947func NewWebApplicationFirewallPolicyListResultPage(getNextPage func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)) WebApplicationFirewallPolicyListResultPage {
34948	return WebApplicationFirewallPolicyListResultPage{fn: getNextPage}
34949}
34950
34951// WebApplicationFirewallPolicyPropertiesFormat defines web application firewall policy properties.
34952type WebApplicationFirewallPolicyPropertiesFormat struct {
34953	// PolicySettings - Describes policySettings for policy.
34954	PolicySettings *PolicySettings `json:"policySettings,omitempty"`
34955	// CustomRules - Describes custom rules inside the policy.
34956	CustomRules *[]WebApplicationFirewallCustomRule `json:"customRules,omitempty"`
34957	// ApplicationGateways - READ-ONLY; A collection of references to application gateways.
34958	ApplicationGateways *[]ApplicationGateway `json:"applicationGateways,omitempty"`
34959	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34960	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34961	// ResourceState - READ-ONLY; Resource status of the policy. Possible values include: 'WebApplicationFirewallPolicyResourceStateCreating', 'WebApplicationFirewallPolicyResourceStateEnabling', 'WebApplicationFirewallPolicyResourceStateEnabled', 'WebApplicationFirewallPolicyResourceStateDisabling', 'WebApplicationFirewallPolicyResourceStateDisabled', 'WebApplicationFirewallPolicyResourceStateDeleting'
34962	ResourceState WebApplicationFirewallPolicyResourceState `json:"resourceState,omitempty"`
34963	// ManagedRules - Describes the managedRules structure
34964	ManagedRules *ManagedRulesDefinition `json:"managedRules,omitempty"`
34965}
34966