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-02-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)
401
402// PossibleAzureFirewallApplicationRuleProtocolTypeValues returns an array of possible values for the AzureFirewallApplicationRuleProtocolType const type.
403func PossibleAzureFirewallApplicationRuleProtocolTypeValues() []AzureFirewallApplicationRuleProtocolType {
404	return []AzureFirewallApplicationRuleProtocolType{AzureFirewallApplicationRuleProtocolTypeHTTP, AzureFirewallApplicationRuleProtocolTypeHTTPS}
405}
406
407// AzureFirewallNatRCActionType enumerates the values for azure firewall nat rc action type.
408type AzureFirewallNatRCActionType string
409
410const (
411	// Dnat ...
412	Dnat AzureFirewallNatRCActionType = "Dnat"
413	// Snat ...
414	Snat AzureFirewallNatRCActionType = "Snat"
415)
416
417// PossibleAzureFirewallNatRCActionTypeValues returns an array of possible values for the AzureFirewallNatRCActionType const type.
418func PossibleAzureFirewallNatRCActionTypeValues() []AzureFirewallNatRCActionType {
419	return []AzureFirewallNatRCActionType{Dnat, Snat}
420}
421
422// AzureFirewallNetworkRuleProtocol enumerates the values for azure firewall network rule protocol.
423type AzureFirewallNetworkRuleProtocol string
424
425const (
426	// Any ...
427	Any AzureFirewallNetworkRuleProtocol = "Any"
428	// ICMP ...
429	ICMP AzureFirewallNetworkRuleProtocol = "ICMP"
430	// TCP ...
431	TCP AzureFirewallNetworkRuleProtocol = "TCP"
432	// UDP ...
433	UDP AzureFirewallNetworkRuleProtocol = "UDP"
434)
435
436// PossibleAzureFirewallNetworkRuleProtocolValues returns an array of possible values for the AzureFirewallNetworkRuleProtocol const type.
437func PossibleAzureFirewallNetworkRuleProtocolValues() []AzureFirewallNetworkRuleProtocol {
438	return []AzureFirewallNetworkRuleProtocol{Any, ICMP, TCP, UDP}
439}
440
441// AzureFirewallRCActionType enumerates the values for azure firewall rc action type.
442type AzureFirewallRCActionType string
443
444const (
445	// AzureFirewallRCActionTypeAllow ...
446	AzureFirewallRCActionTypeAllow AzureFirewallRCActionType = "Allow"
447	// AzureFirewallRCActionTypeDeny ...
448	AzureFirewallRCActionTypeDeny AzureFirewallRCActionType = "Deny"
449)
450
451// PossibleAzureFirewallRCActionTypeValues returns an array of possible values for the AzureFirewallRCActionType const type.
452func PossibleAzureFirewallRCActionTypeValues() []AzureFirewallRCActionType {
453	return []AzureFirewallRCActionType{AzureFirewallRCActionTypeAllow, AzureFirewallRCActionTypeDeny}
454}
455
456// AzureFirewallThreatIntelMode enumerates the values for azure firewall threat intel mode.
457type AzureFirewallThreatIntelMode string
458
459const (
460	// AzureFirewallThreatIntelModeAlert ...
461	AzureFirewallThreatIntelModeAlert AzureFirewallThreatIntelMode = "Alert"
462	// AzureFirewallThreatIntelModeDeny ...
463	AzureFirewallThreatIntelModeDeny AzureFirewallThreatIntelMode = "Deny"
464	// AzureFirewallThreatIntelModeOff ...
465	AzureFirewallThreatIntelModeOff AzureFirewallThreatIntelMode = "Off"
466)
467
468// PossibleAzureFirewallThreatIntelModeValues returns an array of possible values for the AzureFirewallThreatIntelMode const type.
469func PossibleAzureFirewallThreatIntelModeValues() []AzureFirewallThreatIntelMode {
470	return []AzureFirewallThreatIntelMode{AzureFirewallThreatIntelModeAlert, AzureFirewallThreatIntelModeDeny, AzureFirewallThreatIntelModeOff}
471}
472
473// BgpPeerState enumerates the values for bgp peer state.
474type BgpPeerState string
475
476const (
477	// BgpPeerStateConnected ...
478	BgpPeerStateConnected BgpPeerState = "Connected"
479	// BgpPeerStateConnecting ...
480	BgpPeerStateConnecting BgpPeerState = "Connecting"
481	// BgpPeerStateIdle ...
482	BgpPeerStateIdle BgpPeerState = "Idle"
483	// BgpPeerStateStopped ...
484	BgpPeerStateStopped BgpPeerState = "Stopped"
485	// BgpPeerStateUnknown ...
486	BgpPeerStateUnknown BgpPeerState = "Unknown"
487)
488
489// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
490func PossibleBgpPeerStateValues() []BgpPeerState {
491	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
492}
493
494// CircuitConnectionStatus enumerates the values for circuit connection status.
495type CircuitConnectionStatus string
496
497const (
498	// Connected ...
499	Connected CircuitConnectionStatus = "Connected"
500	// Connecting ...
501	Connecting CircuitConnectionStatus = "Connecting"
502	// Disconnected ...
503	Disconnected CircuitConnectionStatus = "Disconnected"
504)
505
506// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
507func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
508	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
509}
510
511// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
512type ConnectionMonitorSourceStatus string
513
514const (
515	// ConnectionMonitorSourceStatusActive ...
516	ConnectionMonitorSourceStatusActive ConnectionMonitorSourceStatus = "Active"
517	// ConnectionMonitorSourceStatusInactive ...
518	ConnectionMonitorSourceStatusInactive ConnectionMonitorSourceStatus = "Inactive"
519	// ConnectionMonitorSourceStatusUnknown ...
520	ConnectionMonitorSourceStatusUnknown ConnectionMonitorSourceStatus = "Unknown"
521)
522
523// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
524func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
525	return []ConnectionMonitorSourceStatus{ConnectionMonitorSourceStatusActive, ConnectionMonitorSourceStatusInactive, ConnectionMonitorSourceStatusUnknown}
526}
527
528// ConnectionState enumerates the values for connection state.
529type ConnectionState string
530
531const (
532	// ConnectionStateReachable ...
533	ConnectionStateReachable ConnectionState = "Reachable"
534	// ConnectionStateUnknown ...
535	ConnectionStateUnknown ConnectionState = "Unknown"
536	// ConnectionStateUnreachable ...
537	ConnectionStateUnreachable ConnectionState = "Unreachable"
538)
539
540// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
541func PossibleConnectionStateValues() []ConnectionState {
542	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
543}
544
545// ConnectionStatus enumerates the values for connection status.
546type ConnectionStatus string
547
548const (
549	// ConnectionStatusConnected ...
550	ConnectionStatusConnected ConnectionStatus = "Connected"
551	// ConnectionStatusDegraded ...
552	ConnectionStatusDegraded ConnectionStatus = "Degraded"
553	// ConnectionStatusDisconnected ...
554	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
555	// ConnectionStatusUnknown ...
556	ConnectionStatusUnknown ConnectionStatus = "Unknown"
557)
558
559// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
560func PossibleConnectionStatusValues() []ConnectionStatus {
561	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
562}
563
564// DdosCustomPolicyProtocol enumerates the values for ddos custom policy protocol.
565type DdosCustomPolicyProtocol string
566
567const (
568	// DdosCustomPolicyProtocolSyn ...
569	DdosCustomPolicyProtocolSyn DdosCustomPolicyProtocol = "Syn"
570	// DdosCustomPolicyProtocolTCP ...
571	DdosCustomPolicyProtocolTCP DdosCustomPolicyProtocol = "Tcp"
572	// DdosCustomPolicyProtocolUDP ...
573	DdosCustomPolicyProtocolUDP DdosCustomPolicyProtocol = "Udp"
574)
575
576// PossibleDdosCustomPolicyProtocolValues returns an array of possible values for the DdosCustomPolicyProtocol const type.
577func PossibleDdosCustomPolicyProtocolValues() []DdosCustomPolicyProtocol {
578	return []DdosCustomPolicyProtocol{DdosCustomPolicyProtocolSyn, DdosCustomPolicyProtocolTCP, DdosCustomPolicyProtocolUDP}
579}
580
581// DdosCustomPolicyTriggerSensitivityOverride enumerates the values for ddos custom policy trigger sensitivity
582// override.
583type DdosCustomPolicyTriggerSensitivityOverride string
584
585const (
586	// Default ...
587	Default DdosCustomPolicyTriggerSensitivityOverride = "Default"
588	// High ...
589	High DdosCustomPolicyTriggerSensitivityOverride = "High"
590	// Low ...
591	Low DdosCustomPolicyTriggerSensitivityOverride = "Low"
592	// Relaxed ...
593	Relaxed DdosCustomPolicyTriggerSensitivityOverride = "Relaxed"
594)
595
596// PossibleDdosCustomPolicyTriggerSensitivityOverrideValues returns an array of possible values for the DdosCustomPolicyTriggerSensitivityOverride const type.
597func PossibleDdosCustomPolicyTriggerSensitivityOverrideValues() []DdosCustomPolicyTriggerSensitivityOverride {
598	return []DdosCustomPolicyTriggerSensitivityOverride{Default, High, Low, Relaxed}
599}
600
601// DdosSettingsProtectionCoverage enumerates the values for ddos settings protection coverage.
602type DdosSettingsProtectionCoverage string
603
604const (
605	// DdosSettingsProtectionCoverageBasic ...
606	DdosSettingsProtectionCoverageBasic DdosSettingsProtectionCoverage = "Basic"
607	// DdosSettingsProtectionCoverageStandard ...
608	DdosSettingsProtectionCoverageStandard DdosSettingsProtectionCoverage = "Standard"
609)
610
611// PossibleDdosSettingsProtectionCoverageValues returns an array of possible values for the DdosSettingsProtectionCoverage const type.
612func PossibleDdosSettingsProtectionCoverageValues() []DdosSettingsProtectionCoverage {
613	return []DdosSettingsProtectionCoverage{DdosSettingsProtectionCoverageBasic, DdosSettingsProtectionCoverageStandard}
614}
615
616// DhGroup enumerates the values for dh group.
617type DhGroup string
618
619const (
620	// DHGroup1 ...
621	DHGroup1 DhGroup = "DHGroup1"
622	// DHGroup14 ...
623	DHGroup14 DhGroup = "DHGroup14"
624	// DHGroup2 ...
625	DHGroup2 DhGroup = "DHGroup2"
626	// DHGroup2048 ...
627	DHGroup2048 DhGroup = "DHGroup2048"
628	// DHGroup24 ...
629	DHGroup24 DhGroup = "DHGroup24"
630	// ECP256 ...
631	ECP256 DhGroup = "ECP256"
632	// ECP384 ...
633	ECP384 DhGroup = "ECP384"
634	// None ...
635	None DhGroup = "None"
636)
637
638// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
639func PossibleDhGroupValues() []DhGroup {
640	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
641}
642
643// Direction enumerates the values for direction.
644type Direction string
645
646const (
647	// Inbound ...
648	Inbound Direction = "Inbound"
649	// Outbound ...
650	Outbound Direction = "Outbound"
651)
652
653// PossibleDirectionValues returns an array of possible values for the Direction const type.
654func PossibleDirectionValues() []Direction {
655	return []Direction{Inbound, Outbound}
656}
657
658// EffectiveRouteSource enumerates the values for effective route source.
659type EffectiveRouteSource string
660
661const (
662	// EffectiveRouteSourceDefault ...
663	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
664	// EffectiveRouteSourceUnknown ...
665	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
666	// EffectiveRouteSourceUser ...
667	EffectiveRouteSourceUser EffectiveRouteSource = "User"
668	// EffectiveRouteSourceVirtualNetworkGateway ...
669	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
670)
671
672// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
673func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
674	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
675}
676
677// EffectiveRouteState enumerates the values for effective route state.
678type EffectiveRouteState string
679
680const (
681	// Active ...
682	Active EffectiveRouteState = "Active"
683	// Invalid ...
684	Invalid EffectiveRouteState = "Invalid"
685)
686
687// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
688func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
689	return []EffectiveRouteState{Active, Invalid}
690}
691
692// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
693type EffectiveSecurityRuleProtocol string
694
695const (
696	// EffectiveSecurityRuleProtocolAll ...
697	EffectiveSecurityRuleProtocolAll EffectiveSecurityRuleProtocol = "All"
698	// EffectiveSecurityRuleProtocolTCP ...
699	EffectiveSecurityRuleProtocolTCP EffectiveSecurityRuleProtocol = "Tcp"
700	// EffectiveSecurityRuleProtocolUDP ...
701	EffectiveSecurityRuleProtocolUDP EffectiveSecurityRuleProtocol = "Udp"
702)
703
704// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
705func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
706	return []EffectiveSecurityRuleProtocol{EffectiveSecurityRuleProtocolAll, EffectiveSecurityRuleProtocolTCP, EffectiveSecurityRuleProtocolUDP}
707}
708
709// EvaluationState enumerates the values for evaluation state.
710type EvaluationState string
711
712const (
713	// Completed ...
714	Completed EvaluationState = "Completed"
715	// InProgress ...
716	InProgress EvaluationState = "InProgress"
717	// NotStarted ...
718	NotStarted EvaluationState = "NotStarted"
719)
720
721// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
722func PossibleEvaluationStateValues() []EvaluationState {
723	return []EvaluationState{Completed, InProgress, NotStarted}
724}
725
726// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
727// peering advertised public prefix state.
728type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
729
730const (
731	// Configured ...
732	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
733	// Configuring ...
734	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
735	// NotConfigured ...
736	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
737	// ValidationNeeded ...
738	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
739)
740
741// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
742func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
743	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
744}
745
746// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
747type ExpressRouteCircuitPeeringState string
748
749const (
750	// ExpressRouteCircuitPeeringStateDisabled ...
751	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
752	// ExpressRouteCircuitPeeringStateEnabled ...
753	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
754)
755
756// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
757func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
758	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
759}
760
761// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
762type ExpressRouteCircuitSkuFamily string
763
764const (
765	// MeteredData ...
766	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
767	// UnlimitedData ...
768	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
769)
770
771// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
772func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
773	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
774}
775
776// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
777type ExpressRouteCircuitSkuTier string
778
779const (
780	// ExpressRouteCircuitSkuTierBasic ...
781	ExpressRouteCircuitSkuTierBasic ExpressRouteCircuitSkuTier = "Basic"
782	// ExpressRouteCircuitSkuTierLocal ...
783	ExpressRouteCircuitSkuTierLocal ExpressRouteCircuitSkuTier = "Local"
784	// ExpressRouteCircuitSkuTierPremium ...
785	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
786	// ExpressRouteCircuitSkuTierStandard ...
787	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
788)
789
790// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
791func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
792	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierBasic, ExpressRouteCircuitSkuTierLocal, ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
793}
794
795// ExpressRouteLinkAdminState enumerates the values for express route link admin state.
796type ExpressRouteLinkAdminState string
797
798const (
799	// ExpressRouteLinkAdminStateDisabled ...
800	ExpressRouteLinkAdminStateDisabled ExpressRouteLinkAdminState = "Disabled"
801	// ExpressRouteLinkAdminStateEnabled ...
802	ExpressRouteLinkAdminStateEnabled ExpressRouteLinkAdminState = "Enabled"
803)
804
805// PossibleExpressRouteLinkAdminStateValues returns an array of possible values for the ExpressRouteLinkAdminState const type.
806func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState {
807	return []ExpressRouteLinkAdminState{ExpressRouteLinkAdminStateDisabled, ExpressRouteLinkAdminStateEnabled}
808}
809
810// ExpressRouteLinkConnectorType enumerates the values for express route link connector type.
811type ExpressRouteLinkConnectorType string
812
813const (
814	// LC ...
815	LC ExpressRouteLinkConnectorType = "LC"
816	// SC ...
817	SC ExpressRouteLinkConnectorType = "SC"
818)
819
820// PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type.
821func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType {
822	return []ExpressRouteLinkConnectorType{LC, SC}
823}
824
825// ExpressRoutePeeringState enumerates the values for express route peering state.
826type ExpressRoutePeeringState string
827
828const (
829	// ExpressRoutePeeringStateDisabled ...
830	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
831	// ExpressRoutePeeringStateEnabled ...
832	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
833)
834
835// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
836func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
837	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
838}
839
840// ExpressRoutePeeringType enumerates the values for express route peering type.
841type ExpressRoutePeeringType string
842
843const (
844	// AzurePrivatePeering ...
845	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
846	// AzurePublicPeering ...
847	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
848	// MicrosoftPeering ...
849	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
850)
851
852// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
853func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
854	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
855}
856
857// ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation.
858type ExpressRoutePortsEncapsulation string
859
860const (
861	// Dot1Q ...
862	Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q"
863	// QinQ ...
864	QinQ ExpressRoutePortsEncapsulation = "QinQ"
865)
866
867// PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type.
868func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation {
869	return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ}
870}
871
872// FlowLogFormatType enumerates the values for flow log format type.
873type FlowLogFormatType string
874
875const (
876	// JSON ...
877	JSON FlowLogFormatType = "JSON"
878)
879
880// PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type.
881func PossibleFlowLogFormatTypeValues() []FlowLogFormatType {
882	return []FlowLogFormatType{JSON}
883}
884
885// HTTPMethod enumerates the values for http method.
886type HTTPMethod string
887
888const (
889	// Get ...
890	Get HTTPMethod = "Get"
891)
892
893// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
894func PossibleHTTPMethodValues() []HTTPMethod {
895	return []HTTPMethod{Get}
896}
897
898// HubVirtualNetworkConnectionStatus enumerates the values for hub virtual network connection status.
899type HubVirtualNetworkConnectionStatus string
900
901const (
902	// HubVirtualNetworkConnectionStatusConnected ...
903	HubVirtualNetworkConnectionStatusConnected HubVirtualNetworkConnectionStatus = "Connected"
904	// HubVirtualNetworkConnectionStatusConnecting ...
905	HubVirtualNetworkConnectionStatusConnecting HubVirtualNetworkConnectionStatus = "Connecting"
906	// HubVirtualNetworkConnectionStatusNotConnected ...
907	HubVirtualNetworkConnectionStatusNotConnected HubVirtualNetworkConnectionStatus = "NotConnected"
908	// HubVirtualNetworkConnectionStatusUnknown ...
909	HubVirtualNetworkConnectionStatusUnknown HubVirtualNetworkConnectionStatus = "Unknown"
910)
911
912// PossibleHubVirtualNetworkConnectionStatusValues returns an array of possible values for the HubVirtualNetworkConnectionStatus const type.
913func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnectionStatus {
914	return []HubVirtualNetworkConnectionStatus{HubVirtualNetworkConnectionStatusConnected, HubVirtualNetworkConnectionStatusConnecting, HubVirtualNetworkConnectionStatusNotConnected, HubVirtualNetworkConnectionStatusUnknown}
915}
916
917// IkeEncryption enumerates the values for ike encryption.
918type IkeEncryption string
919
920const (
921	// AES128 ...
922	AES128 IkeEncryption = "AES128"
923	// AES192 ...
924	AES192 IkeEncryption = "AES192"
925	// AES256 ...
926	AES256 IkeEncryption = "AES256"
927	// DES ...
928	DES IkeEncryption = "DES"
929	// DES3 ...
930	DES3 IkeEncryption = "DES3"
931	// GCMAES128 ...
932	GCMAES128 IkeEncryption = "GCMAES128"
933	// GCMAES256 ...
934	GCMAES256 IkeEncryption = "GCMAES256"
935)
936
937// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
938func PossibleIkeEncryptionValues() []IkeEncryption {
939	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
940}
941
942// IkeIntegrity enumerates the values for ike integrity.
943type IkeIntegrity string
944
945const (
946	// IkeIntegrityGCMAES128 ...
947	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
948	// IkeIntegrityGCMAES256 ...
949	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
950	// IkeIntegrityMD5 ...
951	IkeIntegrityMD5 IkeIntegrity = "MD5"
952	// IkeIntegritySHA1 ...
953	IkeIntegritySHA1 IkeIntegrity = "SHA1"
954	// IkeIntegritySHA256 ...
955	IkeIntegritySHA256 IkeIntegrity = "SHA256"
956	// IkeIntegritySHA384 ...
957	IkeIntegritySHA384 IkeIntegrity = "SHA384"
958)
959
960// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
961func PossibleIkeIntegrityValues() []IkeIntegrity {
962	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
963}
964
965// IPAllocationMethod enumerates the values for ip allocation method.
966type IPAllocationMethod string
967
968const (
969	// Dynamic ...
970	Dynamic IPAllocationMethod = "Dynamic"
971	// Static ...
972	Static IPAllocationMethod = "Static"
973)
974
975// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
976func PossibleIPAllocationMethodValues() []IPAllocationMethod {
977	return []IPAllocationMethod{Dynamic, Static}
978}
979
980// IPFlowProtocol enumerates the values for ip flow protocol.
981type IPFlowProtocol string
982
983const (
984	// IPFlowProtocolTCP ...
985	IPFlowProtocolTCP IPFlowProtocol = "TCP"
986	// IPFlowProtocolUDP ...
987	IPFlowProtocolUDP IPFlowProtocol = "UDP"
988)
989
990// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
991func PossibleIPFlowProtocolValues() []IPFlowProtocol {
992	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
993}
994
995// IpsecEncryption enumerates the values for ipsec encryption.
996type IpsecEncryption string
997
998const (
999	// IpsecEncryptionAES128 ...
1000	IpsecEncryptionAES128 IpsecEncryption = "AES128"
1001	// IpsecEncryptionAES192 ...
1002	IpsecEncryptionAES192 IpsecEncryption = "AES192"
1003	// IpsecEncryptionAES256 ...
1004	IpsecEncryptionAES256 IpsecEncryption = "AES256"
1005	// IpsecEncryptionDES ...
1006	IpsecEncryptionDES IpsecEncryption = "DES"
1007	// IpsecEncryptionDES3 ...
1008	IpsecEncryptionDES3 IpsecEncryption = "DES3"
1009	// IpsecEncryptionGCMAES128 ...
1010	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
1011	// IpsecEncryptionGCMAES192 ...
1012	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
1013	// IpsecEncryptionGCMAES256 ...
1014	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
1015	// IpsecEncryptionNone ...
1016	IpsecEncryptionNone IpsecEncryption = "None"
1017)
1018
1019// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
1020func PossibleIpsecEncryptionValues() []IpsecEncryption {
1021	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
1022}
1023
1024// IpsecIntegrity enumerates the values for ipsec integrity.
1025type IpsecIntegrity string
1026
1027const (
1028	// IpsecIntegrityGCMAES128 ...
1029	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
1030	// IpsecIntegrityGCMAES192 ...
1031	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
1032	// IpsecIntegrityGCMAES256 ...
1033	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
1034	// IpsecIntegrityMD5 ...
1035	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
1036	// IpsecIntegritySHA1 ...
1037	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
1038	// IpsecIntegritySHA256 ...
1039	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
1040)
1041
1042// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
1043func PossibleIpsecIntegrityValues() []IpsecIntegrity {
1044	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
1045}
1046
1047// IPVersion enumerates the values for ip version.
1048type IPVersion string
1049
1050const (
1051	// IPv4 ...
1052	IPv4 IPVersion = "IPv4"
1053	// IPv6 ...
1054	IPv6 IPVersion = "IPv6"
1055)
1056
1057// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
1058func PossibleIPVersionValues() []IPVersion {
1059	return []IPVersion{IPv4, IPv6}
1060}
1061
1062// IssueType enumerates the values for issue type.
1063type IssueType string
1064
1065const (
1066	// IssueTypeAgentStopped ...
1067	IssueTypeAgentStopped IssueType = "AgentStopped"
1068	// IssueTypeDNSResolution ...
1069	IssueTypeDNSResolution IssueType = "DnsResolution"
1070	// IssueTypeGuestFirewall ...
1071	IssueTypeGuestFirewall IssueType = "GuestFirewall"
1072	// IssueTypeNetworkSecurityRule ...
1073	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
1074	// IssueTypePlatform ...
1075	IssueTypePlatform IssueType = "Platform"
1076	// IssueTypePortThrottled ...
1077	IssueTypePortThrottled IssueType = "PortThrottled"
1078	// IssueTypeSocketBind ...
1079	IssueTypeSocketBind IssueType = "SocketBind"
1080	// IssueTypeUnknown ...
1081	IssueTypeUnknown IssueType = "Unknown"
1082	// IssueTypeUserDefinedRoute ...
1083	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
1084)
1085
1086// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
1087func PossibleIssueTypeValues() []IssueType {
1088	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
1089}
1090
1091// LoadBalancerOutboundRuleProtocol enumerates the values for load balancer outbound rule protocol.
1092type LoadBalancerOutboundRuleProtocol string
1093
1094const (
1095	// LoadBalancerOutboundRuleProtocolAll ...
1096	LoadBalancerOutboundRuleProtocolAll LoadBalancerOutboundRuleProtocol = "All"
1097	// LoadBalancerOutboundRuleProtocolTCP ...
1098	LoadBalancerOutboundRuleProtocolTCP LoadBalancerOutboundRuleProtocol = "Tcp"
1099	// LoadBalancerOutboundRuleProtocolUDP ...
1100	LoadBalancerOutboundRuleProtocolUDP LoadBalancerOutboundRuleProtocol = "Udp"
1101)
1102
1103// PossibleLoadBalancerOutboundRuleProtocolValues returns an array of possible values for the LoadBalancerOutboundRuleProtocol const type.
1104func PossibleLoadBalancerOutboundRuleProtocolValues() []LoadBalancerOutboundRuleProtocol {
1105	return []LoadBalancerOutboundRuleProtocol{LoadBalancerOutboundRuleProtocolAll, LoadBalancerOutboundRuleProtocolTCP, LoadBalancerOutboundRuleProtocolUDP}
1106}
1107
1108// LoadBalancerSkuName enumerates the values for load balancer sku name.
1109type LoadBalancerSkuName string
1110
1111const (
1112	// LoadBalancerSkuNameBasic ...
1113	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
1114	// LoadBalancerSkuNameStandard ...
1115	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
1116)
1117
1118// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
1119func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
1120	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
1121}
1122
1123// LoadDistribution enumerates the values for load distribution.
1124type LoadDistribution string
1125
1126const (
1127	// LoadDistributionDefault ...
1128	LoadDistributionDefault LoadDistribution = "Default"
1129	// LoadDistributionSourceIP ...
1130	LoadDistributionSourceIP LoadDistribution = "SourceIP"
1131	// LoadDistributionSourceIPProtocol ...
1132	LoadDistributionSourceIPProtocol LoadDistribution = "SourceIPProtocol"
1133)
1134
1135// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
1136func PossibleLoadDistributionValues() []LoadDistribution {
1137	return []LoadDistribution{LoadDistributionDefault, LoadDistributionSourceIP, LoadDistributionSourceIPProtocol}
1138}
1139
1140// NatGatewaySkuName enumerates the values for nat gateway sku name.
1141type NatGatewaySkuName string
1142
1143const (
1144	// Standard ...
1145	Standard NatGatewaySkuName = "Standard"
1146)
1147
1148// PossibleNatGatewaySkuNameValues returns an array of possible values for the NatGatewaySkuName const type.
1149func PossibleNatGatewaySkuNameValues() []NatGatewaySkuName {
1150	return []NatGatewaySkuName{Standard}
1151}
1152
1153// NextHopType enumerates the values for next hop type.
1154type NextHopType string
1155
1156const (
1157	// NextHopTypeHyperNetGateway ...
1158	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
1159	// NextHopTypeInternet ...
1160	NextHopTypeInternet NextHopType = "Internet"
1161	// NextHopTypeNone ...
1162	NextHopTypeNone NextHopType = "None"
1163	// NextHopTypeVirtualAppliance ...
1164	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
1165	// NextHopTypeVirtualNetworkGateway ...
1166	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
1167	// NextHopTypeVnetLocal ...
1168	NextHopTypeVnetLocal NextHopType = "VnetLocal"
1169)
1170
1171// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
1172func PossibleNextHopTypeValues() []NextHopType {
1173	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
1174}
1175
1176// OfficeTrafficCategory enumerates the values for office traffic category.
1177type OfficeTrafficCategory string
1178
1179const (
1180	// OfficeTrafficCategoryAll ...
1181	OfficeTrafficCategoryAll OfficeTrafficCategory = "All"
1182	// OfficeTrafficCategoryNone ...
1183	OfficeTrafficCategoryNone OfficeTrafficCategory = "None"
1184	// OfficeTrafficCategoryOptimize ...
1185	OfficeTrafficCategoryOptimize OfficeTrafficCategory = "Optimize"
1186	// OfficeTrafficCategoryOptimizeAndAllow ...
1187	OfficeTrafficCategoryOptimizeAndAllow OfficeTrafficCategory = "OptimizeAndAllow"
1188)
1189
1190// PossibleOfficeTrafficCategoryValues returns an array of possible values for the OfficeTrafficCategory const type.
1191func PossibleOfficeTrafficCategoryValues() []OfficeTrafficCategory {
1192	return []OfficeTrafficCategory{OfficeTrafficCategoryAll, OfficeTrafficCategoryNone, OfficeTrafficCategoryOptimize, OfficeTrafficCategoryOptimizeAndAllow}
1193}
1194
1195// OperationStatus enumerates the values for operation status.
1196type OperationStatus string
1197
1198const (
1199	// OperationStatusFailed ...
1200	OperationStatusFailed OperationStatus = "Failed"
1201	// OperationStatusInProgress ...
1202	OperationStatusInProgress OperationStatus = "InProgress"
1203	// OperationStatusSucceeded ...
1204	OperationStatusSucceeded OperationStatus = "Succeeded"
1205)
1206
1207// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
1208func PossibleOperationStatusValues() []OperationStatus {
1209	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
1210}
1211
1212// Origin enumerates the values for origin.
1213type Origin string
1214
1215const (
1216	// OriginInbound ...
1217	OriginInbound Origin = "Inbound"
1218	// OriginLocal ...
1219	OriginLocal Origin = "Local"
1220	// OriginOutbound ...
1221	OriginOutbound Origin = "Outbound"
1222)
1223
1224// PossibleOriginValues returns an array of possible values for the Origin const type.
1225func PossibleOriginValues() []Origin {
1226	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
1227}
1228
1229// PcError enumerates the values for pc error.
1230type PcError string
1231
1232const (
1233	// AgentStopped ...
1234	AgentStopped PcError = "AgentStopped"
1235	// CaptureFailed ...
1236	CaptureFailed PcError = "CaptureFailed"
1237	// InternalError ...
1238	InternalError PcError = "InternalError"
1239	// LocalFileFailed ...
1240	LocalFileFailed PcError = "LocalFileFailed"
1241	// StorageFailed ...
1242	StorageFailed PcError = "StorageFailed"
1243)
1244
1245// PossiblePcErrorValues returns an array of possible values for the PcError const type.
1246func PossiblePcErrorValues() []PcError {
1247	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
1248}
1249
1250// PcProtocol enumerates the values for pc protocol.
1251type PcProtocol string
1252
1253const (
1254	// PcProtocolAny ...
1255	PcProtocolAny PcProtocol = "Any"
1256	// PcProtocolTCP ...
1257	PcProtocolTCP PcProtocol = "TCP"
1258	// PcProtocolUDP ...
1259	PcProtocolUDP PcProtocol = "UDP"
1260)
1261
1262// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
1263func PossiblePcProtocolValues() []PcProtocol {
1264	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
1265}
1266
1267// PcStatus enumerates the values for pc status.
1268type PcStatus string
1269
1270const (
1271	// PcStatusError ...
1272	PcStatusError PcStatus = "Error"
1273	// PcStatusNotStarted ...
1274	PcStatusNotStarted PcStatus = "NotStarted"
1275	// PcStatusRunning ...
1276	PcStatusRunning PcStatus = "Running"
1277	// PcStatusStopped ...
1278	PcStatusStopped PcStatus = "Stopped"
1279	// PcStatusUnknown ...
1280	PcStatusUnknown PcStatus = "Unknown"
1281)
1282
1283// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
1284func PossiblePcStatusValues() []PcStatus {
1285	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
1286}
1287
1288// PfsGroup enumerates the values for pfs group.
1289type PfsGroup string
1290
1291const (
1292	// PfsGroupECP256 ...
1293	PfsGroupECP256 PfsGroup = "ECP256"
1294	// PfsGroupECP384 ...
1295	PfsGroupECP384 PfsGroup = "ECP384"
1296	// PfsGroupNone ...
1297	PfsGroupNone PfsGroup = "None"
1298	// PfsGroupPFS1 ...
1299	PfsGroupPFS1 PfsGroup = "PFS1"
1300	// PfsGroupPFS14 ...
1301	PfsGroupPFS14 PfsGroup = "PFS14"
1302	// PfsGroupPFS2 ...
1303	PfsGroupPFS2 PfsGroup = "PFS2"
1304	// PfsGroupPFS2048 ...
1305	PfsGroupPFS2048 PfsGroup = "PFS2048"
1306	// PfsGroupPFS24 ...
1307	PfsGroupPFS24 PfsGroup = "PFS24"
1308	// PfsGroupPFSMM ...
1309	PfsGroupPFSMM PfsGroup = "PFSMM"
1310)
1311
1312// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1313func PossiblePfsGroupValues() []PfsGroup {
1314	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1315}
1316
1317// ProbeProtocol enumerates the values for probe protocol.
1318type ProbeProtocol string
1319
1320const (
1321	// ProbeProtocolHTTP ...
1322	ProbeProtocolHTTP ProbeProtocol = "Http"
1323	// ProbeProtocolHTTPS ...
1324	ProbeProtocolHTTPS ProbeProtocol = "Https"
1325	// ProbeProtocolTCP ...
1326	ProbeProtocolTCP ProbeProtocol = "Tcp"
1327)
1328
1329// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1330func PossibleProbeProtocolValues() []ProbeProtocol {
1331	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1332}
1333
1334// ProcessorArchitecture enumerates the values for processor architecture.
1335type ProcessorArchitecture string
1336
1337const (
1338	// Amd64 ...
1339	Amd64 ProcessorArchitecture = "Amd64"
1340	// X86 ...
1341	X86 ProcessorArchitecture = "X86"
1342)
1343
1344// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1345func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1346	return []ProcessorArchitecture{Amd64, X86}
1347}
1348
1349// Protocol enumerates the values for protocol.
1350type Protocol string
1351
1352const (
1353	// ProtocolHTTP ...
1354	ProtocolHTTP Protocol = "Http"
1355	// ProtocolHTTPS ...
1356	ProtocolHTTPS Protocol = "Https"
1357	// ProtocolIcmp ...
1358	ProtocolIcmp Protocol = "Icmp"
1359	// ProtocolTCP ...
1360	ProtocolTCP Protocol = "Tcp"
1361)
1362
1363// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1364func PossibleProtocolValues() []Protocol {
1365	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1366}
1367
1368// ProvisioningState enumerates the values for provisioning state.
1369type ProvisioningState string
1370
1371const (
1372	// Deleting ...
1373	Deleting ProvisioningState = "Deleting"
1374	// Failed ...
1375	Failed ProvisioningState = "Failed"
1376	// Succeeded ...
1377	Succeeded ProvisioningState = "Succeeded"
1378	// Updating ...
1379	Updating ProvisioningState = "Updating"
1380)
1381
1382// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1383func PossibleProvisioningStateValues() []ProvisioningState {
1384	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1385}
1386
1387// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1388type PublicIPAddressSkuName string
1389
1390const (
1391	// PublicIPAddressSkuNameBasic ...
1392	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1393	// PublicIPAddressSkuNameStandard ...
1394	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1395)
1396
1397// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1398func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1399	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1400}
1401
1402// PublicIPPrefixSkuName enumerates the values for public ip prefix sku name.
1403type PublicIPPrefixSkuName string
1404
1405const (
1406	// PublicIPPrefixSkuNameStandard ...
1407	PublicIPPrefixSkuNameStandard PublicIPPrefixSkuName = "Standard"
1408)
1409
1410// PossiblePublicIPPrefixSkuNameValues returns an array of possible values for the PublicIPPrefixSkuName const type.
1411func PossiblePublicIPPrefixSkuNameValues() []PublicIPPrefixSkuName {
1412	return []PublicIPPrefixSkuName{PublicIPPrefixSkuNameStandard}
1413}
1414
1415// ResourceIdentityType enumerates the values for resource identity type.
1416type ResourceIdentityType string
1417
1418const (
1419	// ResourceIdentityTypeNone ...
1420	ResourceIdentityTypeNone ResourceIdentityType = "None"
1421	// ResourceIdentityTypeSystemAssigned ...
1422	ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned"
1423	// ResourceIdentityTypeSystemAssignedUserAssigned ...
1424	ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned"
1425	// ResourceIdentityTypeUserAssigned ...
1426	ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned"
1427)
1428
1429// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type.
1430func PossibleResourceIdentityTypeValues() []ResourceIdentityType {
1431	return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned}
1432}
1433
1434// RouteNextHopType enumerates the values for route next hop type.
1435type RouteNextHopType string
1436
1437const (
1438	// RouteNextHopTypeInternet ...
1439	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1440	// RouteNextHopTypeNone ...
1441	RouteNextHopTypeNone RouteNextHopType = "None"
1442	// RouteNextHopTypeVirtualAppliance ...
1443	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1444	// RouteNextHopTypeVirtualNetworkGateway ...
1445	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1446	// RouteNextHopTypeVnetLocal ...
1447	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1448)
1449
1450// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1451func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1452	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1453}
1454
1455// SecurityRuleAccess enumerates the values for security rule access.
1456type SecurityRuleAccess string
1457
1458const (
1459	// SecurityRuleAccessAllow ...
1460	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1461	// SecurityRuleAccessDeny ...
1462	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1463)
1464
1465// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1466func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1467	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1468}
1469
1470// SecurityRuleDirection enumerates the values for security rule direction.
1471type SecurityRuleDirection string
1472
1473const (
1474	// SecurityRuleDirectionInbound ...
1475	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1476	// SecurityRuleDirectionOutbound ...
1477	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1478)
1479
1480// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1481func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1482	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1483}
1484
1485// SecurityRuleProtocol enumerates the values for security rule protocol.
1486type SecurityRuleProtocol string
1487
1488const (
1489	// SecurityRuleProtocolAsterisk ...
1490	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1491	// SecurityRuleProtocolEsp ...
1492	SecurityRuleProtocolEsp SecurityRuleProtocol = "Esp"
1493	// SecurityRuleProtocolIcmp ...
1494	SecurityRuleProtocolIcmp SecurityRuleProtocol = "Icmp"
1495	// SecurityRuleProtocolTCP ...
1496	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1497	// SecurityRuleProtocolUDP ...
1498	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1499)
1500
1501// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1502func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1503	return []SecurityRuleProtocol{SecurityRuleProtocolAsterisk, SecurityRuleProtocolEsp, SecurityRuleProtocolIcmp, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1504}
1505
1506// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1507type ServiceProviderProvisioningState string
1508
1509const (
1510	// Deprovisioning ...
1511	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1512	// NotProvisioned ...
1513	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1514	// Provisioned ...
1515	Provisioned ServiceProviderProvisioningState = "Provisioned"
1516	// Provisioning ...
1517	Provisioning ServiceProviderProvisioningState = "Provisioning"
1518)
1519
1520// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1521func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1522	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1523}
1524
1525// Severity enumerates the values for severity.
1526type Severity string
1527
1528const (
1529	// SeverityError ...
1530	SeverityError Severity = "Error"
1531	// SeverityWarning ...
1532	SeverityWarning Severity = "Warning"
1533)
1534
1535// PossibleSeverityValues returns an array of possible values for the Severity const type.
1536func PossibleSeverityValues() []Severity {
1537	return []Severity{SeverityError, SeverityWarning}
1538}
1539
1540// TransportProtocol enumerates the values for transport protocol.
1541type TransportProtocol string
1542
1543const (
1544	// TransportProtocolAll ...
1545	TransportProtocolAll TransportProtocol = "All"
1546	// TransportProtocolTCP ...
1547	TransportProtocolTCP TransportProtocol = "Tcp"
1548	// TransportProtocolUDP ...
1549	TransportProtocolUDP TransportProtocol = "Udp"
1550)
1551
1552// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1553func PossibleTransportProtocolValues() []TransportProtocol {
1554	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1555}
1556
1557// TunnelConnectionStatus enumerates the values for tunnel connection status.
1558type TunnelConnectionStatus string
1559
1560const (
1561	// TunnelConnectionStatusConnected ...
1562	TunnelConnectionStatusConnected TunnelConnectionStatus = "Connected"
1563	// TunnelConnectionStatusConnecting ...
1564	TunnelConnectionStatusConnecting TunnelConnectionStatus = "Connecting"
1565	// TunnelConnectionStatusNotConnected ...
1566	TunnelConnectionStatusNotConnected TunnelConnectionStatus = "NotConnected"
1567	// TunnelConnectionStatusUnknown ...
1568	TunnelConnectionStatusUnknown TunnelConnectionStatus = "Unknown"
1569)
1570
1571// PossibleTunnelConnectionStatusValues returns an array of possible values for the TunnelConnectionStatus const type.
1572func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus {
1573	return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown}
1574}
1575
1576// VerbosityLevel enumerates the values for verbosity level.
1577type VerbosityLevel string
1578
1579const (
1580	// Full ...
1581	Full VerbosityLevel = "Full"
1582	// Minimum ...
1583	Minimum VerbosityLevel = "Minimum"
1584	// Normal ...
1585	Normal VerbosityLevel = "Normal"
1586)
1587
1588// PossibleVerbosityLevelValues returns an array of possible values for the VerbosityLevel const type.
1589func PossibleVerbosityLevelValues() []VerbosityLevel {
1590	return []VerbosityLevel{Full, Minimum, Normal}
1591}
1592
1593// VirtualNetworkGatewayConnectionProtocol enumerates the values for virtual network gateway connection
1594// protocol.
1595type VirtualNetworkGatewayConnectionProtocol string
1596
1597const (
1598	// IKEv1 ...
1599	IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1"
1600	// IKEv2 ...
1601	IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2"
1602)
1603
1604// PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type.
1605func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol {
1606	return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2}
1607}
1608
1609// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1610type VirtualNetworkGatewayConnectionStatus string
1611
1612const (
1613	// VirtualNetworkGatewayConnectionStatusConnected ...
1614	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1615	// VirtualNetworkGatewayConnectionStatusConnecting ...
1616	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1617	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1618	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1619	// VirtualNetworkGatewayConnectionStatusUnknown ...
1620	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1621)
1622
1623// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1624func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1625	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1626}
1627
1628// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1629type VirtualNetworkGatewayConnectionType string
1630
1631const (
1632	// ExpressRoute ...
1633	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1634	// IPsec ...
1635	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1636	// Vnet2Vnet ...
1637	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1638	// VPNClient ...
1639	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1640)
1641
1642// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1643func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1644	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1645}
1646
1647// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1648type VirtualNetworkGatewaySkuName string
1649
1650const (
1651	// VirtualNetworkGatewaySkuNameBasic ...
1652	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1653	// VirtualNetworkGatewaySkuNameErGw1AZ ...
1654	VirtualNetworkGatewaySkuNameErGw1AZ VirtualNetworkGatewaySkuName = "ErGw1AZ"
1655	// VirtualNetworkGatewaySkuNameErGw2AZ ...
1656	VirtualNetworkGatewaySkuNameErGw2AZ VirtualNetworkGatewaySkuName = "ErGw2AZ"
1657	// VirtualNetworkGatewaySkuNameErGw3AZ ...
1658	VirtualNetworkGatewaySkuNameErGw3AZ VirtualNetworkGatewaySkuName = "ErGw3AZ"
1659	// VirtualNetworkGatewaySkuNameHighPerformance ...
1660	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1661	// VirtualNetworkGatewaySkuNameStandard ...
1662	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1663	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1664	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1665	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1666	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1667	// VirtualNetworkGatewaySkuNameVpnGw1AZ ...
1668	VirtualNetworkGatewaySkuNameVpnGw1AZ VirtualNetworkGatewaySkuName = "VpnGw1AZ"
1669	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1670	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1671	// VirtualNetworkGatewaySkuNameVpnGw2AZ ...
1672	VirtualNetworkGatewaySkuNameVpnGw2AZ VirtualNetworkGatewaySkuName = "VpnGw2AZ"
1673	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1674	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1675	// VirtualNetworkGatewaySkuNameVpnGw3AZ ...
1676	VirtualNetworkGatewaySkuNameVpnGw3AZ VirtualNetworkGatewaySkuName = "VpnGw3AZ"
1677)
1678
1679// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
1680func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
1681	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameErGw1AZ, VirtualNetworkGatewaySkuNameErGw2AZ, VirtualNetworkGatewaySkuNameErGw3AZ, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw1AZ, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw2AZ, VirtualNetworkGatewaySkuNameVpnGw3, VirtualNetworkGatewaySkuNameVpnGw3AZ}
1682}
1683
1684// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
1685type VirtualNetworkGatewaySkuTier string
1686
1687const (
1688	// VirtualNetworkGatewaySkuTierBasic ...
1689	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
1690	// VirtualNetworkGatewaySkuTierErGw1AZ ...
1691	VirtualNetworkGatewaySkuTierErGw1AZ VirtualNetworkGatewaySkuTier = "ErGw1AZ"
1692	// VirtualNetworkGatewaySkuTierErGw2AZ ...
1693	VirtualNetworkGatewaySkuTierErGw2AZ VirtualNetworkGatewaySkuTier = "ErGw2AZ"
1694	// VirtualNetworkGatewaySkuTierErGw3AZ ...
1695	VirtualNetworkGatewaySkuTierErGw3AZ VirtualNetworkGatewaySkuTier = "ErGw3AZ"
1696	// VirtualNetworkGatewaySkuTierHighPerformance ...
1697	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
1698	// VirtualNetworkGatewaySkuTierStandard ...
1699	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
1700	// VirtualNetworkGatewaySkuTierUltraPerformance ...
1701	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
1702	// VirtualNetworkGatewaySkuTierVpnGw1 ...
1703	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
1704	// VirtualNetworkGatewaySkuTierVpnGw1AZ ...
1705	VirtualNetworkGatewaySkuTierVpnGw1AZ VirtualNetworkGatewaySkuTier = "VpnGw1AZ"
1706	// VirtualNetworkGatewaySkuTierVpnGw2 ...
1707	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
1708	// VirtualNetworkGatewaySkuTierVpnGw2AZ ...
1709	VirtualNetworkGatewaySkuTierVpnGw2AZ VirtualNetworkGatewaySkuTier = "VpnGw2AZ"
1710	// VirtualNetworkGatewaySkuTierVpnGw3 ...
1711	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
1712	// VirtualNetworkGatewaySkuTierVpnGw3AZ ...
1713	VirtualNetworkGatewaySkuTierVpnGw3AZ VirtualNetworkGatewaySkuTier = "VpnGw3AZ"
1714)
1715
1716// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
1717func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
1718	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierErGw1AZ, VirtualNetworkGatewaySkuTierErGw2AZ, VirtualNetworkGatewaySkuTierErGw3AZ, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw1AZ, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw2AZ, VirtualNetworkGatewaySkuTierVpnGw3, VirtualNetworkGatewaySkuTierVpnGw3AZ}
1719}
1720
1721// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
1722type VirtualNetworkGatewayType string
1723
1724const (
1725	// VirtualNetworkGatewayTypeExpressRoute ...
1726	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
1727	// VirtualNetworkGatewayTypeVpn ...
1728	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
1729)
1730
1731// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
1732func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
1733	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
1734}
1735
1736// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
1737type VirtualNetworkPeeringState string
1738
1739const (
1740	// VirtualNetworkPeeringStateConnected ...
1741	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
1742	// VirtualNetworkPeeringStateDisconnected ...
1743	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
1744	// VirtualNetworkPeeringStateInitiated ...
1745	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
1746)
1747
1748// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
1749func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
1750	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
1751}
1752
1753// VirtualWanSecurityProviderType enumerates the values for virtual wan security provider type.
1754type VirtualWanSecurityProviderType string
1755
1756const (
1757	// External ...
1758	External VirtualWanSecurityProviderType = "External"
1759	// Native ...
1760	Native VirtualWanSecurityProviderType = "Native"
1761)
1762
1763// PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type.
1764func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType {
1765	return []VirtualWanSecurityProviderType{External, Native}
1766}
1767
1768// VpnClientProtocol enumerates the values for vpn client protocol.
1769type VpnClientProtocol string
1770
1771const (
1772	// IkeV2 ...
1773	IkeV2 VpnClientProtocol = "IkeV2"
1774	// OpenVPN ...
1775	OpenVPN VpnClientProtocol = "OpenVPN"
1776	// SSTP ...
1777	SSTP VpnClientProtocol = "SSTP"
1778)
1779
1780// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
1781func PossibleVpnClientProtocolValues() []VpnClientProtocol {
1782	return []VpnClientProtocol{IkeV2, OpenVPN, SSTP}
1783}
1784
1785// VpnConnectionStatus enumerates the values for vpn connection status.
1786type VpnConnectionStatus string
1787
1788const (
1789	// VpnConnectionStatusConnected ...
1790	VpnConnectionStatusConnected VpnConnectionStatus = "Connected"
1791	// VpnConnectionStatusConnecting ...
1792	VpnConnectionStatusConnecting VpnConnectionStatus = "Connecting"
1793	// VpnConnectionStatusNotConnected ...
1794	VpnConnectionStatusNotConnected VpnConnectionStatus = "NotConnected"
1795	// VpnConnectionStatusUnknown ...
1796	VpnConnectionStatusUnknown VpnConnectionStatus = "Unknown"
1797)
1798
1799// PossibleVpnConnectionStatusValues returns an array of possible values for the VpnConnectionStatus const type.
1800func PossibleVpnConnectionStatusValues() []VpnConnectionStatus {
1801	return []VpnConnectionStatus{VpnConnectionStatusConnected, VpnConnectionStatusConnecting, VpnConnectionStatusNotConnected, VpnConnectionStatusUnknown}
1802}
1803
1804// VpnGatewayTunnelingProtocol enumerates the values for vpn gateway tunneling protocol.
1805type VpnGatewayTunnelingProtocol string
1806
1807const (
1808	// VpnGatewayTunnelingProtocolIkeV2 ...
1809	VpnGatewayTunnelingProtocolIkeV2 VpnGatewayTunnelingProtocol = "IkeV2"
1810	// VpnGatewayTunnelingProtocolOpenVPN ...
1811	VpnGatewayTunnelingProtocolOpenVPN VpnGatewayTunnelingProtocol = "OpenVPN"
1812)
1813
1814// PossibleVpnGatewayTunnelingProtocolValues returns an array of possible values for the VpnGatewayTunnelingProtocol const type.
1815func PossibleVpnGatewayTunnelingProtocolValues() []VpnGatewayTunnelingProtocol {
1816	return []VpnGatewayTunnelingProtocol{VpnGatewayTunnelingProtocolIkeV2, VpnGatewayTunnelingProtocolOpenVPN}
1817}
1818
1819// VpnType enumerates the values for vpn type.
1820type VpnType string
1821
1822const (
1823	// PolicyBased ...
1824	PolicyBased VpnType = "PolicyBased"
1825	// RouteBased ...
1826	RouteBased VpnType = "RouteBased"
1827)
1828
1829// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
1830func PossibleVpnTypeValues() []VpnType {
1831	return []VpnType{PolicyBased, RouteBased}
1832}
1833
1834// WebApplicationFirewallAction enumerates the values for web application firewall action.
1835type WebApplicationFirewallAction string
1836
1837const (
1838	// WebApplicationFirewallActionAllow ...
1839	WebApplicationFirewallActionAllow WebApplicationFirewallAction = "Allow"
1840	// WebApplicationFirewallActionBlock ...
1841	WebApplicationFirewallActionBlock WebApplicationFirewallAction = "Block"
1842	// WebApplicationFirewallActionLog ...
1843	WebApplicationFirewallActionLog WebApplicationFirewallAction = "Log"
1844)
1845
1846// PossibleWebApplicationFirewallActionValues returns an array of possible values for the WebApplicationFirewallAction const type.
1847func PossibleWebApplicationFirewallActionValues() []WebApplicationFirewallAction {
1848	return []WebApplicationFirewallAction{WebApplicationFirewallActionAllow, WebApplicationFirewallActionBlock, WebApplicationFirewallActionLog}
1849}
1850
1851// WebApplicationFirewallEnabledState enumerates the values for web application firewall enabled state.
1852type WebApplicationFirewallEnabledState string
1853
1854const (
1855	// WebApplicationFirewallEnabledStateDisabled ...
1856	WebApplicationFirewallEnabledStateDisabled WebApplicationFirewallEnabledState = "Disabled"
1857	// WebApplicationFirewallEnabledStateEnabled ...
1858	WebApplicationFirewallEnabledStateEnabled WebApplicationFirewallEnabledState = "Enabled"
1859)
1860
1861// PossibleWebApplicationFirewallEnabledStateValues returns an array of possible values for the WebApplicationFirewallEnabledState const type.
1862func PossibleWebApplicationFirewallEnabledStateValues() []WebApplicationFirewallEnabledState {
1863	return []WebApplicationFirewallEnabledState{WebApplicationFirewallEnabledStateDisabled, WebApplicationFirewallEnabledStateEnabled}
1864}
1865
1866// WebApplicationFirewallMatchVariable enumerates the values for web application firewall match variable.
1867type WebApplicationFirewallMatchVariable string
1868
1869const (
1870	// PostArgs ...
1871	PostArgs WebApplicationFirewallMatchVariable = "PostArgs"
1872	// QueryString ...
1873	QueryString WebApplicationFirewallMatchVariable = "QueryString"
1874	// RemoteAddr ...
1875	RemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr"
1876	// RequestBody ...
1877	RequestBody WebApplicationFirewallMatchVariable = "RequestBody"
1878	// RequestCookies ...
1879	RequestCookies WebApplicationFirewallMatchVariable = "RequestCookies"
1880	// RequestHeaders ...
1881	RequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders"
1882	// RequestMethod ...
1883	RequestMethod WebApplicationFirewallMatchVariable = "RequestMethod"
1884	// RequestURI ...
1885	RequestURI WebApplicationFirewallMatchVariable = "RequestUri"
1886)
1887
1888// PossibleWebApplicationFirewallMatchVariableValues returns an array of possible values for the WebApplicationFirewallMatchVariable const type.
1889func PossibleWebApplicationFirewallMatchVariableValues() []WebApplicationFirewallMatchVariable {
1890	return []WebApplicationFirewallMatchVariable{PostArgs, QueryString, RemoteAddr, RequestBody, RequestCookies, RequestHeaders, RequestMethod, RequestURI}
1891}
1892
1893// WebApplicationFirewallMode enumerates the values for web application firewall mode.
1894type WebApplicationFirewallMode string
1895
1896const (
1897	// WebApplicationFirewallModeDetection ...
1898	WebApplicationFirewallModeDetection WebApplicationFirewallMode = "Detection"
1899	// WebApplicationFirewallModePrevention ...
1900	WebApplicationFirewallModePrevention WebApplicationFirewallMode = "Prevention"
1901)
1902
1903// PossibleWebApplicationFirewallModeValues returns an array of possible values for the WebApplicationFirewallMode const type.
1904func PossibleWebApplicationFirewallModeValues() []WebApplicationFirewallMode {
1905	return []WebApplicationFirewallMode{WebApplicationFirewallModeDetection, WebApplicationFirewallModePrevention}
1906}
1907
1908// WebApplicationFirewallOperator enumerates the values for web application firewall operator.
1909type WebApplicationFirewallOperator string
1910
1911const (
1912	// WebApplicationFirewallOperatorBeginsWith ...
1913	WebApplicationFirewallOperatorBeginsWith WebApplicationFirewallOperator = "BeginsWith"
1914	// WebApplicationFirewallOperatorContains ...
1915	WebApplicationFirewallOperatorContains WebApplicationFirewallOperator = "Contains"
1916	// WebApplicationFirewallOperatorEndsWith ...
1917	WebApplicationFirewallOperatorEndsWith WebApplicationFirewallOperator = "EndsWith"
1918	// WebApplicationFirewallOperatorEqual ...
1919	WebApplicationFirewallOperatorEqual WebApplicationFirewallOperator = "Equal"
1920	// WebApplicationFirewallOperatorGreaterThan ...
1921	WebApplicationFirewallOperatorGreaterThan WebApplicationFirewallOperator = "GreaterThan"
1922	// WebApplicationFirewallOperatorGreaterThanOrEqual ...
1923	WebApplicationFirewallOperatorGreaterThanOrEqual WebApplicationFirewallOperator = "GreaterThanOrEqual"
1924	// WebApplicationFirewallOperatorIPMatch ...
1925	WebApplicationFirewallOperatorIPMatch WebApplicationFirewallOperator = "IPMatch"
1926	// WebApplicationFirewallOperatorLessThan ...
1927	WebApplicationFirewallOperatorLessThan WebApplicationFirewallOperator = "LessThan"
1928	// WebApplicationFirewallOperatorLessThanOrEqual ...
1929	WebApplicationFirewallOperatorLessThanOrEqual WebApplicationFirewallOperator = "LessThanOrEqual"
1930	// WebApplicationFirewallOperatorRegex ...
1931	WebApplicationFirewallOperatorRegex WebApplicationFirewallOperator = "Regex"
1932)
1933
1934// PossibleWebApplicationFirewallOperatorValues returns an array of possible values for the WebApplicationFirewallOperator const type.
1935func PossibleWebApplicationFirewallOperatorValues() []WebApplicationFirewallOperator {
1936	return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex}
1937}
1938
1939// WebApplicationFirewallPolicyResourceState enumerates the values for web application firewall policy resource
1940// state.
1941type WebApplicationFirewallPolicyResourceState string
1942
1943const (
1944	// WebApplicationFirewallPolicyResourceStateCreating ...
1945	WebApplicationFirewallPolicyResourceStateCreating WebApplicationFirewallPolicyResourceState = "Creating"
1946	// WebApplicationFirewallPolicyResourceStateDeleting ...
1947	WebApplicationFirewallPolicyResourceStateDeleting WebApplicationFirewallPolicyResourceState = "Deleting"
1948	// WebApplicationFirewallPolicyResourceStateDisabled ...
1949	WebApplicationFirewallPolicyResourceStateDisabled WebApplicationFirewallPolicyResourceState = "Disabled"
1950	// WebApplicationFirewallPolicyResourceStateDisabling ...
1951	WebApplicationFirewallPolicyResourceStateDisabling WebApplicationFirewallPolicyResourceState = "Disabling"
1952	// WebApplicationFirewallPolicyResourceStateEnabled ...
1953	WebApplicationFirewallPolicyResourceStateEnabled WebApplicationFirewallPolicyResourceState = "Enabled"
1954	// WebApplicationFirewallPolicyResourceStateEnabling ...
1955	WebApplicationFirewallPolicyResourceStateEnabling WebApplicationFirewallPolicyResourceState = "Enabling"
1956)
1957
1958// PossibleWebApplicationFirewallPolicyResourceStateValues returns an array of possible values for the WebApplicationFirewallPolicyResourceState const type.
1959func PossibleWebApplicationFirewallPolicyResourceStateValues() []WebApplicationFirewallPolicyResourceState {
1960	return []WebApplicationFirewallPolicyResourceState{WebApplicationFirewallPolicyResourceStateCreating, WebApplicationFirewallPolicyResourceStateDeleting, WebApplicationFirewallPolicyResourceStateDisabled, WebApplicationFirewallPolicyResourceStateDisabling, WebApplicationFirewallPolicyResourceStateEnabled, WebApplicationFirewallPolicyResourceStateEnabling}
1961}
1962
1963// WebApplicationFirewallRuleType enumerates the values for web application firewall rule type.
1964type WebApplicationFirewallRuleType string
1965
1966const (
1967	// WebApplicationFirewallRuleTypeInvalid ...
1968	WebApplicationFirewallRuleTypeInvalid WebApplicationFirewallRuleType = "Invalid"
1969	// WebApplicationFirewallRuleTypeMatchRule ...
1970	WebApplicationFirewallRuleTypeMatchRule WebApplicationFirewallRuleType = "MatchRule"
1971)
1972
1973// PossibleWebApplicationFirewallRuleTypeValues returns an array of possible values for the WebApplicationFirewallRuleType const type.
1974func PossibleWebApplicationFirewallRuleTypeValues() []WebApplicationFirewallRuleType {
1975	return []WebApplicationFirewallRuleType{WebApplicationFirewallRuleTypeInvalid, WebApplicationFirewallRuleTypeMatchRule}
1976}
1977
1978// WebApplicationFirewallTransform enumerates the values for web application firewall transform.
1979type WebApplicationFirewallTransform string
1980
1981const (
1982	// HTMLEntityDecode ...
1983	HTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode"
1984	// Lowercase ...
1985	Lowercase WebApplicationFirewallTransform = "Lowercase"
1986	// RemoveNulls ...
1987	RemoveNulls WebApplicationFirewallTransform = "RemoveNulls"
1988	// Trim ...
1989	Trim WebApplicationFirewallTransform = "Trim"
1990	// URLDecode ...
1991	URLDecode WebApplicationFirewallTransform = "UrlDecode"
1992	// URLEncode ...
1993	URLEncode WebApplicationFirewallTransform = "UrlEncode"
1994)
1995
1996// PossibleWebApplicationFirewallTransformValues returns an array of possible values for the WebApplicationFirewallTransform const type.
1997func PossibleWebApplicationFirewallTransformValues() []WebApplicationFirewallTransform {
1998	return []WebApplicationFirewallTransform{HTMLEntityDecode, Lowercase, RemoveNulls, Trim, URLDecode, URLEncode}
1999}
2000
2001// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
2002// virtual network.
2003type AddressSpace struct {
2004	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
2005	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
2006}
2007
2008// ApplicationGateway application gateway resource
2009type ApplicationGateway struct {
2010	autorest.Response `json:"-"`
2011	// ApplicationGatewayPropertiesFormat - Properties of the application gateway.
2012	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
2013	// Etag - A unique read-only string that changes whenever the resource is updated.
2014	Etag *string `json:"etag,omitempty"`
2015	// Zones - A list of availability zones denoting where the resource needs to come from.
2016	Zones *[]string `json:"zones,omitempty"`
2017	// Identity - The identity of the application gateway, if configured.
2018	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
2019	// ID - Resource ID.
2020	ID *string `json:"id,omitempty"`
2021	// Name - READ-ONLY; Resource name.
2022	Name *string `json:"name,omitempty"`
2023	// Type - READ-ONLY; Resource type.
2024	Type *string `json:"type,omitempty"`
2025	// Location - Resource location.
2026	Location *string `json:"location,omitempty"`
2027	// Tags - Resource tags.
2028	Tags map[string]*string `json:"tags"`
2029}
2030
2031// MarshalJSON is the custom marshaler for ApplicationGateway.
2032func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
2033	objectMap := make(map[string]interface{})
2034	if ag.ApplicationGatewayPropertiesFormat != nil {
2035		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
2036	}
2037	if ag.Etag != nil {
2038		objectMap["etag"] = ag.Etag
2039	}
2040	if ag.Zones != nil {
2041		objectMap["zones"] = ag.Zones
2042	}
2043	if ag.Identity != nil {
2044		objectMap["identity"] = ag.Identity
2045	}
2046	if ag.ID != nil {
2047		objectMap["id"] = ag.ID
2048	}
2049	if ag.Location != nil {
2050		objectMap["location"] = ag.Location
2051	}
2052	if ag.Tags != nil {
2053		objectMap["tags"] = ag.Tags
2054	}
2055	return json.Marshal(objectMap)
2056}
2057
2058// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
2059func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
2060	var m map[string]*json.RawMessage
2061	err := json.Unmarshal(body, &m)
2062	if err != nil {
2063		return err
2064	}
2065	for k, v := range m {
2066		switch k {
2067		case "properties":
2068			if v != nil {
2069				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
2070				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
2071				if err != nil {
2072					return err
2073				}
2074				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
2075			}
2076		case "etag":
2077			if v != nil {
2078				var etag string
2079				err = json.Unmarshal(*v, &etag)
2080				if err != nil {
2081					return err
2082				}
2083				ag.Etag = &etag
2084			}
2085		case "zones":
2086			if v != nil {
2087				var zones []string
2088				err = json.Unmarshal(*v, &zones)
2089				if err != nil {
2090					return err
2091				}
2092				ag.Zones = &zones
2093			}
2094		case "identity":
2095			if v != nil {
2096				var identity ManagedServiceIdentity
2097				err = json.Unmarshal(*v, &identity)
2098				if err != nil {
2099					return err
2100				}
2101				ag.Identity = &identity
2102			}
2103		case "id":
2104			if v != nil {
2105				var ID string
2106				err = json.Unmarshal(*v, &ID)
2107				if err != nil {
2108					return err
2109				}
2110				ag.ID = &ID
2111			}
2112		case "name":
2113			if v != nil {
2114				var name string
2115				err = json.Unmarshal(*v, &name)
2116				if err != nil {
2117					return err
2118				}
2119				ag.Name = &name
2120			}
2121		case "type":
2122			if v != nil {
2123				var typeVar string
2124				err = json.Unmarshal(*v, &typeVar)
2125				if err != nil {
2126					return err
2127				}
2128				ag.Type = &typeVar
2129			}
2130		case "location":
2131			if v != nil {
2132				var location string
2133				err = json.Unmarshal(*v, &location)
2134				if err != nil {
2135					return err
2136				}
2137				ag.Location = &location
2138			}
2139		case "tags":
2140			if v != nil {
2141				var tags map[string]*string
2142				err = json.Unmarshal(*v, &tags)
2143				if err != nil {
2144					return err
2145				}
2146				ag.Tags = tags
2147			}
2148		}
2149	}
2150
2151	return nil
2152}
2153
2154// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
2155type ApplicationGatewayAuthenticationCertificate struct {
2156	// ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate.
2157	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
2158	// Name - Name of the authentication certificate that is unique within an Application Gateway.
2159	Name *string `json:"name,omitempty"`
2160	// Etag - A unique read-only string that changes whenever the resource is updated.
2161	Etag *string `json:"etag,omitempty"`
2162	// Type - Type of the resource.
2163	Type *string `json:"type,omitempty"`
2164	// ID - Resource ID.
2165	ID *string `json:"id,omitempty"`
2166}
2167
2168// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
2169func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
2170	objectMap := make(map[string]interface{})
2171	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
2172		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
2173	}
2174	if agac.Name != nil {
2175		objectMap["name"] = agac.Name
2176	}
2177	if agac.Etag != nil {
2178		objectMap["etag"] = agac.Etag
2179	}
2180	if agac.Type != nil {
2181		objectMap["type"] = agac.Type
2182	}
2183	if agac.ID != nil {
2184		objectMap["id"] = agac.ID
2185	}
2186	return json.Marshal(objectMap)
2187}
2188
2189// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
2190func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
2191	var m map[string]*json.RawMessage
2192	err := json.Unmarshal(body, &m)
2193	if err != nil {
2194		return err
2195	}
2196	for k, v := range m {
2197		switch k {
2198		case "properties":
2199			if v != nil {
2200				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
2201				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
2202				if err != nil {
2203					return err
2204				}
2205				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
2206			}
2207		case "name":
2208			if v != nil {
2209				var name string
2210				err = json.Unmarshal(*v, &name)
2211				if err != nil {
2212					return err
2213				}
2214				agac.Name = &name
2215			}
2216		case "etag":
2217			if v != nil {
2218				var etag string
2219				err = json.Unmarshal(*v, &etag)
2220				if err != nil {
2221					return err
2222				}
2223				agac.Etag = &etag
2224			}
2225		case "type":
2226			if v != nil {
2227				var typeVar string
2228				err = json.Unmarshal(*v, &typeVar)
2229				if err != nil {
2230					return err
2231				}
2232				agac.Type = &typeVar
2233			}
2234		case "id":
2235			if v != nil {
2236				var ID string
2237				err = json.Unmarshal(*v, &ID)
2238				if err != nil {
2239					return err
2240				}
2241				agac.ID = &ID
2242			}
2243		}
2244	}
2245
2246	return nil
2247}
2248
2249// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
2250// application gateway.
2251type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
2252	// Data - Certificate public data.
2253	Data *string `json:"data,omitempty"`
2254	// ProvisioningState - Provisioning state of the authentication certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2255	ProvisioningState *string `json:"provisioningState,omitempty"`
2256}
2257
2258// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
2259type ApplicationGatewayAutoscaleConfiguration struct {
2260	// MinCapacity - Lower bound on number of Application Gateway capacity
2261	MinCapacity *int32 `json:"minCapacity,omitempty"`
2262	// MaxCapacity - Upper bound on number of Application Gateway capacity
2263	MaxCapacity *int32 `json:"maxCapacity,omitempty"`
2264}
2265
2266// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
2267// call.
2268type ApplicationGatewayAvailableSslOptions struct {
2269	autorest.Response `json:"-"`
2270	// ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options.
2271	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
2272	// ID - Resource ID.
2273	ID *string `json:"id,omitempty"`
2274	// Name - READ-ONLY; Resource name.
2275	Name *string `json:"name,omitempty"`
2276	// Type - READ-ONLY; Resource type.
2277	Type *string `json:"type,omitempty"`
2278	// Location - Resource location.
2279	Location *string `json:"location,omitempty"`
2280	// Tags - Resource tags.
2281	Tags map[string]*string `json:"tags"`
2282}
2283
2284// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
2285func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
2286	objectMap := make(map[string]interface{})
2287	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
2288		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
2289	}
2290	if agaso.ID != nil {
2291		objectMap["id"] = agaso.ID
2292	}
2293	if agaso.Location != nil {
2294		objectMap["location"] = agaso.Location
2295	}
2296	if agaso.Tags != nil {
2297		objectMap["tags"] = agaso.Tags
2298	}
2299	return json.Marshal(objectMap)
2300}
2301
2302// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
2303func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
2304	var m map[string]*json.RawMessage
2305	err := json.Unmarshal(body, &m)
2306	if err != nil {
2307		return err
2308	}
2309	for k, v := range m {
2310		switch k {
2311		case "properties":
2312			if v != nil {
2313				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
2314				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
2315				if err != nil {
2316					return err
2317				}
2318				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
2319			}
2320		case "id":
2321			if v != nil {
2322				var ID string
2323				err = json.Unmarshal(*v, &ID)
2324				if err != nil {
2325					return err
2326				}
2327				agaso.ID = &ID
2328			}
2329		case "name":
2330			if v != nil {
2331				var name string
2332				err = json.Unmarshal(*v, &name)
2333				if err != nil {
2334					return err
2335				}
2336				agaso.Name = &name
2337			}
2338		case "type":
2339			if v != nil {
2340				var typeVar string
2341				err = json.Unmarshal(*v, &typeVar)
2342				if err != nil {
2343					return err
2344				}
2345				agaso.Type = &typeVar
2346			}
2347		case "location":
2348			if v != nil {
2349				var location string
2350				err = json.Unmarshal(*v, &location)
2351				if err != nil {
2352					return err
2353				}
2354				agaso.Location = &location
2355			}
2356		case "tags":
2357			if v != nil {
2358				var tags map[string]*string
2359				err = json.Unmarshal(*v, &tags)
2360				if err != nil {
2361					return err
2362				}
2363				agaso.Tags = tags
2364			}
2365		}
2366	}
2367
2368	return nil
2369}
2370
2371// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
2372// ApplicationGatewayAvailableSslOptions
2373type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
2374	// PredefinedPolicies - List of available Ssl predefined policy.
2375	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
2376	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
2377	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
2378	// AvailableCipherSuites - List of available Ssl cipher suites.
2379	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
2380	// AvailableProtocols - List of available Ssl protocols.
2381	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
2382}
2383
2384// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
2385// service call.
2386type ApplicationGatewayAvailableSslPredefinedPolicies struct {
2387	autorest.Response `json:"-"`
2388	// Value - List of available Ssl predefined policy.
2389	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
2390	// NextLink - URL to get the next set of results.
2391	NextLink *string `json:"nextLink,omitempty"`
2392}
2393
2394// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
2395// ApplicationGatewaySslPredefinedPolicy values.
2396type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
2397	i    int
2398	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
2399}
2400
2401// NextWithContext advances to the next value.  If there was an error making
2402// the request the iterator does not advance and the error is returned.
2403func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
2404	if tracing.IsEnabled() {
2405		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
2406		defer func() {
2407			sc := -1
2408			if iter.Response().Response.Response != nil {
2409				sc = iter.Response().Response.Response.StatusCode
2410			}
2411			tracing.EndSpan(ctx, sc, err)
2412		}()
2413	}
2414	iter.i++
2415	if iter.i < len(iter.page.Values()) {
2416		return nil
2417	}
2418	err = iter.page.NextWithContext(ctx)
2419	if err != nil {
2420		iter.i--
2421		return err
2422	}
2423	iter.i = 0
2424	return nil
2425}
2426
2427// Next advances to the next value.  If there was an error making
2428// the request the iterator does not advance and the error is returned.
2429// Deprecated: Use NextWithContext() instead.
2430func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
2431	return iter.NextWithContext(context.Background())
2432}
2433
2434// NotDone returns true if the enumeration should be started or is not yet complete.
2435func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
2436	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2437}
2438
2439// Response returns the raw server response from the last page request.
2440func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2441	return iter.page.Response()
2442}
2443
2444// Value returns the current value or a zero-initialized value if the
2445// iterator has advanced beyond the end of the collection.
2446func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
2447	if !iter.page.NotDone() {
2448		return ApplicationGatewaySslPredefinedPolicy{}
2449	}
2450	return iter.page.Values()[iter.i]
2451}
2452
2453// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
2454func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
2455	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
2456}
2457
2458// IsEmpty returns true if the ListResult contains no values.
2459func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
2460	return agaspp.Value == nil || len(*agaspp.Value) == 0
2461}
2462
2463// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
2464// It returns nil if no more results exist.
2465func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
2466	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
2467		return nil, nil
2468	}
2469	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2470		autorest.AsJSON(),
2471		autorest.AsGet(),
2472		autorest.WithBaseURL(to.String(agaspp.NextLink)))
2473}
2474
2475// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
2476// ApplicationGatewaySslPredefinedPolicy values.
2477type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
2478	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
2479	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
2480}
2481
2482// NextWithContext advances to the next page of values.  If there was an error making
2483// the request the page does not advance and the error is returned.
2484func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
2485	if tracing.IsEnabled() {
2486		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
2487		defer func() {
2488			sc := -1
2489			if page.Response().Response.Response != nil {
2490				sc = page.Response().Response.Response.StatusCode
2491			}
2492			tracing.EndSpan(ctx, sc, err)
2493		}()
2494	}
2495	next, err := page.fn(ctx, page.agaspp)
2496	if err != nil {
2497		return err
2498	}
2499	page.agaspp = next
2500	return nil
2501}
2502
2503// Next advances to the next page of values.  If there was an error making
2504// the request the page does not advance and the error is returned.
2505// Deprecated: Use NextWithContext() instead.
2506func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
2507	return page.NextWithContext(context.Background())
2508}
2509
2510// NotDone returns true if the page enumeration should be started or is not yet complete.
2511func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
2512	return !page.agaspp.IsEmpty()
2513}
2514
2515// Response returns the raw server response from the last page request.
2516func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2517	return page.agaspp
2518}
2519
2520// Values returns the slice of values for the current page or nil if there are no values.
2521func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
2522	if page.agaspp.IsEmpty() {
2523		return nil
2524	}
2525	return *page.agaspp.Value
2526}
2527
2528// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
2529func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
2530	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
2531}
2532
2533// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
2534// service call.
2535type ApplicationGatewayAvailableWafRuleSetsResult struct {
2536	autorest.Response `json:"-"`
2537	// Value - The list of application gateway rule sets.
2538	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
2539}
2540
2541// ApplicationGatewayBackendAddress backend address of an application gateway.
2542type ApplicationGatewayBackendAddress struct {
2543	// Fqdn - Fully qualified domain name (FQDN).
2544	Fqdn *string `json:"fqdn,omitempty"`
2545	// IPAddress - IP address
2546	IPAddress *string `json:"ipAddress,omitempty"`
2547}
2548
2549// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
2550type ApplicationGatewayBackendAddressPool struct {
2551	// ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool.
2552	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
2553	// Name - Name of the backend address pool that is unique within an Application Gateway.
2554	Name *string `json:"name,omitempty"`
2555	// Etag - A unique read-only string that changes whenever the resource is updated.
2556	Etag *string `json:"etag,omitempty"`
2557	// Type - Type of the resource.
2558	Type *string `json:"type,omitempty"`
2559	// ID - Resource ID.
2560	ID *string `json:"id,omitempty"`
2561}
2562
2563// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
2564func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
2565	objectMap := make(map[string]interface{})
2566	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
2567		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
2568	}
2569	if agbap.Name != nil {
2570		objectMap["name"] = agbap.Name
2571	}
2572	if agbap.Etag != nil {
2573		objectMap["etag"] = agbap.Etag
2574	}
2575	if agbap.Type != nil {
2576		objectMap["type"] = agbap.Type
2577	}
2578	if agbap.ID != nil {
2579		objectMap["id"] = agbap.ID
2580	}
2581	return json.Marshal(objectMap)
2582}
2583
2584// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
2585func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
2586	var m map[string]*json.RawMessage
2587	err := json.Unmarshal(body, &m)
2588	if err != nil {
2589		return err
2590	}
2591	for k, v := range m {
2592		switch k {
2593		case "properties":
2594			if v != nil {
2595				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
2596				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
2597				if err != nil {
2598					return err
2599				}
2600				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
2601			}
2602		case "name":
2603			if v != nil {
2604				var name string
2605				err = json.Unmarshal(*v, &name)
2606				if err != nil {
2607					return err
2608				}
2609				agbap.Name = &name
2610			}
2611		case "etag":
2612			if v != nil {
2613				var etag string
2614				err = json.Unmarshal(*v, &etag)
2615				if err != nil {
2616					return err
2617				}
2618				agbap.Etag = &etag
2619			}
2620		case "type":
2621			if v != nil {
2622				var typeVar string
2623				err = json.Unmarshal(*v, &typeVar)
2624				if err != nil {
2625					return err
2626				}
2627				agbap.Type = &typeVar
2628			}
2629		case "id":
2630			if v != nil {
2631				var ID string
2632				err = json.Unmarshal(*v, &ID)
2633				if err != nil {
2634					return err
2635				}
2636				agbap.ID = &ID
2637			}
2638		}
2639	}
2640
2641	return nil
2642}
2643
2644// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
2645// application gateway.
2646type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
2647	// BackendIPConfigurations - Collection of references to IPs defined in network interfaces.
2648	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
2649	// BackendAddresses - Backend addresses
2650	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
2651	// ProvisioningState - Provisioning state of the backend address pool resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2652	ProvisioningState *string `json:"provisioningState,omitempty"`
2653}
2654
2655// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call.
2656type ApplicationGatewayBackendHealth struct {
2657	autorest.Response `json:"-"`
2658	// BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources.
2659	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
2660}
2661
2662// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
2663type ApplicationGatewayBackendHealthHTTPSettings struct {
2664	// BackendHTTPSettings - Reference of an ApplicationGatewayBackendHttpSettings resource.
2665	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
2666	// Servers - List of ApplicationGatewayBackendHealthServer resources.
2667	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
2668}
2669
2670// ApplicationGatewayBackendHealthOnDemand result of on demand test probe
2671type ApplicationGatewayBackendHealthOnDemand struct {
2672	autorest.Response `json:"-"`
2673	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2674	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2675	// BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings.
2676	BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"`
2677}
2678
2679// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
2680type ApplicationGatewayBackendHealthPool struct {
2681	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2682	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2683	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
2684	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
2685}
2686
2687// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
2688type ApplicationGatewayBackendHealthServer struct {
2689	// Address - IP address or FQDN of backend server.
2690	Address *string `json:"address,omitempty"`
2691	// IPConfiguration - Reference of IP configuration of backend server.
2692	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
2693	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
2694	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
2695	// HealthProbeLog - Health Probe Log.
2696	HealthProbeLog *string `json:"healthProbeLog,omitempty"`
2697}
2698
2699// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
2700type ApplicationGatewayBackendHTTPSettings struct {
2701	// ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings.
2702	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
2703	// Name - Name of the backend http settings that is unique within an Application Gateway.
2704	Name *string `json:"name,omitempty"`
2705	// Etag - A unique read-only string that changes whenever the resource is updated.
2706	Etag *string `json:"etag,omitempty"`
2707	// Type - Type of the resource.
2708	Type *string `json:"type,omitempty"`
2709	// ID - Resource ID.
2710	ID *string `json:"id,omitempty"`
2711}
2712
2713// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
2714func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
2715	objectMap := make(map[string]interface{})
2716	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
2717		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2718	}
2719	if agbhs.Name != nil {
2720		objectMap["name"] = agbhs.Name
2721	}
2722	if agbhs.Etag != nil {
2723		objectMap["etag"] = agbhs.Etag
2724	}
2725	if agbhs.Type != nil {
2726		objectMap["type"] = agbhs.Type
2727	}
2728	if agbhs.ID != nil {
2729		objectMap["id"] = agbhs.ID
2730	}
2731	return json.Marshal(objectMap)
2732}
2733
2734// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
2735func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
2736	var m map[string]*json.RawMessage
2737	err := json.Unmarshal(body, &m)
2738	if err != nil {
2739		return err
2740	}
2741	for k, v := range m {
2742		switch k {
2743		case "properties":
2744			if v != nil {
2745				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2746				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
2747				if err != nil {
2748					return err
2749				}
2750				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
2751			}
2752		case "name":
2753			if v != nil {
2754				var name string
2755				err = json.Unmarshal(*v, &name)
2756				if err != nil {
2757					return err
2758				}
2759				agbhs.Name = &name
2760			}
2761		case "etag":
2762			if v != nil {
2763				var etag string
2764				err = json.Unmarshal(*v, &etag)
2765				if err != nil {
2766					return err
2767				}
2768				agbhs.Etag = &etag
2769			}
2770		case "type":
2771			if v != nil {
2772				var typeVar string
2773				err = json.Unmarshal(*v, &typeVar)
2774				if err != nil {
2775					return err
2776				}
2777				agbhs.Type = &typeVar
2778			}
2779		case "id":
2780			if v != nil {
2781				var ID string
2782				err = json.Unmarshal(*v, &ID)
2783				if err != nil {
2784					return err
2785				}
2786				agbhs.ID = &ID
2787			}
2788		}
2789	}
2790
2791	return nil
2792}
2793
2794// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
2795// application gateway.
2796type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
2797	// Port - The destination port on the backend.
2798	Port *int32 `json:"port,omitempty"`
2799	// Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS'
2800	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2801	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
2802	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
2803	// 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.
2804	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
2805	// Probe - Probe resource of an application gateway.
2806	Probe *SubResource `json:"probe,omitempty"`
2807	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
2808	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
2809	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
2810	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
2811	// ConnectionDraining - Connection draining of the backend http settings resource.
2812	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
2813	// HostName - Host header to be sent to the backend servers.
2814	HostName *string `json:"hostName,omitempty"`
2815	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
2816	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
2817	// AffinityCookieName - Cookie name to use for the affinity cookie.
2818	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
2819	// ProbeEnabled - Whether the probe is enabled. Default value is false.
2820	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
2821	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
2822	Path *string `json:"path,omitempty"`
2823	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2824	ProvisioningState *string `json:"provisioningState,omitempty"`
2825}
2826
2827// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
2828// be active for a specified time after the backend server got removed from the configuration.
2829type ApplicationGatewayConnectionDraining struct {
2830	// Enabled - Whether connection draining is enabled or not.
2831	Enabled *bool `json:"enabled,omitempty"`
2832	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
2833	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
2834}
2835
2836// ApplicationGatewayCustomError customer error of an application gateway.
2837type ApplicationGatewayCustomError struct {
2838	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
2839	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
2840	// CustomErrorPageURL - Error page URL of the application gateway customer error.
2841	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
2842}
2843
2844// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
2845// rule group.
2846type ApplicationGatewayFirewallDisabledRuleGroup struct {
2847	// RuleGroupName - The name of the rule group that will be disabled.
2848	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2849	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
2850	Rules *[]int32 `json:"rules,omitempty"`
2851}
2852
2853// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
2854// check
2855type ApplicationGatewayFirewallExclusion struct {
2856	// MatchVariable - The variable to be excluded.
2857	MatchVariable *string `json:"matchVariable,omitempty"`
2858	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
2859	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
2860	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
2861	Selector *string `json:"selector,omitempty"`
2862}
2863
2864// ApplicationGatewayFirewallRule a web application firewall rule.
2865type ApplicationGatewayFirewallRule struct {
2866	// RuleID - The identifier of the web application firewall rule.
2867	RuleID *int32 `json:"ruleId,omitempty"`
2868	// Description - The description of the web application firewall rule.
2869	Description *string `json:"description,omitempty"`
2870}
2871
2872// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
2873type ApplicationGatewayFirewallRuleGroup struct {
2874	// RuleGroupName - The name of the web application firewall rule group.
2875	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2876	// Description - The description of the web application firewall rule group.
2877	Description *string `json:"description,omitempty"`
2878	// Rules - The rules of the web application firewall rule group.
2879	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
2880}
2881
2882// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
2883type ApplicationGatewayFirewallRuleSet struct {
2884	// ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set.
2885	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
2886	// ID - Resource ID.
2887	ID *string `json:"id,omitempty"`
2888	// Name - READ-ONLY; Resource name.
2889	Name *string `json:"name,omitempty"`
2890	// Type - READ-ONLY; Resource type.
2891	Type *string `json:"type,omitempty"`
2892	// Location - Resource location.
2893	Location *string `json:"location,omitempty"`
2894	// Tags - Resource tags.
2895	Tags map[string]*string `json:"tags"`
2896}
2897
2898// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
2899func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
2900	objectMap := make(map[string]interface{})
2901	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
2902		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
2903	}
2904	if agfrs.ID != nil {
2905		objectMap["id"] = agfrs.ID
2906	}
2907	if agfrs.Location != nil {
2908		objectMap["location"] = agfrs.Location
2909	}
2910	if agfrs.Tags != nil {
2911		objectMap["tags"] = agfrs.Tags
2912	}
2913	return json.Marshal(objectMap)
2914}
2915
2916// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
2917func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
2918	var m map[string]*json.RawMessage
2919	err := json.Unmarshal(body, &m)
2920	if err != nil {
2921		return err
2922	}
2923	for k, v := range m {
2924		switch k {
2925		case "properties":
2926			if v != nil {
2927				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
2928				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
2929				if err != nil {
2930					return err
2931				}
2932				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
2933			}
2934		case "id":
2935			if v != nil {
2936				var ID string
2937				err = json.Unmarshal(*v, &ID)
2938				if err != nil {
2939					return err
2940				}
2941				agfrs.ID = &ID
2942			}
2943		case "name":
2944			if v != nil {
2945				var name string
2946				err = json.Unmarshal(*v, &name)
2947				if err != nil {
2948					return err
2949				}
2950				agfrs.Name = &name
2951			}
2952		case "type":
2953			if v != nil {
2954				var typeVar string
2955				err = json.Unmarshal(*v, &typeVar)
2956				if err != nil {
2957					return err
2958				}
2959				agfrs.Type = &typeVar
2960			}
2961		case "location":
2962			if v != nil {
2963				var location string
2964				err = json.Unmarshal(*v, &location)
2965				if err != nil {
2966					return err
2967				}
2968				agfrs.Location = &location
2969			}
2970		case "tags":
2971			if v != nil {
2972				var tags map[string]*string
2973				err = json.Unmarshal(*v, &tags)
2974				if err != nil {
2975					return err
2976				}
2977				agfrs.Tags = tags
2978			}
2979		}
2980	}
2981
2982	return nil
2983}
2984
2985// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
2986type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
2987	// ProvisioningState - The provisioning state of the web application firewall rule set.
2988	ProvisioningState *string `json:"provisioningState,omitempty"`
2989	// RuleSetType - The type of the web application firewall rule set.
2990	RuleSetType *string `json:"ruleSetType,omitempty"`
2991	// RuleSetVersion - The version of the web application firewall rule set type.
2992	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
2993	// RuleGroups - The rule groups of the web application firewall rule set.
2994	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
2995}
2996
2997// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
2998type ApplicationGatewayFrontendIPConfiguration struct {
2999	// ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration.
3000	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3001	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
3002	Name *string `json:"name,omitempty"`
3003	// Etag - A unique read-only string that changes whenever the resource is updated.
3004	Etag *string `json:"etag,omitempty"`
3005	// Type - Type of the resource.
3006	Type *string `json:"type,omitempty"`
3007	// ID - Resource ID.
3008	ID *string `json:"id,omitempty"`
3009}
3010
3011// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
3012func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
3013	objectMap := make(map[string]interface{})
3014	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
3015		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3016	}
3017	if agfic.Name != nil {
3018		objectMap["name"] = agfic.Name
3019	}
3020	if agfic.Etag != nil {
3021		objectMap["etag"] = agfic.Etag
3022	}
3023	if agfic.Type != nil {
3024		objectMap["type"] = agfic.Type
3025	}
3026	if agfic.ID != nil {
3027		objectMap["id"] = agfic.ID
3028	}
3029	return json.Marshal(objectMap)
3030}
3031
3032// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
3033func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
3034	var m map[string]*json.RawMessage
3035	err := json.Unmarshal(body, &m)
3036	if err != nil {
3037		return err
3038	}
3039	for k, v := range m {
3040		switch k {
3041		case "properties":
3042			if v != nil {
3043				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3044				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
3045				if err != nil {
3046					return err
3047				}
3048				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
3049			}
3050		case "name":
3051			if v != nil {
3052				var name string
3053				err = json.Unmarshal(*v, &name)
3054				if err != nil {
3055					return err
3056				}
3057				agfic.Name = &name
3058			}
3059		case "etag":
3060			if v != nil {
3061				var etag string
3062				err = json.Unmarshal(*v, &etag)
3063				if err != nil {
3064					return err
3065				}
3066				agfic.Etag = &etag
3067			}
3068		case "type":
3069			if v != nil {
3070				var typeVar string
3071				err = json.Unmarshal(*v, &typeVar)
3072				if err != nil {
3073					return err
3074				}
3075				agfic.Type = &typeVar
3076			}
3077		case "id":
3078			if v != nil {
3079				var ID string
3080				err = json.Unmarshal(*v, &ID)
3081				if err != nil {
3082					return err
3083				}
3084				agfic.ID = &ID
3085			}
3086		}
3087	}
3088
3089	return nil
3090}
3091
3092// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
3093// application gateway.
3094type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
3095	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
3096	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
3097	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
3098	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
3099	// Subnet - Reference of the subnet resource.
3100	Subnet *SubResource `json:"subnet,omitempty"`
3101	// PublicIPAddress - Reference of the PublicIP resource.
3102	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
3103	// ProvisioningState - Provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3104	ProvisioningState *string `json:"provisioningState,omitempty"`
3105}
3106
3107// ApplicationGatewayFrontendPort frontend port of an application gateway.
3108type ApplicationGatewayFrontendPort struct {
3109	// ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port.
3110	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
3111	// Name - Name of the frontend port that is unique within an Application Gateway
3112	Name *string `json:"name,omitempty"`
3113	// Etag - A unique read-only string that changes whenever the resource is updated.
3114	Etag *string `json:"etag,omitempty"`
3115	// Type - Type of the resource.
3116	Type *string `json:"type,omitempty"`
3117	// ID - Resource ID.
3118	ID *string `json:"id,omitempty"`
3119}
3120
3121// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
3122func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
3123	objectMap := make(map[string]interface{})
3124	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
3125		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
3126	}
3127	if agfp.Name != nil {
3128		objectMap["name"] = agfp.Name
3129	}
3130	if agfp.Etag != nil {
3131		objectMap["etag"] = agfp.Etag
3132	}
3133	if agfp.Type != nil {
3134		objectMap["type"] = agfp.Type
3135	}
3136	if agfp.ID != nil {
3137		objectMap["id"] = agfp.ID
3138	}
3139	return json.Marshal(objectMap)
3140}
3141
3142// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
3143func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
3144	var m map[string]*json.RawMessage
3145	err := json.Unmarshal(body, &m)
3146	if err != nil {
3147		return err
3148	}
3149	for k, v := range m {
3150		switch k {
3151		case "properties":
3152			if v != nil {
3153				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
3154				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
3155				if err != nil {
3156					return err
3157				}
3158				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
3159			}
3160		case "name":
3161			if v != nil {
3162				var name string
3163				err = json.Unmarshal(*v, &name)
3164				if err != nil {
3165					return err
3166				}
3167				agfp.Name = &name
3168			}
3169		case "etag":
3170			if v != nil {
3171				var etag string
3172				err = json.Unmarshal(*v, &etag)
3173				if err != nil {
3174					return err
3175				}
3176				agfp.Etag = &etag
3177			}
3178		case "type":
3179			if v != nil {
3180				var typeVar string
3181				err = json.Unmarshal(*v, &typeVar)
3182				if err != nil {
3183					return err
3184				}
3185				agfp.Type = &typeVar
3186			}
3187		case "id":
3188			if v != nil {
3189				var ID string
3190				err = json.Unmarshal(*v, &ID)
3191				if err != nil {
3192					return err
3193				}
3194				agfp.ID = &ID
3195			}
3196		}
3197	}
3198
3199	return nil
3200}
3201
3202// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
3203type ApplicationGatewayFrontendPortPropertiesFormat struct {
3204	// Port - Frontend port
3205	Port *int32 `json:"port,omitempty"`
3206	// ProvisioningState - Provisioning state of the frontend port resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3207	ProvisioningState *string `json:"provisioningState,omitempty"`
3208}
3209
3210// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
3211type ApplicationGatewayHeaderConfiguration struct {
3212	// HeaderName - Header name of the header configuration
3213	HeaderName *string `json:"headerName,omitempty"`
3214	// HeaderValue - Header value of the header configuration
3215	HeaderValue *string `json:"headerValue,omitempty"`
3216}
3217
3218// ApplicationGatewayHTTPListener http listener of an application gateway.
3219type ApplicationGatewayHTTPListener struct {
3220	// ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener.
3221	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
3222	// Name - Name of the HTTP listener that is unique within an Application Gateway.
3223	Name *string `json:"name,omitempty"`
3224	// Etag - A unique read-only string that changes whenever the resource is updated.
3225	Etag *string `json:"etag,omitempty"`
3226	// Type - Type of the resource.
3227	Type *string `json:"type,omitempty"`
3228	// ID - Resource ID.
3229	ID *string `json:"id,omitempty"`
3230}
3231
3232// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
3233func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
3234	objectMap := make(map[string]interface{})
3235	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
3236		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
3237	}
3238	if aghl.Name != nil {
3239		objectMap["name"] = aghl.Name
3240	}
3241	if aghl.Etag != nil {
3242		objectMap["etag"] = aghl.Etag
3243	}
3244	if aghl.Type != nil {
3245		objectMap["type"] = aghl.Type
3246	}
3247	if aghl.ID != nil {
3248		objectMap["id"] = aghl.ID
3249	}
3250	return json.Marshal(objectMap)
3251}
3252
3253// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
3254func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
3255	var m map[string]*json.RawMessage
3256	err := json.Unmarshal(body, &m)
3257	if err != nil {
3258		return err
3259	}
3260	for k, v := range m {
3261		switch k {
3262		case "properties":
3263			if v != nil {
3264				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
3265				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
3266				if err != nil {
3267					return err
3268				}
3269				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
3270			}
3271		case "name":
3272			if v != nil {
3273				var name string
3274				err = json.Unmarshal(*v, &name)
3275				if err != nil {
3276					return err
3277				}
3278				aghl.Name = &name
3279			}
3280		case "etag":
3281			if v != nil {
3282				var etag string
3283				err = json.Unmarshal(*v, &etag)
3284				if err != nil {
3285					return err
3286				}
3287				aghl.Etag = &etag
3288			}
3289		case "type":
3290			if v != nil {
3291				var typeVar string
3292				err = json.Unmarshal(*v, &typeVar)
3293				if err != nil {
3294					return err
3295				}
3296				aghl.Type = &typeVar
3297			}
3298		case "id":
3299			if v != nil {
3300				var ID string
3301				err = json.Unmarshal(*v, &ID)
3302				if err != nil {
3303					return err
3304				}
3305				aghl.ID = &ID
3306			}
3307		}
3308	}
3309
3310	return nil
3311}
3312
3313// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
3314type ApplicationGatewayHTTPListenerPropertiesFormat struct {
3315	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
3316	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
3317	// FrontendPort - Frontend port resource of an application gateway.
3318	FrontendPort *SubResource `json:"frontendPort,omitempty"`
3319	// Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS'
3320	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3321	// HostName - Host name of HTTP listener.
3322	HostName *string `json:"hostName,omitempty"`
3323	// SslCertificate - SSL certificate resource of an application gateway.
3324	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
3325	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
3326	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
3327	// ProvisioningState - Provisioning state of the HTTP listener resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3328	ProvisioningState *string `json:"provisioningState,omitempty"`
3329	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
3330	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3331}
3332
3333// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
3334// private IP configuration is allowed.
3335type ApplicationGatewayIPConfiguration struct {
3336	// ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration.
3337	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3338	// Name - Name of the IP configuration that is unique within an Application Gateway.
3339	Name *string `json:"name,omitempty"`
3340	// Etag - A unique read-only string that changes whenever the resource is updated.
3341	Etag *string `json:"etag,omitempty"`
3342	// Type - Type of the resource.
3343	Type *string `json:"type,omitempty"`
3344	// ID - Resource ID.
3345	ID *string `json:"id,omitempty"`
3346}
3347
3348// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
3349func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
3350	objectMap := make(map[string]interface{})
3351	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
3352		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
3353	}
3354	if agic.Name != nil {
3355		objectMap["name"] = agic.Name
3356	}
3357	if agic.Etag != nil {
3358		objectMap["etag"] = agic.Etag
3359	}
3360	if agic.Type != nil {
3361		objectMap["type"] = agic.Type
3362	}
3363	if agic.ID != nil {
3364		objectMap["id"] = agic.ID
3365	}
3366	return json.Marshal(objectMap)
3367}
3368
3369// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
3370func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
3371	var m map[string]*json.RawMessage
3372	err := json.Unmarshal(body, &m)
3373	if err != nil {
3374		return err
3375	}
3376	for k, v := range m {
3377		switch k {
3378		case "properties":
3379			if v != nil {
3380				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
3381				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
3382				if err != nil {
3383					return err
3384				}
3385				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
3386			}
3387		case "name":
3388			if v != nil {
3389				var name string
3390				err = json.Unmarshal(*v, &name)
3391				if err != nil {
3392					return err
3393				}
3394				agic.Name = &name
3395			}
3396		case "etag":
3397			if v != nil {
3398				var etag string
3399				err = json.Unmarshal(*v, &etag)
3400				if err != nil {
3401					return err
3402				}
3403				agic.Etag = &etag
3404			}
3405		case "type":
3406			if v != nil {
3407				var typeVar string
3408				err = json.Unmarshal(*v, &typeVar)
3409				if err != nil {
3410					return err
3411				}
3412				agic.Type = &typeVar
3413			}
3414		case "id":
3415			if v != nil {
3416				var ID string
3417				err = json.Unmarshal(*v, &ID)
3418				if err != nil {
3419					return err
3420				}
3421				agic.ID = &ID
3422			}
3423		}
3424	}
3425
3426	return nil
3427}
3428
3429// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
3430// gateway.
3431type ApplicationGatewayIPConfigurationPropertiesFormat struct {
3432	// Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address.
3433	Subnet *SubResource `json:"subnet,omitempty"`
3434	// ProvisioningState - Provisioning state of the application gateway subnet resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3435	ProvisioningState *string `json:"provisioningState,omitempty"`
3436}
3437
3438// ApplicationGatewayListResult response for ListApplicationGateways API service call.
3439type ApplicationGatewayListResult struct {
3440	autorest.Response `json:"-"`
3441	// Value - List of an application gateways in a resource group.
3442	Value *[]ApplicationGateway `json:"value,omitempty"`
3443	// NextLink - URL to get the next set of results.
3444	NextLink *string `json:"nextLink,omitempty"`
3445}
3446
3447// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
3448type ApplicationGatewayListResultIterator struct {
3449	i    int
3450	page ApplicationGatewayListResultPage
3451}
3452
3453// NextWithContext advances to the next value.  If there was an error making
3454// the request the iterator does not advance and the error is returned.
3455func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
3456	if tracing.IsEnabled() {
3457		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
3458		defer func() {
3459			sc := -1
3460			if iter.Response().Response.Response != nil {
3461				sc = iter.Response().Response.Response.StatusCode
3462			}
3463			tracing.EndSpan(ctx, sc, err)
3464		}()
3465	}
3466	iter.i++
3467	if iter.i < len(iter.page.Values()) {
3468		return nil
3469	}
3470	err = iter.page.NextWithContext(ctx)
3471	if err != nil {
3472		iter.i--
3473		return err
3474	}
3475	iter.i = 0
3476	return nil
3477}
3478
3479// Next advances to the next value.  If there was an error making
3480// the request the iterator does not advance and the error is returned.
3481// Deprecated: Use NextWithContext() instead.
3482func (iter *ApplicationGatewayListResultIterator) Next() error {
3483	return iter.NextWithContext(context.Background())
3484}
3485
3486// NotDone returns true if the enumeration should be started or is not yet complete.
3487func (iter ApplicationGatewayListResultIterator) NotDone() bool {
3488	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3489}
3490
3491// Response returns the raw server response from the last page request.
3492func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
3493	return iter.page.Response()
3494}
3495
3496// Value returns the current value or a zero-initialized value if the
3497// iterator has advanced beyond the end of the collection.
3498func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
3499	if !iter.page.NotDone() {
3500		return ApplicationGateway{}
3501	}
3502	return iter.page.Values()[iter.i]
3503}
3504
3505// Creates a new instance of the ApplicationGatewayListResultIterator type.
3506func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
3507	return ApplicationGatewayListResultIterator{page: page}
3508}
3509
3510// IsEmpty returns true if the ListResult contains no values.
3511func (aglr ApplicationGatewayListResult) IsEmpty() bool {
3512	return aglr.Value == nil || len(*aglr.Value) == 0
3513}
3514
3515// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
3516// It returns nil if no more results exist.
3517func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
3518	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
3519		return nil, nil
3520	}
3521	return autorest.Prepare((&http.Request{}).WithContext(ctx),
3522		autorest.AsJSON(),
3523		autorest.AsGet(),
3524		autorest.WithBaseURL(to.String(aglr.NextLink)))
3525}
3526
3527// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
3528type ApplicationGatewayListResultPage struct {
3529	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
3530	aglr ApplicationGatewayListResult
3531}
3532
3533// NextWithContext advances to the next page of values.  If there was an error making
3534// the request the page does not advance and the error is returned.
3535func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
3536	if tracing.IsEnabled() {
3537		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
3538		defer func() {
3539			sc := -1
3540			if page.Response().Response.Response != nil {
3541				sc = page.Response().Response.Response.StatusCode
3542			}
3543			tracing.EndSpan(ctx, sc, err)
3544		}()
3545	}
3546	next, err := page.fn(ctx, page.aglr)
3547	if err != nil {
3548		return err
3549	}
3550	page.aglr = next
3551	return nil
3552}
3553
3554// Next advances to the next page of values.  If there was an error making
3555// the request the page does not advance and the error is returned.
3556// Deprecated: Use NextWithContext() instead.
3557func (page *ApplicationGatewayListResultPage) Next() error {
3558	return page.NextWithContext(context.Background())
3559}
3560
3561// NotDone returns true if the page enumeration should be started or is not yet complete.
3562func (page ApplicationGatewayListResultPage) NotDone() bool {
3563	return !page.aglr.IsEmpty()
3564}
3565
3566// Response returns the raw server response from the last page request.
3567func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
3568	return page.aglr
3569}
3570
3571// Values returns the slice of values for the current page or nil if there are no values.
3572func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
3573	if page.aglr.IsEmpty() {
3574		return nil
3575	}
3576	return *page.aglr.Value
3577}
3578
3579// Creates a new instance of the ApplicationGatewayListResultPage type.
3580func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
3581	return ApplicationGatewayListResultPage{fn: getNextPage}
3582}
3583
3584// ApplicationGatewayOnDemandProbe details of on demand test probe request
3585type ApplicationGatewayOnDemandProbe struct {
3586	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3587	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3588	// Host - Host name to send the probe to.
3589	Host *string `json:"host,omitempty"`
3590	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>
3591	Path *string `json:"path,omitempty"`
3592	// 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.
3593	Timeout *int32 `json:"timeout,omitempty"`
3594	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3595	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3596	// Match - Criterion for classifying a healthy probe response.
3597	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3598	// BackendPoolName - Name of backend pool of application gateway to which probe request will be sent.
3599	BackendPoolName *string `json:"backendPoolName,omitempty"`
3600	// BackendHTTPSettingName - Name of backend http setting of application gateway to be used for test probe
3601	BackendHTTPSettingName *string `json:"backendHttpSettingName,omitempty"`
3602}
3603
3604// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
3605type ApplicationGatewayPathRule struct {
3606	// ApplicationGatewayPathRulePropertiesFormat - Properties of the application gateway path rule.
3607	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
3608	// Name - Name of the path rule that is unique within an Application Gateway.
3609	Name *string `json:"name,omitempty"`
3610	// Etag - A unique read-only string that changes whenever the resource is updated.
3611	Etag *string `json:"etag,omitempty"`
3612	// Type - Type of the resource.
3613	Type *string `json:"type,omitempty"`
3614	// ID - Resource ID.
3615	ID *string `json:"id,omitempty"`
3616}
3617
3618// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
3619func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
3620	objectMap := make(map[string]interface{})
3621	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
3622		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
3623	}
3624	if agpr.Name != nil {
3625		objectMap["name"] = agpr.Name
3626	}
3627	if agpr.Etag != nil {
3628		objectMap["etag"] = agpr.Etag
3629	}
3630	if agpr.Type != nil {
3631		objectMap["type"] = agpr.Type
3632	}
3633	if agpr.ID != nil {
3634		objectMap["id"] = agpr.ID
3635	}
3636	return json.Marshal(objectMap)
3637}
3638
3639// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
3640func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
3641	var m map[string]*json.RawMessage
3642	err := json.Unmarshal(body, &m)
3643	if err != nil {
3644		return err
3645	}
3646	for k, v := range m {
3647		switch k {
3648		case "properties":
3649			if v != nil {
3650				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
3651				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
3652				if err != nil {
3653					return err
3654				}
3655				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
3656			}
3657		case "name":
3658			if v != nil {
3659				var name string
3660				err = json.Unmarshal(*v, &name)
3661				if err != nil {
3662					return err
3663				}
3664				agpr.Name = &name
3665			}
3666		case "etag":
3667			if v != nil {
3668				var etag string
3669				err = json.Unmarshal(*v, &etag)
3670				if err != nil {
3671					return err
3672				}
3673				agpr.Etag = &etag
3674			}
3675		case "type":
3676			if v != nil {
3677				var typeVar string
3678				err = json.Unmarshal(*v, &typeVar)
3679				if err != nil {
3680					return err
3681				}
3682				agpr.Type = &typeVar
3683			}
3684		case "id":
3685			if v != nil {
3686				var ID string
3687				err = json.Unmarshal(*v, &ID)
3688				if err != nil {
3689					return err
3690				}
3691				agpr.ID = &ID
3692			}
3693		}
3694	}
3695
3696	return nil
3697}
3698
3699// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
3700type ApplicationGatewayPathRulePropertiesFormat struct {
3701	// Paths - Path rules of URL path map.
3702	Paths *[]string `json:"paths,omitempty"`
3703	// BackendAddressPool - Backend address pool resource of URL path map path rule.
3704	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3705	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
3706	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3707	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
3708	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3709	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
3710	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
3711	// ProvisioningState - Path rule of URL path map resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3712	ProvisioningState *string `json:"provisioningState,omitempty"`
3713}
3714
3715// ApplicationGatewayProbe probe of the application gateway.
3716type ApplicationGatewayProbe struct {
3717	// ApplicationGatewayProbePropertiesFormat - Properties of the application gateway probe.
3718	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
3719	// Name - Name of the probe that is unique within an Application Gateway.
3720	Name *string `json:"name,omitempty"`
3721	// Etag - A unique read-only string that changes whenever the resource is updated.
3722	Etag *string `json:"etag,omitempty"`
3723	// Type - Type of the resource.
3724	Type *string `json:"type,omitempty"`
3725	// ID - Resource ID.
3726	ID *string `json:"id,omitempty"`
3727}
3728
3729// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
3730func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
3731	objectMap := make(map[string]interface{})
3732	if agp.ApplicationGatewayProbePropertiesFormat != nil {
3733		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
3734	}
3735	if agp.Name != nil {
3736		objectMap["name"] = agp.Name
3737	}
3738	if agp.Etag != nil {
3739		objectMap["etag"] = agp.Etag
3740	}
3741	if agp.Type != nil {
3742		objectMap["type"] = agp.Type
3743	}
3744	if agp.ID != nil {
3745		objectMap["id"] = agp.ID
3746	}
3747	return json.Marshal(objectMap)
3748}
3749
3750// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
3751func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
3752	var m map[string]*json.RawMessage
3753	err := json.Unmarshal(body, &m)
3754	if err != nil {
3755		return err
3756	}
3757	for k, v := range m {
3758		switch k {
3759		case "properties":
3760			if v != nil {
3761				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
3762				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
3763				if err != nil {
3764					return err
3765				}
3766				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
3767			}
3768		case "name":
3769			if v != nil {
3770				var name string
3771				err = json.Unmarshal(*v, &name)
3772				if err != nil {
3773					return err
3774				}
3775				agp.Name = &name
3776			}
3777		case "etag":
3778			if v != nil {
3779				var etag string
3780				err = json.Unmarshal(*v, &etag)
3781				if err != nil {
3782					return err
3783				}
3784				agp.Etag = &etag
3785			}
3786		case "type":
3787			if v != nil {
3788				var typeVar string
3789				err = json.Unmarshal(*v, &typeVar)
3790				if err != nil {
3791					return err
3792				}
3793				agp.Type = &typeVar
3794			}
3795		case "id":
3796			if v != nil {
3797				var ID string
3798				err = json.Unmarshal(*v, &ID)
3799				if err != nil {
3800					return err
3801				}
3802				agp.ID = &ID
3803			}
3804		}
3805	}
3806
3807	return nil
3808}
3809
3810// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match
3811type ApplicationGatewayProbeHealthResponseMatch struct {
3812	// Body - Body that must be contained in the health response. Default value is empty.
3813	Body *string `json:"body,omitempty"`
3814	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
3815	StatusCodes *[]string `json:"statusCodes,omitempty"`
3816}
3817
3818// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
3819type ApplicationGatewayProbePropertiesFormat struct {
3820	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3821	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3822	// Host - Host name to send the probe to.
3823	Host *string `json:"host,omitempty"`
3824	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>
3825	Path *string `json:"path,omitempty"`
3826	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
3827	Interval *int32 `json:"interval,omitempty"`
3828	// 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.
3829	Timeout *int32 `json:"timeout,omitempty"`
3830	// 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.
3831	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
3832	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3833	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3834	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
3835	MinServers *int32 `json:"minServers,omitempty"`
3836	// Match - Criterion for classifying a healthy probe response.
3837	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3838	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3839	ProvisioningState *string `json:"provisioningState,omitempty"`
3840}
3841
3842// ApplicationGatewayPropertiesFormat properties of the application gateway.
3843type ApplicationGatewayPropertiesFormat struct {
3844	// Sku - SKU of the application gateway resource.
3845	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
3846	// SslPolicy - SSL policy of the application gateway resource.
3847	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
3848	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
3849	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
3850	// 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).
3851	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
3852	// 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).
3853	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
3854	// 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).
3855	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
3856	// 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).
3857	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
3858	// 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).
3859	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
3860	// 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).
3861	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
3862	// Probes - Probes of the application gateway resource.
3863	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
3864	// 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).
3865	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
3866	// 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).
3867	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
3868	// 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).
3869	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
3870	// 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).
3871	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
3872	// RequestRoutingRules - Request routing rules of the application gateway resource.
3873	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
3874	// RewriteRuleSets - Rewrite rules for the application gateway resource.
3875	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
3876	// 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).
3877	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
3878	// WebApplicationFirewallConfiguration - Web application firewall configuration.
3879	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
3880	// FirewallPolicy - Reference of the FirewallPolicy resource.
3881	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
3882	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
3883	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
3884	// EnableFips - Whether FIPS is enabled on the application gateway resource.
3885	EnableFips *bool `json:"enableFips,omitempty"`
3886	// AutoscaleConfiguration - Autoscale Configuration.
3887	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
3888	// ResourceGUID - Resource GUID property of the application gateway resource.
3889	ResourceGUID *string `json:"resourceGuid,omitempty"`
3890	// ProvisioningState - Provisioning state of the application gateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3891	ProvisioningState *string `json:"provisioningState,omitempty"`
3892	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
3893	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3894}
3895
3896// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
3897type ApplicationGatewayRedirectConfiguration struct {
3898	// ApplicationGatewayRedirectConfigurationPropertiesFormat - Properties of the application gateway redirect configuration.
3899	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
3900	// Name - Name of the redirect configuration that is unique within an Application Gateway.
3901	Name *string `json:"name,omitempty"`
3902	// Etag - A unique read-only string that changes whenever the resource is updated.
3903	Etag *string `json:"etag,omitempty"`
3904	// Type - Type of the resource.
3905	Type *string `json:"type,omitempty"`
3906	// ID - Resource ID.
3907	ID *string `json:"id,omitempty"`
3908}
3909
3910// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
3911func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
3912	objectMap := make(map[string]interface{})
3913	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
3914		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
3915	}
3916	if agrc.Name != nil {
3917		objectMap["name"] = agrc.Name
3918	}
3919	if agrc.Etag != nil {
3920		objectMap["etag"] = agrc.Etag
3921	}
3922	if agrc.Type != nil {
3923		objectMap["type"] = agrc.Type
3924	}
3925	if agrc.ID != nil {
3926		objectMap["id"] = agrc.ID
3927	}
3928	return json.Marshal(objectMap)
3929}
3930
3931// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
3932func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
3933	var m map[string]*json.RawMessage
3934	err := json.Unmarshal(body, &m)
3935	if err != nil {
3936		return err
3937	}
3938	for k, v := range m {
3939		switch k {
3940		case "properties":
3941			if v != nil {
3942				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
3943				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
3944				if err != nil {
3945					return err
3946				}
3947				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
3948			}
3949		case "name":
3950			if v != nil {
3951				var name string
3952				err = json.Unmarshal(*v, &name)
3953				if err != nil {
3954					return err
3955				}
3956				agrc.Name = &name
3957			}
3958		case "etag":
3959			if v != nil {
3960				var etag string
3961				err = json.Unmarshal(*v, &etag)
3962				if err != nil {
3963					return err
3964				}
3965				agrc.Etag = &etag
3966			}
3967		case "type":
3968			if v != nil {
3969				var typeVar string
3970				err = json.Unmarshal(*v, &typeVar)
3971				if err != nil {
3972					return err
3973				}
3974				agrc.Type = &typeVar
3975			}
3976		case "id":
3977			if v != nil {
3978				var ID string
3979				err = json.Unmarshal(*v, &ID)
3980				if err != nil {
3981					return err
3982				}
3983				agrc.ID = &ID
3984			}
3985		}
3986	}
3987
3988	return nil
3989}
3990
3991// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
3992// application gateway.
3993type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
3994	// RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
3995	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
3996	// TargetListener - Reference to a listener to redirect the request to.
3997	TargetListener *SubResource `json:"targetListener,omitempty"`
3998	// TargetURL - Url to redirect the request to.
3999	TargetURL *string `json:"targetUrl,omitempty"`
4000	// IncludePath - Include path in the redirected url.
4001	IncludePath *bool `json:"includePath,omitempty"`
4002	// IncludeQueryString - Include query string in the redirected url.
4003	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
4004	// RequestRoutingRules - Request routing specifying redirect configuration.
4005	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
4006	// URLPathMaps - Url path maps specifying default redirect configuration.
4007	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
4008	// PathRules - Path rules specifying redirect configuration.
4009	PathRules *[]SubResource `json:"pathRules,omitempty"`
4010}
4011
4012// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
4013type ApplicationGatewayRequestRoutingRule struct {
4014	// ApplicationGatewayRequestRoutingRulePropertiesFormat - Properties of the application gateway request routing rule.
4015	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
4016	// Name - Name of the request routing rule that is unique within an Application Gateway.
4017	Name *string `json:"name,omitempty"`
4018	// Etag - A unique read-only string that changes whenever the resource is updated.
4019	Etag *string `json:"etag,omitempty"`
4020	// Type - Type of the resource.
4021	Type *string `json:"type,omitempty"`
4022	// ID - Resource ID.
4023	ID *string `json:"id,omitempty"`
4024}
4025
4026// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
4027func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
4028	objectMap := make(map[string]interface{})
4029	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
4030		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
4031	}
4032	if agrrr.Name != nil {
4033		objectMap["name"] = agrrr.Name
4034	}
4035	if agrrr.Etag != nil {
4036		objectMap["etag"] = agrrr.Etag
4037	}
4038	if agrrr.Type != nil {
4039		objectMap["type"] = agrrr.Type
4040	}
4041	if agrrr.ID != nil {
4042		objectMap["id"] = agrrr.ID
4043	}
4044	return json.Marshal(objectMap)
4045}
4046
4047// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
4048func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
4049	var m map[string]*json.RawMessage
4050	err := json.Unmarshal(body, &m)
4051	if err != nil {
4052		return err
4053	}
4054	for k, v := range m {
4055		switch k {
4056		case "properties":
4057			if v != nil {
4058				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
4059				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
4060				if err != nil {
4061					return err
4062				}
4063				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
4064			}
4065		case "name":
4066			if v != nil {
4067				var name string
4068				err = json.Unmarshal(*v, &name)
4069				if err != nil {
4070					return err
4071				}
4072				agrrr.Name = &name
4073			}
4074		case "etag":
4075			if v != nil {
4076				var etag string
4077				err = json.Unmarshal(*v, &etag)
4078				if err != nil {
4079					return err
4080				}
4081				agrrr.Etag = &etag
4082			}
4083		case "type":
4084			if v != nil {
4085				var typeVar string
4086				err = json.Unmarshal(*v, &typeVar)
4087				if err != nil {
4088					return err
4089				}
4090				agrrr.Type = &typeVar
4091			}
4092		case "id":
4093			if v != nil {
4094				var ID string
4095				err = json.Unmarshal(*v, &ID)
4096				if err != nil {
4097					return err
4098				}
4099				agrrr.ID = &ID
4100			}
4101		}
4102	}
4103
4104	return nil
4105}
4106
4107// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
4108// application gateway.
4109type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
4110	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
4111	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
4112	// BackendAddressPool - Backend address pool resource of the application gateway.
4113	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4114	// BackendHTTPSettings - Backend http settings resource of the application gateway.
4115	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4116	// HTTPListener - Http listener resource of the application gateway.
4117	HTTPListener *SubResource `json:"httpListener,omitempty"`
4118	// URLPathMap - URL path map resource of the application gateway.
4119	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
4120	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
4121	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
4122	// RedirectConfiguration - Redirect configuration resource of the application gateway.
4123	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
4124	// ProvisioningState - Provisioning state of the request routing rule resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4125	ProvisioningState *string `json:"provisioningState,omitempty"`
4126}
4127
4128// ApplicationGatewayRewriteRule rewrite rule of an application gateway.
4129type ApplicationGatewayRewriteRule struct {
4130	// Name - Name of the rewrite rule that is unique within an Application Gateway.
4131	Name *string `json:"name,omitempty"`
4132	// RuleSequence - Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a RewriteRuleSet.
4133	RuleSequence *int32 `json:"ruleSequence,omitempty"`
4134	// Conditions - Conditions based on which the action set execution will be evaluated.
4135	Conditions *[]ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`
4136	// ActionSet - Set of actions to be done as part of the rewrite Rule.
4137	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
4138}
4139
4140// ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
4141type ApplicationGatewayRewriteRuleActionSet struct {
4142	// RequestHeaderConfigurations - Request Header Actions in the Action Set
4143	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
4144	// ResponseHeaderConfigurations - Response Header Actions in the Action Set
4145	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
4146}
4147
4148// ApplicationGatewayRewriteRuleCondition set of conditions in the Rewrite Rule in Application Gateway.
4149type ApplicationGatewayRewriteRuleCondition struct {
4150	// Variable - The condition parameter of the RewriteRuleCondition.
4151	Variable *string `json:"variable,omitempty"`
4152	// Pattern - The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition
4153	Pattern *string `json:"pattern,omitempty"`
4154	// IgnoreCase - Setting this paramter to truth value with force the pattern to do a case in-sensitive comparison.
4155	IgnoreCase *bool `json:"ignoreCase,omitempty"`
4156	// Negate - Setting this value as truth will force to check the negation of the condition given by the user.
4157	Negate *bool `json:"negate,omitempty"`
4158}
4159
4160// ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
4161type ApplicationGatewayRewriteRuleSet struct {
4162	// ApplicationGatewayRewriteRuleSetPropertiesFormat - Properties of the application gateway rewrite rule set.
4163	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
4164	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
4165	Name *string `json:"name,omitempty"`
4166	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4167	Etag *string `json:"etag,omitempty"`
4168	// ID - Resource ID.
4169	ID *string `json:"id,omitempty"`
4170}
4171
4172// MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
4173func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
4174	objectMap := make(map[string]interface{})
4175	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
4176		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
4177	}
4178	if agrrs.Name != nil {
4179		objectMap["name"] = agrrs.Name
4180	}
4181	if agrrs.ID != nil {
4182		objectMap["id"] = agrrs.ID
4183	}
4184	return json.Marshal(objectMap)
4185}
4186
4187// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
4188func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
4189	var m map[string]*json.RawMessage
4190	err := json.Unmarshal(body, &m)
4191	if err != nil {
4192		return err
4193	}
4194	for k, v := range m {
4195		switch k {
4196		case "properties":
4197			if v != nil {
4198				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
4199				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
4200				if err != nil {
4201					return err
4202				}
4203				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
4204			}
4205		case "name":
4206			if v != nil {
4207				var name string
4208				err = json.Unmarshal(*v, &name)
4209				if err != nil {
4210					return err
4211				}
4212				agrrs.Name = &name
4213			}
4214		case "etag":
4215			if v != nil {
4216				var etag string
4217				err = json.Unmarshal(*v, &etag)
4218				if err != nil {
4219					return err
4220				}
4221				agrrs.Etag = &etag
4222			}
4223		case "id":
4224			if v != nil {
4225				var ID string
4226				err = json.Unmarshal(*v, &ID)
4227				if err != nil {
4228					return err
4229				}
4230				agrrs.ID = &ID
4231			}
4232		}
4233	}
4234
4235	return nil
4236}
4237
4238// ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
4239// gateway.
4240type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
4241	// RewriteRules - Rewrite rules in the rewrite rule set.
4242	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
4243	// ProvisioningState - READ-ONLY; Provisioning state of the rewrite rule set resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4244	ProvisioningState *string `json:"provisioningState,omitempty"`
4245}
4246
4247// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
4248// long-running operation.
4249type ApplicationGatewaysBackendHealthFuture struct {
4250	azure.Future
4251}
4252
4253// Result returns the result of the asynchronous operation.
4254// If the operation has not completed it will return an error.
4255func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
4256	var done bool
4257	done, err = future.DoneWithContext(context.Background(), client)
4258	if err != nil {
4259		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
4260		return
4261	}
4262	if !done {
4263		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
4264		return
4265	}
4266	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4267	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
4268		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
4269		if err != nil {
4270			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
4271		}
4272	}
4273	return
4274}
4275
4276// ApplicationGatewaysBackendHealthOnDemandFuture an abstraction for monitoring and retrieving the results
4277// of a long-running operation.
4278type ApplicationGatewaysBackendHealthOnDemandFuture struct {
4279	azure.Future
4280}
4281
4282// Result returns the result of the asynchronous operation.
4283// If the operation has not completed it will return an error.
4284func (future *ApplicationGatewaysBackendHealthOnDemandFuture) Result(client ApplicationGatewaysClient) (agbhod ApplicationGatewayBackendHealthOnDemand, err error) {
4285	var done bool
4286	done, err = future.DoneWithContext(context.Background(), client)
4287	if err != nil {
4288		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", future.Response(), "Polling failure")
4289		return
4290	}
4291	if !done {
4292		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthOnDemandFuture")
4293		return
4294	}
4295	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4296	if agbhod.Response.Response, err = future.GetResult(sender); err == nil && agbhod.Response.Response.StatusCode != http.StatusNoContent {
4297		agbhod, err = client.BackendHealthOnDemandResponder(agbhod.Response.Response)
4298		if err != nil {
4299			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", agbhod.Response.Response, "Failure responding to request")
4300		}
4301	}
4302	return
4303}
4304
4305// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
4306// long-running operation.
4307type ApplicationGatewaysCreateOrUpdateFuture struct {
4308	azure.Future
4309}
4310
4311// Result returns the result of the asynchronous operation.
4312// If the operation has not completed it will return an error.
4313func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4314	var done bool
4315	done, err = future.DoneWithContext(context.Background(), client)
4316	if err != nil {
4317		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4318		return
4319	}
4320	if !done {
4321		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
4322		return
4323	}
4324	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4325	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4326		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
4327		if err != nil {
4328			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
4329		}
4330	}
4331	return
4332}
4333
4334// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
4335// long-running operation.
4336type ApplicationGatewaysDeleteFuture struct {
4337	azure.Future
4338}
4339
4340// Result returns the result of the asynchronous operation.
4341// If the operation has not completed it will return an error.
4342func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4343	var done bool
4344	done, err = future.DoneWithContext(context.Background(), client)
4345	if err != nil {
4346		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
4347		return
4348	}
4349	if !done {
4350		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
4351		return
4352	}
4353	ar.Response = future.Response()
4354	return
4355}
4356
4357// ApplicationGatewaySku SKU of an application gateway
4358type ApplicationGatewaySku struct {
4359	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
4360	Name ApplicationGatewaySkuName `json:"name,omitempty"`
4361	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
4362	Tier ApplicationGatewayTier `json:"tier,omitempty"`
4363	// Capacity - Capacity (instance count) of an application gateway.
4364	Capacity *int32 `json:"capacity,omitempty"`
4365}
4366
4367// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
4368type ApplicationGatewaySslCertificate struct {
4369	// ApplicationGatewaySslCertificatePropertiesFormat - Properties of the application gateway SSL certificate.
4370	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
4371	// Name - Name of the SSL certificate that is unique within an Application Gateway.
4372	Name *string `json:"name,omitempty"`
4373	// Etag - A unique read-only string that changes whenever the resource is updated.
4374	Etag *string `json:"etag,omitempty"`
4375	// Type - Type of the resource.
4376	Type *string `json:"type,omitempty"`
4377	// ID - Resource ID.
4378	ID *string `json:"id,omitempty"`
4379}
4380
4381// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
4382func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
4383	objectMap := make(map[string]interface{})
4384	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
4385		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
4386	}
4387	if agsc.Name != nil {
4388		objectMap["name"] = agsc.Name
4389	}
4390	if agsc.Etag != nil {
4391		objectMap["etag"] = agsc.Etag
4392	}
4393	if agsc.Type != nil {
4394		objectMap["type"] = agsc.Type
4395	}
4396	if agsc.ID != nil {
4397		objectMap["id"] = agsc.ID
4398	}
4399	return json.Marshal(objectMap)
4400}
4401
4402// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
4403func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
4404	var m map[string]*json.RawMessage
4405	err := json.Unmarshal(body, &m)
4406	if err != nil {
4407		return err
4408	}
4409	for k, v := range m {
4410		switch k {
4411		case "properties":
4412			if v != nil {
4413				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
4414				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
4415				if err != nil {
4416					return err
4417				}
4418				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
4419			}
4420		case "name":
4421			if v != nil {
4422				var name string
4423				err = json.Unmarshal(*v, &name)
4424				if err != nil {
4425					return err
4426				}
4427				agsc.Name = &name
4428			}
4429		case "etag":
4430			if v != nil {
4431				var etag string
4432				err = json.Unmarshal(*v, &etag)
4433				if err != nil {
4434					return err
4435				}
4436				agsc.Etag = &etag
4437			}
4438		case "type":
4439			if v != nil {
4440				var typeVar string
4441				err = json.Unmarshal(*v, &typeVar)
4442				if err != nil {
4443					return err
4444				}
4445				agsc.Type = &typeVar
4446			}
4447		case "id":
4448			if v != nil {
4449				var ID string
4450				err = json.Unmarshal(*v, &ID)
4451				if err != nil {
4452					return err
4453				}
4454				agsc.ID = &ID
4455			}
4456		}
4457	}
4458
4459	return nil
4460}
4461
4462// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
4463// gateway.
4464type ApplicationGatewaySslCertificatePropertiesFormat struct {
4465	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
4466	Data *string `json:"data,omitempty"`
4467	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
4468	Password *string `json:"password,omitempty"`
4469	// PublicCertData - Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
4470	PublicCertData *string `json:"publicCertData,omitempty"`
4471	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4472	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4473	// ProvisioningState - Provisioning state of the SSL certificate resource Possible values are: 'Updating', 'Deleting', and 'Failed'.
4474	ProvisioningState *string `json:"provisioningState,omitempty"`
4475}
4476
4477// ApplicationGatewaySslPolicy application Gateway Ssl policy.
4478type ApplicationGatewaySslPolicy struct {
4479	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
4480	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
4481	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
4482	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
4483	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
4484	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
4485	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
4486	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4487	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4488	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4489}
4490
4491// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy
4492type ApplicationGatewaySslPredefinedPolicy struct {
4493	autorest.Response `json:"-"`
4494	// Name - Name of the Ssl predefined policy.
4495	Name *string `json:"name,omitempty"`
4496	// ApplicationGatewaySslPredefinedPolicyPropertiesFormat - Properties of the application gateway SSL predefined policy.
4497	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
4498	// ID - Resource ID.
4499	ID *string `json:"id,omitempty"`
4500}
4501
4502// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
4503func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
4504	objectMap := make(map[string]interface{})
4505	if agspp.Name != nil {
4506		objectMap["name"] = agspp.Name
4507	}
4508	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
4509		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4510	}
4511	if agspp.ID != nil {
4512		objectMap["id"] = agspp.ID
4513	}
4514	return json.Marshal(objectMap)
4515}
4516
4517// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
4518func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
4519	var m map[string]*json.RawMessage
4520	err := json.Unmarshal(body, &m)
4521	if err != nil {
4522		return err
4523	}
4524	for k, v := range m {
4525		switch k {
4526		case "name":
4527			if v != nil {
4528				var name string
4529				err = json.Unmarshal(*v, &name)
4530				if err != nil {
4531					return err
4532				}
4533				agspp.Name = &name
4534			}
4535		case "properties":
4536			if v != nil {
4537				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4538				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
4539				if err != nil {
4540					return err
4541				}
4542				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
4543			}
4544		case "id":
4545			if v != nil {
4546				var ID string
4547				err = json.Unmarshal(*v, &ID)
4548				if err != nil {
4549					return err
4550				}
4551				agspp.ID = &ID
4552			}
4553		}
4554	}
4555
4556	return nil
4557}
4558
4559// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
4560// ApplicationGatewaySslPredefinedPolicy
4561type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
4562	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
4563	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4564	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4565	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4566}
4567
4568// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
4569// long-running operation.
4570type ApplicationGatewaysStartFuture struct {
4571	azure.Future
4572}
4573
4574// Result returns the result of the asynchronous operation.
4575// If the operation has not completed it will return an error.
4576func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4577	var done bool
4578	done, err = future.DoneWithContext(context.Background(), client)
4579	if err != nil {
4580		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
4581		return
4582	}
4583	if !done {
4584		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
4585		return
4586	}
4587	ar.Response = future.Response()
4588	return
4589}
4590
4591// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
4592// operation.
4593type ApplicationGatewaysStopFuture struct {
4594	azure.Future
4595}
4596
4597// Result returns the result of the asynchronous operation.
4598// If the operation has not completed it will return an error.
4599func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4600	var done bool
4601	done, err = future.DoneWithContext(context.Background(), client)
4602	if err != nil {
4603		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
4604		return
4605	}
4606	if !done {
4607		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
4608		return
4609	}
4610	ar.Response = future.Response()
4611	return
4612}
4613
4614// ApplicationGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
4615// long-running operation.
4616type ApplicationGatewaysUpdateTagsFuture struct {
4617	azure.Future
4618}
4619
4620// Result returns the result of the asynchronous operation.
4621// If the operation has not completed it will return an error.
4622func (future *ApplicationGatewaysUpdateTagsFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4623	var done bool
4624	done, err = future.DoneWithContext(context.Background(), client)
4625	if err != nil {
4626		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
4627		return
4628	}
4629	if !done {
4630		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysUpdateTagsFuture")
4631		return
4632	}
4633	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4634	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4635		ag, err = client.UpdateTagsResponder(ag.Response.Response)
4636		if err != nil {
4637			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", ag.Response.Response, "Failure responding to request")
4638		}
4639	}
4640	return
4641}
4642
4643// ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
4644type ApplicationGatewayTrustedRootCertificate struct {
4645	// ApplicationGatewayTrustedRootCertificatePropertiesFormat - Properties of the application gateway trusted root certificate.
4646	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
4647	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
4648	Name *string `json:"name,omitempty"`
4649	// Etag - A unique read-only string that changes whenever the resource is updated.
4650	Etag *string `json:"etag,omitempty"`
4651	// Type - Type of the resource.
4652	Type *string `json:"type,omitempty"`
4653	// ID - Resource ID.
4654	ID *string `json:"id,omitempty"`
4655}
4656
4657// MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
4658func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
4659	objectMap := make(map[string]interface{})
4660	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
4661		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
4662	}
4663	if agtrc.Name != nil {
4664		objectMap["name"] = agtrc.Name
4665	}
4666	if agtrc.Etag != nil {
4667		objectMap["etag"] = agtrc.Etag
4668	}
4669	if agtrc.Type != nil {
4670		objectMap["type"] = agtrc.Type
4671	}
4672	if agtrc.ID != nil {
4673		objectMap["id"] = agtrc.ID
4674	}
4675	return json.Marshal(objectMap)
4676}
4677
4678// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
4679func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
4680	var m map[string]*json.RawMessage
4681	err := json.Unmarshal(body, &m)
4682	if err != nil {
4683		return err
4684	}
4685	for k, v := range m {
4686		switch k {
4687		case "properties":
4688			if v != nil {
4689				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
4690				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
4691				if err != nil {
4692					return err
4693				}
4694				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
4695			}
4696		case "name":
4697			if v != nil {
4698				var name string
4699				err = json.Unmarshal(*v, &name)
4700				if err != nil {
4701					return err
4702				}
4703				agtrc.Name = &name
4704			}
4705		case "etag":
4706			if v != nil {
4707				var etag string
4708				err = json.Unmarshal(*v, &etag)
4709				if err != nil {
4710					return err
4711				}
4712				agtrc.Etag = &etag
4713			}
4714		case "type":
4715			if v != nil {
4716				var typeVar string
4717				err = json.Unmarshal(*v, &typeVar)
4718				if err != nil {
4719					return err
4720				}
4721				agtrc.Type = &typeVar
4722			}
4723		case "id":
4724			if v != nil {
4725				var ID string
4726				err = json.Unmarshal(*v, &ID)
4727				if err != nil {
4728					return err
4729				}
4730				agtrc.ID = &ID
4731			}
4732		}
4733	}
4734
4735	return nil
4736}
4737
4738// ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
4739// application gateway.
4740type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
4741	// Data - Certificate public data.
4742	Data *string `json:"data,omitempty"`
4743	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4744	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4745	// ProvisioningState - Provisioning state of the trusted root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4746	ProvisioningState *string `json:"provisioningState,omitempty"`
4747}
4748
4749// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
4750// PathBasedRouting.
4751type ApplicationGatewayURLPathMap struct {
4752	// ApplicationGatewayURLPathMapPropertiesFormat - Properties of the application gateway URL path map.
4753	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
4754	// Name - Name of the URL path map that is unique within an Application Gateway.
4755	Name *string `json:"name,omitempty"`
4756	// Etag - A unique read-only string that changes whenever the resource is updated.
4757	Etag *string `json:"etag,omitempty"`
4758	// Type - Type of the resource.
4759	Type *string `json:"type,omitempty"`
4760	// ID - Resource ID.
4761	ID *string `json:"id,omitempty"`
4762}
4763
4764// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
4765func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
4766	objectMap := make(map[string]interface{})
4767	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
4768		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
4769	}
4770	if agupm.Name != nil {
4771		objectMap["name"] = agupm.Name
4772	}
4773	if agupm.Etag != nil {
4774		objectMap["etag"] = agupm.Etag
4775	}
4776	if agupm.Type != nil {
4777		objectMap["type"] = agupm.Type
4778	}
4779	if agupm.ID != nil {
4780		objectMap["id"] = agupm.ID
4781	}
4782	return json.Marshal(objectMap)
4783}
4784
4785// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
4786func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
4787	var m map[string]*json.RawMessage
4788	err := json.Unmarshal(body, &m)
4789	if err != nil {
4790		return err
4791	}
4792	for k, v := range m {
4793		switch k {
4794		case "properties":
4795			if v != nil {
4796				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
4797				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
4798				if err != nil {
4799					return err
4800				}
4801				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
4802			}
4803		case "name":
4804			if v != nil {
4805				var name string
4806				err = json.Unmarshal(*v, &name)
4807				if err != nil {
4808					return err
4809				}
4810				agupm.Name = &name
4811			}
4812		case "etag":
4813			if v != nil {
4814				var etag string
4815				err = json.Unmarshal(*v, &etag)
4816				if err != nil {
4817					return err
4818				}
4819				agupm.Etag = &etag
4820			}
4821		case "type":
4822			if v != nil {
4823				var typeVar string
4824				err = json.Unmarshal(*v, &typeVar)
4825				if err != nil {
4826					return err
4827				}
4828				agupm.Type = &typeVar
4829			}
4830		case "id":
4831			if v != nil {
4832				var ID string
4833				err = json.Unmarshal(*v, &ID)
4834				if err != nil {
4835					return err
4836				}
4837				agupm.ID = &ID
4838			}
4839		}
4840	}
4841
4842	return nil
4843}
4844
4845// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
4846type ApplicationGatewayURLPathMapPropertiesFormat struct {
4847	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
4848	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
4849	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
4850	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
4851	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
4852	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
4853	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
4854	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
4855	// PathRules - Path rule of URL path map resource.
4856	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
4857	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4858	ProvisioningState *string `json:"provisioningState,omitempty"`
4859}
4860
4861// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
4862// configuration.
4863type ApplicationGatewayWebApplicationFirewallConfiguration struct {
4864	// Enabled - Whether the web application firewall is enabled or not.
4865	Enabled *bool `json:"enabled,omitempty"`
4866	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
4867	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
4868	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
4869	RuleSetType *string `json:"ruleSetType,omitempty"`
4870	// RuleSetVersion - The version of the rule set type.
4871	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
4872	// DisabledRuleGroups - The disabled rule groups.
4873	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
4874	// RequestBodyCheck - Whether allow WAF to check request Body.
4875	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
4876	// MaxRequestBodySize - Maximum request body size for WAF.
4877	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
4878	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
4879	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
4880	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
4881	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
4882	// Exclusions - The exclusion list.
4883	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
4884}
4885
4886// ApplicationSecurityGroup an application security group in a resource group.
4887type ApplicationSecurityGroup struct {
4888	autorest.Response `json:"-"`
4889	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
4890	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
4891	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4892	Etag *string `json:"etag,omitempty"`
4893	// ID - Resource ID.
4894	ID *string `json:"id,omitempty"`
4895	// Name - READ-ONLY; Resource name.
4896	Name *string `json:"name,omitempty"`
4897	// Type - READ-ONLY; Resource type.
4898	Type *string `json:"type,omitempty"`
4899	// Location - Resource location.
4900	Location *string `json:"location,omitempty"`
4901	// Tags - Resource tags.
4902	Tags map[string]*string `json:"tags"`
4903}
4904
4905// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
4906func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
4907	objectMap := make(map[string]interface{})
4908	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
4909		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
4910	}
4911	if asg.ID != nil {
4912		objectMap["id"] = asg.ID
4913	}
4914	if asg.Location != nil {
4915		objectMap["location"] = asg.Location
4916	}
4917	if asg.Tags != nil {
4918		objectMap["tags"] = asg.Tags
4919	}
4920	return json.Marshal(objectMap)
4921}
4922
4923// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
4924func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
4925	var m map[string]*json.RawMessage
4926	err := json.Unmarshal(body, &m)
4927	if err != nil {
4928		return err
4929	}
4930	for k, v := range m {
4931		switch k {
4932		case "properties":
4933			if v != nil {
4934				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
4935				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
4936				if err != nil {
4937					return err
4938				}
4939				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
4940			}
4941		case "etag":
4942			if v != nil {
4943				var etag string
4944				err = json.Unmarshal(*v, &etag)
4945				if err != nil {
4946					return err
4947				}
4948				asg.Etag = &etag
4949			}
4950		case "id":
4951			if v != nil {
4952				var ID string
4953				err = json.Unmarshal(*v, &ID)
4954				if err != nil {
4955					return err
4956				}
4957				asg.ID = &ID
4958			}
4959		case "name":
4960			if v != nil {
4961				var name string
4962				err = json.Unmarshal(*v, &name)
4963				if err != nil {
4964					return err
4965				}
4966				asg.Name = &name
4967			}
4968		case "type":
4969			if v != nil {
4970				var typeVar string
4971				err = json.Unmarshal(*v, &typeVar)
4972				if err != nil {
4973					return err
4974				}
4975				asg.Type = &typeVar
4976			}
4977		case "location":
4978			if v != nil {
4979				var location string
4980				err = json.Unmarshal(*v, &location)
4981				if err != nil {
4982					return err
4983				}
4984				asg.Location = &location
4985			}
4986		case "tags":
4987			if v != nil {
4988				var tags map[string]*string
4989				err = json.Unmarshal(*v, &tags)
4990				if err != nil {
4991					return err
4992				}
4993				asg.Tags = tags
4994			}
4995		}
4996	}
4997
4998	return nil
4999}
5000
5001// ApplicationSecurityGroupListResult a list of application security groups.
5002type ApplicationSecurityGroupListResult struct {
5003	autorest.Response `json:"-"`
5004	// Value - A list of application security groups.
5005	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
5006	// NextLink - READ-ONLY; The URL to get the next set of results.
5007	NextLink *string `json:"nextLink,omitempty"`
5008}
5009
5010// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
5011// ApplicationSecurityGroup values.
5012type ApplicationSecurityGroupListResultIterator struct {
5013	i    int
5014	page ApplicationSecurityGroupListResultPage
5015}
5016
5017// NextWithContext advances to the next value.  If there was an error making
5018// the request the iterator does not advance and the error is returned.
5019func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
5020	if tracing.IsEnabled() {
5021		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
5022		defer func() {
5023			sc := -1
5024			if iter.Response().Response.Response != nil {
5025				sc = iter.Response().Response.Response.StatusCode
5026			}
5027			tracing.EndSpan(ctx, sc, err)
5028		}()
5029	}
5030	iter.i++
5031	if iter.i < len(iter.page.Values()) {
5032		return nil
5033	}
5034	err = iter.page.NextWithContext(ctx)
5035	if err != nil {
5036		iter.i--
5037		return err
5038	}
5039	iter.i = 0
5040	return nil
5041}
5042
5043// Next advances to the next value.  If there was an error making
5044// the request the iterator does not advance and the error is returned.
5045// Deprecated: Use NextWithContext() instead.
5046func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
5047	return iter.NextWithContext(context.Background())
5048}
5049
5050// NotDone returns true if the enumeration should be started or is not yet complete.
5051func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
5052	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5053}
5054
5055// Response returns the raw server response from the last page request.
5056func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
5057	return iter.page.Response()
5058}
5059
5060// Value returns the current value or a zero-initialized value if the
5061// iterator has advanced beyond the end of the collection.
5062func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
5063	if !iter.page.NotDone() {
5064		return ApplicationSecurityGroup{}
5065	}
5066	return iter.page.Values()[iter.i]
5067}
5068
5069// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
5070func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
5071	return ApplicationSecurityGroupListResultIterator{page: page}
5072}
5073
5074// IsEmpty returns true if the ListResult contains no values.
5075func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
5076	return asglr.Value == nil || len(*asglr.Value) == 0
5077}
5078
5079// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
5080// It returns nil if no more results exist.
5081func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
5082	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
5083		return nil, nil
5084	}
5085	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5086		autorest.AsJSON(),
5087		autorest.AsGet(),
5088		autorest.WithBaseURL(to.String(asglr.NextLink)))
5089}
5090
5091// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
5092type ApplicationSecurityGroupListResultPage struct {
5093	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
5094	asglr ApplicationSecurityGroupListResult
5095}
5096
5097// NextWithContext advances to the next page of values.  If there was an error making
5098// the request the page does not advance and the error is returned.
5099func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
5100	if tracing.IsEnabled() {
5101		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
5102		defer func() {
5103			sc := -1
5104			if page.Response().Response.Response != nil {
5105				sc = page.Response().Response.Response.StatusCode
5106			}
5107			tracing.EndSpan(ctx, sc, err)
5108		}()
5109	}
5110	next, err := page.fn(ctx, page.asglr)
5111	if err != nil {
5112		return err
5113	}
5114	page.asglr = next
5115	return nil
5116}
5117
5118// Next advances to the next page of values.  If there was an error making
5119// the request the page does not advance and the error is returned.
5120// Deprecated: Use NextWithContext() instead.
5121func (page *ApplicationSecurityGroupListResultPage) Next() error {
5122	return page.NextWithContext(context.Background())
5123}
5124
5125// NotDone returns true if the page enumeration should be started or is not yet complete.
5126func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
5127	return !page.asglr.IsEmpty()
5128}
5129
5130// Response returns the raw server response from the last page request.
5131func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
5132	return page.asglr
5133}
5134
5135// Values returns the slice of values for the current page or nil if there are no values.
5136func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
5137	if page.asglr.IsEmpty() {
5138		return nil
5139	}
5140	return *page.asglr.Value
5141}
5142
5143// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
5144func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
5145	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
5146}
5147
5148// ApplicationSecurityGroupPropertiesFormat application security group properties.
5149type ApplicationSecurityGroupPropertiesFormat struct {
5150	// 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.
5151	ResourceGUID *string `json:"resourceGuid,omitempty"`
5152	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
5153	ProvisioningState *string `json:"provisioningState,omitempty"`
5154}
5155
5156// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
5157// of a long-running operation.
5158type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
5159	azure.Future
5160}
5161
5162// Result returns the result of the asynchronous operation.
5163// If the operation has not completed it will return an error.
5164func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5165	var done bool
5166	done, err = future.DoneWithContext(context.Background(), client)
5167	if err != nil {
5168		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5169		return
5170	}
5171	if !done {
5172		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
5173		return
5174	}
5175	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5176	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5177		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
5178		if err != nil {
5179			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
5180		}
5181	}
5182	return
5183}
5184
5185// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
5186// long-running operation.
5187type ApplicationSecurityGroupsDeleteFuture struct {
5188	azure.Future
5189}
5190
5191// Result returns the result of the asynchronous operation.
5192// If the operation has not completed it will return an error.
5193func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
5194	var done bool
5195	done, err = future.DoneWithContext(context.Background(), client)
5196	if err != nil {
5197		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
5198		return
5199	}
5200	if !done {
5201		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
5202		return
5203	}
5204	ar.Response = future.Response()
5205	return
5206}
5207
5208// ApplicationSecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
5209// long-running operation.
5210type ApplicationSecurityGroupsUpdateTagsFuture struct {
5211	azure.Future
5212}
5213
5214// Result returns the result of the asynchronous operation.
5215// If the operation has not completed it will return an error.
5216func (future *ApplicationSecurityGroupsUpdateTagsFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5217	var done bool
5218	done, err = future.DoneWithContext(context.Background(), client)
5219	if err != nil {
5220		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
5221		return
5222	}
5223	if !done {
5224		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsUpdateTagsFuture")
5225		return
5226	}
5227	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5228	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5229		asg, err = client.UpdateTagsResponder(asg.Response.Response)
5230		if err != nil {
5231			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", asg.Response.Response, "Failure responding to request")
5232		}
5233	}
5234	return
5235}
5236
5237// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
5238// that belongs to an ExpressRouteCircuit.
5239type AuthorizationListResult struct {
5240	autorest.Response `json:"-"`
5241	// Value - The authorizations in an ExpressRoute Circuit.
5242	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
5243	// NextLink - The URL to get the next set of results.
5244	NextLink *string `json:"nextLink,omitempty"`
5245}
5246
5247// AuthorizationListResultIterator provides access to a complete listing of
5248// ExpressRouteCircuitAuthorization values.
5249type AuthorizationListResultIterator struct {
5250	i    int
5251	page AuthorizationListResultPage
5252}
5253
5254// NextWithContext advances to the next value.  If there was an error making
5255// the request the iterator does not advance and the error is returned.
5256func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
5257	if tracing.IsEnabled() {
5258		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
5259		defer func() {
5260			sc := -1
5261			if iter.Response().Response.Response != nil {
5262				sc = iter.Response().Response.Response.StatusCode
5263			}
5264			tracing.EndSpan(ctx, sc, err)
5265		}()
5266	}
5267	iter.i++
5268	if iter.i < len(iter.page.Values()) {
5269		return nil
5270	}
5271	err = iter.page.NextWithContext(ctx)
5272	if err != nil {
5273		iter.i--
5274		return err
5275	}
5276	iter.i = 0
5277	return nil
5278}
5279
5280// Next advances to the next value.  If there was an error making
5281// the request the iterator does not advance and the error is returned.
5282// Deprecated: Use NextWithContext() instead.
5283func (iter *AuthorizationListResultIterator) Next() error {
5284	return iter.NextWithContext(context.Background())
5285}
5286
5287// NotDone returns true if the enumeration should be started or is not yet complete.
5288func (iter AuthorizationListResultIterator) NotDone() bool {
5289	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5290}
5291
5292// Response returns the raw server response from the last page request.
5293func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
5294	return iter.page.Response()
5295}
5296
5297// Value returns the current value or a zero-initialized value if the
5298// iterator has advanced beyond the end of the collection.
5299func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
5300	if !iter.page.NotDone() {
5301		return ExpressRouteCircuitAuthorization{}
5302	}
5303	return iter.page.Values()[iter.i]
5304}
5305
5306// Creates a new instance of the AuthorizationListResultIterator type.
5307func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
5308	return AuthorizationListResultIterator{page: page}
5309}
5310
5311// IsEmpty returns true if the ListResult contains no values.
5312func (alr AuthorizationListResult) IsEmpty() bool {
5313	return alr.Value == nil || len(*alr.Value) == 0
5314}
5315
5316// authorizationListResultPreparer prepares a request to retrieve the next set of results.
5317// It returns nil if no more results exist.
5318func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
5319	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
5320		return nil, nil
5321	}
5322	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5323		autorest.AsJSON(),
5324		autorest.AsGet(),
5325		autorest.WithBaseURL(to.String(alr.NextLink)))
5326}
5327
5328// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
5329type AuthorizationListResultPage struct {
5330	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
5331	alr AuthorizationListResult
5332}
5333
5334// NextWithContext advances to the next page of values.  If there was an error making
5335// the request the page does not advance and the error is returned.
5336func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
5337	if tracing.IsEnabled() {
5338		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
5339		defer func() {
5340			sc := -1
5341			if page.Response().Response.Response != nil {
5342				sc = page.Response().Response.Response.StatusCode
5343			}
5344			tracing.EndSpan(ctx, sc, err)
5345		}()
5346	}
5347	next, err := page.fn(ctx, page.alr)
5348	if err != nil {
5349		return err
5350	}
5351	page.alr = next
5352	return nil
5353}
5354
5355// Next advances to the next page of values.  If there was an error making
5356// the request the page does not advance and the error is returned.
5357// Deprecated: Use NextWithContext() instead.
5358func (page *AuthorizationListResultPage) Next() error {
5359	return page.NextWithContext(context.Background())
5360}
5361
5362// NotDone returns true if the page enumeration should be started or is not yet complete.
5363func (page AuthorizationListResultPage) NotDone() bool {
5364	return !page.alr.IsEmpty()
5365}
5366
5367// Response returns the raw server response from the last page request.
5368func (page AuthorizationListResultPage) Response() AuthorizationListResult {
5369	return page.alr
5370}
5371
5372// Values returns the slice of values for the current page or nil if there are no values.
5373func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
5374	if page.alr.IsEmpty() {
5375		return nil
5376	}
5377	return *page.alr.Value
5378}
5379
5380// Creates a new instance of the AuthorizationListResultPage type.
5381func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
5382	return AuthorizationListResultPage{fn: getNextPage}
5383}
5384
5385// AuthorizationPropertiesFormat properties of ExpressRouteCircuitAuthorization.
5386type AuthorizationPropertiesFormat struct {
5387	// AuthorizationKey - The authorization key.
5388	AuthorizationKey *string `json:"authorizationKey,omitempty"`
5389	// AuthorizationUseStatus - AuthorizationUseStatus. Possible values are: 'Available' and 'InUse'. Possible values include: 'Available', 'InUse'
5390	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
5391	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
5392	ProvisioningState *string `json:"provisioningState,omitempty"`
5393}
5394
5395// Availability availability of the metric.
5396type Availability struct {
5397	// TimeGrain - The time grain of the availability.
5398	TimeGrain *string `json:"timeGrain,omitempty"`
5399	// Retention - The retention of the availability.
5400	Retention *string `json:"retention,omitempty"`
5401	// BlobDuration - Duration of the availability blob.
5402	BlobDuration *string `json:"blobDuration,omitempty"`
5403}
5404
5405// AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
5406// subnet.
5407type AvailableDelegation struct {
5408	// Name - The name of the AvailableDelegation resource.
5409	Name *string `json:"name,omitempty"`
5410	// ID - A unique identifier of the AvailableDelegation resource.
5411	ID *string `json:"id,omitempty"`
5412	// Type - Resource type.
5413	Type *string `json:"type,omitempty"`
5414	// ServiceName - The name of the service and resource
5415	ServiceName *string `json:"serviceName,omitempty"`
5416	// Actions - Describes the actions permitted to the service upon delegation
5417	Actions *[]string `json:"actions,omitempty"`
5418}
5419
5420// AvailableDelegationsResult an array of available delegations.
5421type AvailableDelegationsResult struct {
5422	autorest.Response `json:"-"`
5423	// Value - An array of available delegations.
5424	Value *[]AvailableDelegation `json:"value,omitempty"`
5425	// NextLink - READ-ONLY; The URL to get the next set of results.
5426	NextLink *string `json:"nextLink,omitempty"`
5427}
5428
5429// AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
5430type AvailableDelegationsResultIterator struct {
5431	i    int
5432	page AvailableDelegationsResultPage
5433}
5434
5435// NextWithContext advances to the next value.  If there was an error making
5436// the request the iterator does not advance and the error is returned.
5437func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
5438	if tracing.IsEnabled() {
5439		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
5440		defer func() {
5441			sc := -1
5442			if iter.Response().Response.Response != nil {
5443				sc = iter.Response().Response.Response.StatusCode
5444			}
5445			tracing.EndSpan(ctx, sc, err)
5446		}()
5447	}
5448	iter.i++
5449	if iter.i < len(iter.page.Values()) {
5450		return nil
5451	}
5452	err = iter.page.NextWithContext(ctx)
5453	if err != nil {
5454		iter.i--
5455		return err
5456	}
5457	iter.i = 0
5458	return nil
5459}
5460
5461// Next advances to the next value.  If there was an error making
5462// the request the iterator does not advance and the error is returned.
5463// Deprecated: Use NextWithContext() instead.
5464func (iter *AvailableDelegationsResultIterator) Next() error {
5465	return iter.NextWithContext(context.Background())
5466}
5467
5468// NotDone returns true if the enumeration should be started or is not yet complete.
5469func (iter AvailableDelegationsResultIterator) NotDone() bool {
5470	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5471}
5472
5473// Response returns the raw server response from the last page request.
5474func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
5475	return iter.page.Response()
5476}
5477
5478// Value returns the current value or a zero-initialized value if the
5479// iterator has advanced beyond the end of the collection.
5480func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
5481	if !iter.page.NotDone() {
5482		return AvailableDelegation{}
5483	}
5484	return iter.page.Values()[iter.i]
5485}
5486
5487// Creates a new instance of the AvailableDelegationsResultIterator type.
5488func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
5489	return AvailableDelegationsResultIterator{page: page}
5490}
5491
5492// IsEmpty returns true if the ListResult contains no values.
5493func (adr AvailableDelegationsResult) IsEmpty() bool {
5494	return adr.Value == nil || len(*adr.Value) == 0
5495}
5496
5497// availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
5498// It returns nil if no more results exist.
5499func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
5500	if adr.NextLink == nil || len(to.String(adr.NextLink)) < 1 {
5501		return nil, nil
5502	}
5503	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5504		autorest.AsJSON(),
5505		autorest.AsGet(),
5506		autorest.WithBaseURL(to.String(adr.NextLink)))
5507}
5508
5509// AvailableDelegationsResultPage contains a page of AvailableDelegation values.
5510type AvailableDelegationsResultPage struct {
5511	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
5512	adr AvailableDelegationsResult
5513}
5514
5515// NextWithContext advances to the next page of values.  If there was an error making
5516// the request the page does not advance and the error is returned.
5517func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
5518	if tracing.IsEnabled() {
5519		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
5520		defer func() {
5521			sc := -1
5522			if page.Response().Response.Response != nil {
5523				sc = page.Response().Response.Response.StatusCode
5524			}
5525			tracing.EndSpan(ctx, sc, err)
5526		}()
5527	}
5528	next, err := page.fn(ctx, page.adr)
5529	if err != nil {
5530		return err
5531	}
5532	page.adr = next
5533	return nil
5534}
5535
5536// Next advances to the next page of values.  If there was an error making
5537// the request the page does not advance and the error is returned.
5538// Deprecated: Use NextWithContext() instead.
5539func (page *AvailableDelegationsResultPage) Next() error {
5540	return page.NextWithContext(context.Background())
5541}
5542
5543// NotDone returns true if the page enumeration should be started or is not yet complete.
5544func (page AvailableDelegationsResultPage) NotDone() bool {
5545	return !page.adr.IsEmpty()
5546}
5547
5548// Response returns the raw server response from the last page request.
5549func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
5550	return page.adr
5551}
5552
5553// Values returns the slice of values for the current page or nil if there are no values.
5554func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
5555	if page.adr.IsEmpty() {
5556		return nil
5557	}
5558	return *page.adr.Value
5559}
5560
5561// Creates a new instance of the AvailableDelegationsResultPage type.
5562func NewAvailableDelegationsResultPage(getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
5563	return AvailableDelegationsResultPage{fn: getNextPage}
5564}
5565
5566// AvailableProvidersList list of available countries with details.
5567type AvailableProvidersList struct {
5568	autorest.Response `json:"-"`
5569	// Countries - List of available countries.
5570	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
5571}
5572
5573// AvailableProvidersListCity city or town details.
5574type AvailableProvidersListCity struct {
5575	// CityName - The city or town name.
5576	CityName *string `json:"cityName,omitempty"`
5577	// Providers - A list of Internet service providers.
5578	Providers *[]string `json:"providers,omitempty"`
5579}
5580
5581// AvailableProvidersListCountry country details.
5582type AvailableProvidersListCountry struct {
5583	// CountryName - The country name.
5584	CountryName *string `json:"countryName,omitempty"`
5585	// Providers - A list of Internet service providers.
5586	Providers *[]string `json:"providers,omitempty"`
5587	// States - List of available states in the country.
5588	States *[]AvailableProvidersListState `json:"states,omitempty"`
5589}
5590
5591// AvailableProvidersListParameters constraints that determine the list of available Internet service
5592// providers.
5593type AvailableProvidersListParameters struct {
5594	// AzureLocations - A list of Azure regions.
5595	AzureLocations *[]string `json:"azureLocations,omitempty"`
5596	// Country - The country for available providers list.
5597	Country *string `json:"country,omitempty"`
5598	// State - The state for available providers list.
5599	State *string `json:"state,omitempty"`
5600	// City - The city or town for available providers list.
5601	City *string `json:"city,omitempty"`
5602}
5603
5604// AvailableProvidersListState state details.
5605type AvailableProvidersListState struct {
5606	// StateName - The state name.
5607	StateName *string `json:"stateName,omitempty"`
5608	// Providers - A list of Internet service providers.
5609	Providers *[]string `json:"providers,omitempty"`
5610	// Cities - List of available cities or towns in the state.
5611	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
5612}
5613
5614// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
5615// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
5616// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
5617// operation succeeded, the response body includes the HTTP status code for the successful request. If the
5618// asynchronous operation failed, the response body includes the HTTP status code for the failed request
5619// and error information regarding the failure.
5620type AzureAsyncOperationResult struct {
5621	// Status - Status of the Azure async operation. Possible values are: 'InProgress', 'Succeeded', and 'Failed'. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
5622	Status OperationStatus `json:"status,omitempty"`
5623	// Error - Details of the error occurred during specified asynchronous operation.
5624	Error *Error `json:"error,omitempty"`
5625}
5626
5627// AzureFirewall azure Firewall resource
5628type AzureFirewall struct {
5629	autorest.Response `json:"-"`
5630	// AzureFirewallPropertiesFormat - Properties of the azure firewall.
5631	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
5632	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5633	Etag *string `json:"etag,omitempty"`
5634	// ID - Resource ID.
5635	ID *string `json:"id,omitempty"`
5636	// Name - READ-ONLY; Resource name.
5637	Name *string `json:"name,omitempty"`
5638	// Type - READ-ONLY; Resource type.
5639	Type *string `json:"type,omitempty"`
5640	// Location - Resource location.
5641	Location *string `json:"location,omitempty"`
5642	// Tags - Resource tags.
5643	Tags map[string]*string `json:"tags"`
5644}
5645
5646// MarshalJSON is the custom marshaler for AzureFirewall.
5647func (af AzureFirewall) MarshalJSON() ([]byte, error) {
5648	objectMap := make(map[string]interface{})
5649	if af.AzureFirewallPropertiesFormat != nil {
5650		objectMap["properties"] = af.AzureFirewallPropertiesFormat
5651	}
5652	if af.ID != nil {
5653		objectMap["id"] = af.ID
5654	}
5655	if af.Location != nil {
5656		objectMap["location"] = af.Location
5657	}
5658	if af.Tags != nil {
5659		objectMap["tags"] = af.Tags
5660	}
5661	return json.Marshal(objectMap)
5662}
5663
5664// UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
5665func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
5666	var m map[string]*json.RawMessage
5667	err := json.Unmarshal(body, &m)
5668	if err != nil {
5669		return err
5670	}
5671	for k, v := range m {
5672		switch k {
5673		case "properties":
5674			if v != nil {
5675				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
5676				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
5677				if err != nil {
5678					return err
5679				}
5680				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
5681			}
5682		case "etag":
5683			if v != nil {
5684				var etag string
5685				err = json.Unmarshal(*v, &etag)
5686				if err != nil {
5687					return err
5688				}
5689				af.Etag = &etag
5690			}
5691		case "id":
5692			if v != nil {
5693				var ID string
5694				err = json.Unmarshal(*v, &ID)
5695				if err != nil {
5696					return err
5697				}
5698				af.ID = &ID
5699			}
5700		case "name":
5701			if v != nil {
5702				var name string
5703				err = json.Unmarshal(*v, &name)
5704				if err != nil {
5705					return err
5706				}
5707				af.Name = &name
5708			}
5709		case "type":
5710			if v != nil {
5711				var typeVar string
5712				err = json.Unmarshal(*v, &typeVar)
5713				if err != nil {
5714					return err
5715				}
5716				af.Type = &typeVar
5717			}
5718		case "location":
5719			if v != nil {
5720				var location string
5721				err = json.Unmarshal(*v, &location)
5722				if err != nil {
5723					return err
5724				}
5725				af.Location = &location
5726			}
5727		case "tags":
5728			if v != nil {
5729				var tags map[string]*string
5730				err = json.Unmarshal(*v, &tags)
5731				if err != nil {
5732					return err
5733				}
5734				af.Tags = tags
5735			}
5736		}
5737	}
5738
5739	return nil
5740}
5741
5742// AzureFirewallApplicationRule properties of an application rule.
5743type AzureFirewallApplicationRule struct {
5744	// Name - Name of the application rule.
5745	Name *string `json:"name,omitempty"`
5746	// Description - Description of the rule.
5747	Description *string `json:"description,omitempty"`
5748	// SourceAddresses - List of source IP addresses for this rule.
5749	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
5750	// Protocols - Array of ApplicationRuleProtocols.
5751	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
5752	// TargetFqdns - List of FQDNs for this rule.
5753	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
5754	// FqdnTags - List of FQDN Tags for this rule.
5755	FqdnTags *[]string `json:"fqdnTags,omitempty"`
5756}
5757
5758// AzureFirewallApplicationRuleCollection application rule collection resource
5759type AzureFirewallApplicationRuleCollection struct {
5760	// AzureFirewallApplicationRuleCollectionPropertiesFormat - Properties of the azure firewall application rule collection.
5761	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
5762	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
5763	Name *string `json:"name,omitempty"`
5764	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5765	Etag *string `json:"etag,omitempty"`
5766	// ID - Resource ID.
5767	ID *string `json:"id,omitempty"`
5768}
5769
5770// MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
5771func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
5772	objectMap := make(map[string]interface{})
5773	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
5774		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
5775	}
5776	if afarc.Name != nil {
5777		objectMap["name"] = afarc.Name
5778	}
5779	if afarc.ID != nil {
5780		objectMap["id"] = afarc.ID
5781	}
5782	return json.Marshal(objectMap)
5783}
5784
5785// UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
5786func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
5787	var m map[string]*json.RawMessage
5788	err := json.Unmarshal(body, &m)
5789	if err != nil {
5790		return err
5791	}
5792	for k, v := range m {
5793		switch k {
5794		case "properties":
5795			if v != nil {
5796				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
5797				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
5798				if err != nil {
5799					return err
5800				}
5801				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
5802			}
5803		case "name":
5804			if v != nil {
5805				var name string
5806				err = json.Unmarshal(*v, &name)
5807				if err != nil {
5808					return err
5809				}
5810				afarc.Name = &name
5811			}
5812		case "etag":
5813			if v != nil {
5814				var etag string
5815				err = json.Unmarshal(*v, &etag)
5816				if err != nil {
5817					return err
5818				}
5819				afarc.Etag = &etag
5820			}
5821		case "id":
5822			if v != nil {
5823				var ID string
5824				err = json.Unmarshal(*v, &ID)
5825				if err != nil {
5826					return err
5827				}
5828				afarc.ID = &ID
5829			}
5830		}
5831	}
5832
5833	return nil
5834}
5835
5836// AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
5837type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
5838	// Priority - Priority of the application rule collection resource.
5839	Priority *int32 `json:"priority,omitempty"`
5840	// Action - The action type of a rule collection
5841	Action *AzureFirewallRCAction `json:"action,omitempty"`
5842	// Rules - Collection of rules used by a application rule collection.
5843	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
5844	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5845	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5846}
5847
5848// AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
5849type AzureFirewallApplicationRuleProtocol struct {
5850	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS'
5851	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
5852	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
5853	Port *int32 `json:"port,omitempty"`
5854}
5855
5856// AzureFirewallFqdnTag azure Firewall FQDN Tag Resource
5857type AzureFirewallFqdnTag struct {
5858	// AzureFirewallFqdnTagPropertiesFormat - Properties of the azure firewall FQDN tag.
5859	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
5860	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5861	Etag *string `json:"etag,omitempty"`
5862	// ID - Resource ID.
5863	ID *string `json:"id,omitempty"`
5864	// Name - READ-ONLY; Resource name.
5865	Name *string `json:"name,omitempty"`
5866	// Type - READ-ONLY; Resource type.
5867	Type *string `json:"type,omitempty"`
5868	// Location - Resource location.
5869	Location *string `json:"location,omitempty"`
5870	// Tags - Resource tags.
5871	Tags map[string]*string `json:"tags"`
5872}
5873
5874// MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
5875func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
5876	objectMap := make(map[string]interface{})
5877	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
5878		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
5879	}
5880	if afft.ID != nil {
5881		objectMap["id"] = afft.ID
5882	}
5883	if afft.Location != nil {
5884		objectMap["location"] = afft.Location
5885	}
5886	if afft.Tags != nil {
5887		objectMap["tags"] = afft.Tags
5888	}
5889	return json.Marshal(objectMap)
5890}
5891
5892// UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
5893func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
5894	var m map[string]*json.RawMessage
5895	err := json.Unmarshal(body, &m)
5896	if err != nil {
5897		return err
5898	}
5899	for k, v := range m {
5900		switch k {
5901		case "properties":
5902			if v != nil {
5903				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
5904				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
5905				if err != nil {
5906					return err
5907				}
5908				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
5909			}
5910		case "etag":
5911			if v != nil {
5912				var etag string
5913				err = json.Unmarshal(*v, &etag)
5914				if err != nil {
5915					return err
5916				}
5917				afft.Etag = &etag
5918			}
5919		case "id":
5920			if v != nil {
5921				var ID string
5922				err = json.Unmarshal(*v, &ID)
5923				if err != nil {
5924					return err
5925				}
5926				afft.ID = &ID
5927			}
5928		case "name":
5929			if v != nil {
5930				var name string
5931				err = json.Unmarshal(*v, &name)
5932				if err != nil {
5933					return err
5934				}
5935				afft.Name = &name
5936			}
5937		case "type":
5938			if v != nil {
5939				var typeVar string
5940				err = json.Unmarshal(*v, &typeVar)
5941				if err != nil {
5942					return err
5943				}
5944				afft.Type = &typeVar
5945			}
5946		case "location":
5947			if v != nil {
5948				var location string
5949				err = json.Unmarshal(*v, &location)
5950				if err != nil {
5951					return err
5952				}
5953				afft.Location = &location
5954			}
5955		case "tags":
5956			if v != nil {
5957				var tags map[string]*string
5958				err = json.Unmarshal(*v, &tags)
5959				if err != nil {
5960					return err
5961				}
5962				afft.Tags = tags
5963			}
5964		}
5965	}
5966
5967	return nil
5968}
5969
5970// AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
5971type AzureFirewallFqdnTagListResult struct {
5972	autorest.Response `json:"-"`
5973	// Value - List of Azure Firewall FQDN Tags in a resource group.
5974	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
5975	// NextLink - URL to get the next set of results.
5976	NextLink *string `json:"nextLink,omitempty"`
5977}
5978
5979// AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
5980// values.
5981type AzureFirewallFqdnTagListResultIterator struct {
5982	i    int
5983	page AzureFirewallFqdnTagListResultPage
5984}
5985
5986// NextWithContext advances to the next value.  If there was an error making
5987// the request the iterator does not advance and the error is returned.
5988func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
5989	if tracing.IsEnabled() {
5990		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
5991		defer func() {
5992			sc := -1
5993			if iter.Response().Response.Response != nil {
5994				sc = iter.Response().Response.Response.StatusCode
5995			}
5996			tracing.EndSpan(ctx, sc, err)
5997		}()
5998	}
5999	iter.i++
6000	if iter.i < len(iter.page.Values()) {
6001		return nil
6002	}
6003	err = iter.page.NextWithContext(ctx)
6004	if err != nil {
6005		iter.i--
6006		return err
6007	}
6008	iter.i = 0
6009	return nil
6010}
6011
6012// Next advances to the next value.  If there was an error making
6013// the request the iterator does not advance and the error is returned.
6014// Deprecated: Use NextWithContext() instead.
6015func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
6016	return iter.NextWithContext(context.Background())
6017}
6018
6019// NotDone returns true if the enumeration should be started or is not yet complete.
6020func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
6021	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6022}
6023
6024// Response returns the raw server response from the last page request.
6025func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
6026	return iter.page.Response()
6027}
6028
6029// Value returns the current value or a zero-initialized value if the
6030// iterator has advanced beyond the end of the collection.
6031func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
6032	if !iter.page.NotDone() {
6033		return AzureFirewallFqdnTag{}
6034	}
6035	return iter.page.Values()[iter.i]
6036}
6037
6038// Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
6039func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
6040	return AzureFirewallFqdnTagListResultIterator{page: page}
6041}
6042
6043// IsEmpty returns true if the ListResult contains no values.
6044func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
6045	return afftlr.Value == nil || len(*afftlr.Value) == 0
6046}
6047
6048// azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
6049// It returns nil if no more results exist.
6050func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
6051	if afftlr.NextLink == nil || len(to.String(afftlr.NextLink)) < 1 {
6052		return nil, nil
6053	}
6054	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6055		autorest.AsJSON(),
6056		autorest.AsGet(),
6057		autorest.WithBaseURL(to.String(afftlr.NextLink)))
6058}
6059
6060// AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
6061type AzureFirewallFqdnTagListResultPage struct {
6062	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
6063	afftlr AzureFirewallFqdnTagListResult
6064}
6065
6066// NextWithContext advances to the next page of values.  If there was an error making
6067// the request the page does not advance and the error is returned.
6068func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
6069	if tracing.IsEnabled() {
6070		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
6071		defer func() {
6072			sc := -1
6073			if page.Response().Response.Response != nil {
6074				sc = page.Response().Response.Response.StatusCode
6075			}
6076			tracing.EndSpan(ctx, sc, err)
6077		}()
6078	}
6079	next, err := page.fn(ctx, page.afftlr)
6080	if err != nil {
6081		return err
6082	}
6083	page.afftlr = next
6084	return nil
6085}
6086
6087// Next advances to the next page of values.  If there was an error making
6088// the request the page does not advance and the error is returned.
6089// Deprecated: Use NextWithContext() instead.
6090func (page *AzureFirewallFqdnTagListResultPage) Next() error {
6091	return page.NextWithContext(context.Background())
6092}
6093
6094// NotDone returns true if the page enumeration should be started or is not yet complete.
6095func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
6096	return !page.afftlr.IsEmpty()
6097}
6098
6099// Response returns the raw server response from the last page request.
6100func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
6101	return page.afftlr
6102}
6103
6104// Values returns the slice of values for the current page or nil if there are no values.
6105func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
6106	if page.afftlr.IsEmpty() {
6107		return nil
6108	}
6109	return *page.afftlr.Value
6110}
6111
6112// Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
6113func NewAzureFirewallFqdnTagListResultPage(getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
6114	return AzureFirewallFqdnTagListResultPage{fn: getNextPage}
6115}
6116
6117// AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties
6118type AzureFirewallFqdnTagPropertiesFormat struct {
6119	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
6120	ProvisioningState *string `json:"provisioningState,omitempty"`
6121	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
6122	FqdnTagName *string `json:"fqdnTagName,omitempty"`
6123}
6124
6125// AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
6126type AzureFirewallIPConfiguration struct {
6127	// AzureFirewallIPConfigurationPropertiesFormat - Properties of the azure firewall IP configuration.
6128	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
6129	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
6130	Name *string `json:"name,omitempty"`
6131	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6132	Etag *string `json:"etag,omitempty"`
6133	// ID - Resource ID.
6134	ID *string `json:"id,omitempty"`
6135}
6136
6137// MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
6138func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
6139	objectMap := make(map[string]interface{})
6140	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
6141		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
6142	}
6143	if afic.Name != nil {
6144		objectMap["name"] = afic.Name
6145	}
6146	if afic.ID != nil {
6147		objectMap["id"] = afic.ID
6148	}
6149	return json.Marshal(objectMap)
6150}
6151
6152// UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
6153func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
6154	var m map[string]*json.RawMessage
6155	err := json.Unmarshal(body, &m)
6156	if err != nil {
6157		return err
6158	}
6159	for k, v := range m {
6160		switch k {
6161		case "properties":
6162			if v != nil {
6163				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
6164				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
6165				if err != nil {
6166					return err
6167				}
6168				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
6169			}
6170		case "name":
6171			if v != nil {
6172				var name string
6173				err = json.Unmarshal(*v, &name)
6174				if err != nil {
6175					return err
6176				}
6177				afic.Name = &name
6178			}
6179		case "etag":
6180			if v != nil {
6181				var etag string
6182				err = json.Unmarshal(*v, &etag)
6183				if err != nil {
6184					return err
6185				}
6186				afic.Etag = &etag
6187			}
6188		case "id":
6189			if v != nil {
6190				var ID string
6191				err = json.Unmarshal(*v, &ID)
6192				if err != nil {
6193					return err
6194				}
6195				afic.ID = &ID
6196			}
6197		}
6198	}
6199
6200	return nil
6201}
6202
6203// AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
6204type AzureFirewallIPConfigurationPropertiesFormat struct {
6205	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
6206	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
6207	// Subnet - Reference of the subnet resource. This resource must be named 'AzureFirewallSubnet'.
6208	Subnet *SubResource `json:"subnet,omitempty"`
6209	// PublicIPAddress - Reference of the PublicIP resource. This field is a mandatory input if subnet is not null.
6210	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
6211	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6212	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6213}
6214
6215// AzureFirewallListResult response for ListAzureFirewalls API service call.
6216type AzureFirewallListResult struct {
6217	autorest.Response `json:"-"`
6218	// Value - List of Azure Firewalls in a resource group.
6219	Value *[]AzureFirewall `json:"value,omitempty"`
6220	// NextLink - URL to get the next set of results.
6221	NextLink *string `json:"nextLink,omitempty"`
6222}
6223
6224// AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
6225type AzureFirewallListResultIterator struct {
6226	i    int
6227	page AzureFirewallListResultPage
6228}
6229
6230// NextWithContext advances to the next value.  If there was an error making
6231// the request the iterator does not advance and the error is returned.
6232func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
6233	if tracing.IsEnabled() {
6234		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
6235		defer func() {
6236			sc := -1
6237			if iter.Response().Response.Response != nil {
6238				sc = iter.Response().Response.Response.StatusCode
6239			}
6240			tracing.EndSpan(ctx, sc, err)
6241		}()
6242	}
6243	iter.i++
6244	if iter.i < len(iter.page.Values()) {
6245		return nil
6246	}
6247	err = iter.page.NextWithContext(ctx)
6248	if err != nil {
6249		iter.i--
6250		return err
6251	}
6252	iter.i = 0
6253	return nil
6254}
6255
6256// Next advances to the next value.  If there was an error making
6257// the request the iterator does not advance and the error is returned.
6258// Deprecated: Use NextWithContext() instead.
6259func (iter *AzureFirewallListResultIterator) Next() error {
6260	return iter.NextWithContext(context.Background())
6261}
6262
6263// NotDone returns true if the enumeration should be started or is not yet complete.
6264func (iter AzureFirewallListResultIterator) NotDone() bool {
6265	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6266}
6267
6268// Response returns the raw server response from the last page request.
6269func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
6270	return iter.page.Response()
6271}
6272
6273// Value returns the current value or a zero-initialized value if the
6274// iterator has advanced beyond the end of the collection.
6275func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
6276	if !iter.page.NotDone() {
6277		return AzureFirewall{}
6278	}
6279	return iter.page.Values()[iter.i]
6280}
6281
6282// Creates a new instance of the AzureFirewallListResultIterator type.
6283func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
6284	return AzureFirewallListResultIterator{page: page}
6285}
6286
6287// IsEmpty returns true if the ListResult contains no values.
6288func (aflr AzureFirewallListResult) IsEmpty() bool {
6289	return aflr.Value == nil || len(*aflr.Value) == 0
6290}
6291
6292// azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
6293// It returns nil if no more results exist.
6294func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
6295	if aflr.NextLink == nil || len(to.String(aflr.NextLink)) < 1 {
6296		return nil, nil
6297	}
6298	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6299		autorest.AsJSON(),
6300		autorest.AsGet(),
6301		autorest.WithBaseURL(to.String(aflr.NextLink)))
6302}
6303
6304// AzureFirewallListResultPage contains a page of AzureFirewall values.
6305type AzureFirewallListResultPage struct {
6306	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
6307	aflr AzureFirewallListResult
6308}
6309
6310// NextWithContext advances to the next page of values.  If there was an error making
6311// the request the page does not advance and the error is returned.
6312func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
6313	if tracing.IsEnabled() {
6314		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
6315		defer func() {
6316			sc := -1
6317			if page.Response().Response.Response != nil {
6318				sc = page.Response().Response.Response.StatusCode
6319			}
6320			tracing.EndSpan(ctx, sc, err)
6321		}()
6322	}
6323	next, err := page.fn(ctx, page.aflr)
6324	if err != nil {
6325		return err
6326	}
6327	page.aflr = next
6328	return nil
6329}
6330
6331// Next advances to the next page of values.  If there was an error making
6332// the request the page does not advance and the error is returned.
6333// Deprecated: Use NextWithContext() instead.
6334func (page *AzureFirewallListResultPage) Next() error {
6335	return page.NextWithContext(context.Background())
6336}
6337
6338// NotDone returns true if the page enumeration should be started or is not yet complete.
6339func (page AzureFirewallListResultPage) NotDone() bool {
6340	return !page.aflr.IsEmpty()
6341}
6342
6343// Response returns the raw server response from the last page request.
6344func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
6345	return page.aflr
6346}
6347
6348// Values returns the slice of values for the current page or nil if there are no values.
6349func (page AzureFirewallListResultPage) Values() []AzureFirewall {
6350	if page.aflr.IsEmpty() {
6351		return nil
6352	}
6353	return *page.aflr.Value
6354}
6355
6356// Creates a new instance of the AzureFirewallListResultPage type.
6357func NewAzureFirewallListResultPage(getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
6358	return AzureFirewallListResultPage{fn: getNextPage}
6359}
6360
6361// AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
6362type AzureFirewallNatRCAction struct {
6363	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
6364	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
6365}
6366
6367// AzureFirewallNatRule properties of a NAT rule.
6368type AzureFirewallNatRule struct {
6369	// Name - Name of the NAT rule.
6370	Name *string `json:"name,omitempty"`
6371	// Description - Description of the rule.
6372	Description *string `json:"description,omitempty"`
6373	// SourceAddresses - List of source IP addresses for this rule.
6374	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6375	// DestinationAddresses - List of destination IP addresses for this rule. Supports IP ranges, prefixes, and service tags.
6376	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
6377	// DestinationPorts - List of destination ports.
6378	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
6379	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
6380	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
6381	// TranslatedAddress - The translated address for this NAT rule.
6382	TranslatedAddress *string `json:"translatedAddress,omitempty"`
6383	// TranslatedPort - The translated port for this NAT rule.
6384	TranslatedPort *string `json:"translatedPort,omitempty"`
6385}
6386
6387// AzureFirewallNatRuleCollection NAT rule collection resource
6388type AzureFirewallNatRuleCollection struct {
6389	// AzureFirewallNatRuleCollectionProperties - Properties of the azure firewall NAT rule collection.
6390	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
6391	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6392	Name *string `json:"name,omitempty"`
6393	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6394	Etag *string `json:"etag,omitempty"`
6395	// ID - Resource ID.
6396	ID *string `json:"id,omitempty"`
6397}
6398
6399// MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
6400func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
6401	objectMap := make(map[string]interface{})
6402	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
6403		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
6404	}
6405	if afnrc.Name != nil {
6406		objectMap["name"] = afnrc.Name
6407	}
6408	if afnrc.ID != nil {
6409		objectMap["id"] = afnrc.ID
6410	}
6411	return json.Marshal(objectMap)
6412}
6413
6414// UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
6415func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
6416	var m map[string]*json.RawMessage
6417	err := json.Unmarshal(body, &m)
6418	if err != nil {
6419		return err
6420	}
6421	for k, v := range m {
6422		switch k {
6423		case "properties":
6424			if v != nil {
6425				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
6426				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
6427				if err != nil {
6428					return err
6429				}
6430				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
6431			}
6432		case "name":
6433			if v != nil {
6434				var name string
6435				err = json.Unmarshal(*v, &name)
6436				if err != nil {
6437					return err
6438				}
6439				afnrc.Name = &name
6440			}
6441		case "etag":
6442			if v != nil {
6443				var etag string
6444				err = json.Unmarshal(*v, &etag)
6445				if err != nil {
6446					return err
6447				}
6448				afnrc.Etag = &etag
6449			}
6450		case "id":
6451			if v != nil {
6452				var ID string
6453				err = json.Unmarshal(*v, &ID)
6454				if err != nil {
6455					return err
6456				}
6457				afnrc.ID = &ID
6458			}
6459		}
6460	}
6461
6462	return nil
6463}
6464
6465// AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
6466type AzureFirewallNatRuleCollectionProperties struct {
6467	// Priority - Priority of the NAT rule collection resource.
6468	Priority *int32 `json:"priority,omitempty"`
6469	// Action - The action type of a NAT rule collection
6470	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
6471	// Rules - Collection of rules used by a NAT rule collection.
6472	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
6473	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6474	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6475}
6476
6477// AzureFirewallNetworkRule properties of the network rule.
6478type AzureFirewallNetworkRule struct {
6479	// Name - Name of the network rule.
6480	Name *string `json:"name,omitempty"`
6481	// Description - Description of the rule.
6482	Description *string `json:"description,omitempty"`
6483	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
6484	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
6485	// SourceAddresses - List of source IP addresses for this rule.
6486	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6487	// DestinationAddresses - List of destination IP addresses.
6488	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
6489	// DestinationPorts - List of destination ports.
6490	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
6491}
6492
6493// AzureFirewallNetworkRuleCollection network rule collection resource
6494type AzureFirewallNetworkRuleCollection struct {
6495	// AzureFirewallNetworkRuleCollectionPropertiesFormat - Properties of the azure firewall network rule collection.
6496	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
6497	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6498	Name *string `json:"name,omitempty"`
6499	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6500	Etag *string `json:"etag,omitempty"`
6501	// ID - Resource ID.
6502	ID *string `json:"id,omitempty"`
6503}
6504
6505// MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
6506func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
6507	objectMap := make(map[string]interface{})
6508	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
6509		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
6510	}
6511	if afnrc.Name != nil {
6512		objectMap["name"] = afnrc.Name
6513	}
6514	if afnrc.ID != nil {
6515		objectMap["id"] = afnrc.ID
6516	}
6517	return json.Marshal(objectMap)
6518}
6519
6520// UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
6521func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
6522	var m map[string]*json.RawMessage
6523	err := json.Unmarshal(body, &m)
6524	if err != nil {
6525		return err
6526	}
6527	for k, v := range m {
6528		switch k {
6529		case "properties":
6530			if v != nil {
6531				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
6532				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
6533				if err != nil {
6534					return err
6535				}
6536				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
6537			}
6538		case "name":
6539			if v != nil {
6540				var name string
6541				err = json.Unmarshal(*v, &name)
6542				if err != nil {
6543					return err
6544				}
6545				afnrc.Name = &name
6546			}
6547		case "etag":
6548			if v != nil {
6549				var etag string
6550				err = json.Unmarshal(*v, &etag)
6551				if err != nil {
6552					return err
6553				}
6554				afnrc.Etag = &etag
6555			}
6556		case "id":
6557			if v != nil {
6558				var ID string
6559				err = json.Unmarshal(*v, &ID)
6560				if err != nil {
6561					return err
6562				}
6563				afnrc.ID = &ID
6564			}
6565		}
6566	}
6567
6568	return nil
6569}
6570
6571// AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
6572type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
6573	// Priority - Priority of the network rule collection resource.
6574	Priority *int32 `json:"priority,omitempty"`
6575	// Action - The action type of a rule collection
6576	Action *AzureFirewallRCAction `json:"action,omitempty"`
6577	// Rules - Collection of rules used by a network rule collection.
6578	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
6579	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6580	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6581}
6582
6583// AzureFirewallPropertiesFormat properties of the Azure Firewall.
6584type AzureFirewallPropertiesFormat struct {
6585	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
6586	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
6587	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
6588	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
6589	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
6590	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
6591	// IPConfigurations - IP configuration of the Azure Firewall resource.
6592	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
6593	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6594	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6595	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
6596	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
6597}
6598
6599// AzureFirewallRCAction properties of the AzureFirewallRCAction.
6600type AzureFirewallRCAction struct {
6601	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
6602	Type AzureFirewallRCActionType `json:"type,omitempty"`
6603}
6604
6605// AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
6606// long-running operation.
6607type AzureFirewallsCreateOrUpdateFuture struct {
6608	azure.Future
6609}
6610
6611// Result returns the result of the asynchronous operation.
6612// If the operation has not completed it will return an error.
6613func (future *AzureFirewallsCreateOrUpdateFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
6614	var done bool
6615	done, err = future.DoneWithContext(context.Background(), client)
6616	if err != nil {
6617		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6618		return
6619	}
6620	if !done {
6621		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
6622		return
6623	}
6624	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6625	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
6626		af, err = client.CreateOrUpdateResponder(af.Response.Response)
6627		if err != nil {
6628			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
6629		}
6630	}
6631	return
6632}
6633
6634// AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
6635// operation.
6636type AzureFirewallsDeleteFuture struct {
6637	azure.Future
6638}
6639
6640// Result returns the result of the asynchronous operation.
6641// If the operation has not completed it will return an error.
6642func (future *AzureFirewallsDeleteFuture) Result(client AzureFirewallsClient) (ar autorest.Response, err error) {
6643	var done bool
6644	done, err = future.DoneWithContext(context.Background(), client)
6645	if err != nil {
6646		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
6647		return
6648	}
6649	if !done {
6650		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
6651		return
6652	}
6653	ar.Response = future.Response()
6654	return
6655}
6656
6657// AzureReachabilityReport azure reachability report details.
6658type AzureReachabilityReport struct {
6659	autorest.Response `json:"-"`
6660	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
6661	AggregationLevel *string `json:"aggregationLevel,omitempty"`
6662	// ProviderLocation - Parameters that define a geographic location.
6663	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
6664	// ReachabilityReport - List of Azure reachability report items.
6665	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
6666}
6667
6668// AzureReachabilityReportItem azure reachability report details for a given provider location.
6669type AzureReachabilityReportItem struct {
6670	// Provider - The Internet service provider.
6671	Provider *string `json:"provider,omitempty"`
6672	// AzureLocation - The Azure region.
6673	AzureLocation *string `json:"azureLocation,omitempty"`
6674	// Latencies - List of latency details for each of the time series.
6675	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
6676}
6677
6678// AzureReachabilityReportLatencyInfo details on latency for a time series.
6679type AzureReachabilityReportLatencyInfo struct {
6680	// TimeStamp - The time stamp.
6681	TimeStamp *date.Time `json:"timeStamp,omitempty"`
6682	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
6683	Score *int32 `json:"score,omitempty"`
6684}
6685
6686// AzureReachabilityReportLocation parameters that define a geographic location.
6687type AzureReachabilityReportLocation struct {
6688	// Country - The name of the country.
6689	Country *string `json:"country,omitempty"`
6690	// State - The name of the state.
6691	State *string `json:"state,omitempty"`
6692	// City - The name of the city or town.
6693	City *string `json:"city,omitempty"`
6694}
6695
6696// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
6697type AzureReachabilityReportParameters struct {
6698	// ProviderLocation - Parameters that define a geographic location.
6699	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
6700	// Providers - List of Internet service providers.
6701	Providers *[]string `json:"providers,omitempty"`
6702	// AzureLocations - Optional Azure regions to scope the query to.
6703	AzureLocations *[]string `json:"azureLocations,omitempty"`
6704	// StartTime - The start time for the Azure reachability report.
6705	StartTime *date.Time `json:"startTime,omitempty"`
6706	// EndTime - The end time for the Azure reachability report.
6707	EndTime *date.Time `json:"endTime,omitempty"`
6708}
6709
6710// BackendAddressPool pool of backend IP addresses.
6711type BackendAddressPool struct {
6712	autorest.Response `json:"-"`
6713	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
6714	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
6715	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6716	Name *string `json:"name,omitempty"`
6717	// Etag - A unique read-only string that changes whenever the resource is updated.
6718	Etag *string `json:"etag,omitempty"`
6719	// ID - Resource ID.
6720	ID *string `json:"id,omitempty"`
6721}
6722
6723// MarshalJSON is the custom marshaler for BackendAddressPool.
6724func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
6725	objectMap := make(map[string]interface{})
6726	if bap.BackendAddressPoolPropertiesFormat != nil {
6727		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
6728	}
6729	if bap.Name != nil {
6730		objectMap["name"] = bap.Name
6731	}
6732	if bap.Etag != nil {
6733		objectMap["etag"] = bap.Etag
6734	}
6735	if bap.ID != nil {
6736		objectMap["id"] = bap.ID
6737	}
6738	return json.Marshal(objectMap)
6739}
6740
6741// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
6742func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
6743	var m map[string]*json.RawMessage
6744	err := json.Unmarshal(body, &m)
6745	if err != nil {
6746		return err
6747	}
6748	for k, v := range m {
6749		switch k {
6750		case "properties":
6751			if v != nil {
6752				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
6753				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
6754				if err != nil {
6755					return err
6756				}
6757				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
6758			}
6759		case "name":
6760			if v != nil {
6761				var name string
6762				err = json.Unmarshal(*v, &name)
6763				if err != nil {
6764					return err
6765				}
6766				bap.Name = &name
6767			}
6768		case "etag":
6769			if v != nil {
6770				var etag string
6771				err = json.Unmarshal(*v, &etag)
6772				if err != nil {
6773					return err
6774				}
6775				bap.Etag = &etag
6776			}
6777		case "id":
6778			if v != nil {
6779				var ID string
6780				err = json.Unmarshal(*v, &ID)
6781				if err != nil {
6782					return err
6783				}
6784				bap.ID = &ID
6785			}
6786		}
6787	}
6788
6789	return nil
6790}
6791
6792// BackendAddressPoolPropertiesFormat properties of the backend address pool.
6793type BackendAddressPoolPropertiesFormat struct {
6794	// BackendIPConfigurations - READ-ONLY; Gets collection of references to IP addresses defined in network interfaces.
6795	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
6796	// LoadBalancingRules - READ-ONLY; Gets load balancing rules that use this backend address pool.
6797	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
6798	// OutboundRule - READ-ONLY; Gets outbound rules that use this backend address pool.
6799	OutboundRule *SubResource `json:"outboundRule,omitempty"`
6800	// ProvisioningState - Get provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6801	ProvisioningState *string `json:"provisioningState,omitempty"`
6802}
6803
6804// BGPCommunity contains bgp community information offered in Service Community resources.
6805type BGPCommunity struct {
6806	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
6807	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
6808	// CommunityName - The name of the bgp community. e.g. Skype.
6809	CommunityName *string `json:"communityName,omitempty"`
6810	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
6811	CommunityValue *string `json:"communityValue,omitempty"`
6812	// CommunityPrefixes - The prefixes that the bgp community contains.
6813	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
6814	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
6815	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
6816	// ServiceGroup - The service group of the bgp community contains.
6817	ServiceGroup *string `json:"serviceGroup,omitempty"`
6818}
6819
6820// BgpPeerStatus BGP peer status details
6821type BgpPeerStatus struct {
6822	// LocalAddress - READ-ONLY; The virtual network gateway's local address
6823	LocalAddress *string `json:"localAddress,omitempty"`
6824	// Neighbor - READ-ONLY; The remote BGP peer
6825	Neighbor *string `json:"neighbor,omitempty"`
6826	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer
6827	Asn *int32 `json:"asn,omitempty"`
6828	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
6829	State BgpPeerState `json:"state,omitempty"`
6830	// ConnectedDuration - READ-ONLY; For how long the peering has been up
6831	ConnectedDuration *string `json:"connectedDuration,omitempty"`
6832	// RoutesReceived - READ-ONLY; The number of routes learned from this peer
6833	RoutesReceived *int64 `json:"routesReceived,omitempty"`
6834	// MessagesSent - READ-ONLY; The number of BGP messages sent
6835	MessagesSent *int64 `json:"messagesSent,omitempty"`
6836	// MessagesReceived - READ-ONLY; The number of BGP messages received
6837	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
6838}
6839
6840// BgpPeerStatusListResult response for list BGP peer status API service call
6841type BgpPeerStatusListResult struct {
6842	autorest.Response `json:"-"`
6843	// Value - List of BGP peers
6844	Value *[]BgpPeerStatus `json:"value,omitempty"`
6845}
6846
6847// BgpServiceCommunity service Community Properties.
6848type BgpServiceCommunity struct {
6849	// BgpServiceCommunityPropertiesFormat - Properties of the BGP service community.
6850	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
6851	// ID - Resource ID.
6852	ID *string `json:"id,omitempty"`
6853	// Name - READ-ONLY; Resource name.
6854	Name *string `json:"name,omitempty"`
6855	// Type - READ-ONLY; Resource type.
6856	Type *string `json:"type,omitempty"`
6857	// Location - Resource location.
6858	Location *string `json:"location,omitempty"`
6859	// Tags - Resource tags.
6860	Tags map[string]*string `json:"tags"`
6861}
6862
6863// MarshalJSON is the custom marshaler for BgpServiceCommunity.
6864func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
6865	objectMap := make(map[string]interface{})
6866	if bsc.BgpServiceCommunityPropertiesFormat != nil {
6867		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
6868	}
6869	if bsc.ID != nil {
6870		objectMap["id"] = bsc.ID
6871	}
6872	if bsc.Location != nil {
6873		objectMap["location"] = bsc.Location
6874	}
6875	if bsc.Tags != nil {
6876		objectMap["tags"] = bsc.Tags
6877	}
6878	return json.Marshal(objectMap)
6879}
6880
6881// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
6882func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
6883	var m map[string]*json.RawMessage
6884	err := json.Unmarshal(body, &m)
6885	if err != nil {
6886		return err
6887	}
6888	for k, v := range m {
6889		switch k {
6890		case "properties":
6891			if v != nil {
6892				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
6893				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
6894				if err != nil {
6895					return err
6896				}
6897				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
6898			}
6899		case "id":
6900			if v != nil {
6901				var ID string
6902				err = json.Unmarshal(*v, &ID)
6903				if err != nil {
6904					return err
6905				}
6906				bsc.ID = &ID
6907			}
6908		case "name":
6909			if v != nil {
6910				var name string
6911				err = json.Unmarshal(*v, &name)
6912				if err != nil {
6913					return err
6914				}
6915				bsc.Name = &name
6916			}
6917		case "type":
6918			if v != nil {
6919				var typeVar string
6920				err = json.Unmarshal(*v, &typeVar)
6921				if err != nil {
6922					return err
6923				}
6924				bsc.Type = &typeVar
6925			}
6926		case "location":
6927			if v != nil {
6928				var location string
6929				err = json.Unmarshal(*v, &location)
6930				if err != nil {
6931					return err
6932				}
6933				bsc.Location = &location
6934			}
6935		case "tags":
6936			if v != nil {
6937				var tags map[string]*string
6938				err = json.Unmarshal(*v, &tags)
6939				if err != nil {
6940					return err
6941				}
6942				bsc.Tags = tags
6943			}
6944		}
6945	}
6946
6947	return nil
6948}
6949
6950// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
6951type BgpServiceCommunityListResult struct {
6952	autorest.Response `json:"-"`
6953	// Value - A list of service community resources.
6954	Value *[]BgpServiceCommunity `json:"value,omitempty"`
6955	// NextLink - The URL to get the next set of results.
6956	NextLink *string `json:"nextLink,omitempty"`
6957}
6958
6959// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
6960// values.
6961type BgpServiceCommunityListResultIterator struct {
6962	i    int
6963	page BgpServiceCommunityListResultPage
6964}
6965
6966// NextWithContext advances to the next value.  If there was an error making
6967// the request the iterator does not advance and the error is returned.
6968func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
6969	if tracing.IsEnabled() {
6970		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
6971		defer func() {
6972			sc := -1
6973			if iter.Response().Response.Response != nil {
6974				sc = iter.Response().Response.Response.StatusCode
6975			}
6976			tracing.EndSpan(ctx, sc, err)
6977		}()
6978	}
6979	iter.i++
6980	if iter.i < len(iter.page.Values()) {
6981		return nil
6982	}
6983	err = iter.page.NextWithContext(ctx)
6984	if err != nil {
6985		iter.i--
6986		return err
6987	}
6988	iter.i = 0
6989	return nil
6990}
6991
6992// Next advances to the next value.  If there was an error making
6993// the request the iterator does not advance and the error is returned.
6994// Deprecated: Use NextWithContext() instead.
6995func (iter *BgpServiceCommunityListResultIterator) Next() error {
6996	return iter.NextWithContext(context.Background())
6997}
6998
6999// NotDone returns true if the enumeration should be started or is not yet complete.
7000func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
7001	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7002}
7003
7004// Response returns the raw server response from the last page request.
7005func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
7006	return iter.page.Response()
7007}
7008
7009// Value returns the current value or a zero-initialized value if the
7010// iterator has advanced beyond the end of the collection.
7011func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
7012	if !iter.page.NotDone() {
7013		return BgpServiceCommunity{}
7014	}
7015	return iter.page.Values()[iter.i]
7016}
7017
7018// Creates a new instance of the BgpServiceCommunityListResultIterator type.
7019func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
7020	return BgpServiceCommunityListResultIterator{page: page}
7021}
7022
7023// IsEmpty returns true if the ListResult contains no values.
7024func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
7025	return bsclr.Value == nil || len(*bsclr.Value) == 0
7026}
7027
7028// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
7029// It returns nil if no more results exist.
7030func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
7031	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
7032		return nil, nil
7033	}
7034	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7035		autorest.AsJSON(),
7036		autorest.AsGet(),
7037		autorest.WithBaseURL(to.String(bsclr.NextLink)))
7038}
7039
7040// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
7041type BgpServiceCommunityListResultPage struct {
7042	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
7043	bsclr BgpServiceCommunityListResult
7044}
7045
7046// NextWithContext advances to the next page of values.  If there was an error making
7047// the request the page does not advance and the error is returned.
7048func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
7049	if tracing.IsEnabled() {
7050		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
7051		defer func() {
7052			sc := -1
7053			if page.Response().Response.Response != nil {
7054				sc = page.Response().Response.Response.StatusCode
7055			}
7056			tracing.EndSpan(ctx, sc, err)
7057		}()
7058	}
7059	next, err := page.fn(ctx, page.bsclr)
7060	if err != nil {
7061		return err
7062	}
7063	page.bsclr = next
7064	return nil
7065}
7066
7067// Next advances to the next page of values.  If there was an error making
7068// the request the page does not advance and the error is returned.
7069// Deprecated: Use NextWithContext() instead.
7070func (page *BgpServiceCommunityListResultPage) Next() error {
7071	return page.NextWithContext(context.Background())
7072}
7073
7074// NotDone returns true if the page enumeration should be started or is not yet complete.
7075func (page BgpServiceCommunityListResultPage) NotDone() bool {
7076	return !page.bsclr.IsEmpty()
7077}
7078
7079// Response returns the raw server response from the last page request.
7080func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
7081	return page.bsclr
7082}
7083
7084// Values returns the slice of values for the current page or nil if there are no values.
7085func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
7086	if page.bsclr.IsEmpty() {
7087		return nil
7088	}
7089	return *page.bsclr.Value
7090}
7091
7092// Creates a new instance of the BgpServiceCommunityListResultPage type.
7093func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
7094	return BgpServiceCommunityListResultPage{fn: getNextPage}
7095}
7096
7097// BgpServiceCommunityPropertiesFormat properties of Service Community.
7098type BgpServiceCommunityPropertiesFormat struct {
7099	// ServiceName - The name of the bgp community. e.g. Skype.
7100	ServiceName *string `json:"serviceName,omitempty"`
7101	// BgpCommunities - Get a list of bgp communities.
7102	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
7103}
7104
7105// BgpSettings BGP settings details
7106type BgpSettings struct {
7107	// Asn - The BGP speaker's ASN.
7108	Asn *int64 `json:"asn,omitempty"`
7109	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
7110	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
7111	// PeerWeight - The weight added to routes learned from this BGP speaker.
7112	PeerWeight *int32 `json:"peerWeight,omitempty"`
7113}
7114
7115// CloudError an error response from the Batch service.
7116type CloudError struct {
7117	// Error - Cloud error body.
7118	Error *CloudErrorBody `json:"error,omitempty"`
7119}
7120
7121// CloudErrorBody an error response from the Batch service.
7122type CloudErrorBody struct {
7123	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
7124	Code *string `json:"code,omitempty"`
7125	// Message - A message describing the error, intended to be suitable for display in a user interface.
7126	Message *string `json:"message,omitempty"`
7127	// Target - The target of the particular error. For example, the name of the property in error.
7128	Target *string `json:"target,omitempty"`
7129	// Details - A list of additional details about the error.
7130	Details *[]CloudErrorBody `json:"details,omitempty"`
7131}
7132
7133// ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
7134type ConfigurationDiagnosticParameters struct {
7135	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
7136	TargetResourceID *string `json:"targetResourceId,omitempty"`
7137	// VerbosityLevel - Verbosity level. Accepted values are 'Normal', 'Minimum', 'Full'. Possible values include: 'Normal', 'Minimum', 'Full'
7138	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
7139	// Profiles - List of network configuration diagnostic profiles.
7140	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
7141}
7142
7143// ConfigurationDiagnosticProfile parameters to compare with network configuration.
7144type ConfigurationDiagnosticProfile struct {
7145	// Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound'
7146	Direction Direction `json:"direction,omitempty"`
7147	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
7148	Protocol *string `json:"protocol,omitempty"`
7149	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
7150	Source *string `json:"source,omitempty"`
7151	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
7152	Destination *string `json:"destination,omitempty"`
7153	// DestinationPort - Traffic destination port. Accepted values are '*', port (for example, 3389) and port range (for example, 80-100).
7154	DestinationPort *string `json:"destinationPort,omitempty"`
7155}
7156
7157// ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
7158type ConfigurationDiagnosticResponse struct {
7159	autorest.Response `json:"-"`
7160	// Results - READ-ONLY; List of network configuration diagnostic results.
7161	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
7162}
7163
7164// ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
7165// query.
7166type ConfigurationDiagnosticResult struct {
7167	// Profile - Network configuration diagnostic profile.
7168	Profile *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
7169	// NetworkSecurityGroupResult - Network security group result.
7170	NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"`
7171}
7172
7173// ConnectionMonitor parameters that define the operation to create a connection monitor.
7174type ConnectionMonitor struct {
7175	// Location - Connection monitor location.
7176	Location *string `json:"location,omitempty"`
7177	// Tags - Connection monitor tags.
7178	Tags map[string]*string `json:"tags"`
7179	// ConnectionMonitorParameters - Properties of the connection monitor.
7180	*ConnectionMonitorParameters `json:"properties,omitempty"`
7181}
7182
7183// MarshalJSON is the custom marshaler for ConnectionMonitor.
7184func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
7185	objectMap := make(map[string]interface{})
7186	if cm.Location != nil {
7187		objectMap["location"] = cm.Location
7188	}
7189	if cm.Tags != nil {
7190		objectMap["tags"] = cm.Tags
7191	}
7192	if cm.ConnectionMonitorParameters != nil {
7193		objectMap["properties"] = cm.ConnectionMonitorParameters
7194	}
7195	return json.Marshal(objectMap)
7196}
7197
7198// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
7199func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
7200	var m map[string]*json.RawMessage
7201	err := json.Unmarshal(body, &m)
7202	if err != nil {
7203		return err
7204	}
7205	for k, v := range m {
7206		switch k {
7207		case "location":
7208			if v != nil {
7209				var location string
7210				err = json.Unmarshal(*v, &location)
7211				if err != nil {
7212					return err
7213				}
7214				cm.Location = &location
7215			}
7216		case "tags":
7217			if v != nil {
7218				var tags map[string]*string
7219				err = json.Unmarshal(*v, &tags)
7220				if err != nil {
7221					return err
7222				}
7223				cm.Tags = tags
7224			}
7225		case "properties":
7226			if v != nil {
7227				var connectionMonitorParameters ConnectionMonitorParameters
7228				err = json.Unmarshal(*v, &connectionMonitorParameters)
7229				if err != nil {
7230					return err
7231				}
7232				cm.ConnectionMonitorParameters = &connectionMonitorParameters
7233			}
7234		}
7235	}
7236
7237	return nil
7238}
7239
7240// ConnectionMonitorDestination describes the destination of connection monitor.
7241type ConnectionMonitorDestination struct {
7242	// ResourceID - The ID of the resource used as the destination by connection monitor.
7243	ResourceID *string `json:"resourceId,omitempty"`
7244	// Address - Address of the connection monitor destination (IP or domain name).
7245	Address *string `json:"address,omitempty"`
7246	// Port - The destination port used by connection monitor.
7247	Port *int32 `json:"port,omitempty"`
7248}
7249
7250// ConnectionMonitorListResult list of connection monitors.
7251type ConnectionMonitorListResult struct {
7252	autorest.Response `json:"-"`
7253	// Value - Information about connection monitors.
7254	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
7255}
7256
7257// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
7258type ConnectionMonitorParameters struct {
7259	// Source - Describes the source of connection monitor.
7260	Source *ConnectionMonitorSource `json:"source,omitempty"`
7261	// Destination - Describes the destination of connection monitor.
7262	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
7263	// AutoStart - Determines if the connection monitor will start automatically once created.
7264	AutoStart *bool `json:"autoStart,omitempty"`
7265	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
7266	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
7267}
7268
7269// ConnectionMonitorQueryResult list of connection states snapshots.
7270type ConnectionMonitorQueryResult struct {
7271	autorest.Response `json:"-"`
7272	// SourceStatus - Status of connection monitor source. Possible values include: 'ConnectionMonitorSourceStatusUnknown', 'ConnectionMonitorSourceStatusActive', 'ConnectionMonitorSourceStatusInactive'
7273	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
7274	// States - Information about connection states.
7275	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
7276}
7277
7278// ConnectionMonitorResult information about the connection monitor.
7279type ConnectionMonitorResult struct {
7280	autorest.Response `json:"-"`
7281	// Name - READ-ONLY; Name of the connection monitor.
7282	Name *string `json:"name,omitempty"`
7283	// ID - READ-ONLY; ID of the connection monitor.
7284	ID *string `json:"id,omitempty"`
7285	// Etag - A unique read-only string that changes whenever the resource is updated.
7286	Etag *string `json:"etag,omitempty"`
7287	// Type - READ-ONLY; Connection monitor type.
7288	Type *string `json:"type,omitempty"`
7289	// Location - Connection monitor location.
7290	Location *string `json:"location,omitempty"`
7291	// Tags - Connection monitor tags.
7292	Tags map[string]*string `json:"tags"`
7293	// ConnectionMonitorResultProperties - Properties of the connection monitor result.
7294	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
7295}
7296
7297// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
7298func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
7299	objectMap := make(map[string]interface{})
7300	if cmr.Etag != nil {
7301		objectMap["etag"] = cmr.Etag
7302	}
7303	if cmr.Location != nil {
7304		objectMap["location"] = cmr.Location
7305	}
7306	if cmr.Tags != nil {
7307		objectMap["tags"] = cmr.Tags
7308	}
7309	if cmr.ConnectionMonitorResultProperties != nil {
7310		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
7311	}
7312	return json.Marshal(objectMap)
7313}
7314
7315// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
7316func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
7317	var m map[string]*json.RawMessage
7318	err := json.Unmarshal(body, &m)
7319	if err != nil {
7320		return err
7321	}
7322	for k, v := range m {
7323		switch k {
7324		case "name":
7325			if v != nil {
7326				var name string
7327				err = json.Unmarshal(*v, &name)
7328				if err != nil {
7329					return err
7330				}
7331				cmr.Name = &name
7332			}
7333		case "id":
7334			if v != nil {
7335				var ID string
7336				err = json.Unmarshal(*v, &ID)
7337				if err != nil {
7338					return err
7339				}
7340				cmr.ID = &ID
7341			}
7342		case "etag":
7343			if v != nil {
7344				var etag string
7345				err = json.Unmarshal(*v, &etag)
7346				if err != nil {
7347					return err
7348				}
7349				cmr.Etag = &etag
7350			}
7351		case "type":
7352			if v != nil {
7353				var typeVar string
7354				err = json.Unmarshal(*v, &typeVar)
7355				if err != nil {
7356					return err
7357				}
7358				cmr.Type = &typeVar
7359			}
7360		case "location":
7361			if v != nil {
7362				var location string
7363				err = json.Unmarshal(*v, &location)
7364				if err != nil {
7365					return err
7366				}
7367				cmr.Location = &location
7368			}
7369		case "tags":
7370			if v != nil {
7371				var tags map[string]*string
7372				err = json.Unmarshal(*v, &tags)
7373				if err != nil {
7374					return err
7375				}
7376				cmr.Tags = tags
7377			}
7378		case "properties":
7379			if v != nil {
7380				var connectionMonitorResultProperties ConnectionMonitorResultProperties
7381				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
7382				if err != nil {
7383					return err
7384				}
7385				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
7386			}
7387		}
7388	}
7389
7390	return nil
7391}
7392
7393// ConnectionMonitorResultProperties describes the properties of a connection monitor.
7394type ConnectionMonitorResultProperties struct {
7395	// ProvisioningState - The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7396	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7397	// StartTime - The date and time when the connection monitor was started.
7398	StartTime *date.Time `json:"startTime,omitempty"`
7399	// MonitoringStatus - The monitoring status of the connection monitor.
7400	MonitoringStatus *string `json:"monitoringStatus,omitempty"`
7401	// Source - Describes the source of connection monitor.
7402	Source *ConnectionMonitorSource `json:"source,omitempty"`
7403	// Destination - Describes the destination of connection monitor.
7404	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
7405	// AutoStart - Determines if the connection monitor will start automatically once created.
7406	AutoStart *bool `json:"autoStart,omitempty"`
7407	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
7408	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
7409}
7410
7411// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7412// long-running operation.
7413type ConnectionMonitorsCreateOrUpdateFuture struct {
7414	azure.Future
7415}
7416
7417// Result returns the result of the asynchronous operation.
7418// If the operation has not completed it will return an error.
7419func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
7420	var done bool
7421	done, err = future.DoneWithContext(context.Background(), client)
7422	if err != nil {
7423		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7424		return
7425	}
7426	if !done {
7427		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
7428		return
7429	}
7430	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7431	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
7432		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
7433		if err != nil {
7434			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
7435		}
7436	}
7437	return
7438}
7439
7440// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
7441// long-running operation.
7442type ConnectionMonitorsDeleteFuture struct {
7443	azure.Future
7444}
7445
7446// Result returns the result of the asynchronous operation.
7447// If the operation has not completed it will return an error.
7448func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
7449	var done bool
7450	done, err = future.DoneWithContext(context.Background(), client)
7451	if err != nil {
7452		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
7453		return
7454	}
7455	if !done {
7456		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
7457		return
7458	}
7459	ar.Response = future.Response()
7460	return
7461}
7462
7463// ConnectionMonitorSource describes the source of connection monitor.
7464type ConnectionMonitorSource struct {
7465	// ResourceID - The ID of the resource used as the source by connection monitor.
7466	ResourceID *string `json:"resourceId,omitempty"`
7467	// Port - The source port used by connection monitor.
7468	Port *int32 `json:"port,omitempty"`
7469}
7470
7471// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
7472// operation.
7473type ConnectionMonitorsQueryFuture struct {
7474	azure.Future
7475}
7476
7477// Result returns the result of the asynchronous operation.
7478// If the operation has not completed it will return an error.
7479func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
7480	var done bool
7481	done, err = future.DoneWithContext(context.Background(), client)
7482	if err != nil {
7483		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
7484		return
7485	}
7486	if !done {
7487		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
7488		return
7489	}
7490	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7491	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
7492		cmqr, err = client.QueryResponder(cmqr.Response.Response)
7493		if err != nil {
7494			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
7495		}
7496	}
7497	return
7498}
7499
7500// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
7501// operation.
7502type ConnectionMonitorsStartFuture struct {
7503	azure.Future
7504}
7505
7506// Result returns the result of the asynchronous operation.
7507// If the operation has not completed it will return an error.
7508func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
7509	var done bool
7510	done, err = future.DoneWithContext(context.Background(), client)
7511	if err != nil {
7512		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
7513		return
7514	}
7515	if !done {
7516		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
7517		return
7518	}
7519	ar.Response = future.Response()
7520	return
7521}
7522
7523// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
7524// operation.
7525type ConnectionMonitorsStopFuture struct {
7526	azure.Future
7527}
7528
7529// Result returns the result of the asynchronous operation.
7530// If the operation has not completed it will return an error.
7531func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
7532	var done bool
7533	done, err = future.DoneWithContext(context.Background(), client)
7534	if err != nil {
7535		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
7536		return
7537	}
7538	if !done {
7539		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
7540		return
7541	}
7542	ar.Response = future.Response()
7543	return
7544}
7545
7546// ConnectionResetSharedKey the virtual network connection reset shared key
7547type ConnectionResetSharedKey struct {
7548	autorest.Response `json:"-"`
7549	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
7550	KeyLength *int32 `json:"keyLength,omitempty"`
7551}
7552
7553// ConnectionSharedKey response for GetConnectionSharedKey API service call
7554type ConnectionSharedKey struct {
7555	autorest.Response `json:"-"`
7556	// Value - The virtual network connection shared key value.
7557	Value *string `json:"value,omitempty"`
7558	// ID - Resource ID.
7559	ID *string `json:"id,omitempty"`
7560}
7561
7562// ConnectionStateSnapshot connection state snapshot.
7563type ConnectionStateSnapshot struct {
7564	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
7565	ConnectionState ConnectionState `json:"connectionState,omitempty"`
7566	// StartTime - The start time of the connection snapshot.
7567	StartTime *date.Time `json:"startTime,omitempty"`
7568	// EndTime - The end time of the connection snapshot.
7569	EndTime *date.Time `json:"endTime,omitempty"`
7570	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
7571	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
7572	// AvgLatencyInMs - Average latency in ms.
7573	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
7574	// MinLatencyInMs - Minimum latency in ms.
7575	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
7576	// MaxLatencyInMs - Maximum latency in ms.
7577	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
7578	// ProbesSent - The number of sent probes.
7579	ProbesSent *int32 `json:"probesSent,omitempty"`
7580	// ProbesFailed - The number of failed probes.
7581	ProbesFailed *int32 `json:"probesFailed,omitempty"`
7582	// Hops - READ-ONLY; List of hops between the source and the destination.
7583	Hops *[]ConnectivityHop `json:"hops,omitempty"`
7584}
7585
7586// ConnectivityDestination parameters that define destination of connection.
7587type ConnectivityDestination struct {
7588	// ResourceID - The ID of the resource to which a connection attempt will be made.
7589	ResourceID *string `json:"resourceId,omitempty"`
7590	// Address - The IP address or URI the resource to which a connection attempt will be made.
7591	Address *string `json:"address,omitempty"`
7592	// Port - Port on which check connectivity will be performed.
7593	Port *int32 `json:"port,omitempty"`
7594}
7595
7596// ConnectivityHop information about a hop between the source and the destination.
7597type ConnectivityHop struct {
7598	// Type - READ-ONLY; The type of the hop.
7599	Type *string `json:"type,omitempty"`
7600	// ID - READ-ONLY; The ID of the hop.
7601	ID *string `json:"id,omitempty"`
7602	// Address - READ-ONLY; The IP address of the hop.
7603	Address *string `json:"address,omitempty"`
7604	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
7605	ResourceID *string `json:"resourceId,omitempty"`
7606	// NextHopIds - READ-ONLY; List of next hop identifiers.
7607	NextHopIds *[]string `json:"nextHopIds,omitempty"`
7608	// Issues - READ-ONLY; List of issues.
7609	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
7610}
7611
7612// ConnectivityInformation information on the connectivity status.
7613type ConnectivityInformation struct {
7614	autorest.Response `json:"-"`
7615	// Hops - READ-ONLY; List of hops between the source and the destination.
7616	Hops *[]ConnectivityHop `json:"hops,omitempty"`
7617	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
7618	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
7619	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
7620	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
7621	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
7622	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
7623	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
7624	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
7625	// ProbesSent - READ-ONLY; Total number of probes sent.
7626	ProbesSent *int32 `json:"probesSent,omitempty"`
7627	// ProbesFailed - READ-ONLY; Number of failed probes.
7628	ProbesFailed *int32 `json:"probesFailed,omitempty"`
7629}
7630
7631// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
7632type ConnectivityIssue struct {
7633	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
7634	Origin Origin `json:"origin,omitempty"`
7635	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
7636	Severity Severity `json:"severity,omitempty"`
7637	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
7638	Type IssueType `json:"type,omitempty"`
7639	// Context - READ-ONLY; Provides additional context on the issue.
7640	Context *[]map[string]*string `json:"context,omitempty"`
7641}
7642
7643// ConnectivityParameters parameters that determine how the connectivity check will be performed.
7644type ConnectivityParameters struct {
7645	// Source - Describes the source of the connection.
7646	Source *ConnectivitySource `json:"source,omitempty"`
7647	// Destination - Describes the destination of connection.
7648	Destination *ConnectivityDestination `json:"destination,omitempty"`
7649	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
7650	Protocol Protocol `json:"protocol,omitempty"`
7651	// ProtocolConfiguration - Configuration of the protocol.
7652	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
7653}
7654
7655// ConnectivitySource parameters that define the source of the connection.
7656type ConnectivitySource struct {
7657	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
7658	ResourceID *string `json:"resourceId,omitempty"`
7659	// Port - The source port from which a connectivity check will be performed.
7660	Port *int32 `json:"port,omitempty"`
7661}
7662
7663// Container reference to container resource in remote resource provider.
7664type Container struct {
7665	// ID - Resource ID.
7666	ID *string `json:"id,omitempty"`
7667}
7668
7669// ContainerNetworkInterface container network interface child resource.
7670type ContainerNetworkInterface struct {
7671	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
7672	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
7673	// Name - The name of the resource. This name can be used to access the resource.
7674	Name *string `json:"name,omitempty"`
7675	// Type - READ-ONLY; Sub Resource type.
7676	Type *string `json:"type,omitempty"`
7677	// Etag - A unique read-only string that changes whenever the resource is updated.
7678	Etag *string `json:"etag,omitempty"`
7679	// ID - Resource ID.
7680	ID *string `json:"id,omitempty"`
7681}
7682
7683// MarshalJSON is the custom marshaler for ContainerNetworkInterface.
7684func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
7685	objectMap := make(map[string]interface{})
7686	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
7687		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
7688	}
7689	if cni.Name != nil {
7690		objectMap["name"] = cni.Name
7691	}
7692	if cni.Etag != nil {
7693		objectMap["etag"] = cni.Etag
7694	}
7695	if cni.ID != nil {
7696		objectMap["id"] = cni.ID
7697	}
7698	return json.Marshal(objectMap)
7699}
7700
7701// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
7702func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
7703	var m map[string]*json.RawMessage
7704	err := json.Unmarshal(body, &m)
7705	if err != nil {
7706		return err
7707	}
7708	for k, v := range m {
7709		switch k {
7710		case "properties":
7711			if v != nil {
7712				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
7713				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
7714				if err != nil {
7715					return err
7716				}
7717				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
7718			}
7719		case "name":
7720			if v != nil {
7721				var name string
7722				err = json.Unmarshal(*v, &name)
7723				if err != nil {
7724					return err
7725				}
7726				cni.Name = &name
7727			}
7728		case "type":
7729			if v != nil {
7730				var typeVar string
7731				err = json.Unmarshal(*v, &typeVar)
7732				if err != nil {
7733					return err
7734				}
7735				cni.Type = &typeVar
7736			}
7737		case "etag":
7738			if v != nil {
7739				var etag string
7740				err = json.Unmarshal(*v, &etag)
7741				if err != nil {
7742					return err
7743				}
7744				cni.Etag = &etag
7745			}
7746		case "id":
7747			if v != nil {
7748				var ID string
7749				err = json.Unmarshal(*v, &ID)
7750				if err != nil {
7751					return err
7752				}
7753				cni.ID = &ID
7754			}
7755		}
7756	}
7757
7758	return nil
7759}
7760
7761// ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
7762type ContainerNetworkInterfaceConfiguration struct {
7763	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
7764	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
7765	// Name - The name of the resource. This name can be used to access the resource.
7766	Name *string `json:"name,omitempty"`
7767	// Type - READ-ONLY; Sub Resource type.
7768	Type *string `json:"type,omitempty"`
7769	// Etag - A unique read-only string that changes whenever the resource is updated.
7770	Etag *string `json:"etag,omitempty"`
7771	// ID - Resource ID.
7772	ID *string `json:"id,omitempty"`
7773}
7774
7775// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
7776func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
7777	objectMap := make(map[string]interface{})
7778	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
7779		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
7780	}
7781	if cnic.Name != nil {
7782		objectMap["name"] = cnic.Name
7783	}
7784	if cnic.Etag != nil {
7785		objectMap["etag"] = cnic.Etag
7786	}
7787	if cnic.ID != nil {
7788		objectMap["id"] = cnic.ID
7789	}
7790	return json.Marshal(objectMap)
7791}
7792
7793// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
7794func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
7795	var m map[string]*json.RawMessage
7796	err := json.Unmarshal(body, &m)
7797	if err != nil {
7798		return err
7799	}
7800	for k, v := range m {
7801		switch k {
7802		case "properties":
7803			if v != nil {
7804				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
7805				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
7806				if err != nil {
7807					return err
7808				}
7809				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
7810			}
7811		case "name":
7812			if v != nil {
7813				var name string
7814				err = json.Unmarshal(*v, &name)
7815				if err != nil {
7816					return err
7817				}
7818				cnic.Name = &name
7819			}
7820		case "type":
7821			if v != nil {
7822				var typeVar string
7823				err = json.Unmarshal(*v, &typeVar)
7824				if err != nil {
7825					return err
7826				}
7827				cnic.Type = &typeVar
7828			}
7829		case "etag":
7830			if v != nil {
7831				var etag string
7832				err = json.Unmarshal(*v, &etag)
7833				if err != nil {
7834					return err
7835				}
7836				cnic.Etag = &etag
7837			}
7838		case "id":
7839			if v != nil {
7840				var ID string
7841				err = json.Unmarshal(*v, &ID)
7842				if err != nil {
7843					return err
7844				}
7845				cnic.ID = &ID
7846			}
7847		}
7848	}
7849
7850	return nil
7851}
7852
7853// ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
7854// properties.
7855type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
7856	// IPConfigurations - A list of ip configurations of the container network interface configuration.
7857	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
7858	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
7859	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
7860	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
7861	ProvisioningState *string `json:"provisioningState,omitempty"`
7862}
7863
7864// ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
7865type ContainerNetworkInterfaceIPConfiguration struct {
7866	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
7867	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
7868	// Name - The name of the resource. This name can be used to access the resource.
7869	Name *string `json:"name,omitempty"`
7870	// Type - READ-ONLY; Sub Resource type.
7871	Type *string `json:"type,omitempty"`
7872	// Etag - A unique read-only string that changes whenever the resource is updated.
7873	Etag *string `json:"etag,omitempty"`
7874}
7875
7876// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
7877func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
7878	objectMap := make(map[string]interface{})
7879	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
7880		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
7881	}
7882	if cniic.Name != nil {
7883		objectMap["name"] = cniic.Name
7884	}
7885	if cniic.Etag != nil {
7886		objectMap["etag"] = cniic.Etag
7887	}
7888	return json.Marshal(objectMap)
7889}
7890
7891// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
7892func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
7893	var m map[string]*json.RawMessage
7894	err := json.Unmarshal(body, &m)
7895	if err != nil {
7896		return err
7897	}
7898	for k, v := range m {
7899		switch k {
7900		case "properties":
7901			if v != nil {
7902				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
7903				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
7904				if err != nil {
7905					return err
7906				}
7907				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
7908			}
7909		case "name":
7910			if v != nil {
7911				var name string
7912				err = json.Unmarshal(*v, &name)
7913				if err != nil {
7914					return err
7915				}
7916				cniic.Name = &name
7917			}
7918		case "type":
7919			if v != nil {
7920				var typeVar string
7921				err = json.Unmarshal(*v, &typeVar)
7922				if err != nil {
7923					return err
7924				}
7925				cniic.Type = &typeVar
7926			}
7927		case "etag":
7928			if v != nil {
7929				var etag string
7930				err = json.Unmarshal(*v, &etag)
7931				if err != nil {
7932					return err
7933				}
7934				cniic.Etag = &etag
7935			}
7936		}
7937	}
7938
7939	return nil
7940}
7941
7942// ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
7943// IP configuration.
7944type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
7945	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
7946	ProvisioningState *string `json:"provisioningState,omitempty"`
7947}
7948
7949// ContainerNetworkInterfacePropertiesFormat properties of container network interface.
7950type ContainerNetworkInterfacePropertiesFormat struct {
7951	// ContainerNetworkInterfaceConfiguration - Container network interface configuration from which this container network interface is created.
7952	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
7953	// Container - Reference to the container to which this container network interface is attached.
7954	Container *Container `json:"container,omitempty"`
7955	// IPConfigurations - Reference to the ip configuration on this container nic.
7956	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
7957	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
7958	ProvisioningState *string `json:"provisioningState,omitempty"`
7959}
7960
7961// DdosCustomPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7962// long-running operation.
7963type DdosCustomPoliciesCreateOrUpdateFuture struct {
7964	azure.Future
7965}
7966
7967// Result returns the result of the asynchronous operation.
7968// If the operation has not completed it will return an error.
7969func (future *DdosCustomPoliciesCreateOrUpdateFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
7970	var done bool
7971	done, err = future.DoneWithContext(context.Background(), client)
7972	if err != nil {
7973		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7974		return
7975	}
7976	if !done {
7977		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesCreateOrUpdateFuture")
7978		return
7979	}
7980	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7981	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
7982		dcp, err = client.CreateOrUpdateResponder(dcp.Response.Response)
7983		if err != nil {
7984			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", dcp.Response.Response, "Failure responding to request")
7985		}
7986	}
7987	return
7988}
7989
7990// DdosCustomPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
7991// long-running operation.
7992type DdosCustomPoliciesDeleteFuture struct {
7993	azure.Future
7994}
7995
7996// Result returns the result of the asynchronous operation.
7997// If the operation has not completed it will return an error.
7998func (future *DdosCustomPoliciesDeleteFuture) Result(client DdosCustomPoliciesClient) (ar autorest.Response, err error) {
7999	var done bool
8000	done, err = future.DoneWithContext(context.Background(), client)
8001	if err != nil {
8002		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
8003		return
8004	}
8005	if !done {
8006		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesDeleteFuture")
8007		return
8008	}
8009	ar.Response = future.Response()
8010	return
8011}
8012
8013// DdosCustomPoliciesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
8014// long-running operation.
8015type DdosCustomPoliciesUpdateTagsFuture struct {
8016	azure.Future
8017}
8018
8019// Result returns the result of the asynchronous operation.
8020// If the operation has not completed it will return an error.
8021func (future *DdosCustomPoliciesUpdateTagsFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
8022	var done bool
8023	done, err = future.DoneWithContext(context.Background(), client)
8024	if err != nil {
8025		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
8026		return
8027	}
8028	if !done {
8029		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesUpdateTagsFuture")
8030		return
8031	}
8032	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8033	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
8034		dcp, err = client.UpdateTagsResponder(dcp.Response.Response)
8035		if err != nil {
8036			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", dcp.Response.Response, "Failure responding to request")
8037		}
8038	}
8039	return
8040}
8041
8042// DdosCustomPolicy a DDoS custom policy in a resource group.
8043type DdosCustomPolicy struct {
8044	autorest.Response `json:"-"`
8045	// DdosCustomPolicyPropertiesFormat - Properties of the DDoS custom policy.
8046	*DdosCustomPolicyPropertiesFormat `json:"properties,omitempty"`
8047	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8048	Etag *string `json:"etag,omitempty"`
8049	// ID - Resource ID.
8050	ID *string `json:"id,omitempty"`
8051	// Name - READ-ONLY; Resource name.
8052	Name *string `json:"name,omitempty"`
8053	// Type - READ-ONLY; Resource type.
8054	Type *string `json:"type,omitempty"`
8055	// Location - Resource location.
8056	Location *string `json:"location,omitempty"`
8057	// Tags - Resource tags.
8058	Tags map[string]*string `json:"tags"`
8059}
8060
8061// MarshalJSON is the custom marshaler for DdosCustomPolicy.
8062func (dcp DdosCustomPolicy) MarshalJSON() ([]byte, error) {
8063	objectMap := make(map[string]interface{})
8064	if dcp.DdosCustomPolicyPropertiesFormat != nil {
8065		objectMap["properties"] = dcp.DdosCustomPolicyPropertiesFormat
8066	}
8067	if dcp.ID != nil {
8068		objectMap["id"] = dcp.ID
8069	}
8070	if dcp.Location != nil {
8071		objectMap["location"] = dcp.Location
8072	}
8073	if dcp.Tags != nil {
8074		objectMap["tags"] = dcp.Tags
8075	}
8076	return json.Marshal(objectMap)
8077}
8078
8079// UnmarshalJSON is the custom unmarshaler for DdosCustomPolicy struct.
8080func (dcp *DdosCustomPolicy) UnmarshalJSON(body []byte) error {
8081	var m map[string]*json.RawMessage
8082	err := json.Unmarshal(body, &m)
8083	if err != nil {
8084		return err
8085	}
8086	for k, v := range m {
8087		switch k {
8088		case "properties":
8089			if v != nil {
8090				var ddosCustomPolicyPropertiesFormat DdosCustomPolicyPropertiesFormat
8091				err = json.Unmarshal(*v, &ddosCustomPolicyPropertiesFormat)
8092				if err != nil {
8093					return err
8094				}
8095				dcp.DdosCustomPolicyPropertiesFormat = &ddosCustomPolicyPropertiesFormat
8096			}
8097		case "etag":
8098			if v != nil {
8099				var etag string
8100				err = json.Unmarshal(*v, &etag)
8101				if err != nil {
8102					return err
8103				}
8104				dcp.Etag = &etag
8105			}
8106		case "id":
8107			if v != nil {
8108				var ID string
8109				err = json.Unmarshal(*v, &ID)
8110				if err != nil {
8111					return err
8112				}
8113				dcp.ID = &ID
8114			}
8115		case "name":
8116			if v != nil {
8117				var name string
8118				err = json.Unmarshal(*v, &name)
8119				if err != nil {
8120					return err
8121				}
8122				dcp.Name = &name
8123			}
8124		case "type":
8125			if v != nil {
8126				var typeVar string
8127				err = json.Unmarshal(*v, &typeVar)
8128				if err != nil {
8129					return err
8130				}
8131				dcp.Type = &typeVar
8132			}
8133		case "location":
8134			if v != nil {
8135				var location string
8136				err = json.Unmarshal(*v, &location)
8137				if err != nil {
8138					return err
8139				}
8140				dcp.Location = &location
8141			}
8142		case "tags":
8143			if v != nil {
8144				var tags map[string]*string
8145				err = json.Unmarshal(*v, &tags)
8146				if err != nil {
8147					return err
8148				}
8149				dcp.Tags = tags
8150			}
8151		}
8152	}
8153
8154	return nil
8155}
8156
8157// DdosCustomPolicyPropertiesFormat dDoS custom policy properties.
8158type DdosCustomPolicyPropertiesFormat struct {
8159	// 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.
8160	ResourceGUID *string `json:"resourceGuid,omitempty"`
8161	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
8162	ProvisioningState *string `json:"provisioningState,omitempty"`
8163	// PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only.
8164	PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"`
8165	// ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters.
8166	ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"`
8167}
8168
8169// DdosProtectionPlan a DDoS protection plan in a resource group.
8170type DdosProtectionPlan struct {
8171	autorest.Response `json:"-"`
8172	// ID - READ-ONLY; Resource ID.
8173	ID *string `json:"id,omitempty"`
8174	// Name - READ-ONLY; Resource name.
8175	Name *string `json:"name,omitempty"`
8176	// Type - READ-ONLY; Resource type.
8177	Type *string `json:"type,omitempty"`
8178	// Location - Resource location.
8179	Location *string `json:"location,omitempty"`
8180	// Tags - Resource tags.
8181	Tags map[string]*string `json:"tags"`
8182	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
8183	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
8184	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8185	Etag *string `json:"etag,omitempty"`
8186}
8187
8188// MarshalJSON is the custom marshaler for DdosProtectionPlan.
8189func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
8190	objectMap := make(map[string]interface{})
8191	if dpp.Location != nil {
8192		objectMap["location"] = dpp.Location
8193	}
8194	if dpp.Tags != nil {
8195		objectMap["tags"] = dpp.Tags
8196	}
8197	if dpp.DdosProtectionPlanPropertiesFormat != nil {
8198		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
8199	}
8200	return json.Marshal(objectMap)
8201}
8202
8203// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
8204func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
8205	var m map[string]*json.RawMessage
8206	err := json.Unmarshal(body, &m)
8207	if err != nil {
8208		return err
8209	}
8210	for k, v := range m {
8211		switch k {
8212		case "id":
8213			if v != nil {
8214				var ID string
8215				err = json.Unmarshal(*v, &ID)
8216				if err != nil {
8217					return err
8218				}
8219				dpp.ID = &ID
8220			}
8221		case "name":
8222			if v != nil {
8223				var name string
8224				err = json.Unmarshal(*v, &name)
8225				if err != nil {
8226					return err
8227				}
8228				dpp.Name = &name
8229			}
8230		case "type":
8231			if v != nil {
8232				var typeVar string
8233				err = json.Unmarshal(*v, &typeVar)
8234				if err != nil {
8235					return err
8236				}
8237				dpp.Type = &typeVar
8238			}
8239		case "location":
8240			if v != nil {
8241				var location string
8242				err = json.Unmarshal(*v, &location)
8243				if err != nil {
8244					return err
8245				}
8246				dpp.Location = &location
8247			}
8248		case "tags":
8249			if v != nil {
8250				var tags map[string]*string
8251				err = json.Unmarshal(*v, &tags)
8252				if err != nil {
8253					return err
8254				}
8255				dpp.Tags = tags
8256			}
8257		case "properties":
8258			if v != nil {
8259				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
8260				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
8261				if err != nil {
8262					return err
8263				}
8264				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
8265			}
8266		case "etag":
8267			if v != nil {
8268				var etag string
8269				err = json.Unmarshal(*v, &etag)
8270				if err != nil {
8271					return err
8272				}
8273				dpp.Etag = &etag
8274			}
8275		}
8276	}
8277
8278	return nil
8279}
8280
8281// DdosProtectionPlanListResult a list of DDoS protection plans.
8282type DdosProtectionPlanListResult struct {
8283	autorest.Response `json:"-"`
8284	// Value - A list of DDoS protection plans.
8285	Value *[]DdosProtectionPlan `json:"value,omitempty"`
8286	// NextLink - READ-ONLY; The URL to get the next set of results.
8287	NextLink *string `json:"nextLink,omitempty"`
8288}
8289
8290// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
8291type DdosProtectionPlanListResultIterator struct {
8292	i    int
8293	page DdosProtectionPlanListResultPage
8294}
8295
8296// NextWithContext advances to the next value.  If there was an error making
8297// the request the iterator does not advance and the error is returned.
8298func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
8299	if tracing.IsEnabled() {
8300		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
8301		defer func() {
8302			sc := -1
8303			if iter.Response().Response.Response != nil {
8304				sc = iter.Response().Response.Response.StatusCode
8305			}
8306			tracing.EndSpan(ctx, sc, err)
8307		}()
8308	}
8309	iter.i++
8310	if iter.i < len(iter.page.Values()) {
8311		return nil
8312	}
8313	err = iter.page.NextWithContext(ctx)
8314	if err != nil {
8315		iter.i--
8316		return err
8317	}
8318	iter.i = 0
8319	return nil
8320}
8321
8322// Next advances to the next value.  If there was an error making
8323// the request the iterator does not advance and the error is returned.
8324// Deprecated: Use NextWithContext() instead.
8325func (iter *DdosProtectionPlanListResultIterator) Next() error {
8326	return iter.NextWithContext(context.Background())
8327}
8328
8329// NotDone returns true if the enumeration should be started or is not yet complete.
8330func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
8331	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8332}
8333
8334// Response returns the raw server response from the last page request.
8335func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
8336	return iter.page.Response()
8337}
8338
8339// Value returns the current value or a zero-initialized value if the
8340// iterator has advanced beyond the end of the collection.
8341func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
8342	if !iter.page.NotDone() {
8343		return DdosProtectionPlan{}
8344	}
8345	return iter.page.Values()[iter.i]
8346}
8347
8348// Creates a new instance of the DdosProtectionPlanListResultIterator type.
8349func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
8350	return DdosProtectionPlanListResultIterator{page: page}
8351}
8352
8353// IsEmpty returns true if the ListResult contains no values.
8354func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
8355	return dpplr.Value == nil || len(*dpplr.Value) == 0
8356}
8357
8358// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
8359// It returns nil if no more results exist.
8360func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
8361	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
8362		return nil, nil
8363	}
8364	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8365		autorest.AsJSON(),
8366		autorest.AsGet(),
8367		autorest.WithBaseURL(to.String(dpplr.NextLink)))
8368}
8369
8370// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
8371type DdosProtectionPlanListResultPage struct {
8372	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
8373	dpplr DdosProtectionPlanListResult
8374}
8375
8376// NextWithContext advances to the next page of values.  If there was an error making
8377// the request the page does not advance and the error is returned.
8378func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
8379	if tracing.IsEnabled() {
8380		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
8381		defer func() {
8382			sc := -1
8383			if page.Response().Response.Response != nil {
8384				sc = page.Response().Response.Response.StatusCode
8385			}
8386			tracing.EndSpan(ctx, sc, err)
8387		}()
8388	}
8389	next, err := page.fn(ctx, page.dpplr)
8390	if err != nil {
8391		return err
8392	}
8393	page.dpplr = next
8394	return nil
8395}
8396
8397// Next advances to the next page of values.  If there was an error making
8398// the request the page does not advance and the error is returned.
8399// Deprecated: Use NextWithContext() instead.
8400func (page *DdosProtectionPlanListResultPage) Next() error {
8401	return page.NextWithContext(context.Background())
8402}
8403
8404// NotDone returns true if the page enumeration should be started or is not yet complete.
8405func (page DdosProtectionPlanListResultPage) NotDone() bool {
8406	return !page.dpplr.IsEmpty()
8407}
8408
8409// Response returns the raw server response from the last page request.
8410func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
8411	return page.dpplr
8412}
8413
8414// Values returns the slice of values for the current page or nil if there are no values.
8415func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
8416	if page.dpplr.IsEmpty() {
8417		return nil
8418	}
8419	return *page.dpplr.Value
8420}
8421
8422// Creates a new instance of the DdosProtectionPlanListResultPage type.
8423func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
8424	return DdosProtectionPlanListResultPage{fn: getNextPage}
8425}
8426
8427// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
8428type DdosProtectionPlanPropertiesFormat struct {
8429	// 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.
8430	ResourceGUID *string `json:"resourceGuid,omitempty"`
8431	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
8432	ProvisioningState *string `json:"provisioningState,omitempty"`
8433	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
8434	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
8435}
8436
8437// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8438// long-running operation.
8439type DdosProtectionPlansCreateOrUpdateFuture struct {
8440	azure.Future
8441}
8442
8443// Result returns the result of the asynchronous operation.
8444// If the operation has not completed it will return an error.
8445func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
8446	var done bool
8447	done, err = future.DoneWithContext(context.Background(), client)
8448	if err != nil {
8449		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8450		return
8451	}
8452	if !done {
8453		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
8454		return
8455	}
8456	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8457	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
8458		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
8459		if err != nil {
8460			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
8461		}
8462	}
8463	return
8464}
8465
8466// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
8467// long-running operation.
8468type DdosProtectionPlansDeleteFuture struct {
8469	azure.Future
8470}
8471
8472// Result returns the result of the asynchronous operation.
8473// If the operation has not completed it will return an error.
8474func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
8475	var done bool
8476	done, err = future.DoneWithContext(context.Background(), client)
8477	if err != nil {
8478		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
8479		return
8480	}
8481	if !done {
8482		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
8483		return
8484	}
8485	ar.Response = future.Response()
8486	return
8487}
8488
8489// DdosProtectionPlansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
8490// long-running operation.
8491type DdosProtectionPlansUpdateTagsFuture struct {
8492	azure.Future
8493}
8494
8495// Result returns the result of the asynchronous operation.
8496// If the operation has not completed it will return an error.
8497func (future *DdosProtectionPlansUpdateTagsFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
8498	var done bool
8499	done, err = future.DoneWithContext(context.Background(), client)
8500	if err != nil {
8501		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
8502		return
8503	}
8504	if !done {
8505		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansUpdateTagsFuture")
8506		return
8507	}
8508	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8509	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
8510		dpp, err = client.UpdateTagsResponder(dpp.Response.Response)
8511		if err != nil {
8512			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", dpp.Response.Response, "Failure responding to request")
8513		}
8514	}
8515	return
8516}
8517
8518// DdosSettings contains the DDoS protection settings of the public IP.
8519type DdosSettings struct {
8520	// DdosCustomPolicy - The DDoS custom policy associated with the public IP.
8521	DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"`
8522	// 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'
8523	ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"`
8524}
8525
8526// Delegation details the service to which the subnet is delegated.
8527type Delegation struct {
8528	// ServiceDelegationPropertiesFormat - Properties of the subnet.
8529	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
8530	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
8531	Name *string `json:"name,omitempty"`
8532	// Etag - A unique read-only string that changes whenever the resource is updated.
8533	Etag *string `json:"etag,omitempty"`
8534	// ID - Resource ID.
8535	ID *string `json:"id,omitempty"`
8536}
8537
8538// MarshalJSON is the custom marshaler for Delegation.
8539func (d Delegation) MarshalJSON() ([]byte, error) {
8540	objectMap := make(map[string]interface{})
8541	if d.ServiceDelegationPropertiesFormat != nil {
8542		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
8543	}
8544	if d.Name != nil {
8545		objectMap["name"] = d.Name
8546	}
8547	if d.Etag != nil {
8548		objectMap["etag"] = d.Etag
8549	}
8550	if d.ID != nil {
8551		objectMap["id"] = d.ID
8552	}
8553	return json.Marshal(objectMap)
8554}
8555
8556// UnmarshalJSON is the custom unmarshaler for Delegation struct.
8557func (d *Delegation) UnmarshalJSON(body []byte) error {
8558	var m map[string]*json.RawMessage
8559	err := json.Unmarshal(body, &m)
8560	if err != nil {
8561		return err
8562	}
8563	for k, v := range m {
8564		switch k {
8565		case "properties":
8566			if v != nil {
8567				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
8568				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
8569				if err != nil {
8570					return err
8571				}
8572				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
8573			}
8574		case "name":
8575			if v != nil {
8576				var name string
8577				err = json.Unmarshal(*v, &name)
8578				if err != nil {
8579					return err
8580				}
8581				d.Name = &name
8582			}
8583		case "etag":
8584			if v != nil {
8585				var etag string
8586				err = json.Unmarshal(*v, &etag)
8587				if err != nil {
8588					return err
8589				}
8590				d.Etag = &etag
8591			}
8592		case "id":
8593			if v != nil {
8594				var ID string
8595				err = json.Unmarshal(*v, &ID)
8596				if err != nil {
8597					return err
8598				}
8599				d.ID = &ID
8600			}
8601		}
8602	}
8603
8604	return nil
8605}
8606
8607// DeviceProperties list of properties of the device.
8608type DeviceProperties struct {
8609	// DeviceVendor - Name of the device Vendor.
8610	DeviceVendor *string `json:"deviceVendor,omitempty"`
8611	// DeviceModel - Model of the device.
8612	DeviceModel *string `json:"deviceModel,omitempty"`
8613	// LinkSpeedInMbps - Link speed.
8614	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
8615}
8616
8617// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
8618// network. Standard DHCP option for a subnet overrides VNET DHCP options.
8619type DhcpOptions struct {
8620	// DNSServers - The list of DNS servers IP addresses.
8621	DNSServers *[]string `json:"dnsServers,omitempty"`
8622}
8623
8624// Dimension dimension of the metric.
8625type Dimension struct {
8626	// Name - The name of the dimension.
8627	Name *string `json:"name,omitempty"`
8628	// DisplayName - The display name of the dimension.
8629	DisplayName *string `json:"displayName,omitempty"`
8630	// InternalName - The internal name of the dimension.
8631	InternalName *string `json:"internalName,omitempty"`
8632}
8633
8634// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
8635type DNSNameAvailabilityResult struct {
8636	autorest.Response `json:"-"`
8637	// Available - Domain availability (True/False).
8638	Available *bool `json:"available,omitempty"`
8639}
8640
8641// EffectiveNetworkSecurityGroup effective network security group.
8642type EffectiveNetworkSecurityGroup struct {
8643	// NetworkSecurityGroup - The ID of network security group that is applied.
8644	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
8645	// Association - Associated resources.
8646	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
8647	// EffectiveSecurityRules - A collection of effective security rules.
8648	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
8649	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
8650	TagMap map[string][]string `json:"tagMap"`
8651}
8652
8653// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
8654func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
8655	objectMap := make(map[string]interface{})
8656	if ensg.NetworkSecurityGroup != nil {
8657		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
8658	}
8659	if ensg.Association != nil {
8660		objectMap["association"] = ensg.Association
8661	}
8662	if ensg.EffectiveSecurityRules != nil {
8663		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
8664	}
8665	if ensg.TagMap != nil {
8666		objectMap["tagMap"] = ensg.TagMap
8667	}
8668	return json.Marshal(objectMap)
8669}
8670
8671// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
8672type EffectiveNetworkSecurityGroupAssociation struct {
8673	// Subnet - The ID of the subnet if assigned.
8674	Subnet *SubResource `json:"subnet,omitempty"`
8675	// NetworkInterface - The ID of the network interface if assigned.
8676	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
8677}
8678
8679// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
8680// call.
8681type EffectiveNetworkSecurityGroupListResult struct {
8682	autorest.Response `json:"-"`
8683	// Value - A list of effective network security groups.
8684	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
8685	// NextLink - READ-ONLY; The URL to get the next set of results.
8686	NextLink *string `json:"nextLink,omitempty"`
8687}
8688
8689// EffectiveNetworkSecurityRule effective network security rules.
8690type EffectiveNetworkSecurityRule struct {
8691	// Name - The name of the security rule specified by the user (if created by the user).
8692	Name *string `json:"name,omitempty"`
8693	// Protocol - The network protocol this rule applies to. Possible values are: 'Tcp', 'Udp', and 'All'. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
8694	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
8695	// SourcePortRange - The source port or range.
8696	SourcePortRange *string `json:"sourcePortRange,omitempty"`
8697	// DestinationPortRange - The destination port or range.
8698	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
8699	// 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 (*)
8700	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
8701	// 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 (*)
8702	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
8703	// SourceAddressPrefix - The source address prefix.
8704	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
8705	// DestinationAddressPrefix - The destination address prefix.
8706	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
8707	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
8708	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
8709	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
8710	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
8711	// ExpandedSourceAddressPrefix - The expanded source address prefix.
8712	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
8713	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
8714	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
8715	// Access - Whether network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
8716	Access SecurityRuleAccess `json:"access,omitempty"`
8717	// Priority - The priority of the rule.
8718	Priority *int32 `json:"priority,omitempty"`
8719	// Direction - The direction of the rule. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
8720	Direction SecurityRuleDirection `json:"direction,omitempty"`
8721}
8722
8723// EffectiveRoute effective Route
8724type EffectiveRoute struct {
8725	// Name - The name of the user defined route. This is optional.
8726	Name *string `json:"name,omitempty"`
8727	// DisableBgpRoutePropagation - If true, on-premises routes are not propagated to the network interfaces in the subnet.
8728	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
8729	// Source - Who created the route. Possible values are: 'Unknown', 'User', 'VirtualNetworkGateway', and 'Default'. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
8730	Source EffectiveRouteSource `json:"source,omitempty"`
8731	// State - The value of effective route. Possible values are: 'Active' and 'Invalid'. Possible values include: 'Active', 'Invalid'
8732	State EffectiveRouteState `json:"state,omitempty"`
8733	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
8734	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
8735	// NextHopIPAddress - The IP address of the next hop of the effective route.
8736	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
8737	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
8738	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
8739}
8740
8741// EffectiveRouteListResult response for list effective route API service call.
8742type EffectiveRouteListResult struct {
8743	autorest.Response `json:"-"`
8744	// Value - A list of effective routes.
8745	Value *[]EffectiveRoute `json:"value,omitempty"`
8746	// NextLink - READ-ONLY; The URL to get the next set of results.
8747	NextLink *string `json:"nextLink,omitempty"`
8748}
8749
8750// EndpointService identifies the service being brought into the virtual network.
8751type EndpointService struct {
8752	// ID - A unique identifier of the service being referenced by the interface endpoint.
8753	ID *string `json:"id,omitempty"`
8754}
8755
8756// EndpointServiceResult endpoint service.
8757type EndpointServiceResult struct {
8758	// Name - READ-ONLY; Name of the endpoint service.
8759	Name *string `json:"name,omitempty"`
8760	// Type - READ-ONLY; Type of the endpoint service.
8761	Type *string `json:"type,omitempty"`
8762	// ID - Resource ID.
8763	ID *string `json:"id,omitempty"`
8764}
8765
8766// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
8767type EndpointServicesListResult struct {
8768	autorest.Response `json:"-"`
8769	// Value - List of available endpoint services in a region.
8770	Value *[]EndpointServiceResult `json:"value,omitempty"`
8771	// NextLink - The URL to get the next set of results.
8772	NextLink *string `json:"nextLink,omitempty"`
8773}
8774
8775// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
8776// values.
8777type EndpointServicesListResultIterator struct {
8778	i    int
8779	page EndpointServicesListResultPage
8780}
8781
8782// NextWithContext advances to the next value.  If there was an error making
8783// the request the iterator does not advance and the error is returned.
8784func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
8785	if tracing.IsEnabled() {
8786		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
8787		defer func() {
8788			sc := -1
8789			if iter.Response().Response.Response != nil {
8790				sc = iter.Response().Response.Response.StatusCode
8791			}
8792			tracing.EndSpan(ctx, sc, err)
8793		}()
8794	}
8795	iter.i++
8796	if iter.i < len(iter.page.Values()) {
8797		return nil
8798	}
8799	err = iter.page.NextWithContext(ctx)
8800	if err != nil {
8801		iter.i--
8802		return err
8803	}
8804	iter.i = 0
8805	return nil
8806}
8807
8808// Next advances to the next value.  If there was an error making
8809// the request the iterator does not advance and the error is returned.
8810// Deprecated: Use NextWithContext() instead.
8811func (iter *EndpointServicesListResultIterator) Next() error {
8812	return iter.NextWithContext(context.Background())
8813}
8814
8815// NotDone returns true if the enumeration should be started or is not yet complete.
8816func (iter EndpointServicesListResultIterator) NotDone() bool {
8817	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8818}
8819
8820// Response returns the raw server response from the last page request.
8821func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
8822	return iter.page.Response()
8823}
8824
8825// Value returns the current value or a zero-initialized value if the
8826// iterator has advanced beyond the end of the collection.
8827func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
8828	if !iter.page.NotDone() {
8829		return EndpointServiceResult{}
8830	}
8831	return iter.page.Values()[iter.i]
8832}
8833
8834// Creates a new instance of the EndpointServicesListResultIterator type.
8835func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
8836	return EndpointServicesListResultIterator{page: page}
8837}
8838
8839// IsEmpty returns true if the ListResult contains no values.
8840func (eslr EndpointServicesListResult) IsEmpty() bool {
8841	return eslr.Value == nil || len(*eslr.Value) == 0
8842}
8843
8844// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
8845// It returns nil if no more results exist.
8846func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
8847	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
8848		return nil, nil
8849	}
8850	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8851		autorest.AsJSON(),
8852		autorest.AsGet(),
8853		autorest.WithBaseURL(to.String(eslr.NextLink)))
8854}
8855
8856// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
8857type EndpointServicesListResultPage struct {
8858	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
8859	eslr EndpointServicesListResult
8860}
8861
8862// NextWithContext advances to the next page of values.  If there was an error making
8863// the request the page does not advance and the error is returned.
8864func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
8865	if tracing.IsEnabled() {
8866		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
8867		defer func() {
8868			sc := -1
8869			if page.Response().Response.Response != nil {
8870				sc = page.Response().Response.Response.StatusCode
8871			}
8872			tracing.EndSpan(ctx, sc, err)
8873		}()
8874	}
8875	next, err := page.fn(ctx, page.eslr)
8876	if err != nil {
8877		return err
8878	}
8879	page.eslr = next
8880	return nil
8881}
8882
8883// Next advances to the next page of values.  If there was an error making
8884// the request the page does not advance and the error is returned.
8885// Deprecated: Use NextWithContext() instead.
8886func (page *EndpointServicesListResultPage) Next() error {
8887	return page.NextWithContext(context.Background())
8888}
8889
8890// NotDone returns true if the page enumeration should be started or is not yet complete.
8891func (page EndpointServicesListResultPage) NotDone() bool {
8892	return !page.eslr.IsEmpty()
8893}
8894
8895// Response returns the raw server response from the last page request.
8896func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
8897	return page.eslr
8898}
8899
8900// Values returns the slice of values for the current page or nil if there are no values.
8901func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
8902	if page.eslr.IsEmpty() {
8903		return nil
8904	}
8905	return *page.eslr.Value
8906}
8907
8908// Creates a new instance of the EndpointServicesListResultPage type.
8909func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
8910	return EndpointServicesListResultPage{fn: getNextPage}
8911}
8912
8913// Error common error representation.
8914type Error struct {
8915	// Code - Error code.
8916	Code *string `json:"code,omitempty"`
8917	// Message - Error message.
8918	Message *string `json:"message,omitempty"`
8919	// Target - Error target.
8920	Target *string `json:"target,omitempty"`
8921	// Details - Error details.
8922	Details *[]ErrorDetails `json:"details,omitempty"`
8923	// InnerError - Inner error message.
8924	InnerError *string `json:"innerError,omitempty"`
8925}
8926
8927// ErrorDetails common error details representation.
8928type ErrorDetails struct {
8929	// Code - Error code.
8930	Code *string `json:"code,omitempty"`
8931	// Target - Error target.
8932	Target *string `json:"target,omitempty"`
8933	// Message - Error message.
8934	Message *string `json:"message,omitempty"`
8935}
8936
8937// ErrorResponse the error object.
8938type ErrorResponse struct {
8939	// Error - The error details object.
8940	Error *ErrorDetails `json:"error,omitempty"`
8941}
8942
8943// EvaluatedNetworkSecurityGroup results of network security group evaluation.
8944type EvaluatedNetworkSecurityGroup struct {
8945	// NetworkSecurityGroupID - Network security group ID.
8946	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
8947	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
8948	AppliedTo *string `json:"appliedTo,omitempty"`
8949	// MatchedRule - Matched network security rule.
8950	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
8951	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
8952	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
8953}
8954
8955// ExpressRouteCircuit expressRouteCircuit resource
8956type ExpressRouteCircuit struct {
8957	autorest.Response `json:"-"`
8958	// Sku - The SKU.
8959	Sku *ExpressRouteCircuitSku `json:"sku,omitempty"`
8960	// ExpressRouteCircuitPropertiesFormat - Properties of the express route circuit.
8961	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
8962	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
8963	Etag *string `json:"etag,omitempty"`
8964	// ID - Resource ID.
8965	ID *string `json:"id,omitempty"`
8966	// Name - READ-ONLY; Resource name.
8967	Name *string `json:"name,omitempty"`
8968	// Type - READ-ONLY; Resource type.
8969	Type *string `json:"type,omitempty"`
8970	// Location - Resource location.
8971	Location *string `json:"location,omitempty"`
8972	// Tags - Resource tags.
8973	Tags map[string]*string `json:"tags"`
8974}
8975
8976// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
8977func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
8978	objectMap := make(map[string]interface{})
8979	if erc.Sku != nil {
8980		objectMap["sku"] = erc.Sku
8981	}
8982	if erc.ExpressRouteCircuitPropertiesFormat != nil {
8983		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
8984	}
8985	if erc.ID != nil {
8986		objectMap["id"] = erc.ID
8987	}
8988	if erc.Location != nil {
8989		objectMap["location"] = erc.Location
8990	}
8991	if erc.Tags != nil {
8992		objectMap["tags"] = erc.Tags
8993	}
8994	return json.Marshal(objectMap)
8995}
8996
8997// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
8998func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
8999	var m map[string]*json.RawMessage
9000	err := json.Unmarshal(body, &m)
9001	if err != nil {
9002		return err
9003	}
9004	for k, v := range m {
9005		switch k {
9006		case "sku":
9007			if v != nil {
9008				var sku ExpressRouteCircuitSku
9009				err = json.Unmarshal(*v, &sku)
9010				if err != nil {
9011					return err
9012				}
9013				erc.Sku = &sku
9014			}
9015		case "properties":
9016			if v != nil {
9017				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
9018				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
9019				if err != nil {
9020					return err
9021				}
9022				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
9023			}
9024		case "etag":
9025			if v != nil {
9026				var etag string
9027				err = json.Unmarshal(*v, &etag)
9028				if err != nil {
9029					return err
9030				}
9031				erc.Etag = &etag
9032			}
9033		case "id":
9034			if v != nil {
9035				var ID string
9036				err = json.Unmarshal(*v, &ID)
9037				if err != nil {
9038					return err
9039				}
9040				erc.ID = &ID
9041			}
9042		case "name":
9043			if v != nil {
9044				var name string
9045				err = json.Unmarshal(*v, &name)
9046				if err != nil {
9047					return err
9048				}
9049				erc.Name = &name
9050			}
9051		case "type":
9052			if v != nil {
9053				var typeVar string
9054				err = json.Unmarshal(*v, &typeVar)
9055				if err != nil {
9056					return err
9057				}
9058				erc.Type = &typeVar
9059			}
9060		case "location":
9061			if v != nil {
9062				var location string
9063				err = json.Unmarshal(*v, &location)
9064				if err != nil {
9065					return err
9066				}
9067				erc.Location = &location
9068			}
9069		case "tags":
9070			if v != nil {
9071				var tags map[string]*string
9072				err = json.Unmarshal(*v, &tags)
9073				if err != nil {
9074					return err
9075				}
9076				erc.Tags = tags
9077			}
9078		}
9079	}
9080
9081	return nil
9082}
9083
9084// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
9085type ExpressRouteCircuitArpTable struct {
9086	// Age - Entry age in minutes
9087	Age *int32 `json:"age,omitempty"`
9088	// Interface - Interface address
9089	Interface *string `json:"interface,omitempty"`
9090	// IPAddress - The IP address.
9091	IPAddress *string `json:"ipAddress,omitempty"`
9092	// MacAddress - The MAC address.
9093	MacAddress *string `json:"macAddress,omitempty"`
9094}
9095
9096// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
9097type ExpressRouteCircuitAuthorization struct {
9098	autorest.Response `json:"-"`
9099	// AuthorizationPropertiesFormat - Properties of the express route circuit authorization.
9100	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
9101	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
9102	Name *string `json:"name,omitempty"`
9103	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9104	Etag *string `json:"etag,omitempty"`
9105	// ID - Resource ID.
9106	ID *string `json:"id,omitempty"`
9107}
9108
9109// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
9110func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
9111	objectMap := make(map[string]interface{})
9112	if erca.AuthorizationPropertiesFormat != nil {
9113		objectMap["properties"] = erca.AuthorizationPropertiesFormat
9114	}
9115	if erca.Name != nil {
9116		objectMap["name"] = erca.Name
9117	}
9118	if erca.ID != nil {
9119		objectMap["id"] = erca.ID
9120	}
9121	return json.Marshal(objectMap)
9122}
9123
9124// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
9125func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
9126	var m map[string]*json.RawMessage
9127	err := json.Unmarshal(body, &m)
9128	if err != nil {
9129		return err
9130	}
9131	for k, v := range m {
9132		switch k {
9133		case "properties":
9134			if v != nil {
9135				var authorizationPropertiesFormat AuthorizationPropertiesFormat
9136				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
9137				if err != nil {
9138					return err
9139				}
9140				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
9141			}
9142		case "name":
9143			if v != nil {
9144				var name string
9145				err = json.Unmarshal(*v, &name)
9146				if err != nil {
9147					return err
9148				}
9149				erca.Name = &name
9150			}
9151		case "etag":
9152			if v != nil {
9153				var etag string
9154				err = json.Unmarshal(*v, &etag)
9155				if err != nil {
9156					return err
9157				}
9158				erca.Etag = &etag
9159			}
9160		case "id":
9161			if v != nil {
9162				var ID string
9163				err = json.Unmarshal(*v, &ID)
9164				if err != nil {
9165					return err
9166				}
9167				erca.ID = &ID
9168			}
9169		}
9170	}
9171
9172	return nil
9173}
9174
9175// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
9176// results of a long-running operation.
9177type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
9178	azure.Future
9179}
9180
9181// Result returns the result of the asynchronous operation.
9182// If the operation has not completed it will return an error.
9183func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
9184	var done bool
9185	done, err = future.DoneWithContext(context.Background(), client)
9186	if err != nil {
9187		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9188		return
9189	}
9190	if !done {
9191		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
9192		return
9193	}
9194	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9195	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
9196		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
9197		if err != nil {
9198			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
9199		}
9200	}
9201	return
9202}
9203
9204// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
9205// of a long-running operation.
9206type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
9207	azure.Future
9208}
9209
9210// Result returns the result of the asynchronous operation.
9211// If the operation has not completed it will return an error.
9212func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
9213	var done bool
9214	done, err = future.DoneWithContext(context.Background(), client)
9215	if err != nil {
9216		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
9217		return
9218	}
9219	if !done {
9220		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
9221		return
9222	}
9223	ar.Response = future.Response()
9224	return
9225}
9226
9227// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
9228// resource.
9229type ExpressRouteCircuitConnection struct {
9230	autorest.Response `json:"-"`
9231	// ExpressRouteCircuitConnectionPropertiesFormat - Properties of the express route circuit connection.
9232	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
9233	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
9234	Name *string `json:"name,omitempty"`
9235	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9236	Etag *string `json:"etag,omitempty"`
9237	// ID - Resource ID.
9238	ID *string `json:"id,omitempty"`
9239}
9240
9241// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
9242func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
9243	objectMap := make(map[string]interface{})
9244	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
9245		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
9246	}
9247	if ercc.Name != nil {
9248		objectMap["name"] = ercc.Name
9249	}
9250	if ercc.ID != nil {
9251		objectMap["id"] = ercc.ID
9252	}
9253	return json.Marshal(objectMap)
9254}
9255
9256// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
9257func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
9258	var m map[string]*json.RawMessage
9259	err := json.Unmarshal(body, &m)
9260	if err != nil {
9261		return err
9262	}
9263	for k, v := range m {
9264		switch k {
9265		case "properties":
9266			if v != nil {
9267				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
9268				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
9269				if err != nil {
9270					return err
9271				}
9272				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
9273			}
9274		case "name":
9275			if v != nil {
9276				var name string
9277				err = json.Unmarshal(*v, &name)
9278				if err != nil {
9279					return err
9280				}
9281				ercc.Name = &name
9282			}
9283		case "etag":
9284			if v != nil {
9285				var etag string
9286				err = json.Unmarshal(*v, &etag)
9287				if err != nil {
9288					return err
9289				}
9290				ercc.Etag = &etag
9291			}
9292		case "id":
9293			if v != nil {
9294				var ID string
9295				err = json.Unmarshal(*v, &ID)
9296				if err != nil {
9297					return err
9298				}
9299				ercc.ID = &ID
9300			}
9301		}
9302	}
9303
9304	return nil
9305}
9306
9307// ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
9308// global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
9309type ExpressRouteCircuitConnectionListResult struct {
9310	autorest.Response `json:"-"`
9311	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
9312	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
9313	// NextLink - The URL to get the next set of results.
9314	NextLink *string `json:"nextLink,omitempty"`
9315}
9316
9317// ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
9318// ExpressRouteCircuitConnection values.
9319type ExpressRouteCircuitConnectionListResultIterator struct {
9320	i    int
9321	page ExpressRouteCircuitConnectionListResultPage
9322}
9323
9324// NextWithContext advances to the next value.  If there was an error making
9325// the request the iterator does not advance and the error is returned.
9326func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
9327	if tracing.IsEnabled() {
9328		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
9329		defer func() {
9330			sc := -1
9331			if iter.Response().Response.Response != nil {
9332				sc = iter.Response().Response.Response.StatusCode
9333			}
9334			tracing.EndSpan(ctx, sc, err)
9335		}()
9336	}
9337	iter.i++
9338	if iter.i < len(iter.page.Values()) {
9339		return nil
9340	}
9341	err = iter.page.NextWithContext(ctx)
9342	if err != nil {
9343		iter.i--
9344		return err
9345	}
9346	iter.i = 0
9347	return nil
9348}
9349
9350// Next advances to the next value.  If there was an error making
9351// the request the iterator does not advance and the error is returned.
9352// Deprecated: Use NextWithContext() instead.
9353func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
9354	return iter.NextWithContext(context.Background())
9355}
9356
9357// NotDone returns true if the enumeration should be started or is not yet complete.
9358func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
9359	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9360}
9361
9362// Response returns the raw server response from the last page request.
9363func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
9364	return iter.page.Response()
9365}
9366
9367// Value returns the current value or a zero-initialized value if the
9368// iterator has advanced beyond the end of the collection.
9369func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
9370	if !iter.page.NotDone() {
9371		return ExpressRouteCircuitConnection{}
9372	}
9373	return iter.page.Values()[iter.i]
9374}
9375
9376// Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
9377func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
9378	return ExpressRouteCircuitConnectionListResultIterator{page: page}
9379}
9380
9381// IsEmpty returns true if the ListResult contains no values.
9382func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
9383	return ercclr.Value == nil || len(*ercclr.Value) == 0
9384}
9385
9386// expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
9387// It returns nil if no more results exist.
9388func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
9389	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
9390		return nil, nil
9391	}
9392	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9393		autorest.AsJSON(),
9394		autorest.AsGet(),
9395		autorest.WithBaseURL(to.String(ercclr.NextLink)))
9396}
9397
9398// ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
9399type ExpressRouteCircuitConnectionListResultPage struct {
9400	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
9401	ercclr ExpressRouteCircuitConnectionListResult
9402}
9403
9404// NextWithContext advances to the next page of values.  If there was an error making
9405// the request the page does not advance and the error is returned.
9406func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
9407	if tracing.IsEnabled() {
9408		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
9409		defer func() {
9410			sc := -1
9411			if page.Response().Response.Response != nil {
9412				sc = page.Response().Response.Response.StatusCode
9413			}
9414			tracing.EndSpan(ctx, sc, err)
9415		}()
9416	}
9417	next, err := page.fn(ctx, page.ercclr)
9418	if err != nil {
9419		return err
9420	}
9421	page.ercclr = next
9422	return nil
9423}
9424
9425// Next advances to the next page of values.  If there was an error making
9426// the request the page does not advance and the error is returned.
9427// Deprecated: Use NextWithContext() instead.
9428func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
9429	return page.NextWithContext(context.Background())
9430}
9431
9432// NotDone returns true if the page enumeration should be started or is not yet complete.
9433func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
9434	return !page.ercclr.IsEmpty()
9435}
9436
9437// Response returns the raw server response from the last page request.
9438func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
9439	return page.ercclr
9440}
9441
9442// Values returns the slice of values for the current page or nil if there are no values.
9443func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
9444	if page.ercclr.IsEmpty() {
9445		return nil
9446	}
9447	return *page.ercclr.Value
9448}
9449
9450// Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
9451func NewExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
9452	return ExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
9453}
9454
9455// ExpressRouteCircuitConnectionPropertiesFormat properties of the express route circuit connection.
9456type ExpressRouteCircuitConnectionPropertiesFormat struct {
9457	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
9458	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
9459	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
9460	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
9461	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
9462	AddressPrefix *string `json:"addressPrefix,omitempty"`
9463	// AuthorizationKey - The authorization key.
9464	AuthorizationKey *string `json:"authorizationKey,omitempty"`
9465	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
9466	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
9467	// ProvisioningState - READ-ONLY; Provisioning state of the circuit connection resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
9468	ProvisioningState *string `json:"provisioningState,omitempty"`
9469}
9470
9471// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
9472// results of a long-running operation.
9473type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
9474	azure.Future
9475}
9476
9477// Result returns the result of the asynchronous operation.
9478// If the operation has not completed it will return an error.
9479func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
9480	var done bool
9481	done, err = future.DoneWithContext(context.Background(), client)
9482	if err != nil {
9483		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9484		return
9485	}
9486	if !done {
9487		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
9488		return
9489	}
9490	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9491	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
9492		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
9493		if err != nil {
9494			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
9495		}
9496	}
9497	return
9498}
9499
9500// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
9501// long-running operation.
9502type ExpressRouteCircuitConnectionsDeleteFuture struct {
9503	azure.Future
9504}
9505
9506// Result returns the result of the asynchronous operation.
9507// If the operation has not completed it will return an error.
9508func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
9509	var done bool
9510	done, err = future.DoneWithContext(context.Background(), client)
9511	if err != nil {
9512		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
9513		return
9514	}
9515	if !done {
9516		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
9517		return
9518	}
9519	ar.Response = future.Response()
9520	return
9521}
9522
9523// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
9524type ExpressRouteCircuitListResult struct {
9525	autorest.Response `json:"-"`
9526	// Value - A list of ExpressRouteCircuits in a resource group.
9527	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
9528	// NextLink - The URL to get the next set of results.
9529	NextLink *string `json:"nextLink,omitempty"`
9530}
9531
9532// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
9533// values.
9534type ExpressRouteCircuitListResultIterator struct {
9535	i    int
9536	page ExpressRouteCircuitListResultPage
9537}
9538
9539// NextWithContext advances to the next value.  If there was an error making
9540// the request the iterator does not advance and the error is returned.
9541func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
9542	if tracing.IsEnabled() {
9543		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
9544		defer func() {
9545			sc := -1
9546			if iter.Response().Response.Response != nil {
9547				sc = iter.Response().Response.Response.StatusCode
9548			}
9549			tracing.EndSpan(ctx, sc, err)
9550		}()
9551	}
9552	iter.i++
9553	if iter.i < len(iter.page.Values()) {
9554		return nil
9555	}
9556	err = iter.page.NextWithContext(ctx)
9557	if err != nil {
9558		iter.i--
9559		return err
9560	}
9561	iter.i = 0
9562	return nil
9563}
9564
9565// Next advances to the next value.  If there was an error making
9566// the request the iterator does not advance and the error is returned.
9567// Deprecated: Use NextWithContext() instead.
9568func (iter *ExpressRouteCircuitListResultIterator) Next() error {
9569	return iter.NextWithContext(context.Background())
9570}
9571
9572// NotDone returns true if the enumeration should be started or is not yet complete.
9573func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
9574	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9575}
9576
9577// Response returns the raw server response from the last page request.
9578func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
9579	return iter.page.Response()
9580}
9581
9582// Value returns the current value or a zero-initialized value if the
9583// iterator has advanced beyond the end of the collection.
9584func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
9585	if !iter.page.NotDone() {
9586		return ExpressRouteCircuit{}
9587	}
9588	return iter.page.Values()[iter.i]
9589}
9590
9591// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
9592func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
9593	return ExpressRouteCircuitListResultIterator{page: page}
9594}
9595
9596// IsEmpty returns true if the ListResult contains no values.
9597func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
9598	return erclr.Value == nil || len(*erclr.Value) == 0
9599}
9600
9601// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
9602// It returns nil if no more results exist.
9603func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
9604	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
9605		return nil, nil
9606	}
9607	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9608		autorest.AsJSON(),
9609		autorest.AsGet(),
9610		autorest.WithBaseURL(to.String(erclr.NextLink)))
9611}
9612
9613// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
9614type ExpressRouteCircuitListResultPage struct {
9615	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
9616	erclr ExpressRouteCircuitListResult
9617}
9618
9619// NextWithContext advances to the next page of values.  If there was an error making
9620// the request the page does not advance and the error is returned.
9621func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
9622	if tracing.IsEnabled() {
9623		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
9624		defer func() {
9625			sc := -1
9626			if page.Response().Response.Response != nil {
9627				sc = page.Response().Response.Response.StatusCode
9628			}
9629			tracing.EndSpan(ctx, sc, err)
9630		}()
9631	}
9632	next, err := page.fn(ctx, page.erclr)
9633	if err != nil {
9634		return err
9635	}
9636	page.erclr = next
9637	return nil
9638}
9639
9640// Next advances to the next page of values.  If there was an error making
9641// the request the page does not advance and the error is returned.
9642// Deprecated: Use NextWithContext() instead.
9643func (page *ExpressRouteCircuitListResultPage) Next() error {
9644	return page.NextWithContext(context.Background())
9645}
9646
9647// NotDone returns true if the page enumeration should be started or is not yet complete.
9648func (page ExpressRouteCircuitListResultPage) NotDone() bool {
9649	return !page.erclr.IsEmpty()
9650}
9651
9652// Response returns the raw server response from the last page request.
9653func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
9654	return page.erclr
9655}
9656
9657// Values returns the slice of values for the current page or nil if there are no values.
9658func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
9659	if page.erclr.IsEmpty() {
9660		return nil
9661	}
9662	return *page.erclr.Value
9663}
9664
9665// Creates a new instance of the ExpressRouteCircuitListResultPage type.
9666func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
9667	return ExpressRouteCircuitListResultPage{fn: getNextPage}
9668}
9669
9670// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
9671type ExpressRouteCircuitPeering struct {
9672	autorest.Response `json:"-"`
9673	// ExpressRouteCircuitPeeringPropertiesFormat - Properties of the express route circuit peering.
9674	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
9675	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
9676	Name *string `json:"name,omitempty"`
9677	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9678	Etag *string `json:"etag,omitempty"`
9679	// ID - Resource ID.
9680	ID *string `json:"id,omitempty"`
9681}
9682
9683// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
9684func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
9685	objectMap := make(map[string]interface{})
9686	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
9687		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
9688	}
9689	if ercp.Name != nil {
9690		objectMap["name"] = ercp.Name
9691	}
9692	if ercp.ID != nil {
9693		objectMap["id"] = ercp.ID
9694	}
9695	return json.Marshal(objectMap)
9696}
9697
9698// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
9699func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
9700	var m map[string]*json.RawMessage
9701	err := json.Unmarshal(body, &m)
9702	if err != nil {
9703		return err
9704	}
9705	for k, v := range m {
9706		switch k {
9707		case "properties":
9708			if v != nil {
9709				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
9710				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
9711				if err != nil {
9712					return err
9713				}
9714				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
9715			}
9716		case "name":
9717			if v != nil {
9718				var name string
9719				err = json.Unmarshal(*v, &name)
9720				if err != nil {
9721					return err
9722				}
9723				ercp.Name = &name
9724			}
9725		case "etag":
9726			if v != nil {
9727				var etag string
9728				err = json.Unmarshal(*v, &etag)
9729				if err != nil {
9730					return err
9731				}
9732				ercp.Etag = &etag
9733			}
9734		case "id":
9735			if v != nil {
9736				var ID string
9737				err = json.Unmarshal(*v, &ID)
9738				if err != nil {
9739					return err
9740				}
9741				ercp.ID = &ID
9742			}
9743		}
9744	}
9745
9746	return nil
9747}
9748
9749// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
9750type ExpressRouteCircuitPeeringConfig struct {
9751	// AdvertisedPublicPrefixes - The reference of AdvertisedPublicPrefixes.
9752	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
9753	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering
9754	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
9755	// AdvertisedPublicPrefixesState - AdvertisedPublicPrefixState of the Peering resource. Possible values are 'NotConfigured', 'Configuring', 'Configured', and 'ValidationNeeded'. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
9756	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
9757	// LegacyMode - The legacy mode of the peering.
9758	LegacyMode *int32 `json:"legacyMode,omitempty"`
9759	// CustomerASN - The CustomerASN of the peering.
9760	CustomerASN *int32 `json:"customerASN,omitempty"`
9761	// RoutingRegistryName - The RoutingRegistryName of the configuration.
9762	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
9763}
9764
9765// ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
9766type ExpressRouteCircuitPeeringID struct {
9767	// ID - The ID of the ExpressRoute circuit peering.
9768	ID *string `json:"id,omitempty"`
9769}
9770
9771// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
9772// that belong to an ExpressRouteCircuit.
9773type ExpressRouteCircuitPeeringListResult struct {
9774	autorest.Response `json:"-"`
9775	// Value - The peerings in an express route circuit.
9776	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
9777	// NextLink - The URL to get the next set of results.
9778	NextLink *string `json:"nextLink,omitempty"`
9779}
9780
9781// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
9782// ExpressRouteCircuitPeering values.
9783type ExpressRouteCircuitPeeringListResultIterator struct {
9784	i    int
9785	page ExpressRouteCircuitPeeringListResultPage
9786}
9787
9788// NextWithContext advances to the next value.  If there was an error making
9789// the request the iterator does not advance and the error is returned.
9790func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
9791	if tracing.IsEnabled() {
9792		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
9793		defer func() {
9794			sc := -1
9795			if iter.Response().Response.Response != nil {
9796				sc = iter.Response().Response.Response.StatusCode
9797			}
9798			tracing.EndSpan(ctx, sc, err)
9799		}()
9800	}
9801	iter.i++
9802	if iter.i < len(iter.page.Values()) {
9803		return nil
9804	}
9805	err = iter.page.NextWithContext(ctx)
9806	if err != nil {
9807		iter.i--
9808		return err
9809	}
9810	iter.i = 0
9811	return nil
9812}
9813
9814// Next advances to the next value.  If there was an error making
9815// the request the iterator does not advance and the error is returned.
9816// Deprecated: Use NextWithContext() instead.
9817func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
9818	return iter.NextWithContext(context.Background())
9819}
9820
9821// NotDone returns true if the enumeration should be started or is not yet complete.
9822func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
9823	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9824}
9825
9826// Response returns the raw server response from the last page request.
9827func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
9828	return iter.page.Response()
9829}
9830
9831// Value returns the current value or a zero-initialized value if the
9832// iterator has advanced beyond the end of the collection.
9833func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
9834	if !iter.page.NotDone() {
9835		return ExpressRouteCircuitPeering{}
9836	}
9837	return iter.page.Values()[iter.i]
9838}
9839
9840// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
9841func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
9842	return ExpressRouteCircuitPeeringListResultIterator{page: page}
9843}
9844
9845// IsEmpty returns true if the ListResult contains no values.
9846func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
9847	return ercplr.Value == nil || len(*ercplr.Value) == 0
9848}
9849
9850// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
9851// It returns nil if no more results exist.
9852func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
9853	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
9854		return nil, nil
9855	}
9856	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9857		autorest.AsJSON(),
9858		autorest.AsGet(),
9859		autorest.WithBaseURL(to.String(ercplr.NextLink)))
9860}
9861
9862// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
9863type ExpressRouteCircuitPeeringListResultPage struct {
9864	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
9865	ercplr ExpressRouteCircuitPeeringListResult
9866}
9867
9868// NextWithContext advances to the next page of values.  If there was an error making
9869// the request the page does not advance and the error is returned.
9870func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
9871	if tracing.IsEnabled() {
9872		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
9873		defer func() {
9874			sc := -1
9875			if page.Response().Response.Response != nil {
9876				sc = page.Response().Response.Response.StatusCode
9877			}
9878			tracing.EndSpan(ctx, sc, err)
9879		}()
9880	}
9881	next, err := page.fn(ctx, page.ercplr)
9882	if err != nil {
9883		return err
9884	}
9885	page.ercplr = next
9886	return nil
9887}
9888
9889// Next advances to the next page of values.  If there was an error making
9890// the request the page does not advance and the error is returned.
9891// Deprecated: Use NextWithContext() instead.
9892func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
9893	return page.NextWithContext(context.Background())
9894}
9895
9896// NotDone returns true if the page enumeration should be started or is not yet complete.
9897func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
9898	return !page.ercplr.IsEmpty()
9899}
9900
9901// Response returns the raw server response from the last page request.
9902func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
9903	return page.ercplr
9904}
9905
9906// Values returns the slice of values for the current page or nil if there are no values.
9907func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
9908	if page.ercplr.IsEmpty() {
9909		return nil
9910	}
9911	return *page.ercplr.Value
9912}
9913
9914// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
9915func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
9916	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
9917}
9918
9919// ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering.
9920type ExpressRouteCircuitPeeringPropertiesFormat struct {
9921	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
9922	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
9923	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
9924	State ExpressRoutePeeringState `json:"state,omitempty"`
9925	// AzureASN - The Azure ASN.
9926	AzureASN *int32 `json:"azureASN,omitempty"`
9927	// PeerASN - The peer ASN.
9928	PeerASN *int64 `json:"peerASN,omitempty"`
9929	// PrimaryPeerAddressPrefix - The primary address prefix.
9930	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
9931	// SecondaryPeerAddressPrefix - The secondary address prefix.
9932	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
9933	// PrimaryAzurePort - The primary port.
9934	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
9935	// SecondaryAzurePort - The secondary port.
9936	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
9937	// SharedKey - The shared key.
9938	SharedKey *string `json:"sharedKey,omitempty"`
9939	// VlanID - The VLAN ID.
9940	VlanID *int32 `json:"vlanId,omitempty"`
9941	// MicrosoftPeeringConfig - The Microsoft peering configuration.
9942	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
9943	// Stats - Gets peering stats.
9944	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
9945	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9946	ProvisioningState *string `json:"provisioningState,omitempty"`
9947	// GatewayManagerEtag - The GatewayManager Etag.
9948	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
9949	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
9950	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
9951	// RouteFilter - The reference of the RouteFilter resource.
9952	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
9953	// Ipv6PeeringConfig - The IPv6 peering configuration.
9954	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
9955	// ExpressRouteConnection - The ExpressRoute connection.
9956	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
9957	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
9958	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
9959	// PeeredConnections - READ-ONLY; The list of peered circuit connections associated with Azure Private Peering for this circuit.
9960	PeeredConnections *[]PeerExpressRouteCircuitConnection `json:"peeredConnections,omitempty"`
9961}
9962
9963// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
9964// of a long-running operation.
9965type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
9966	azure.Future
9967}
9968
9969// Result returns the result of the asynchronous operation.
9970// If the operation has not completed it will return an error.
9971func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
9972	var done bool
9973	done, err = future.DoneWithContext(context.Background(), client)
9974	if err != nil {
9975		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9976		return
9977	}
9978	if !done {
9979		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
9980		return
9981	}
9982	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9983	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
9984		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
9985		if err != nil {
9986			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
9987		}
9988	}
9989	return
9990}
9991
9992// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
9993// long-running operation.
9994type ExpressRouteCircuitPeeringsDeleteFuture struct {
9995	azure.Future
9996}
9997
9998// Result returns the result of the asynchronous operation.
9999// If the operation has not completed it will return an error.
10000func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
10001	var done bool
10002	done, err = future.DoneWithContext(context.Background(), client)
10003	if err != nil {
10004		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
10005		return
10006	}
10007	if !done {
10008		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
10009		return
10010	}
10011	ar.Response = future.Response()
10012	return
10013}
10014
10015// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
10016type ExpressRouteCircuitPropertiesFormat struct {
10017	// AllowClassicOperations - Allow classic operations
10018	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
10019	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
10020	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
10021	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
10022	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
10023	// Authorizations - The list of authorizations.
10024	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
10025	// Peerings - The list of peerings.
10026	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
10027	// ServiceKey - The ServiceKey.
10028	ServiceKey *string `json:"serviceKey,omitempty"`
10029	// ServiceProviderNotes - The ServiceProviderNotes.
10030	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
10031	// ServiceProviderProperties - The ServiceProviderProperties.
10032	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
10033	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
10034	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
10035	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
10036	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
10037	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
10038	Stag *int32 `json:"stag,omitempty"`
10039	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10040	ProvisioningState *string `json:"provisioningState,omitempty"`
10041	// GatewayManagerEtag - The GatewayManager Etag.
10042	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
10043	// GlobalReachEnabled - Flag denoting Global reach status.
10044	GlobalReachEnabled *bool `json:"globalReachEnabled,omitempty"`
10045}
10046
10047// ExpressRouteCircuitReference reference to an express route circuit.
10048type ExpressRouteCircuitReference struct {
10049	// ID - Corresponding Express Route Circuit Id.
10050	ID *string `json:"id,omitempty"`
10051}
10052
10053// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit
10054type ExpressRouteCircuitRoutesTable struct {
10055	// NetworkProperty - IP address of a network entity
10056	NetworkProperty *string `json:"network,omitempty"`
10057	// NextHop - NextHop address
10058	NextHop *string `json:"nextHop,omitempty"`
10059	// LocPrf - Local preference value as set with the set local-preference route-map configuration command
10060	LocPrf *string `json:"locPrf,omitempty"`
10061	// Weight - Route Weight.
10062	Weight *int32 `json:"weight,omitempty"`
10063	// Path - Autonomous system paths to the destination network.
10064	Path *string `json:"path,omitempty"`
10065}
10066
10067// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
10068type ExpressRouteCircuitRoutesTableSummary struct {
10069	// Neighbor - IP address of the neighbor.
10070	Neighbor *string `json:"neighbor,omitempty"`
10071	// V - BGP version number spoken to the neighbor.
10072	V *int32 `json:"v,omitempty"`
10073	// As - Autonomous system number.
10074	As *int32 `json:"as,omitempty"`
10075	// 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.
10076	UpDown *string `json:"upDown,omitempty"`
10077	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
10078	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
10079}
10080
10081// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
10082// Circuits API.
10083type ExpressRouteCircuitsArpTableListResult struct {
10084	autorest.Response `json:"-"`
10085	// Value - Gets list of the ARP table.
10086	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
10087	// NextLink - The URL to get the next set of results.
10088	NextLink *string `json:"nextLink,omitempty"`
10089}
10090
10091// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
10092// long-running operation.
10093type ExpressRouteCircuitsCreateOrUpdateFuture struct {
10094	azure.Future
10095}
10096
10097// Result returns the result of the asynchronous operation.
10098// If the operation has not completed it will return an error.
10099func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
10100	var done bool
10101	done, err = future.DoneWithContext(context.Background(), client)
10102	if err != nil {
10103		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10104		return
10105	}
10106	if !done {
10107		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
10108		return
10109	}
10110	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10111	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
10112		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
10113		if err != nil {
10114			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
10115		}
10116	}
10117	return
10118}
10119
10120// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
10121// long-running operation.
10122type ExpressRouteCircuitsDeleteFuture struct {
10123	azure.Future
10124}
10125
10126// Result returns the result of the asynchronous operation.
10127// If the operation has not completed it will return an error.
10128func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
10129	var done bool
10130	done, err = future.DoneWithContext(context.Background(), client)
10131	if err != nil {
10132		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
10133		return
10134	}
10135	if !done {
10136		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
10137		return
10138	}
10139	ar.Response = future.Response()
10140	return
10141}
10142
10143// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
10144// ExpressRouteCircuit.
10145type ExpressRouteCircuitServiceProviderProperties struct {
10146	// ServiceProviderName - The serviceProviderName.
10147	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
10148	// PeeringLocation - The peering location.
10149	PeeringLocation *string `json:"peeringLocation,omitempty"`
10150	// BandwidthInMbps - The BandwidthInMbps.
10151	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
10152}
10153
10154// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
10155type ExpressRouteCircuitSku struct {
10156	// Name - The name of the SKU.
10157	Name *string `json:"name,omitempty"`
10158	// Tier - The tier of the SKU. Possible values are 'Standard', 'Premium' or 'Local'. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal'
10159	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
10160	// Family - The family of the SKU. Possible values are: 'UnlimitedData' and 'MeteredData'. Possible values include: 'UnlimitedData', 'MeteredData'
10161	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
10162}
10163
10164// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
10165// long-running operation.
10166type ExpressRouteCircuitsListArpTableFuture struct {
10167	azure.Future
10168}
10169
10170// Result returns the result of the asynchronous operation.
10171// If the operation has not completed it will return an error.
10172func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
10173	var done bool
10174	done, err = future.DoneWithContext(context.Background(), client)
10175	if err != nil {
10176		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
10177		return
10178	}
10179	if !done {
10180		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
10181		return
10182	}
10183	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10184	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
10185		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
10186		if err != nil {
10187			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
10188		}
10189	}
10190	return
10191}
10192
10193// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
10194// long-running operation.
10195type ExpressRouteCircuitsListRoutesTableFuture struct {
10196	azure.Future
10197}
10198
10199// Result returns the result of the asynchronous operation.
10200// If the operation has not completed it will return an error.
10201func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
10202	var done bool
10203	done, err = future.DoneWithContext(context.Background(), client)
10204	if err != nil {
10205		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
10206		return
10207	}
10208	if !done {
10209		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
10210		return
10211	}
10212	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10213	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
10214		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
10215		if err != nil {
10216			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
10217		}
10218	}
10219	return
10220}
10221
10222// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
10223// results of a long-running operation.
10224type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
10225	azure.Future
10226}
10227
10228// Result returns the result of the asynchronous operation.
10229// If the operation has not completed it will return an error.
10230func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
10231	var done bool
10232	done, err = future.DoneWithContext(context.Background(), client)
10233	if err != nil {
10234		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
10235		return
10236	}
10237	if !done {
10238		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
10239		return
10240	}
10241	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10242	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
10243		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
10244		if err != nil {
10245			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
10246		}
10247	}
10248	return
10249}
10250
10251// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
10252// Circuits API.
10253type ExpressRouteCircuitsRoutesTableListResult struct {
10254	autorest.Response `json:"-"`
10255	// Value - The list of routes table.
10256	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
10257	// NextLink - The URL to get the next set of results.
10258	NextLink *string `json:"nextLink,omitempty"`
10259}
10260
10261// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
10262// Express Route Circuits API.
10263type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
10264	autorest.Response `json:"-"`
10265	// Value - A list of the routes table.
10266	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
10267	// NextLink - The URL to get the next set of results.
10268	NextLink *string `json:"nextLink,omitempty"`
10269}
10270
10271// ExpressRouteCircuitStats contains stats associated with the peering.
10272type ExpressRouteCircuitStats struct {
10273	autorest.Response `json:"-"`
10274	// PrimarybytesIn - Gets BytesIn of the peering.
10275	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
10276	// PrimarybytesOut - Gets BytesOut of the peering.
10277	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
10278	// SecondarybytesIn - Gets BytesIn of the peering.
10279	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
10280	// SecondarybytesOut - Gets BytesOut of the peering.
10281	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
10282}
10283
10284// ExpressRouteCircuitsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
10285// long-running operation.
10286type ExpressRouteCircuitsUpdateTagsFuture struct {
10287	azure.Future
10288}
10289
10290// Result returns the result of the asynchronous operation.
10291// If the operation has not completed it will return an error.
10292func (future *ExpressRouteCircuitsUpdateTagsFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
10293	var done bool
10294	done, err = future.DoneWithContext(context.Background(), client)
10295	if err != nil {
10296		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
10297		return
10298	}
10299	if !done {
10300		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsUpdateTagsFuture")
10301		return
10302	}
10303	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10304	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
10305		erc, err = client.UpdateTagsResponder(erc.Response.Response)
10306		if err != nil {
10307			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", erc.Response.Response, "Failure responding to request")
10308		}
10309	}
10310	return
10311}
10312
10313// ExpressRouteConnection expressRouteConnection resource.
10314type ExpressRouteConnection struct {
10315	autorest.Response `json:"-"`
10316	// ExpressRouteConnectionProperties - Properties of the express route connection.
10317	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
10318	// Name - The name of the resource.
10319	Name *string `json:"name,omitempty"`
10320	// ID - Resource ID.
10321	ID *string `json:"id,omitempty"`
10322}
10323
10324// MarshalJSON is the custom marshaler for ExpressRouteConnection.
10325func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
10326	objectMap := make(map[string]interface{})
10327	if erc.ExpressRouteConnectionProperties != nil {
10328		objectMap["properties"] = erc.ExpressRouteConnectionProperties
10329	}
10330	if erc.Name != nil {
10331		objectMap["name"] = erc.Name
10332	}
10333	if erc.ID != nil {
10334		objectMap["id"] = erc.ID
10335	}
10336	return json.Marshal(objectMap)
10337}
10338
10339// UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
10340func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
10341	var m map[string]*json.RawMessage
10342	err := json.Unmarshal(body, &m)
10343	if err != nil {
10344		return err
10345	}
10346	for k, v := range m {
10347		switch k {
10348		case "properties":
10349			if v != nil {
10350				var expressRouteConnectionProperties ExpressRouteConnectionProperties
10351				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
10352				if err != nil {
10353					return err
10354				}
10355				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
10356			}
10357		case "name":
10358			if v != nil {
10359				var name string
10360				err = json.Unmarshal(*v, &name)
10361				if err != nil {
10362					return err
10363				}
10364				erc.Name = &name
10365			}
10366		case "id":
10367			if v != nil {
10368				var ID string
10369				err = json.Unmarshal(*v, &ID)
10370				if err != nil {
10371					return err
10372				}
10373				erc.ID = &ID
10374			}
10375		}
10376	}
10377
10378	return nil
10379}
10380
10381// ExpressRouteConnectionID the ID of the ExpressRouteConnection.
10382type ExpressRouteConnectionID struct {
10383	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
10384	ID *string `json:"id,omitempty"`
10385}
10386
10387// ExpressRouteConnectionList expressRouteConnection list
10388type ExpressRouteConnectionList struct {
10389	autorest.Response `json:"-"`
10390	// Value - The list of ExpressRoute connections
10391	Value *[]ExpressRouteConnection `json:"value,omitempty"`
10392}
10393
10394// ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
10395type ExpressRouteConnectionProperties struct {
10396	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10397	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10398	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
10399	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
10400	// AuthorizationKey - Authorization key to establish the connection.
10401	AuthorizationKey *string `json:"authorizationKey,omitempty"`
10402	// RoutingWeight - The routing weight associated to the connection.
10403	RoutingWeight *int32 `json:"routingWeight,omitempty"`
10404}
10405
10406// ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
10407// a long-running operation.
10408type ExpressRouteConnectionsCreateOrUpdateFuture struct {
10409	azure.Future
10410}
10411
10412// Result returns the result of the asynchronous operation.
10413// If the operation has not completed it will return an error.
10414func (future *ExpressRouteConnectionsCreateOrUpdateFuture) Result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
10415	var done bool
10416	done, err = future.DoneWithContext(context.Background(), client)
10417	if err != nil {
10418		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10419		return
10420	}
10421	if !done {
10422		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
10423		return
10424	}
10425	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10426	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
10427		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
10428		if err != nil {
10429			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
10430		}
10431	}
10432	return
10433}
10434
10435// ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
10436// long-running operation.
10437type ExpressRouteConnectionsDeleteFuture struct {
10438	azure.Future
10439}
10440
10441// Result returns the result of the asynchronous operation.
10442// If the operation has not completed it will return an error.
10443func (future *ExpressRouteConnectionsDeleteFuture) Result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
10444	var done bool
10445	done, err = future.DoneWithContext(context.Background(), client)
10446	if err != nil {
10447		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
10448		return
10449	}
10450	if !done {
10451		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
10452		return
10453	}
10454	ar.Response = future.Response()
10455	return
10456}
10457
10458// ExpressRouteCrossConnection expressRouteCrossConnection resource
10459type ExpressRouteCrossConnection struct {
10460	autorest.Response `json:"-"`
10461	// ExpressRouteCrossConnectionProperties - Properties of the express route cross connection.
10462	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
10463	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
10464	Etag *string `json:"etag,omitempty"`
10465	// ID - Resource ID.
10466	ID *string `json:"id,omitempty"`
10467	// Name - READ-ONLY; Resource name.
10468	Name *string `json:"name,omitempty"`
10469	// Type - READ-ONLY; Resource type.
10470	Type *string `json:"type,omitempty"`
10471	// Location - Resource location.
10472	Location *string `json:"location,omitempty"`
10473	// Tags - Resource tags.
10474	Tags map[string]*string `json:"tags"`
10475}
10476
10477// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
10478func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
10479	objectMap := make(map[string]interface{})
10480	if ercc.ExpressRouteCrossConnectionProperties != nil {
10481		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
10482	}
10483	if ercc.ID != nil {
10484		objectMap["id"] = ercc.ID
10485	}
10486	if ercc.Location != nil {
10487		objectMap["location"] = ercc.Location
10488	}
10489	if ercc.Tags != nil {
10490		objectMap["tags"] = ercc.Tags
10491	}
10492	return json.Marshal(objectMap)
10493}
10494
10495// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
10496func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
10497	var m map[string]*json.RawMessage
10498	err := json.Unmarshal(body, &m)
10499	if err != nil {
10500		return err
10501	}
10502	for k, v := range m {
10503		switch k {
10504		case "properties":
10505			if v != nil {
10506				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
10507				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
10508				if err != nil {
10509					return err
10510				}
10511				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
10512			}
10513		case "etag":
10514			if v != nil {
10515				var etag string
10516				err = json.Unmarshal(*v, &etag)
10517				if err != nil {
10518					return err
10519				}
10520				ercc.Etag = &etag
10521			}
10522		case "id":
10523			if v != nil {
10524				var ID string
10525				err = json.Unmarshal(*v, &ID)
10526				if err != nil {
10527					return err
10528				}
10529				ercc.ID = &ID
10530			}
10531		case "name":
10532			if v != nil {
10533				var name string
10534				err = json.Unmarshal(*v, &name)
10535				if err != nil {
10536					return err
10537				}
10538				ercc.Name = &name
10539			}
10540		case "type":
10541			if v != nil {
10542				var typeVar string
10543				err = json.Unmarshal(*v, &typeVar)
10544				if err != nil {
10545					return err
10546				}
10547				ercc.Type = &typeVar
10548			}
10549		case "location":
10550			if v != nil {
10551				var location string
10552				err = json.Unmarshal(*v, &location)
10553				if err != nil {
10554					return err
10555				}
10556				ercc.Location = &location
10557			}
10558		case "tags":
10559			if v != nil {
10560				var tags map[string]*string
10561				err = json.Unmarshal(*v, &tags)
10562				if err != nil {
10563					return err
10564				}
10565				ercc.Tags = tags
10566			}
10567		}
10568	}
10569
10570	return nil
10571}
10572
10573// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
10574type ExpressRouteCrossConnectionListResult struct {
10575	autorest.Response `json:"-"`
10576	// Value - A list of ExpressRouteCrossConnection resources.
10577	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
10578	// NextLink - READ-ONLY; The URL to get the next set of results.
10579	NextLink *string `json:"nextLink,omitempty"`
10580}
10581
10582// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
10583// ExpressRouteCrossConnection values.
10584type ExpressRouteCrossConnectionListResultIterator struct {
10585	i    int
10586	page ExpressRouteCrossConnectionListResultPage
10587}
10588
10589// NextWithContext advances to the next value.  If there was an error making
10590// the request the iterator does not advance and the error is returned.
10591func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
10592	if tracing.IsEnabled() {
10593		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
10594		defer func() {
10595			sc := -1
10596			if iter.Response().Response.Response != nil {
10597				sc = iter.Response().Response.Response.StatusCode
10598			}
10599			tracing.EndSpan(ctx, sc, err)
10600		}()
10601	}
10602	iter.i++
10603	if iter.i < len(iter.page.Values()) {
10604		return nil
10605	}
10606	err = iter.page.NextWithContext(ctx)
10607	if err != nil {
10608		iter.i--
10609		return err
10610	}
10611	iter.i = 0
10612	return nil
10613}
10614
10615// Next advances to the next value.  If there was an error making
10616// the request the iterator does not advance and the error is returned.
10617// Deprecated: Use NextWithContext() instead.
10618func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
10619	return iter.NextWithContext(context.Background())
10620}
10621
10622// NotDone returns true if the enumeration should be started or is not yet complete.
10623func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
10624	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10625}
10626
10627// Response returns the raw server response from the last page request.
10628func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
10629	return iter.page.Response()
10630}
10631
10632// Value returns the current value or a zero-initialized value if the
10633// iterator has advanced beyond the end of the collection.
10634func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
10635	if !iter.page.NotDone() {
10636		return ExpressRouteCrossConnection{}
10637	}
10638	return iter.page.Values()[iter.i]
10639}
10640
10641// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
10642func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
10643	return ExpressRouteCrossConnectionListResultIterator{page: page}
10644}
10645
10646// IsEmpty returns true if the ListResult contains no values.
10647func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
10648	return ercclr.Value == nil || len(*ercclr.Value) == 0
10649}
10650
10651// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
10652// It returns nil if no more results exist.
10653func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
10654	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
10655		return nil, nil
10656	}
10657	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10658		autorest.AsJSON(),
10659		autorest.AsGet(),
10660		autorest.WithBaseURL(to.String(ercclr.NextLink)))
10661}
10662
10663// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
10664type ExpressRouteCrossConnectionListResultPage struct {
10665	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
10666	ercclr ExpressRouteCrossConnectionListResult
10667}
10668
10669// NextWithContext advances to the next page of values.  If there was an error making
10670// the request the page does not advance and the error is returned.
10671func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
10672	if tracing.IsEnabled() {
10673		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
10674		defer func() {
10675			sc := -1
10676			if page.Response().Response.Response != nil {
10677				sc = page.Response().Response.Response.StatusCode
10678			}
10679			tracing.EndSpan(ctx, sc, err)
10680		}()
10681	}
10682	next, err := page.fn(ctx, page.ercclr)
10683	if err != nil {
10684		return err
10685	}
10686	page.ercclr = next
10687	return nil
10688}
10689
10690// Next advances to the next page of values.  If there was an error making
10691// the request the page does not advance and the error is returned.
10692// Deprecated: Use NextWithContext() instead.
10693func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
10694	return page.NextWithContext(context.Background())
10695}
10696
10697// NotDone returns true if the page enumeration should be started or is not yet complete.
10698func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
10699	return !page.ercclr.IsEmpty()
10700}
10701
10702// Response returns the raw server response from the last page request.
10703func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
10704	return page.ercclr
10705}
10706
10707// Values returns the slice of values for the current page or nil if there are no values.
10708func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
10709	if page.ercclr.IsEmpty() {
10710		return nil
10711	}
10712	return *page.ercclr.Value
10713}
10714
10715// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
10716func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
10717	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
10718}
10719
10720// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
10721type ExpressRouteCrossConnectionPeering struct {
10722	autorest.Response `json:"-"`
10723	// ExpressRouteCrossConnectionPeeringProperties - Properties of the express route cross connection peering.
10724	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
10725	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
10726	Name *string `json:"name,omitempty"`
10727	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10728	Etag *string `json:"etag,omitempty"`
10729	// ID - Resource ID.
10730	ID *string `json:"id,omitempty"`
10731}
10732
10733// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
10734func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
10735	objectMap := make(map[string]interface{})
10736	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
10737		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
10738	}
10739	if erccp.Name != nil {
10740		objectMap["name"] = erccp.Name
10741	}
10742	if erccp.ID != nil {
10743		objectMap["id"] = erccp.ID
10744	}
10745	return json.Marshal(objectMap)
10746}
10747
10748// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
10749func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
10750	var m map[string]*json.RawMessage
10751	err := json.Unmarshal(body, &m)
10752	if err != nil {
10753		return err
10754	}
10755	for k, v := range m {
10756		switch k {
10757		case "properties":
10758			if v != nil {
10759				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
10760				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
10761				if err != nil {
10762					return err
10763				}
10764				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
10765			}
10766		case "name":
10767			if v != nil {
10768				var name string
10769				err = json.Unmarshal(*v, &name)
10770				if err != nil {
10771					return err
10772				}
10773				erccp.Name = &name
10774			}
10775		case "etag":
10776			if v != nil {
10777				var etag string
10778				err = json.Unmarshal(*v, &etag)
10779				if err != nil {
10780					return err
10781				}
10782				erccp.Etag = &etag
10783			}
10784		case "id":
10785			if v != nil {
10786				var ID string
10787				err = json.Unmarshal(*v, &ID)
10788				if err != nil {
10789					return err
10790				}
10791				erccp.ID = &ID
10792			}
10793		}
10794	}
10795
10796	return nil
10797}
10798
10799// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
10800// that belong to an ExpressRouteCrossConnection.
10801type ExpressRouteCrossConnectionPeeringList struct {
10802	autorest.Response `json:"-"`
10803	// Value - The peerings in an express route cross connection.
10804	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
10805	// NextLink - READ-ONLY; The URL to get the next set of results.
10806	NextLink *string `json:"nextLink,omitempty"`
10807}
10808
10809// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
10810// ExpressRouteCrossConnectionPeering values.
10811type ExpressRouteCrossConnectionPeeringListIterator struct {
10812	i    int
10813	page ExpressRouteCrossConnectionPeeringListPage
10814}
10815
10816// NextWithContext advances to the next value.  If there was an error making
10817// the request the iterator does not advance and the error is returned.
10818func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
10819	if tracing.IsEnabled() {
10820		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
10821		defer func() {
10822			sc := -1
10823			if iter.Response().Response.Response != nil {
10824				sc = iter.Response().Response.Response.StatusCode
10825			}
10826			tracing.EndSpan(ctx, sc, err)
10827		}()
10828	}
10829	iter.i++
10830	if iter.i < len(iter.page.Values()) {
10831		return nil
10832	}
10833	err = iter.page.NextWithContext(ctx)
10834	if err != nil {
10835		iter.i--
10836		return err
10837	}
10838	iter.i = 0
10839	return nil
10840}
10841
10842// Next advances to the next value.  If there was an error making
10843// the request the iterator does not advance and the error is returned.
10844// Deprecated: Use NextWithContext() instead.
10845func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
10846	return iter.NextWithContext(context.Background())
10847}
10848
10849// NotDone returns true if the enumeration should be started or is not yet complete.
10850func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
10851	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10852}
10853
10854// Response returns the raw server response from the last page request.
10855func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
10856	return iter.page.Response()
10857}
10858
10859// Value returns the current value or a zero-initialized value if the
10860// iterator has advanced beyond the end of the collection.
10861func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
10862	if !iter.page.NotDone() {
10863		return ExpressRouteCrossConnectionPeering{}
10864	}
10865	return iter.page.Values()[iter.i]
10866}
10867
10868// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
10869func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
10870	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
10871}
10872
10873// IsEmpty returns true if the ListResult contains no values.
10874func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
10875	return erccpl.Value == nil || len(*erccpl.Value) == 0
10876}
10877
10878// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
10879// It returns nil if no more results exist.
10880func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
10881	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
10882		return nil, nil
10883	}
10884	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10885		autorest.AsJSON(),
10886		autorest.AsGet(),
10887		autorest.WithBaseURL(to.String(erccpl.NextLink)))
10888}
10889
10890// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
10891type ExpressRouteCrossConnectionPeeringListPage struct {
10892	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
10893	erccpl ExpressRouteCrossConnectionPeeringList
10894}
10895
10896// NextWithContext advances to the next page of values.  If there was an error making
10897// the request the page does not advance and the error is returned.
10898func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
10899	if tracing.IsEnabled() {
10900		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
10901		defer func() {
10902			sc := -1
10903			if page.Response().Response.Response != nil {
10904				sc = page.Response().Response.Response.StatusCode
10905			}
10906			tracing.EndSpan(ctx, sc, err)
10907		}()
10908	}
10909	next, err := page.fn(ctx, page.erccpl)
10910	if err != nil {
10911		return err
10912	}
10913	page.erccpl = next
10914	return nil
10915}
10916
10917// Next advances to the next page of values.  If there was an error making
10918// the request the page does not advance and the error is returned.
10919// Deprecated: Use NextWithContext() instead.
10920func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
10921	return page.NextWithContext(context.Background())
10922}
10923
10924// NotDone returns true if the page enumeration should be started or is not yet complete.
10925func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
10926	return !page.erccpl.IsEmpty()
10927}
10928
10929// Response returns the raw server response from the last page request.
10930func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
10931	return page.erccpl
10932}
10933
10934// Values returns the slice of values for the current page or nil if there are no values.
10935func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
10936	if page.erccpl.IsEmpty() {
10937		return nil
10938	}
10939	return *page.erccpl.Value
10940}
10941
10942// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
10943func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
10944	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
10945}
10946
10947// ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering.
10948type ExpressRouteCrossConnectionPeeringProperties struct {
10949	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
10950	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
10951	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
10952	State ExpressRoutePeeringState `json:"state,omitempty"`
10953	// AzureASN - READ-ONLY; The Azure ASN.
10954	AzureASN *int32 `json:"azureASN,omitempty"`
10955	// PeerASN - The peer ASN.
10956	PeerASN *int64 `json:"peerASN,omitempty"`
10957	// PrimaryPeerAddressPrefix - The primary address prefix.
10958	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
10959	// SecondaryPeerAddressPrefix - The secondary address prefix.
10960	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
10961	// PrimaryAzurePort - READ-ONLY; The primary port.
10962	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
10963	// SecondaryAzurePort - READ-ONLY; The secondary port.
10964	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
10965	// SharedKey - The shared key.
10966	SharedKey *string `json:"sharedKey,omitempty"`
10967	// VlanID - The VLAN ID.
10968	VlanID *int32 `json:"vlanId,omitempty"`
10969	// MicrosoftPeeringConfig - The Microsoft peering configuration.
10970	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
10971	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10972	ProvisioningState *string `json:"provisioningState,omitempty"`
10973	// GatewayManagerEtag - The GatewayManager Etag.
10974	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
10975	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
10976	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
10977	// Ipv6PeeringConfig - The IPv6 peering configuration.
10978	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
10979}
10980
10981// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10982// results of a long-running operation.
10983type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
10984	azure.Future
10985}
10986
10987// Result returns the result of the asynchronous operation.
10988// If the operation has not completed it will return an error.
10989func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
10990	var done bool
10991	done, err = future.DoneWithContext(context.Background(), client)
10992	if err != nil {
10993		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10994		return
10995	}
10996	if !done {
10997		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
10998		return
10999	}
11000	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11001	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
11002		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
11003		if err != nil {
11004			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
11005		}
11006	}
11007	return
11008}
11009
11010// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
11011// of a long-running operation.
11012type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
11013	azure.Future
11014}
11015
11016// Result returns the result of the asynchronous operation.
11017// If the operation has not completed it will return an error.
11018func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
11019	var done bool
11020	done, err = future.DoneWithContext(context.Background(), client)
11021	if err != nil {
11022		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
11023		return
11024	}
11025	if !done {
11026		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
11027		return
11028	}
11029	ar.Response = future.Response()
11030	return
11031}
11032
11033// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
11034type ExpressRouteCrossConnectionProperties struct {
11035	// PrimaryAzurePort - READ-ONLY; The name of the primary  port.
11036	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
11037	// SecondaryAzurePort - READ-ONLY; The name of the secondary  port.
11038	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
11039	// STag - READ-ONLY; The identifier of the circuit traffic.
11040	STag *int32 `json:"sTag,omitempty"`
11041	// PeeringLocation - The peering location of the ExpressRoute circuit.
11042	PeeringLocation *string `json:"peeringLocation,omitempty"`
11043	// BandwidthInMbps - The circuit bandwidth In Mbps.
11044	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
11045	// ExpressRouteCircuit - The ExpressRouteCircuit
11046	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
11047	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
11048	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
11049	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
11050	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
11051	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
11052	ProvisioningState *string `json:"provisioningState,omitempty"`
11053	// Peerings - The list of peerings.
11054	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
11055}
11056
11057// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
11058type ExpressRouteCrossConnectionRoutesTableSummary struct {
11059	// Neighbor - IP address of Neighbor router
11060	Neighbor *string `json:"neighbor,omitempty"`
11061	// Asn - Autonomous system number.
11062	Asn *int32 `json:"asn,omitempty"`
11063	// 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.
11064	UpDown *string `json:"upDown,omitempty"`
11065	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
11066	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
11067}
11068
11069// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
11070// results of a long-running operation.
11071type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
11072	azure.Future
11073}
11074
11075// Result returns the result of the asynchronous operation.
11076// If the operation has not completed it will return an error.
11077func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
11078	var done bool
11079	done, err = future.DoneWithContext(context.Background(), client)
11080	if err != nil {
11081		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11082		return
11083	}
11084	if !done {
11085		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
11086		return
11087	}
11088	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11089	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
11090		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
11091		if err != nil {
11092			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
11093		}
11094	}
11095	return
11096}
11097
11098// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
11099// of a long-running operation.
11100type ExpressRouteCrossConnectionsListArpTableFuture struct {
11101	azure.Future
11102}
11103
11104// Result returns the result of the asynchronous operation.
11105// If the operation has not completed it will return an error.
11106func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
11107	var done bool
11108	done, err = future.DoneWithContext(context.Background(), client)
11109	if err != nil {
11110		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
11111		return
11112	}
11113	if !done {
11114		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
11115		return
11116	}
11117	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11118	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
11119		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
11120		if err != nil {
11121			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
11122		}
11123	}
11124	return
11125}
11126
11127// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
11128// results of a long-running operation.
11129type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
11130	azure.Future
11131}
11132
11133// Result returns the result of the asynchronous operation.
11134// If the operation has not completed it will return an error.
11135func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
11136	var done bool
11137	done, err = future.DoneWithContext(context.Background(), client)
11138	if err != nil {
11139		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
11140		return
11141	}
11142	if !done {
11143		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
11144		return
11145	}
11146	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11147	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
11148		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
11149		if err != nil {
11150			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
11151		}
11152	}
11153	return
11154}
11155
11156// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
11157// the results of a long-running operation.
11158type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
11159	azure.Future
11160}
11161
11162// Result returns the result of the asynchronous operation.
11163// If the operation has not completed it will return an error.
11164func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
11165	var done bool
11166	done, err = future.DoneWithContext(context.Background(), client)
11167	if err != nil {
11168		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
11169		return
11170	}
11171	if !done {
11172		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
11173		return
11174	}
11175	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11176	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
11177		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
11178		if err != nil {
11179			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
11180		}
11181	}
11182	return
11183}
11184
11185// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
11186// the Express Route Cross Connections.
11187type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
11188	autorest.Response `json:"-"`
11189	// Value - A list of the routes table.
11190	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
11191	// NextLink - READ-ONLY; The URL to get the next set of results.
11192	NextLink *string `json:"nextLink,omitempty"`
11193}
11194
11195// ExpressRouteCrossConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the results of
11196// a long-running operation.
11197type ExpressRouteCrossConnectionsUpdateTagsFuture struct {
11198	azure.Future
11199}
11200
11201// Result returns the result of the asynchronous operation.
11202// If the operation has not completed it will return an error.
11203func (future *ExpressRouteCrossConnectionsUpdateTagsFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
11204	var done bool
11205	done, err = future.DoneWithContext(context.Background(), client)
11206	if err != nil {
11207		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11208		return
11209	}
11210	if !done {
11211		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsUpdateTagsFuture")
11212		return
11213	}
11214	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11215	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
11216		ercc, err = client.UpdateTagsResponder(ercc.Response.Response)
11217		if err != nil {
11218			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", ercc.Response.Response, "Failure responding to request")
11219		}
11220	}
11221	return
11222}
11223
11224// ExpressRouteGateway expressRoute gateway resource.
11225type ExpressRouteGateway struct {
11226	autorest.Response `json:"-"`
11227	// ExpressRouteGatewayProperties - Properties of the express route gateway.
11228	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
11229	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11230	Etag *string `json:"etag,omitempty"`
11231	// ID - Resource ID.
11232	ID *string `json:"id,omitempty"`
11233	// Name - READ-ONLY; Resource name.
11234	Name *string `json:"name,omitempty"`
11235	// Type - READ-ONLY; Resource type.
11236	Type *string `json:"type,omitempty"`
11237	// Location - Resource location.
11238	Location *string `json:"location,omitempty"`
11239	// Tags - Resource tags.
11240	Tags map[string]*string `json:"tags"`
11241}
11242
11243// MarshalJSON is the custom marshaler for ExpressRouteGateway.
11244func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
11245	objectMap := make(map[string]interface{})
11246	if erg.ExpressRouteGatewayProperties != nil {
11247		objectMap["properties"] = erg.ExpressRouteGatewayProperties
11248	}
11249	if erg.ID != nil {
11250		objectMap["id"] = erg.ID
11251	}
11252	if erg.Location != nil {
11253		objectMap["location"] = erg.Location
11254	}
11255	if erg.Tags != nil {
11256		objectMap["tags"] = erg.Tags
11257	}
11258	return json.Marshal(objectMap)
11259}
11260
11261// UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
11262func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
11263	var m map[string]*json.RawMessage
11264	err := json.Unmarshal(body, &m)
11265	if err != nil {
11266		return err
11267	}
11268	for k, v := range m {
11269		switch k {
11270		case "properties":
11271			if v != nil {
11272				var expressRouteGatewayProperties ExpressRouteGatewayProperties
11273				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
11274				if err != nil {
11275					return err
11276				}
11277				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
11278			}
11279		case "etag":
11280			if v != nil {
11281				var etag string
11282				err = json.Unmarshal(*v, &etag)
11283				if err != nil {
11284					return err
11285				}
11286				erg.Etag = &etag
11287			}
11288		case "id":
11289			if v != nil {
11290				var ID string
11291				err = json.Unmarshal(*v, &ID)
11292				if err != nil {
11293					return err
11294				}
11295				erg.ID = &ID
11296			}
11297		case "name":
11298			if v != nil {
11299				var name string
11300				err = json.Unmarshal(*v, &name)
11301				if err != nil {
11302					return err
11303				}
11304				erg.Name = &name
11305			}
11306		case "type":
11307			if v != nil {
11308				var typeVar string
11309				err = json.Unmarshal(*v, &typeVar)
11310				if err != nil {
11311					return err
11312				}
11313				erg.Type = &typeVar
11314			}
11315		case "location":
11316			if v != nil {
11317				var location string
11318				err = json.Unmarshal(*v, &location)
11319				if err != nil {
11320					return err
11321				}
11322				erg.Location = &location
11323			}
11324		case "tags":
11325			if v != nil {
11326				var tags map[string]*string
11327				err = json.Unmarshal(*v, &tags)
11328				if err != nil {
11329					return err
11330				}
11331				erg.Tags = tags
11332			}
11333		}
11334	}
11335
11336	return nil
11337}
11338
11339// ExpressRouteGatewayList list of ExpressRoute gateways.
11340type ExpressRouteGatewayList struct {
11341	autorest.Response `json:"-"`
11342	// Value - List of ExpressRoute gateways.
11343	Value *[]ExpressRouteGateway `json:"value,omitempty"`
11344}
11345
11346// ExpressRouteGatewayProperties expressRoute gateway resource properties.
11347type ExpressRouteGatewayProperties struct {
11348	// AutoScaleConfiguration - Configuration for auto scaling.
11349	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
11350	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
11351	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
11352	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11353	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11354	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
11355	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
11356}
11357
11358// ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
11359type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
11360	// Bounds - Minimum and maximum number of scale units to deploy.
11361	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
11362}
11363
11364// ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
11365// deploy.
11366type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
11367	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
11368	Min *int32 `json:"min,omitempty"`
11369	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
11370	Max *int32 `json:"max,omitempty"`
11371}
11372
11373// ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
11374// long-running operation.
11375type ExpressRouteGatewaysCreateOrUpdateFuture struct {
11376	azure.Future
11377}
11378
11379// Result returns the result of the asynchronous operation.
11380// If the operation has not completed it will return an error.
11381func (future *ExpressRouteGatewaysCreateOrUpdateFuture) Result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
11382	var done bool
11383	done, err = future.DoneWithContext(context.Background(), client)
11384	if err != nil {
11385		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11386		return
11387	}
11388	if !done {
11389		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
11390		return
11391	}
11392	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11393	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
11394		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
11395		if err != nil {
11396			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
11397		}
11398	}
11399	return
11400}
11401
11402// ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
11403// long-running operation.
11404type ExpressRouteGatewaysDeleteFuture 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 *ExpressRouteGatewaysDeleteFuture) Result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
11411	var done bool
11412	done, err = future.DoneWithContext(context.Background(), client)
11413	if err != nil {
11414		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
11415		return
11416	}
11417	if !done {
11418		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
11419		return
11420	}
11421	ar.Response = future.Response()
11422	return
11423}
11424
11425// ExpressRouteLink expressRouteLink child resource definition.
11426type ExpressRouteLink struct {
11427	autorest.Response `json:"-"`
11428	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties
11429	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
11430	// Name - Name of child port resource that is unique among child port resources of the parent.
11431	Name *string `json:"name,omitempty"`
11432	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11433	Etag *string `json:"etag,omitempty"`
11434	// ID - Resource ID.
11435	ID *string `json:"id,omitempty"`
11436}
11437
11438// MarshalJSON is the custom marshaler for ExpressRouteLink.
11439func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
11440	objectMap := make(map[string]interface{})
11441	if erl.ExpressRouteLinkPropertiesFormat != nil {
11442		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
11443	}
11444	if erl.Name != nil {
11445		objectMap["name"] = erl.Name
11446	}
11447	if erl.ID != nil {
11448		objectMap["id"] = erl.ID
11449	}
11450	return json.Marshal(objectMap)
11451}
11452
11453// UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
11454func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
11455	var m map[string]*json.RawMessage
11456	err := json.Unmarshal(body, &m)
11457	if err != nil {
11458		return err
11459	}
11460	for k, v := range m {
11461		switch k {
11462		case "properties":
11463			if v != nil {
11464				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
11465				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
11466				if err != nil {
11467					return err
11468				}
11469				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
11470			}
11471		case "name":
11472			if v != nil {
11473				var name string
11474				err = json.Unmarshal(*v, &name)
11475				if err != nil {
11476					return err
11477				}
11478				erl.Name = &name
11479			}
11480		case "etag":
11481			if v != nil {
11482				var etag string
11483				err = json.Unmarshal(*v, &etag)
11484				if err != nil {
11485					return err
11486				}
11487				erl.Etag = &etag
11488			}
11489		case "id":
11490			if v != nil {
11491				var ID string
11492				err = json.Unmarshal(*v, &ID)
11493				if err != nil {
11494					return err
11495				}
11496				erl.ID = &ID
11497			}
11498		}
11499	}
11500
11501	return nil
11502}
11503
11504// ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
11505type ExpressRouteLinkListResult struct {
11506	autorest.Response `json:"-"`
11507	// Value - The list of ExpressRouteLink sub-resources.
11508	Value *[]ExpressRouteLink `json:"value,omitempty"`
11509	// NextLink - The URL to get the next set of results.
11510	NextLink *string `json:"nextLink,omitempty"`
11511}
11512
11513// ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
11514type ExpressRouteLinkListResultIterator struct {
11515	i    int
11516	page ExpressRouteLinkListResultPage
11517}
11518
11519// NextWithContext advances to the next value.  If there was an error making
11520// the request the iterator does not advance and the error is returned.
11521func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
11522	if tracing.IsEnabled() {
11523		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
11524		defer func() {
11525			sc := -1
11526			if iter.Response().Response.Response != nil {
11527				sc = iter.Response().Response.Response.StatusCode
11528			}
11529			tracing.EndSpan(ctx, sc, err)
11530		}()
11531	}
11532	iter.i++
11533	if iter.i < len(iter.page.Values()) {
11534		return nil
11535	}
11536	err = iter.page.NextWithContext(ctx)
11537	if err != nil {
11538		iter.i--
11539		return err
11540	}
11541	iter.i = 0
11542	return nil
11543}
11544
11545// Next advances to the next value.  If there was an error making
11546// the request the iterator does not advance and the error is returned.
11547// Deprecated: Use NextWithContext() instead.
11548func (iter *ExpressRouteLinkListResultIterator) Next() error {
11549	return iter.NextWithContext(context.Background())
11550}
11551
11552// NotDone returns true if the enumeration should be started or is not yet complete.
11553func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
11554	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11555}
11556
11557// Response returns the raw server response from the last page request.
11558func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
11559	return iter.page.Response()
11560}
11561
11562// Value returns the current value or a zero-initialized value if the
11563// iterator has advanced beyond the end of the collection.
11564func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
11565	if !iter.page.NotDone() {
11566		return ExpressRouteLink{}
11567	}
11568	return iter.page.Values()[iter.i]
11569}
11570
11571// Creates a new instance of the ExpressRouteLinkListResultIterator type.
11572func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
11573	return ExpressRouteLinkListResultIterator{page: page}
11574}
11575
11576// IsEmpty returns true if the ListResult contains no values.
11577func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
11578	return erllr.Value == nil || len(*erllr.Value) == 0
11579}
11580
11581// expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
11582// It returns nil if no more results exist.
11583func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
11584	if erllr.NextLink == nil || len(to.String(erllr.NextLink)) < 1 {
11585		return nil, nil
11586	}
11587	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11588		autorest.AsJSON(),
11589		autorest.AsGet(),
11590		autorest.WithBaseURL(to.String(erllr.NextLink)))
11591}
11592
11593// ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
11594type ExpressRouteLinkListResultPage struct {
11595	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
11596	erllr ExpressRouteLinkListResult
11597}
11598
11599// NextWithContext advances to the next page of values.  If there was an error making
11600// the request the page does not advance and the error is returned.
11601func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
11602	if tracing.IsEnabled() {
11603		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
11604		defer func() {
11605			sc := -1
11606			if page.Response().Response.Response != nil {
11607				sc = page.Response().Response.Response.StatusCode
11608			}
11609			tracing.EndSpan(ctx, sc, err)
11610		}()
11611	}
11612	next, err := page.fn(ctx, page.erllr)
11613	if err != nil {
11614		return err
11615	}
11616	page.erllr = next
11617	return nil
11618}
11619
11620// Next advances to the next page of values.  If there was an error making
11621// the request the page does not advance and the error is returned.
11622// Deprecated: Use NextWithContext() instead.
11623func (page *ExpressRouteLinkListResultPage) Next() error {
11624	return page.NextWithContext(context.Background())
11625}
11626
11627// NotDone returns true if the page enumeration should be started or is not yet complete.
11628func (page ExpressRouteLinkListResultPage) NotDone() bool {
11629	return !page.erllr.IsEmpty()
11630}
11631
11632// Response returns the raw server response from the last page request.
11633func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
11634	return page.erllr
11635}
11636
11637// Values returns the slice of values for the current page or nil if there are no values.
11638func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
11639	if page.erllr.IsEmpty() {
11640		return nil
11641	}
11642	return *page.erllr.Value
11643}
11644
11645// Creates a new instance of the ExpressRouteLinkListResultPage type.
11646func NewExpressRouteLinkListResultPage(getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
11647	return ExpressRouteLinkListResultPage{fn: getNextPage}
11648}
11649
11650// ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
11651type ExpressRouteLinkPropertiesFormat struct {
11652	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
11653	RouterName *string `json:"routerName,omitempty"`
11654	// InterfaceName - READ-ONLY; Name of Azure router interface.
11655	InterfaceName *string `json:"interfaceName,omitempty"`
11656	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
11657	PatchPanelID *string `json:"patchPanelId,omitempty"`
11658	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
11659	RackID *string `json:"rackId,omitempty"`
11660	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
11661	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
11662	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
11663	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
11664	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRouteLink resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
11665	ProvisioningState *string `json:"provisioningState,omitempty"`
11666}
11667
11668// ExpressRoutePort expressRoutePort resource definition.
11669type ExpressRoutePort struct {
11670	autorest.Response `json:"-"`
11671	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties
11672	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
11673	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11674	Etag *string `json:"etag,omitempty"`
11675	// ID - Resource ID.
11676	ID *string `json:"id,omitempty"`
11677	// Name - READ-ONLY; Resource name.
11678	Name *string `json:"name,omitempty"`
11679	// Type - READ-ONLY; Resource type.
11680	Type *string `json:"type,omitempty"`
11681	// Location - Resource location.
11682	Location *string `json:"location,omitempty"`
11683	// Tags - Resource tags.
11684	Tags map[string]*string `json:"tags"`
11685}
11686
11687// MarshalJSON is the custom marshaler for ExpressRoutePort.
11688func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
11689	objectMap := make(map[string]interface{})
11690	if erp.ExpressRoutePortPropertiesFormat != nil {
11691		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
11692	}
11693	if erp.ID != nil {
11694		objectMap["id"] = erp.ID
11695	}
11696	if erp.Location != nil {
11697		objectMap["location"] = erp.Location
11698	}
11699	if erp.Tags != nil {
11700		objectMap["tags"] = erp.Tags
11701	}
11702	return json.Marshal(objectMap)
11703}
11704
11705// UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
11706func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
11707	var m map[string]*json.RawMessage
11708	err := json.Unmarshal(body, &m)
11709	if err != nil {
11710		return err
11711	}
11712	for k, v := range m {
11713		switch k {
11714		case "properties":
11715			if v != nil {
11716				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
11717				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
11718				if err != nil {
11719					return err
11720				}
11721				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
11722			}
11723		case "etag":
11724			if v != nil {
11725				var etag string
11726				err = json.Unmarshal(*v, &etag)
11727				if err != nil {
11728					return err
11729				}
11730				erp.Etag = &etag
11731			}
11732		case "id":
11733			if v != nil {
11734				var ID string
11735				err = json.Unmarshal(*v, &ID)
11736				if err != nil {
11737					return err
11738				}
11739				erp.ID = &ID
11740			}
11741		case "name":
11742			if v != nil {
11743				var name string
11744				err = json.Unmarshal(*v, &name)
11745				if err != nil {
11746					return err
11747				}
11748				erp.Name = &name
11749			}
11750		case "type":
11751			if v != nil {
11752				var typeVar string
11753				err = json.Unmarshal(*v, &typeVar)
11754				if err != nil {
11755					return err
11756				}
11757				erp.Type = &typeVar
11758			}
11759		case "location":
11760			if v != nil {
11761				var location string
11762				err = json.Unmarshal(*v, &location)
11763				if err != nil {
11764					return err
11765				}
11766				erp.Location = &location
11767			}
11768		case "tags":
11769			if v != nil {
11770				var tags map[string]*string
11771				err = json.Unmarshal(*v, &tags)
11772				if err != nil {
11773					return err
11774				}
11775				erp.Tags = tags
11776			}
11777		}
11778	}
11779
11780	return nil
11781}
11782
11783// ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
11784type ExpressRoutePortListResult struct {
11785	autorest.Response `json:"-"`
11786	// Value - A list of ExpressRoutePort resources.
11787	Value *[]ExpressRoutePort `json:"value,omitempty"`
11788	// NextLink - The URL to get the next set of results.
11789	NextLink *string `json:"nextLink,omitempty"`
11790}
11791
11792// ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
11793type ExpressRoutePortListResultIterator struct {
11794	i    int
11795	page ExpressRoutePortListResultPage
11796}
11797
11798// NextWithContext advances to the next value.  If there was an error making
11799// the request the iterator does not advance and the error is returned.
11800func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
11801	if tracing.IsEnabled() {
11802		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
11803		defer func() {
11804			sc := -1
11805			if iter.Response().Response.Response != nil {
11806				sc = iter.Response().Response.Response.StatusCode
11807			}
11808			tracing.EndSpan(ctx, sc, err)
11809		}()
11810	}
11811	iter.i++
11812	if iter.i < len(iter.page.Values()) {
11813		return nil
11814	}
11815	err = iter.page.NextWithContext(ctx)
11816	if err != nil {
11817		iter.i--
11818		return err
11819	}
11820	iter.i = 0
11821	return nil
11822}
11823
11824// Next advances to the next value.  If there was an error making
11825// the request the iterator does not advance and the error is returned.
11826// Deprecated: Use NextWithContext() instead.
11827func (iter *ExpressRoutePortListResultIterator) Next() error {
11828	return iter.NextWithContext(context.Background())
11829}
11830
11831// NotDone returns true if the enumeration should be started or is not yet complete.
11832func (iter ExpressRoutePortListResultIterator) NotDone() bool {
11833	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11834}
11835
11836// Response returns the raw server response from the last page request.
11837func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
11838	return iter.page.Response()
11839}
11840
11841// Value returns the current value or a zero-initialized value if the
11842// iterator has advanced beyond the end of the collection.
11843func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
11844	if !iter.page.NotDone() {
11845		return ExpressRoutePort{}
11846	}
11847	return iter.page.Values()[iter.i]
11848}
11849
11850// Creates a new instance of the ExpressRoutePortListResultIterator type.
11851func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
11852	return ExpressRoutePortListResultIterator{page: page}
11853}
11854
11855// IsEmpty returns true if the ListResult contains no values.
11856func (erplr ExpressRoutePortListResult) IsEmpty() bool {
11857	return erplr.Value == nil || len(*erplr.Value) == 0
11858}
11859
11860// expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
11861// It returns nil if no more results exist.
11862func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
11863	if erplr.NextLink == nil || len(to.String(erplr.NextLink)) < 1 {
11864		return nil, nil
11865	}
11866	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11867		autorest.AsJSON(),
11868		autorest.AsGet(),
11869		autorest.WithBaseURL(to.String(erplr.NextLink)))
11870}
11871
11872// ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
11873type ExpressRoutePortListResultPage struct {
11874	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
11875	erplr ExpressRoutePortListResult
11876}
11877
11878// NextWithContext advances to the next page of values.  If there was an error making
11879// the request the page does not advance and the error is returned.
11880func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
11881	if tracing.IsEnabled() {
11882		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
11883		defer func() {
11884			sc := -1
11885			if page.Response().Response.Response != nil {
11886				sc = page.Response().Response.Response.StatusCode
11887			}
11888			tracing.EndSpan(ctx, sc, err)
11889		}()
11890	}
11891	next, err := page.fn(ctx, page.erplr)
11892	if err != nil {
11893		return err
11894	}
11895	page.erplr = next
11896	return nil
11897}
11898
11899// Next advances to the next page of values.  If there was an error making
11900// the request the page does not advance and the error is returned.
11901// Deprecated: Use NextWithContext() instead.
11902func (page *ExpressRoutePortListResultPage) Next() error {
11903	return page.NextWithContext(context.Background())
11904}
11905
11906// NotDone returns true if the page enumeration should be started or is not yet complete.
11907func (page ExpressRoutePortListResultPage) NotDone() bool {
11908	return !page.erplr.IsEmpty()
11909}
11910
11911// Response returns the raw server response from the last page request.
11912func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
11913	return page.erplr
11914}
11915
11916// Values returns the slice of values for the current page or nil if there are no values.
11917func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
11918	if page.erplr.IsEmpty() {
11919		return nil
11920	}
11921	return *page.erplr.Value
11922}
11923
11924// Creates a new instance of the ExpressRoutePortListResultPage type.
11925func NewExpressRoutePortListResultPage(getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
11926	return ExpressRoutePortListResultPage{fn: getNextPage}
11927}
11928
11929// ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
11930type ExpressRoutePortPropertiesFormat struct {
11931	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
11932	PeeringLocation *string `json:"peeringLocation,omitempty"`
11933	// BandwidthInGbps - Bandwidth of procured ports in Gbps
11934	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
11935	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
11936	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
11937	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s)
11938	Mtu *string `json:"mtu,omitempty"`
11939	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
11940	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
11941	// EtherType - READ-ONLY; Ether type of the physical port.
11942	EtherType *string `json:"etherType,omitempty"`
11943	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
11944	AllocationDate *string `json:"allocationDate,omitempty"`
11945	// Links - The set of physical links of the ExpressRoutePort resource
11946	Links *[]ExpressRouteLink `json:"links,omitempty"`
11947	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
11948	Circuits *[]SubResource `json:"circuits,omitempty"`
11949	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRoutePort resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
11950	ProvisioningState *string `json:"provisioningState,omitempty"`
11951	// ResourceGUID - The resource GUID property of the ExpressRoutePort resource.
11952	ResourceGUID *string `json:"resourceGuid,omitempty"`
11953}
11954
11955// ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
11956// long-running operation.
11957type ExpressRoutePortsCreateOrUpdateFuture struct {
11958	azure.Future
11959}
11960
11961// Result returns the result of the asynchronous operation.
11962// If the operation has not completed it will return an error.
11963func (future *ExpressRoutePortsCreateOrUpdateFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
11964	var done bool
11965	done, err = future.DoneWithContext(context.Background(), client)
11966	if err != nil {
11967		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11968		return
11969	}
11970	if !done {
11971		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
11972		return
11973	}
11974	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11975	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
11976		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
11977		if err != nil {
11978			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
11979		}
11980	}
11981	return
11982}
11983
11984// ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
11985// operation.
11986type ExpressRoutePortsDeleteFuture struct {
11987	azure.Future
11988}
11989
11990// Result returns the result of the asynchronous operation.
11991// If the operation has not completed it will return an error.
11992func (future *ExpressRoutePortsDeleteFuture) Result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
11993	var done bool
11994	done, err = future.DoneWithContext(context.Background(), client)
11995	if err != nil {
11996		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
11997		return
11998	}
11999	if !done {
12000		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
12001		return
12002	}
12003	ar.Response = future.Response()
12004	return
12005}
12006
12007// ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
12008type ExpressRoutePortsLocation struct {
12009	autorest.Response `json:"-"`
12010	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties
12011	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
12012	// ID - Resource ID.
12013	ID *string `json:"id,omitempty"`
12014	// Name - READ-ONLY; Resource name.
12015	Name *string `json:"name,omitempty"`
12016	// Type - READ-ONLY; Resource type.
12017	Type *string `json:"type,omitempty"`
12018	// Location - Resource location.
12019	Location *string `json:"location,omitempty"`
12020	// Tags - Resource tags.
12021	Tags map[string]*string `json:"tags"`
12022}
12023
12024// MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
12025func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
12026	objectMap := make(map[string]interface{})
12027	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
12028		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
12029	}
12030	if erpl.ID != nil {
12031		objectMap["id"] = erpl.ID
12032	}
12033	if erpl.Location != nil {
12034		objectMap["location"] = erpl.Location
12035	}
12036	if erpl.Tags != nil {
12037		objectMap["tags"] = erpl.Tags
12038	}
12039	return json.Marshal(objectMap)
12040}
12041
12042// UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
12043func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
12044	var m map[string]*json.RawMessage
12045	err := json.Unmarshal(body, &m)
12046	if err != nil {
12047		return err
12048	}
12049	for k, v := range m {
12050		switch k {
12051		case "properties":
12052			if v != nil {
12053				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
12054				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
12055				if err != nil {
12056					return err
12057				}
12058				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
12059			}
12060		case "id":
12061			if v != nil {
12062				var ID string
12063				err = json.Unmarshal(*v, &ID)
12064				if err != nil {
12065					return err
12066				}
12067				erpl.ID = &ID
12068			}
12069		case "name":
12070			if v != nil {
12071				var name string
12072				err = json.Unmarshal(*v, &name)
12073				if err != nil {
12074					return err
12075				}
12076				erpl.Name = &name
12077			}
12078		case "type":
12079			if v != nil {
12080				var typeVar string
12081				err = json.Unmarshal(*v, &typeVar)
12082				if err != nil {
12083					return err
12084				}
12085				erpl.Type = &typeVar
12086			}
12087		case "location":
12088			if v != nil {
12089				var location string
12090				err = json.Unmarshal(*v, &location)
12091				if err != nil {
12092					return err
12093				}
12094				erpl.Location = &location
12095			}
12096		case "tags":
12097			if v != nil {
12098				var tags map[string]*string
12099				err = json.Unmarshal(*v, &tags)
12100				if err != nil {
12101					return err
12102				}
12103				erpl.Tags = tags
12104			}
12105		}
12106	}
12107
12108	return nil
12109}
12110
12111// ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
12112type ExpressRoutePortsLocationBandwidths struct {
12113	// OfferName - READ-ONLY; Bandwidth descriptive name
12114	OfferName *string `json:"offerName,omitempty"`
12115	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps
12116	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
12117}
12118
12119// ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
12120type ExpressRoutePortsLocationListResult struct {
12121	autorest.Response `json:"-"`
12122	// Value - The list of all ExpressRoutePort peering locations.
12123	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
12124	// NextLink - The URL to get the next set of results.
12125	NextLink *string `json:"nextLink,omitempty"`
12126}
12127
12128// ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
12129// ExpressRoutePortsLocation values.
12130type ExpressRoutePortsLocationListResultIterator struct {
12131	i    int
12132	page ExpressRoutePortsLocationListResultPage
12133}
12134
12135// NextWithContext advances to the next value.  If there was an error making
12136// the request the iterator does not advance and the error is returned.
12137func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
12138	if tracing.IsEnabled() {
12139		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
12140		defer func() {
12141			sc := -1
12142			if iter.Response().Response.Response != nil {
12143				sc = iter.Response().Response.Response.StatusCode
12144			}
12145			tracing.EndSpan(ctx, sc, err)
12146		}()
12147	}
12148	iter.i++
12149	if iter.i < len(iter.page.Values()) {
12150		return nil
12151	}
12152	err = iter.page.NextWithContext(ctx)
12153	if err != nil {
12154		iter.i--
12155		return err
12156	}
12157	iter.i = 0
12158	return nil
12159}
12160
12161// Next advances to the next value.  If there was an error making
12162// the request the iterator does not advance and the error is returned.
12163// Deprecated: Use NextWithContext() instead.
12164func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
12165	return iter.NextWithContext(context.Background())
12166}
12167
12168// NotDone returns true if the enumeration should be started or is not yet complete.
12169func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
12170	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12171}
12172
12173// Response returns the raw server response from the last page request.
12174func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
12175	return iter.page.Response()
12176}
12177
12178// Value returns the current value or a zero-initialized value if the
12179// iterator has advanced beyond the end of the collection.
12180func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
12181	if !iter.page.NotDone() {
12182		return ExpressRoutePortsLocation{}
12183	}
12184	return iter.page.Values()[iter.i]
12185}
12186
12187// Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
12188func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
12189	return ExpressRoutePortsLocationListResultIterator{page: page}
12190}
12191
12192// IsEmpty returns true if the ListResult contains no values.
12193func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
12194	return erpllr.Value == nil || len(*erpllr.Value) == 0
12195}
12196
12197// expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
12198// It returns nil if no more results exist.
12199func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
12200	if erpllr.NextLink == nil || len(to.String(erpllr.NextLink)) < 1 {
12201		return nil, nil
12202	}
12203	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12204		autorest.AsJSON(),
12205		autorest.AsGet(),
12206		autorest.WithBaseURL(to.String(erpllr.NextLink)))
12207}
12208
12209// ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
12210type ExpressRoutePortsLocationListResultPage struct {
12211	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
12212	erpllr ExpressRoutePortsLocationListResult
12213}
12214
12215// NextWithContext advances to the next page of values.  If there was an error making
12216// the request the page does not advance and the error is returned.
12217func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
12218	if tracing.IsEnabled() {
12219		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
12220		defer func() {
12221			sc := -1
12222			if page.Response().Response.Response != nil {
12223				sc = page.Response().Response.Response.StatusCode
12224			}
12225			tracing.EndSpan(ctx, sc, err)
12226		}()
12227	}
12228	next, err := page.fn(ctx, page.erpllr)
12229	if err != nil {
12230		return err
12231	}
12232	page.erpllr = next
12233	return nil
12234}
12235
12236// Next advances to the next page of values.  If there was an error making
12237// the request the page does not advance and the error is returned.
12238// Deprecated: Use NextWithContext() instead.
12239func (page *ExpressRoutePortsLocationListResultPage) Next() error {
12240	return page.NextWithContext(context.Background())
12241}
12242
12243// NotDone returns true if the page enumeration should be started or is not yet complete.
12244func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
12245	return !page.erpllr.IsEmpty()
12246}
12247
12248// Response returns the raw server response from the last page request.
12249func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
12250	return page.erpllr
12251}
12252
12253// Values returns the slice of values for the current page or nil if there are no values.
12254func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
12255	if page.erpllr.IsEmpty() {
12256		return nil
12257	}
12258	return *page.erpllr.Value
12259}
12260
12261// Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
12262func NewExpressRoutePortsLocationListResultPage(getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
12263	return ExpressRoutePortsLocationListResultPage{fn: getNextPage}
12264}
12265
12266// ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
12267// resources.
12268type ExpressRoutePortsLocationPropertiesFormat struct {
12269	// Address - READ-ONLY; Address of peering location.
12270	Address *string `json:"address,omitempty"`
12271	// Contact - READ-ONLY; Contact details of peering locations.
12272	Contact *string `json:"contact,omitempty"`
12273	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
12274	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
12275	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRoutePortLocation resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
12276	ProvisioningState *string `json:"provisioningState,omitempty"`
12277}
12278
12279// ExpressRoutePortsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
12280// long-running operation.
12281type ExpressRoutePortsUpdateTagsFuture struct {
12282	azure.Future
12283}
12284
12285// Result returns the result of the asynchronous operation.
12286// If the operation has not completed it will return an error.
12287func (future *ExpressRoutePortsUpdateTagsFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
12288	var done bool
12289	done, err = future.DoneWithContext(context.Background(), client)
12290	if err != nil {
12291		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
12292		return
12293	}
12294	if !done {
12295		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsUpdateTagsFuture")
12296		return
12297	}
12298	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12299	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
12300		erp, err = client.UpdateTagsResponder(erp.Response.Response)
12301		if err != nil {
12302			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", erp.Response.Response, "Failure responding to request")
12303		}
12304	}
12305	return
12306}
12307
12308// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
12309type ExpressRouteServiceProvider struct {
12310	// ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider.
12311	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
12312	// ID - Resource ID.
12313	ID *string `json:"id,omitempty"`
12314	// Name - READ-ONLY; Resource name.
12315	Name *string `json:"name,omitempty"`
12316	// Type - READ-ONLY; Resource type.
12317	Type *string `json:"type,omitempty"`
12318	// Location - Resource location.
12319	Location *string `json:"location,omitempty"`
12320	// Tags - Resource tags.
12321	Tags map[string]*string `json:"tags"`
12322}
12323
12324// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
12325func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
12326	objectMap := make(map[string]interface{})
12327	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
12328		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
12329	}
12330	if ersp.ID != nil {
12331		objectMap["id"] = ersp.ID
12332	}
12333	if ersp.Location != nil {
12334		objectMap["location"] = ersp.Location
12335	}
12336	if ersp.Tags != nil {
12337		objectMap["tags"] = ersp.Tags
12338	}
12339	return json.Marshal(objectMap)
12340}
12341
12342// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
12343func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
12344	var m map[string]*json.RawMessage
12345	err := json.Unmarshal(body, &m)
12346	if err != nil {
12347		return err
12348	}
12349	for k, v := range m {
12350		switch k {
12351		case "properties":
12352			if v != nil {
12353				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
12354				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
12355				if err != nil {
12356					return err
12357				}
12358				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
12359			}
12360		case "id":
12361			if v != nil {
12362				var ID string
12363				err = json.Unmarshal(*v, &ID)
12364				if err != nil {
12365					return err
12366				}
12367				ersp.ID = &ID
12368			}
12369		case "name":
12370			if v != nil {
12371				var name string
12372				err = json.Unmarshal(*v, &name)
12373				if err != nil {
12374					return err
12375				}
12376				ersp.Name = &name
12377			}
12378		case "type":
12379			if v != nil {
12380				var typeVar string
12381				err = json.Unmarshal(*v, &typeVar)
12382				if err != nil {
12383					return err
12384				}
12385				ersp.Type = &typeVar
12386			}
12387		case "location":
12388			if v != nil {
12389				var location string
12390				err = json.Unmarshal(*v, &location)
12391				if err != nil {
12392					return err
12393				}
12394				ersp.Location = &location
12395			}
12396		case "tags":
12397			if v != nil {
12398				var tags map[string]*string
12399				err = json.Unmarshal(*v, &tags)
12400				if err != nil {
12401					return err
12402				}
12403				ersp.Tags = tags
12404			}
12405		}
12406	}
12407
12408	return nil
12409}
12410
12411// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
12412// resources.
12413type ExpressRouteServiceProviderBandwidthsOffered struct {
12414	// OfferName - The OfferName.
12415	OfferName *string `json:"offerName,omitempty"`
12416	// ValueInMbps - The ValueInMbps.
12417	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
12418}
12419
12420// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
12421type ExpressRouteServiceProviderListResult struct {
12422	autorest.Response `json:"-"`
12423	// Value - A list of ExpressRouteResourceProvider resources.
12424	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
12425	// NextLink - The URL to get the next set of results.
12426	NextLink *string `json:"nextLink,omitempty"`
12427}
12428
12429// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
12430// ExpressRouteServiceProvider values.
12431type ExpressRouteServiceProviderListResultIterator struct {
12432	i    int
12433	page ExpressRouteServiceProviderListResultPage
12434}
12435
12436// NextWithContext advances to the next value.  If there was an error making
12437// the request the iterator does not advance and the error is returned.
12438func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
12439	if tracing.IsEnabled() {
12440		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
12441		defer func() {
12442			sc := -1
12443			if iter.Response().Response.Response != nil {
12444				sc = iter.Response().Response.Response.StatusCode
12445			}
12446			tracing.EndSpan(ctx, sc, err)
12447		}()
12448	}
12449	iter.i++
12450	if iter.i < len(iter.page.Values()) {
12451		return nil
12452	}
12453	err = iter.page.NextWithContext(ctx)
12454	if err != nil {
12455		iter.i--
12456		return err
12457	}
12458	iter.i = 0
12459	return nil
12460}
12461
12462// Next advances to the next value.  If there was an error making
12463// the request the iterator does not advance and the error is returned.
12464// Deprecated: Use NextWithContext() instead.
12465func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
12466	return iter.NextWithContext(context.Background())
12467}
12468
12469// NotDone returns true if the enumeration should be started or is not yet complete.
12470func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
12471	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12472}
12473
12474// Response returns the raw server response from the last page request.
12475func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
12476	return iter.page.Response()
12477}
12478
12479// Value returns the current value or a zero-initialized value if the
12480// iterator has advanced beyond the end of the collection.
12481func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
12482	if !iter.page.NotDone() {
12483		return ExpressRouteServiceProvider{}
12484	}
12485	return iter.page.Values()[iter.i]
12486}
12487
12488// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
12489func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
12490	return ExpressRouteServiceProviderListResultIterator{page: page}
12491}
12492
12493// IsEmpty returns true if the ListResult contains no values.
12494func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
12495	return ersplr.Value == nil || len(*ersplr.Value) == 0
12496}
12497
12498// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
12499// It returns nil if no more results exist.
12500func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
12501	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
12502		return nil, nil
12503	}
12504	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12505		autorest.AsJSON(),
12506		autorest.AsGet(),
12507		autorest.WithBaseURL(to.String(ersplr.NextLink)))
12508}
12509
12510// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
12511type ExpressRouteServiceProviderListResultPage struct {
12512	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
12513	ersplr ExpressRouteServiceProviderListResult
12514}
12515
12516// NextWithContext advances to the next page of values.  If there was an error making
12517// the request the page does not advance and the error is returned.
12518func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
12519	if tracing.IsEnabled() {
12520		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
12521		defer func() {
12522			sc := -1
12523			if page.Response().Response.Response != nil {
12524				sc = page.Response().Response.Response.StatusCode
12525			}
12526			tracing.EndSpan(ctx, sc, err)
12527		}()
12528	}
12529	next, err := page.fn(ctx, page.ersplr)
12530	if err != nil {
12531		return err
12532	}
12533	page.ersplr = next
12534	return nil
12535}
12536
12537// Next advances to the next page of values.  If there was an error making
12538// the request the page does not advance and the error is returned.
12539// Deprecated: Use NextWithContext() instead.
12540func (page *ExpressRouteServiceProviderListResultPage) Next() error {
12541	return page.NextWithContext(context.Background())
12542}
12543
12544// NotDone returns true if the page enumeration should be started or is not yet complete.
12545func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
12546	return !page.ersplr.IsEmpty()
12547}
12548
12549// Response returns the raw server response from the last page request.
12550func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
12551	return page.ersplr
12552}
12553
12554// Values returns the slice of values for the current page or nil if there are no values.
12555func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
12556	if page.ersplr.IsEmpty() {
12557		return nil
12558	}
12559	return *page.ersplr.Value
12560}
12561
12562// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
12563func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
12564	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
12565}
12566
12567// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
12568type ExpressRouteServiceProviderPropertiesFormat struct {
12569	// PeeringLocations - Get a list of peering locations.
12570	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
12571	// BandwidthsOffered - Gets bandwidths offered.
12572	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
12573	// ProvisioningState - Gets the provisioning state of the resource.
12574	ProvisioningState *string `json:"provisioningState,omitempty"`
12575}
12576
12577// FlowLogFormatParameters parameters that define the flow log format.
12578type FlowLogFormatParameters struct {
12579	// Type - The file type of flow log. Possible values include: 'JSON'
12580	Type FlowLogFormatType `json:"type,omitempty"`
12581	// Version - The version (revision) of the flow log.
12582	Version *int32 `json:"version,omitempty"`
12583}
12584
12585// FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
12586type FlowLogInformation struct {
12587	autorest.Response `json:"-"`
12588	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
12589	TargetResourceID *string `json:"targetResourceId,omitempty"`
12590	// FlowLogProperties - Properties of the flow log.
12591	*FlowLogProperties `json:"properties,omitempty"`
12592	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
12593	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
12594}
12595
12596// MarshalJSON is the custom marshaler for FlowLogInformation.
12597func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
12598	objectMap := make(map[string]interface{})
12599	if fli.TargetResourceID != nil {
12600		objectMap["targetResourceId"] = fli.TargetResourceID
12601	}
12602	if fli.FlowLogProperties != nil {
12603		objectMap["properties"] = fli.FlowLogProperties
12604	}
12605	if fli.FlowAnalyticsConfiguration != nil {
12606		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
12607	}
12608	return json.Marshal(objectMap)
12609}
12610
12611// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
12612func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
12613	var m map[string]*json.RawMessage
12614	err := json.Unmarshal(body, &m)
12615	if err != nil {
12616		return err
12617	}
12618	for k, v := range m {
12619		switch k {
12620		case "targetResourceId":
12621			if v != nil {
12622				var targetResourceID string
12623				err = json.Unmarshal(*v, &targetResourceID)
12624				if err != nil {
12625					return err
12626				}
12627				fli.TargetResourceID = &targetResourceID
12628			}
12629		case "properties":
12630			if v != nil {
12631				var flowLogProperties FlowLogProperties
12632				err = json.Unmarshal(*v, &flowLogProperties)
12633				if err != nil {
12634					return err
12635				}
12636				fli.FlowLogProperties = &flowLogProperties
12637			}
12638		case "flowAnalyticsConfiguration":
12639			if v != nil {
12640				var flowAnalyticsConfiguration TrafficAnalyticsProperties
12641				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
12642				if err != nil {
12643					return err
12644				}
12645				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
12646			}
12647		}
12648	}
12649
12650	return nil
12651}
12652
12653// FlowLogProperties parameters that define the configuration of flow log.
12654type FlowLogProperties struct {
12655	// StorageID - ID of the storage account which is used to store the flow log.
12656	StorageID *string `json:"storageId,omitempty"`
12657	// Enabled - Flag to enable/disable flow logging.
12658	Enabled *bool `json:"enabled,omitempty"`
12659	// RetentionPolicy - Parameters that define the retention policy for flow log.
12660	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
12661	// Format - Parameters that define the flow log format.
12662	Format *FlowLogFormatParameters `json:"format,omitempty"`
12663}
12664
12665// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
12666// (optional) status.
12667type FlowLogStatusParameters struct {
12668	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
12669	TargetResourceID *string `json:"targetResourceId,omitempty"`
12670}
12671
12672// FrontendIPConfiguration frontend IP address of the load balancer.
12673type FrontendIPConfiguration struct {
12674	autorest.Response `json:"-"`
12675	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
12676	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
12677	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12678	Name *string `json:"name,omitempty"`
12679	// Etag - A unique read-only string that changes whenever the resource is updated.
12680	Etag *string `json:"etag,omitempty"`
12681	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
12682	Zones *[]string `json:"zones,omitempty"`
12683	// ID - Resource ID.
12684	ID *string `json:"id,omitempty"`
12685}
12686
12687// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
12688func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
12689	objectMap := make(map[string]interface{})
12690	if fic.FrontendIPConfigurationPropertiesFormat != nil {
12691		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
12692	}
12693	if fic.Name != nil {
12694		objectMap["name"] = fic.Name
12695	}
12696	if fic.Etag != nil {
12697		objectMap["etag"] = fic.Etag
12698	}
12699	if fic.Zones != nil {
12700		objectMap["zones"] = fic.Zones
12701	}
12702	if fic.ID != nil {
12703		objectMap["id"] = fic.ID
12704	}
12705	return json.Marshal(objectMap)
12706}
12707
12708// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
12709func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
12710	var m map[string]*json.RawMessage
12711	err := json.Unmarshal(body, &m)
12712	if err != nil {
12713		return err
12714	}
12715	for k, v := range m {
12716		switch k {
12717		case "properties":
12718			if v != nil {
12719				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
12720				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
12721				if err != nil {
12722					return err
12723				}
12724				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
12725			}
12726		case "name":
12727			if v != nil {
12728				var name string
12729				err = json.Unmarshal(*v, &name)
12730				if err != nil {
12731					return err
12732				}
12733				fic.Name = &name
12734			}
12735		case "etag":
12736			if v != nil {
12737				var etag string
12738				err = json.Unmarshal(*v, &etag)
12739				if err != nil {
12740					return err
12741				}
12742				fic.Etag = &etag
12743			}
12744		case "zones":
12745			if v != nil {
12746				var zones []string
12747				err = json.Unmarshal(*v, &zones)
12748				if err != nil {
12749					return err
12750				}
12751				fic.Zones = &zones
12752			}
12753		case "id":
12754			if v != nil {
12755				var ID string
12756				err = json.Unmarshal(*v, &ID)
12757				if err != nil {
12758					return err
12759				}
12760				fic.ID = &ID
12761			}
12762		}
12763	}
12764
12765	return nil
12766}
12767
12768// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
12769type FrontendIPConfigurationPropertiesFormat struct {
12770	// InboundNatRules - READ-ONLY; Read only. Inbound rules URIs that use this frontend IP.
12771	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
12772	// InboundNatPools - READ-ONLY; Read only. Inbound pools URIs that use this frontend IP.
12773	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
12774	// OutboundRules - READ-ONLY; Read only. Outbound rules URIs that use this frontend IP.
12775	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
12776	// LoadBalancingRules - READ-ONLY; Gets load balancing rules URIs that use this frontend IP.
12777	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
12778	// PrivateIPAddress - The private IP address of the IP configuration.
12779	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
12780	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic'
12781	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
12782	// Subnet - The reference of the subnet resource.
12783	Subnet *Subnet `json:"subnet,omitempty"`
12784	// PublicIPAddress - The reference of the Public IP resource.
12785	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
12786	// PublicIPPrefix - The reference of the Public IP Prefix resource.
12787	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
12788	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12789	ProvisioningState *string `json:"provisioningState,omitempty"`
12790}
12791
12792// GatewayRoute gateway routing details
12793type GatewayRoute struct {
12794	// LocalAddress - READ-ONLY; The gateway's local address
12795	LocalAddress *string `json:"localAddress,omitempty"`
12796	// NetworkProperty - READ-ONLY; The route's network prefix
12797	NetworkProperty *string `json:"network,omitempty"`
12798	// NextHop - READ-ONLY; The route's next hop
12799	NextHop *string `json:"nextHop,omitempty"`
12800	// SourcePeer - READ-ONLY; The peer this route was learned from
12801	SourcePeer *string `json:"sourcePeer,omitempty"`
12802	// Origin - READ-ONLY; The source this route was learned from
12803	Origin *string `json:"origin,omitempty"`
12804	// AsPath - READ-ONLY; The route's AS path sequence
12805	AsPath *string `json:"asPath,omitempty"`
12806	// Weight - READ-ONLY; The route's weight
12807	Weight *int32 `json:"weight,omitempty"`
12808}
12809
12810// GatewayRouteListResult list of virtual network gateway routes
12811type GatewayRouteListResult struct {
12812	autorest.Response `json:"-"`
12813	// Value - List of gateway routes
12814	Value *[]GatewayRoute `json:"value,omitempty"`
12815}
12816
12817// GetVpnSitesConfigurationRequest list of Vpn-Sites
12818type GetVpnSitesConfigurationRequest struct {
12819	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
12820	VpnSites *[]string `json:"vpnSites,omitempty"`
12821	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites
12822	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
12823}
12824
12825// HTTPConfiguration HTTP configuration of the connectivity check.
12826type HTTPConfiguration struct {
12827	// Method - HTTP method. Possible values include: 'Get'
12828	Method HTTPMethod `json:"method,omitempty"`
12829	// Headers - List of HTTP headers.
12830	Headers *[]HTTPHeader `json:"headers,omitempty"`
12831	// ValidStatusCodes - Valid status codes.
12832	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
12833}
12834
12835// HTTPHeader describes the HTTP header.
12836type HTTPHeader struct {
12837	// Name - The name in HTTP header.
12838	Name *string `json:"name,omitempty"`
12839	// Value - The value in HTTP header.
12840	Value *string `json:"value,omitempty"`
12841}
12842
12843// HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
12844type HubVirtualNetworkConnection struct {
12845	autorest.Response `json:"-"`
12846	// HubVirtualNetworkConnectionProperties - Properties of the hub virtual network connection.
12847	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
12848	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12849	Name *string `json:"name,omitempty"`
12850	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
12851	Etag *string `json:"etag,omitempty"`
12852	// ID - Resource ID.
12853	ID *string `json:"id,omitempty"`
12854}
12855
12856// MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
12857func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
12858	objectMap := make(map[string]interface{})
12859	if hvnc.HubVirtualNetworkConnectionProperties != nil {
12860		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
12861	}
12862	if hvnc.Name != nil {
12863		objectMap["name"] = hvnc.Name
12864	}
12865	if hvnc.ID != nil {
12866		objectMap["id"] = hvnc.ID
12867	}
12868	return json.Marshal(objectMap)
12869}
12870
12871// UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
12872func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
12873	var m map[string]*json.RawMessage
12874	err := json.Unmarshal(body, &m)
12875	if err != nil {
12876		return err
12877	}
12878	for k, v := range m {
12879		switch k {
12880		case "properties":
12881			if v != nil {
12882				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
12883				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
12884				if err != nil {
12885					return err
12886				}
12887				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
12888			}
12889		case "name":
12890			if v != nil {
12891				var name string
12892				err = json.Unmarshal(*v, &name)
12893				if err != nil {
12894					return err
12895				}
12896				hvnc.Name = &name
12897			}
12898		case "etag":
12899			if v != nil {
12900				var etag string
12901				err = json.Unmarshal(*v, &etag)
12902				if err != nil {
12903					return err
12904				}
12905				hvnc.Etag = &etag
12906			}
12907		case "id":
12908			if v != nil {
12909				var ID string
12910				err = json.Unmarshal(*v, &ID)
12911				if err != nil {
12912					return err
12913				}
12914				hvnc.ID = &ID
12915			}
12916		}
12917	}
12918
12919	return nil
12920}
12921
12922// HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection
12923type HubVirtualNetworkConnectionProperties struct {
12924	// RemoteVirtualNetwork - Reference to the remote virtual network.
12925	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
12926	// AllowHubToRemoteVnetTransit - VirtualHub to RemoteVnet transit to enabled or not.
12927	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
12928	// AllowRemoteVnetToUseHubVnetGateways - Allow RemoteVnet to use Virtual Hub's gateways.
12929	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
12930	// EnableInternetSecurity - Enable internet security
12931	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
12932	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12933	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12934}
12935
12936// InboundNatPool inbound NAT pool of the load balancer.
12937type InboundNatPool struct {
12938	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
12939	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
12940	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12941	Name *string `json:"name,omitempty"`
12942	// Etag - A unique read-only string that changes whenever the resource is updated.
12943	Etag *string `json:"etag,omitempty"`
12944	// ID - Resource ID.
12945	ID *string `json:"id,omitempty"`
12946}
12947
12948// MarshalJSON is the custom marshaler for InboundNatPool.
12949func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
12950	objectMap := make(map[string]interface{})
12951	if inp.InboundNatPoolPropertiesFormat != nil {
12952		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
12953	}
12954	if inp.Name != nil {
12955		objectMap["name"] = inp.Name
12956	}
12957	if inp.Etag != nil {
12958		objectMap["etag"] = inp.Etag
12959	}
12960	if inp.ID != nil {
12961		objectMap["id"] = inp.ID
12962	}
12963	return json.Marshal(objectMap)
12964}
12965
12966// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
12967func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
12968	var m map[string]*json.RawMessage
12969	err := json.Unmarshal(body, &m)
12970	if err != nil {
12971		return err
12972	}
12973	for k, v := range m {
12974		switch k {
12975		case "properties":
12976			if v != nil {
12977				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
12978				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
12979				if err != nil {
12980					return err
12981				}
12982				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
12983			}
12984		case "name":
12985			if v != nil {
12986				var name string
12987				err = json.Unmarshal(*v, &name)
12988				if err != nil {
12989					return err
12990				}
12991				inp.Name = &name
12992			}
12993		case "etag":
12994			if v != nil {
12995				var etag string
12996				err = json.Unmarshal(*v, &etag)
12997				if err != nil {
12998					return err
12999				}
13000				inp.Etag = &etag
13001			}
13002		case "id":
13003			if v != nil {
13004				var ID string
13005				err = json.Unmarshal(*v, &ID)
13006				if err != nil {
13007					return err
13008				}
13009				inp.ID = &ID
13010			}
13011		}
13012	}
13013
13014	return nil
13015}
13016
13017// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
13018type InboundNatPoolPropertiesFormat struct {
13019	// FrontendIPConfiguration - A reference to frontend IP addresses.
13020	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
13021	// Protocol - The reference to the transport protocol used by the inbound NAT pool. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
13022	Protocol TransportProtocol `json:"protocol,omitempty"`
13023	// 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.
13024	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
13025	// 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.
13026	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
13027	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
13028	BackendPort *int32 `json:"backendPort,omitempty"`
13029	// 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.
13030	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
13031	// 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.
13032	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
13033	// 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.
13034	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
13035	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13036	ProvisioningState *string `json:"provisioningState,omitempty"`
13037}
13038
13039// InboundNatRule inbound NAT rule of the load balancer.
13040type InboundNatRule struct {
13041	autorest.Response `json:"-"`
13042	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
13043	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
13044	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
13045	Name *string `json:"name,omitempty"`
13046	// Etag - A unique read-only string that changes whenever the resource is updated.
13047	Etag *string `json:"etag,omitempty"`
13048	// ID - Resource ID.
13049	ID *string `json:"id,omitempty"`
13050}
13051
13052// MarshalJSON is the custom marshaler for InboundNatRule.
13053func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
13054	objectMap := make(map[string]interface{})
13055	if inr.InboundNatRulePropertiesFormat != nil {
13056		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
13057	}
13058	if inr.Name != nil {
13059		objectMap["name"] = inr.Name
13060	}
13061	if inr.Etag != nil {
13062		objectMap["etag"] = inr.Etag
13063	}
13064	if inr.ID != nil {
13065		objectMap["id"] = inr.ID
13066	}
13067	return json.Marshal(objectMap)
13068}
13069
13070// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
13071func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
13072	var m map[string]*json.RawMessage
13073	err := json.Unmarshal(body, &m)
13074	if err != nil {
13075		return err
13076	}
13077	for k, v := range m {
13078		switch k {
13079		case "properties":
13080			if v != nil {
13081				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
13082				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
13083				if err != nil {
13084					return err
13085				}
13086				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
13087			}
13088		case "name":
13089			if v != nil {
13090				var name string
13091				err = json.Unmarshal(*v, &name)
13092				if err != nil {
13093					return err
13094				}
13095				inr.Name = &name
13096			}
13097		case "etag":
13098			if v != nil {
13099				var etag string
13100				err = json.Unmarshal(*v, &etag)
13101				if err != nil {
13102					return err
13103				}
13104				inr.Etag = &etag
13105			}
13106		case "id":
13107			if v != nil {
13108				var ID string
13109				err = json.Unmarshal(*v, &ID)
13110				if err != nil {
13111					return err
13112				}
13113				inr.ID = &ID
13114			}
13115		}
13116	}
13117
13118	return nil
13119}
13120
13121// InboundNatRuleListResult response for ListInboundNatRule API service call.
13122type InboundNatRuleListResult struct {
13123	autorest.Response `json:"-"`
13124	// Value - A list of inbound nat rules in a load balancer.
13125	Value *[]InboundNatRule `json:"value,omitempty"`
13126	// NextLink - READ-ONLY; The URL to get the next set of results.
13127	NextLink *string `json:"nextLink,omitempty"`
13128}
13129
13130// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
13131type InboundNatRuleListResultIterator struct {
13132	i    int
13133	page InboundNatRuleListResultPage
13134}
13135
13136// NextWithContext advances to the next value.  If there was an error making
13137// the request the iterator does not advance and the error is returned.
13138func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
13139	if tracing.IsEnabled() {
13140		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
13141		defer func() {
13142			sc := -1
13143			if iter.Response().Response.Response != nil {
13144				sc = iter.Response().Response.Response.StatusCode
13145			}
13146			tracing.EndSpan(ctx, sc, err)
13147		}()
13148	}
13149	iter.i++
13150	if iter.i < len(iter.page.Values()) {
13151		return nil
13152	}
13153	err = iter.page.NextWithContext(ctx)
13154	if err != nil {
13155		iter.i--
13156		return err
13157	}
13158	iter.i = 0
13159	return nil
13160}
13161
13162// Next advances to the next value.  If there was an error making
13163// the request the iterator does not advance and the error is returned.
13164// Deprecated: Use NextWithContext() instead.
13165func (iter *InboundNatRuleListResultIterator) Next() error {
13166	return iter.NextWithContext(context.Background())
13167}
13168
13169// NotDone returns true if the enumeration should be started or is not yet complete.
13170func (iter InboundNatRuleListResultIterator) NotDone() bool {
13171	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13172}
13173
13174// Response returns the raw server response from the last page request.
13175func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
13176	return iter.page.Response()
13177}
13178
13179// Value returns the current value or a zero-initialized value if the
13180// iterator has advanced beyond the end of the collection.
13181func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
13182	if !iter.page.NotDone() {
13183		return InboundNatRule{}
13184	}
13185	return iter.page.Values()[iter.i]
13186}
13187
13188// Creates a new instance of the InboundNatRuleListResultIterator type.
13189func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
13190	return InboundNatRuleListResultIterator{page: page}
13191}
13192
13193// IsEmpty returns true if the ListResult contains no values.
13194func (inrlr InboundNatRuleListResult) IsEmpty() bool {
13195	return inrlr.Value == nil || len(*inrlr.Value) == 0
13196}
13197
13198// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
13199// It returns nil if no more results exist.
13200func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
13201	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
13202		return nil, nil
13203	}
13204	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13205		autorest.AsJSON(),
13206		autorest.AsGet(),
13207		autorest.WithBaseURL(to.String(inrlr.NextLink)))
13208}
13209
13210// InboundNatRuleListResultPage contains a page of InboundNatRule values.
13211type InboundNatRuleListResultPage struct {
13212	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
13213	inrlr InboundNatRuleListResult
13214}
13215
13216// NextWithContext advances to the next page of values.  If there was an error making
13217// the request the page does not advance and the error is returned.
13218func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
13219	if tracing.IsEnabled() {
13220		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
13221		defer func() {
13222			sc := -1
13223			if page.Response().Response.Response != nil {
13224				sc = page.Response().Response.Response.StatusCode
13225			}
13226			tracing.EndSpan(ctx, sc, err)
13227		}()
13228	}
13229	next, err := page.fn(ctx, page.inrlr)
13230	if err != nil {
13231		return err
13232	}
13233	page.inrlr = next
13234	return nil
13235}
13236
13237// Next advances to the next page of values.  If there was an error making
13238// the request the page does not advance and the error is returned.
13239// Deprecated: Use NextWithContext() instead.
13240func (page *InboundNatRuleListResultPage) Next() error {
13241	return page.NextWithContext(context.Background())
13242}
13243
13244// NotDone returns true if the page enumeration should be started or is not yet complete.
13245func (page InboundNatRuleListResultPage) NotDone() bool {
13246	return !page.inrlr.IsEmpty()
13247}
13248
13249// Response returns the raw server response from the last page request.
13250func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
13251	return page.inrlr
13252}
13253
13254// Values returns the slice of values for the current page or nil if there are no values.
13255func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
13256	if page.inrlr.IsEmpty() {
13257		return nil
13258	}
13259	return *page.inrlr.Value
13260}
13261
13262// Creates a new instance of the InboundNatRuleListResultPage type.
13263func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
13264	return InboundNatRuleListResultPage{fn: getNextPage}
13265}
13266
13267// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
13268type InboundNatRulePropertiesFormat struct {
13269	// FrontendIPConfiguration - A reference to frontend IP addresses.
13270	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
13271	// 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.
13272	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
13273	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
13274	Protocol TransportProtocol `json:"protocol,omitempty"`
13275	// 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.
13276	FrontendPort *int32 `json:"frontendPort,omitempty"`
13277	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
13278	BackendPort *int32 `json:"backendPort,omitempty"`
13279	// 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.
13280	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
13281	// 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.
13282	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
13283	// 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.
13284	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
13285	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13286	ProvisioningState *string `json:"provisioningState,omitempty"`
13287}
13288
13289// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13290// long-running operation.
13291type InboundNatRulesCreateOrUpdateFuture struct {
13292	azure.Future
13293}
13294
13295// Result returns the result of the asynchronous operation.
13296// If the operation has not completed it will return an error.
13297func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
13298	var done bool
13299	done, err = future.DoneWithContext(context.Background(), client)
13300	if err != nil {
13301		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13302		return
13303	}
13304	if !done {
13305		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
13306		return
13307	}
13308	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13309	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
13310		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
13311		if err != nil {
13312			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
13313		}
13314	}
13315	return
13316}
13317
13318// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13319// operation.
13320type InboundNatRulesDeleteFuture struct {
13321	azure.Future
13322}
13323
13324// Result returns the result of the asynchronous operation.
13325// If the operation has not completed it will return an error.
13326func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
13327	var done bool
13328	done, err = future.DoneWithContext(context.Background(), client)
13329	if err != nil {
13330		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
13331		return
13332	}
13333	if !done {
13334		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
13335		return
13336	}
13337	ar.Response = future.Response()
13338	return
13339}
13340
13341// IntentPolicy network Intent Policy resource.
13342type IntentPolicy struct {
13343	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
13344	Etag *string `json:"etag,omitempty"`
13345	// ID - Resource ID.
13346	ID *string `json:"id,omitempty"`
13347	// Name - READ-ONLY; Resource name.
13348	Name *string `json:"name,omitempty"`
13349	// Type - READ-ONLY; Resource type.
13350	Type *string `json:"type,omitempty"`
13351	// Location - Resource location.
13352	Location *string `json:"location,omitempty"`
13353	// Tags - Resource tags.
13354	Tags map[string]*string `json:"tags"`
13355}
13356
13357// MarshalJSON is the custom marshaler for IntentPolicy.
13358func (IP IntentPolicy) MarshalJSON() ([]byte, error) {
13359	objectMap := make(map[string]interface{})
13360	if IP.Etag != nil {
13361		objectMap["etag"] = IP.Etag
13362	}
13363	if IP.ID != nil {
13364		objectMap["id"] = IP.ID
13365	}
13366	if IP.Location != nil {
13367		objectMap["location"] = IP.Location
13368	}
13369	if IP.Tags != nil {
13370		objectMap["tags"] = IP.Tags
13371	}
13372	return json.Marshal(objectMap)
13373}
13374
13375// IntentPolicyConfiguration details of NetworkIntentPolicyConfiguration for PrepareNetworkPoliciesRequest.
13376type IntentPolicyConfiguration struct {
13377	// NetworkIntentPolicyName - The name of the Network Intent Policy for storing in target subscription.
13378	NetworkIntentPolicyName *string `json:"networkIntentPolicyName,omitempty"`
13379	// SourceNetworkIntentPolicy - Source network intent policy.
13380	SourceNetworkIntentPolicy *IntentPolicy `json:"sourceNetworkIntentPolicy,omitempty"`
13381}
13382
13383// Interface a network interface in a resource group.
13384type Interface struct {
13385	autorest.Response `json:"-"`
13386	// InterfacePropertiesFormat - Properties of the network interface.
13387	*InterfacePropertiesFormat `json:"properties,omitempty"`
13388	// Etag - A unique read-only string that changes whenever the resource is updated.
13389	Etag *string `json:"etag,omitempty"`
13390	// ID - Resource ID.
13391	ID *string `json:"id,omitempty"`
13392	// Name - READ-ONLY; Resource name.
13393	Name *string `json:"name,omitempty"`
13394	// Type - READ-ONLY; Resource type.
13395	Type *string `json:"type,omitempty"`
13396	// Location - Resource location.
13397	Location *string `json:"location,omitempty"`
13398	// Tags - Resource tags.
13399	Tags map[string]*string `json:"tags"`
13400}
13401
13402// MarshalJSON is the custom marshaler for Interface.
13403func (i Interface) MarshalJSON() ([]byte, error) {
13404	objectMap := make(map[string]interface{})
13405	if i.InterfacePropertiesFormat != nil {
13406		objectMap["properties"] = i.InterfacePropertiesFormat
13407	}
13408	if i.Etag != nil {
13409		objectMap["etag"] = i.Etag
13410	}
13411	if i.ID != nil {
13412		objectMap["id"] = i.ID
13413	}
13414	if i.Location != nil {
13415		objectMap["location"] = i.Location
13416	}
13417	if i.Tags != nil {
13418		objectMap["tags"] = i.Tags
13419	}
13420	return json.Marshal(objectMap)
13421}
13422
13423// UnmarshalJSON is the custom unmarshaler for Interface struct.
13424func (i *Interface) UnmarshalJSON(body []byte) error {
13425	var m map[string]*json.RawMessage
13426	err := json.Unmarshal(body, &m)
13427	if err != nil {
13428		return err
13429	}
13430	for k, v := range m {
13431		switch k {
13432		case "properties":
13433			if v != nil {
13434				var interfacePropertiesFormat InterfacePropertiesFormat
13435				err = json.Unmarshal(*v, &interfacePropertiesFormat)
13436				if err != nil {
13437					return err
13438				}
13439				i.InterfacePropertiesFormat = &interfacePropertiesFormat
13440			}
13441		case "etag":
13442			if v != nil {
13443				var etag string
13444				err = json.Unmarshal(*v, &etag)
13445				if err != nil {
13446					return err
13447				}
13448				i.Etag = &etag
13449			}
13450		case "id":
13451			if v != nil {
13452				var ID string
13453				err = json.Unmarshal(*v, &ID)
13454				if err != nil {
13455					return err
13456				}
13457				i.ID = &ID
13458			}
13459		case "name":
13460			if v != nil {
13461				var name string
13462				err = json.Unmarshal(*v, &name)
13463				if err != nil {
13464					return err
13465				}
13466				i.Name = &name
13467			}
13468		case "type":
13469			if v != nil {
13470				var typeVar string
13471				err = json.Unmarshal(*v, &typeVar)
13472				if err != nil {
13473					return err
13474				}
13475				i.Type = &typeVar
13476			}
13477		case "location":
13478			if v != nil {
13479				var location string
13480				err = json.Unmarshal(*v, &location)
13481				if err != nil {
13482					return err
13483				}
13484				i.Location = &location
13485			}
13486		case "tags":
13487			if v != nil {
13488				var tags map[string]*string
13489				err = json.Unmarshal(*v, &tags)
13490				if err != nil {
13491					return err
13492				}
13493				i.Tags = tags
13494			}
13495		}
13496	}
13497
13498	return nil
13499}
13500
13501// InterfaceAssociation network interface and its custom security rules.
13502type InterfaceAssociation struct {
13503	// ID - READ-ONLY; Network interface ID.
13504	ID *string `json:"id,omitempty"`
13505	// SecurityRules - Collection of custom security rules.
13506	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
13507}
13508
13509// InterfaceDNSSettings DNS settings of a network interface.
13510type InterfaceDNSSettings struct {
13511	// 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.
13512	DNSServers *[]string `json:"dnsServers,omitempty"`
13513	// 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.
13514	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
13515	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
13516	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
13517	// InternalFqdn - Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
13518	InternalFqdn *string `json:"internalFqdn,omitempty"`
13519	// 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.
13520	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
13521}
13522
13523// InterfaceEndpoint interface endpoint resource.
13524type InterfaceEndpoint struct {
13525	autorest.Response `json:"-"`
13526	// InterfaceEndpointProperties - Properties of the interface endpoint.
13527	*InterfaceEndpointProperties `json:"properties,omitempty"`
13528	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
13529	Etag *string `json:"etag,omitempty"`
13530	// ID - Resource ID.
13531	ID *string `json:"id,omitempty"`
13532	// Name - READ-ONLY; Resource name.
13533	Name *string `json:"name,omitempty"`
13534	// Type - READ-ONLY; Resource type.
13535	Type *string `json:"type,omitempty"`
13536	// Location - Resource location.
13537	Location *string `json:"location,omitempty"`
13538	// Tags - Resource tags.
13539	Tags map[string]*string `json:"tags"`
13540}
13541
13542// MarshalJSON is the custom marshaler for InterfaceEndpoint.
13543func (ie InterfaceEndpoint) MarshalJSON() ([]byte, error) {
13544	objectMap := make(map[string]interface{})
13545	if ie.InterfaceEndpointProperties != nil {
13546		objectMap["properties"] = ie.InterfaceEndpointProperties
13547	}
13548	if ie.Etag != nil {
13549		objectMap["etag"] = ie.Etag
13550	}
13551	if ie.ID != nil {
13552		objectMap["id"] = ie.ID
13553	}
13554	if ie.Location != nil {
13555		objectMap["location"] = ie.Location
13556	}
13557	if ie.Tags != nil {
13558		objectMap["tags"] = ie.Tags
13559	}
13560	return json.Marshal(objectMap)
13561}
13562
13563// UnmarshalJSON is the custom unmarshaler for InterfaceEndpoint struct.
13564func (ie *InterfaceEndpoint) UnmarshalJSON(body []byte) error {
13565	var m map[string]*json.RawMessage
13566	err := json.Unmarshal(body, &m)
13567	if err != nil {
13568		return err
13569	}
13570	for k, v := range m {
13571		switch k {
13572		case "properties":
13573			if v != nil {
13574				var interfaceEndpointProperties InterfaceEndpointProperties
13575				err = json.Unmarshal(*v, &interfaceEndpointProperties)
13576				if err != nil {
13577					return err
13578				}
13579				ie.InterfaceEndpointProperties = &interfaceEndpointProperties
13580			}
13581		case "etag":
13582			if v != nil {
13583				var etag string
13584				err = json.Unmarshal(*v, &etag)
13585				if err != nil {
13586					return err
13587				}
13588				ie.Etag = &etag
13589			}
13590		case "id":
13591			if v != nil {
13592				var ID string
13593				err = json.Unmarshal(*v, &ID)
13594				if err != nil {
13595					return err
13596				}
13597				ie.ID = &ID
13598			}
13599		case "name":
13600			if v != nil {
13601				var name string
13602				err = json.Unmarshal(*v, &name)
13603				if err != nil {
13604					return err
13605				}
13606				ie.Name = &name
13607			}
13608		case "type":
13609			if v != nil {
13610				var typeVar string
13611				err = json.Unmarshal(*v, &typeVar)
13612				if err != nil {
13613					return err
13614				}
13615				ie.Type = &typeVar
13616			}
13617		case "location":
13618			if v != nil {
13619				var location string
13620				err = json.Unmarshal(*v, &location)
13621				if err != nil {
13622					return err
13623				}
13624				ie.Location = &location
13625			}
13626		case "tags":
13627			if v != nil {
13628				var tags map[string]*string
13629				err = json.Unmarshal(*v, &tags)
13630				if err != nil {
13631					return err
13632				}
13633				ie.Tags = tags
13634			}
13635		}
13636	}
13637
13638	return nil
13639}
13640
13641// InterfaceEndpointListResult response for the ListInterfaceEndpoints API service call.
13642type InterfaceEndpointListResult struct {
13643	autorest.Response `json:"-"`
13644	// Value - Gets a list of InterfaceEndpoint resources in a resource group.
13645	Value *[]InterfaceEndpoint `json:"value,omitempty"`
13646	// NextLink - READ-ONLY; The URL to get the next set of results.
13647	NextLink *string `json:"nextLink,omitempty"`
13648}
13649
13650// InterfaceEndpointListResultIterator provides access to a complete listing of InterfaceEndpoint values.
13651type InterfaceEndpointListResultIterator struct {
13652	i    int
13653	page InterfaceEndpointListResultPage
13654}
13655
13656// NextWithContext advances to the next value.  If there was an error making
13657// the request the iterator does not advance and the error is returned.
13658func (iter *InterfaceEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
13659	if tracing.IsEnabled() {
13660		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceEndpointListResultIterator.NextWithContext")
13661		defer func() {
13662			sc := -1
13663			if iter.Response().Response.Response != nil {
13664				sc = iter.Response().Response.Response.StatusCode
13665			}
13666			tracing.EndSpan(ctx, sc, err)
13667		}()
13668	}
13669	iter.i++
13670	if iter.i < len(iter.page.Values()) {
13671		return nil
13672	}
13673	err = iter.page.NextWithContext(ctx)
13674	if err != nil {
13675		iter.i--
13676		return err
13677	}
13678	iter.i = 0
13679	return nil
13680}
13681
13682// Next advances to the next value.  If there was an error making
13683// the request the iterator does not advance and the error is returned.
13684// Deprecated: Use NextWithContext() instead.
13685func (iter *InterfaceEndpointListResultIterator) Next() error {
13686	return iter.NextWithContext(context.Background())
13687}
13688
13689// NotDone returns true if the enumeration should be started or is not yet complete.
13690func (iter InterfaceEndpointListResultIterator) NotDone() bool {
13691	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13692}
13693
13694// Response returns the raw server response from the last page request.
13695func (iter InterfaceEndpointListResultIterator) Response() InterfaceEndpointListResult {
13696	return iter.page.Response()
13697}
13698
13699// Value returns the current value or a zero-initialized value if the
13700// iterator has advanced beyond the end of the collection.
13701func (iter InterfaceEndpointListResultIterator) Value() InterfaceEndpoint {
13702	if !iter.page.NotDone() {
13703		return InterfaceEndpoint{}
13704	}
13705	return iter.page.Values()[iter.i]
13706}
13707
13708// Creates a new instance of the InterfaceEndpointListResultIterator type.
13709func NewInterfaceEndpointListResultIterator(page InterfaceEndpointListResultPage) InterfaceEndpointListResultIterator {
13710	return InterfaceEndpointListResultIterator{page: page}
13711}
13712
13713// IsEmpty returns true if the ListResult contains no values.
13714func (ielr InterfaceEndpointListResult) IsEmpty() bool {
13715	return ielr.Value == nil || len(*ielr.Value) == 0
13716}
13717
13718// interfaceEndpointListResultPreparer prepares a request to retrieve the next set of results.
13719// It returns nil if no more results exist.
13720func (ielr InterfaceEndpointListResult) interfaceEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
13721	if ielr.NextLink == nil || len(to.String(ielr.NextLink)) < 1 {
13722		return nil, nil
13723	}
13724	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13725		autorest.AsJSON(),
13726		autorest.AsGet(),
13727		autorest.WithBaseURL(to.String(ielr.NextLink)))
13728}
13729
13730// InterfaceEndpointListResultPage contains a page of InterfaceEndpoint values.
13731type InterfaceEndpointListResultPage struct {
13732	fn   func(context.Context, InterfaceEndpointListResult) (InterfaceEndpointListResult, error)
13733	ielr InterfaceEndpointListResult
13734}
13735
13736// NextWithContext advances to the next page of values.  If there was an error making
13737// the request the page does not advance and the error is returned.
13738func (page *InterfaceEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
13739	if tracing.IsEnabled() {
13740		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceEndpointListResultPage.NextWithContext")
13741		defer func() {
13742			sc := -1
13743			if page.Response().Response.Response != nil {
13744				sc = page.Response().Response.Response.StatusCode
13745			}
13746			tracing.EndSpan(ctx, sc, err)
13747		}()
13748	}
13749	next, err := page.fn(ctx, page.ielr)
13750	if err != nil {
13751		return err
13752	}
13753	page.ielr = next
13754	return nil
13755}
13756
13757// Next advances to the next page of values.  If there was an error making
13758// the request the page does not advance and the error is returned.
13759// Deprecated: Use NextWithContext() instead.
13760func (page *InterfaceEndpointListResultPage) Next() error {
13761	return page.NextWithContext(context.Background())
13762}
13763
13764// NotDone returns true if the page enumeration should be started or is not yet complete.
13765func (page InterfaceEndpointListResultPage) NotDone() bool {
13766	return !page.ielr.IsEmpty()
13767}
13768
13769// Response returns the raw server response from the last page request.
13770func (page InterfaceEndpointListResultPage) Response() InterfaceEndpointListResult {
13771	return page.ielr
13772}
13773
13774// Values returns the slice of values for the current page or nil if there are no values.
13775func (page InterfaceEndpointListResultPage) Values() []InterfaceEndpoint {
13776	if page.ielr.IsEmpty() {
13777		return nil
13778	}
13779	return *page.ielr.Value
13780}
13781
13782// Creates a new instance of the InterfaceEndpointListResultPage type.
13783func NewInterfaceEndpointListResultPage(getNextPage func(context.Context, InterfaceEndpointListResult) (InterfaceEndpointListResult, error)) InterfaceEndpointListResultPage {
13784	return InterfaceEndpointListResultPage{fn: getNextPage}
13785}
13786
13787// InterfaceEndpointProperties properties of the interface endpoint.
13788type InterfaceEndpointProperties struct {
13789	// Fqdn - A first-party service's FQDN that is mapped to the private IP allocated via this interface endpoint.
13790	Fqdn *string `json:"fqdn,omitempty"`
13791	// EndpointService - A reference to the service being brought into the virtual network.
13792	EndpointService *EndpointService `json:"endpointService,omitempty"`
13793	// Subnet - The ID of the subnet from which the private IP will be allocated.
13794	Subnet *Subnet `json:"subnet,omitempty"`
13795	// NetworkInterfaces - READ-ONLY; Gets an array of references to the network interfaces created for this interface endpoint.
13796	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
13797	// Owner - READ-ONLY; A read-only property that identifies who created this interface endpoint.
13798	Owner *string `json:"owner,omitempty"`
13799	// ProvisioningState - READ-ONLY; The provisioning state of the interface endpoint. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13800	ProvisioningState *string `json:"provisioningState,omitempty"`
13801}
13802
13803// InterfaceEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13804// long-running operation.
13805type InterfaceEndpointsCreateOrUpdateFuture struct {
13806	azure.Future
13807}
13808
13809// Result returns the result of the asynchronous operation.
13810// If the operation has not completed it will return an error.
13811func (future *InterfaceEndpointsCreateOrUpdateFuture) Result(client InterfaceEndpointsClient) (ie InterfaceEndpoint, err error) {
13812	var done bool
13813	done, err = future.DoneWithContext(context.Background(), client)
13814	if err != nil {
13815		err = autorest.NewErrorWithError(err, "network.InterfaceEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13816		return
13817	}
13818	if !done {
13819		err = azure.NewAsyncOpIncompleteError("network.InterfaceEndpointsCreateOrUpdateFuture")
13820		return
13821	}
13822	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13823	if ie.Response.Response, err = future.GetResult(sender); err == nil && ie.Response.Response.StatusCode != http.StatusNoContent {
13824		ie, err = client.CreateOrUpdateResponder(ie.Response.Response)
13825		if err != nil {
13826			err = autorest.NewErrorWithError(err, "network.InterfaceEndpointsCreateOrUpdateFuture", "Result", ie.Response.Response, "Failure responding to request")
13827		}
13828	}
13829	return
13830}
13831
13832// InterfaceEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a
13833// long-running operation.
13834type InterfaceEndpointsDeleteFuture struct {
13835	azure.Future
13836}
13837
13838// Result returns the result of the asynchronous operation.
13839// If the operation has not completed it will return an error.
13840func (future *InterfaceEndpointsDeleteFuture) Result(client InterfaceEndpointsClient) (ar autorest.Response, err error) {
13841	var done bool
13842	done, err = future.DoneWithContext(context.Background(), client)
13843	if err != nil {
13844		err = autorest.NewErrorWithError(err, "network.InterfaceEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
13845		return
13846	}
13847	if !done {
13848		err = azure.NewAsyncOpIncompleteError("network.InterfaceEndpointsDeleteFuture")
13849		return
13850	}
13851	ar.Response = future.Response()
13852	return
13853}
13854
13855// InterfaceIPConfiguration iPConfiguration in a network interface.
13856type InterfaceIPConfiguration struct {
13857	autorest.Response `json:"-"`
13858	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
13859	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
13860	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13861	Name *string `json:"name,omitempty"`
13862	// Etag - A unique read-only string that changes whenever the resource is updated.
13863	Etag *string `json:"etag,omitempty"`
13864	// ID - Resource ID.
13865	ID *string `json:"id,omitempty"`
13866}
13867
13868// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
13869func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
13870	objectMap := make(map[string]interface{})
13871	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
13872		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
13873	}
13874	if iic.Name != nil {
13875		objectMap["name"] = iic.Name
13876	}
13877	if iic.Etag != nil {
13878		objectMap["etag"] = iic.Etag
13879	}
13880	if iic.ID != nil {
13881		objectMap["id"] = iic.ID
13882	}
13883	return json.Marshal(objectMap)
13884}
13885
13886// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
13887func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
13888	var m map[string]*json.RawMessage
13889	err := json.Unmarshal(body, &m)
13890	if err != nil {
13891		return err
13892	}
13893	for k, v := range m {
13894		switch k {
13895		case "properties":
13896			if v != nil {
13897				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
13898				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
13899				if err != nil {
13900					return err
13901				}
13902				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
13903			}
13904		case "name":
13905			if v != nil {
13906				var name string
13907				err = json.Unmarshal(*v, &name)
13908				if err != nil {
13909					return err
13910				}
13911				iic.Name = &name
13912			}
13913		case "etag":
13914			if v != nil {
13915				var etag string
13916				err = json.Unmarshal(*v, &etag)
13917				if err != nil {
13918					return err
13919				}
13920				iic.Etag = &etag
13921			}
13922		case "id":
13923			if v != nil {
13924				var ID string
13925				err = json.Unmarshal(*v, &ID)
13926				if err != nil {
13927					return err
13928				}
13929				iic.ID = &ID
13930			}
13931		}
13932	}
13933
13934	return nil
13935}
13936
13937// InterfaceIPConfigurationListResult response for list ip configurations API service call.
13938type InterfaceIPConfigurationListResult struct {
13939	autorest.Response `json:"-"`
13940	// Value - A list of ip configurations.
13941	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
13942	// NextLink - READ-ONLY; The URL to get the next set of results.
13943	NextLink *string `json:"nextLink,omitempty"`
13944}
13945
13946// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
13947// InterfaceIPConfiguration values.
13948type InterfaceIPConfigurationListResultIterator struct {
13949	i    int
13950	page InterfaceIPConfigurationListResultPage
13951}
13952
13953// NextWithContext advances to the next value.  If there was an error making
13954// the request the iterator does not advance and the error is returned.
13955func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
13956	if tracing.IsEnabled() {
13957		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
13958		defer func() {
13959			sc := -1
13960			if iter.Response().Response.Response != nil {
13961				sc = iter.Response().Response.Response.StatusCode
13962			}
13963			tracing.EndSpan(ctx, sc, err)
13964		}()
13965	}
13966	iter.i++
13967	if iter.i < len(iter.page.Values()) {
13968		return nil
13969	}
13970	err = iter.page.NextWithContext(ctx)
13971	if err != nil {
13972		iter.i--
13973		return err
13974	}
13975	iter.i = 0
13976	return nil
13977}
13978
13979// Next advances to the next value.  If there was an error making
13980// the request the iterator does not advance and the error is returned.
13981// Deprecated: Use NextWithContext() instead.
13982func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
13983	return iter.NextWithContext(context.Background())
13984}
13985
13986// NotDone returns true if the enumeration should be started or is not yet complete.
13987func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
13988	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13989}
13990
13991// Response returns the raw server response from the last page request.
13992func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
13993	return iter.page.Response()
13994}
13995
13996// Value returns the current value or a zero-initialized value if the
13997// iterator has advanced beyond the end of the collection.
13998func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
13999	if !iter.page.NotDone() {
14000		return InterfaceIPConfiguration{}
14001	}
14002	return iter.page.Values()[iter.i]
14003}
14004
14005// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
14006func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
14007	return InterfaceIPConfigurationListResultIterator{page: page}
14008}
14009
14010// IsEmpty returns true if the ListResult contains no values.
14011func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
14012	return iiclr.Value == nil || len(*iiclr.Value) == 0
14013}
14014
14015// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
14016// It returns nil if no more results exist.
14017func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
14018	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
14019		return nil, nil
14020	}
14021	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14022		autorest.AsJSON(),
14023		autorest.AsGet(),
14024		autorest.WithBaseURL(to.String(iiclr.NextLink)))
14025}
14026
14027// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
14028type InterfaceIPConfigurationListResultPage struct {
14029	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
14030	iiclr InterfaceIPConfigurationListResult
14031}
14032
14033// NextWithContext advances to the next page of values.  If there was an error making
14034// the request the page does not advance and the error is returned.
14035func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
14036	if tracing.IsEnabled() {
14037		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
14038		defer func() {
14039			sc := -1
14040			if page.Response().Response.Response != nil {
14041				sc = page.Response().Response.Response.StatusCode
14042			}
14043			tracing.EndSpan(ctx, sc, err)
14044		}()
14045	}
14046	next, err := page.fn(ctx, page.iiclr)
14047	if err != nil {
14048		return err
14049	}
14050	page.iiclr = next
14051	return nil
14052}
14053
14054// Next advances to the next page of values.  If there was an error making
14055// the request the page does not advance and the error is returned.
14056// Deprecated: Use NextWithContext() instead.
14057func (page *InterfaceIPConfigurationListResultPage) Next() error {
14058	return page.NextWithContext(context.Background())
14059}
14060
14061// NotDone returns true if the page enumeration should be started or is not yet complete.
14062func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
14063	return !page.iiclr.IsEmpty()
14064}
14065
14066// Response returns the raw server response from the last page request.
14067func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
14068	return page.iiclr
14069}
14070
14071// Values returns the slice of values for the current page or nil if there are no values.
14072func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
14073	if page.iiclr.IsEmpty() {
14074		return nil
14075	}
14076	return *page.iiclr.Value
14077}
14078
14079// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
14080func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
14081	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
14082}
14083
14084// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
14085type InterfaceIPConfigurationPropertiesFormat struct {
14086	// VirtualNetworkTaps - The reference to Virtual Network Taps.
14087	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
14088	// ApplicationGatewayBackendAddressPools - The reference of ApplicationGatewayBackendAddressPool resource.
14089	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
14090	// LoadBalancerBackendAddressPools - The reference of LoadBalancerBackendAddressPool resource.
14091	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
14092	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
14093	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
14094	// PrivateIPAddress - Private IP address of the IP configuration.
14095	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
14096	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
14097	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
14098	// PrivateIPAddressVersion - Available from Api-Version 2016-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
14099	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
14100	// Subnet - Subnet bound to the IP configuration.
14101	Subnet *Subnet `json:"subnet,omitempty"`
14102	// Primary - Gets whether this is a primary customer address on the network interface.
14103	Primary *bool `json:"primary,omitempty"`
14104	// PublicIPAddress - Public IP address bound to the IP configuration.
14105	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
14106	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
14107	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
14108	// ProvisioningState - The provisioning state of the network interface IP configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14109	ProvisioningState *string `json:"provisioningState,omitempty"`
14110}
14111
14112// InterfaceListResult response for the ListNetworkInterface API service call.
14113type InterfaceListResult struct {
14114	autorest.Response `json:"-"`
14115	// Value - A list of network interfaces in a resource group.
14116	Value *[]Interface `json:"value,omitempty"`
14117	// NextLink - READ-ONLY; The URL to get the next set of results.
14118	NextLink *string `json:"nextLink,omitempty"`
14119}
14120
14121// InterfaceListResultIterator provides access to a complete listing of Interface values.
14122type InterfaceListResultIterator struct {
14123	i    int
14124	page InterfaceListResultPage
14125}
14126
14127// NextWithContext advances to the next value.  If there was an error making
14128// the request the iterator does not advance and the error is returned.
14129func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
14130	if tracing.IsEnabled() {
14131		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
14132		defer func() {
14133			sc := -1
14134			if iter.Response().Response.Response != nil {
14135				sc = iter.Response().Response.Response.StatusCode
14136			}
14137			tracing.EndSpan(ctx, sc, err)
14138		}()
14139	}
14140	iter.i++
14141	if iter.i < len(iter.page.Values()) {
14142		return nil
14143	}
14144	err = iter.page.NextWithContext(ctx)
14145	if err != nil {
14146		iter.i--
14147		return err
14148	}
14149	iter.i = 0
14150	return nil
14151}
14152
14153// Next advances to the next value.  If there was an error making
14154// the request the iterator does not advance and the error is returned.
14155// Deprecated: Use NextWithContext() instead.
14156func (iter *InterfaceListResultIterator) Next() error {
14157	return iter.NextWithContext(context.Background())
14158}
14159
14160// NotDone returns true if the enumeration should be started or is not yet complete.
14161func (iter InterfaceListResultIterator) NotDone() bool {
14162	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14163}
14164
14165// Response returns the raw server response from the last page request.
14166func (iter InterfaceListResultIterator) Response() InterfaceListResult {
14167	return iter.page.Response()
14168}
14169
14170// Value returns the current value or a zero-initialized value if the
14171// iterator has advanced beyond the end of the collection.
14172func (iter InterfaceListResultIterator) Value() Interface {
14173	if !iter.page.NotDone() {
14174		return Interface{}
14175	}
14176	return iter.page.Values()[iter.i]
14177}
14178
14179// Creates a new instance of the InterfaceListResultIterator type.
14180func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
14181	return InterfaceListResultIterator{page: page}
14182}
14183
14184// IsEmpty returns true if the ListResult contains no values.
14185func (ilr InterfaceListResult) IsEmpty() bool {
14186	return ilr.Value == nil || len(*ilr.Value) == 0
14187}
14188
14189// interfaceListResultPreparer prepares a request to retrieve the next set of results.
14190// It returns nil if no more results exist.
14191func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
14192	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
14193		return nil, nil
14194	}
14195	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14196		autorest.AsJSON(),
14197		autorest.AsGet(),
14198		autorest.WithBaseURL(to.String(ilr.NextLink)))
14199}
14200
14201// InterfaceListResultPage contains a page of Interface values.
14202type InterfaceListResultPage struct {
14203	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
14204	ilr InterfaceListResult
14205}
14206
14207// NextWithContext advances to the next page of values.  If there was an error making
14208// the request the page does not advance and the error is returned.
14209func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
14210	if tracing.IsEnabled() {
14211		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
14212		defer func() {
14213			sc := -1
14214			if page.Response().Response.Response != nil {
14215				sc = page.Response().Response.Response.StatusCode
14216			}
14217			tracing.EndSpan(ctx, sc, err)
14218		}()
14219	}
14220	next, err := page.fn(ctx, page.ilr)
14221	if err != nil {
14222		return err
14223	}
14224	page.ilr = next
14225	return nil
14226}
14227
14228// Next advances to the next page of values.  If there was an error making
14229// the request the page does not advance and the error is returned.
14230// Deprecated: Use NextWithContext() instead.
14231func (page *InterfaceListResultPage) Next() error {
14232	return page.NextWithContext(context.Background())
14233}
14234
14235// NotDone returns true if the page enumeration should be started or is not yet complete.
14236func (page InterfaceListResultPage) NotDone() bool {
14237	return !page.ilr.IsEmpty()
14238}
14239
14240// Response returns the raw server response from the last page request.
14241func (page InterfaceListResultPage) Response() InterfaceListResult {
14242	return page.ilr
14243}
14244
14245// Values returns the slice of values for the current page or nil if there are no values.
14246func (page InterfaceListResultPage) Values() []Interface {
14247	if page.ilr.IsEmpty() {
14248		return nil
14249	}
14250	return *page.ilr.Value
14251}
14252
14253// Creates a new instance of the InterfaceListResultPage type.
14254func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
14255	return InterfaceListResultPage{fn: getNextPage}
14256}
14257
14258// InterfaceLoadBalancerListResult response for list ip configurations API service call.
14259type InterfaceLoadBalancerListResult struct {
14260	autorest.Response `json:"-"`
14261	// Value - A list of load balancers.
14262	Value *[]LoadBalancer `json:"value,omitempty"`
14263	// NextLink - READ-ONLY; The URL to get the next set of results.
14264	NextLink *string `json:"nextLink,omitempty"`
14265}
14266
14267// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
14268type InterfaceLoadBalancerListResultIterator struct {
14269	i    int
14270	page InterfaceLoadBalancerListResultPage
14271}
14272
14273// NextWithContext advances to the next value.  If there was an error making
14274// the request the iterator does not advance and the error is returned.
14275func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
14276	if tracing.IsEnabled() {
14277		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
14278		defer func() {
14279			sc := -1
14280			if iter.Response().Response.Response != nil {
14281				sc = iter.Response().Response.Response.StatusCode
14282			}
14283			tracing.EndSpan(ctx, sc, err)
14284		}()
14285	}
14286	iter.i++
14287	if iter.i < len(iter.page.Values()) {
14288		return nil
14289	}
14290	err = iter.page.NextWithContext(ctx)
14291	if err != nil {
14292		iter.i--
14293		return err
14294	}
14295	iter.i = 0
14296	return nil
14297}
14298
14299// Next advances to the next value.  If there was an error making
14300// the request the iterator does not advance and the error is returned.
14301// Deprecated: Use NextWithContext() instead.
14302func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
14303	return iter.NextWithContext(context.Background())
14304}
14305
14306// NotDone returns true if the enumeration should be started or is not yet complete.
14307func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
14308	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14309}
14310
14311// Response returns the raw server response from the last page request.
14312func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
14313	return iter.page.Response()
14314}
14315
14316// Value returns the current value or a zero-initialized value if the
14317// iterator has advanced beyond the end of the collection.
14318func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
14319	if !iter.page.NotDone() {
14320		return LoadBalancer{}
14321	}
14322	return iter.page.Values()[iter.i]
14323}
14324
14325// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
14326func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
14327	return InterfaceLoadBalancerListResultIterator{page: page}
14328}
14329
14330// IsEmpty returns true if the ListResult contains no values.
14331func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
14332	return ilblr.Value == nil || len(*ilblr.Value) == 0
14333}
14334
14335// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
14336// It returns nil if no more results exist.
14337func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
14338	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
14339		return nil, nil
14340	}
14341	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14342		autorest.AsJSON(),
14343		autorest.AsGet(),
14344		autorest.WithBaseURL(to.String(ilblr.NextLink)))
14345}
14346
14347// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
14348type InterfaceLoadBalancerListResultPage struct {
14349	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
14350	ilblr InterfaceLoadBalancerListResult
14351}
14352
14353// NextWithContext advances to the next page of values.  If there was an error making
14354// the request the page does not advance and the error is returned.
14355func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
14356	if tracing.IsEnabled() {
14357		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
14358		defer func() {
14359			sc := -1
14360			if page.Response().Response.Response != nil {
14361				sc = page.Response().Response.Response.StatusCode
14362			}
14363			tracing.EndSpan(ctx, sc, err)
14364		}()
14365	}
14366	next, err := page.fn(ctx, page.ilblr)
14367	if err != nil {
14368		return err
14369	}
14370	page.ilblr = next
14371	return nil
14372}
14373
14374// Next advances to the next page of values.  If there was an error making
14375// the request the page does not advance and the error is returned.
14376// Deprecated: Use NextWithContext() instead.
14377func (page *InterfaceLoadBalancerListResultPage) Next() error {
14378	return page.NextWithContext(context.Background())
14379}
14380
14381// NotDone returns true if the page enumeration should be started or is not yet complete.
14382func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
14383	return !page.ilblr.IsEmpty()
14384}
14385
14386// Response returns the raw server response from the last page request.
14387func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
14388	return page.ilblr
14389}
14390
14391// Values returns the slice of values for the current page or nil if there are no values.
14392func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
14393	if page.ilblr.IsEmpty() {
14394		return nil
14395	}
14396	return *page.ilblr.Value
14397}
14398
14399// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
14400func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
14401	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
14402}
14403
14404// InterfacePropertiesFormat networkInterface properties.
14405type InterfacePropertiesFormat struct {
14406	// VirtualMachine - READ-ONLY; The reference of a virtual machine.
14407	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
14408	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
14409	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
14410	// InterfaceEndpoint - READ-ONLY; A reference to the interface endpoint to which the network interface is linked.
14411	InterfaceEndpoint *InterfaceEndpoint `json:"interfaceEndpoint,omitempty"`
14412	// IPConfigurations - A list of IPConfigurations of the network interface.
14413	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
14414	// TapConfigurations - A list of TapConfigurations of the network interface.
14415	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
14416	// DNSSettings - The DNS settings in network interface.
14417	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
14418	// MacAddress - The MAC address of the network interface.
14419	MacAddress *string `json:"macAddress,omitempty"`
14420	// Primary - Gets whether this is a primary network interface on a virtual machine.
14421	Primary *bool `json:"primary,omitempty"`
14422	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
14423	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
14424	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
14425	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
14426	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources
14427	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
14428	// ResourceGUID - The resource GUID property of the network interface resource.
14429	ResourceGUID *string `json:"resourceGuid,omitempty"`
14430	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14431	ProvisioningState *string `json:"provisioningState,omitempty"`
14432}
14433
14434// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14435// long-running operation.
14436type InterfacesCreateOrUpdateFuture struct {
14437	azure.Future
14438}
14439
14440// Result returns the result of the asynchronous operation.
14441// If the operation has not completed it will return an error.
14442func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
14443	var done bool
14444	done, err = future.DoneWithContext(context.Background(), client)
14445	if err != nil {
14446		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14447		return
14448	}
14449	if !done {
14450		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
14451		return
14452	}
14453	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14454	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
14455		i, err = client.CreateOrUpdateResponder(i.Response.Response)
14456		if err != nil {
14457			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
14458		}
14459	}
14460	return
14461}
14462
14463// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14464// operation.
14465type InterfacesDeleteFuture struct {
14466	azure.Future
14467}
14468
14469// Result returns the result of the asynchronous operation.
14470// If the operation has not completed it will return an error.
14471func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
14472	var done bool
14473	done, err = future.DoneWithContext(context.Background(), client)
14474	if err != nil {
14475		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
14476		return
14477	}
14478	if !done {
14479		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
14480		return
14481	}
14482	ar.Response = future.Response()
14483	return
14484}
14485
14486// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
14487// long-running operation.
14488type InterfacesGetEffectiveRouteTableFuture struct {
14489	azure.Future
14490}
14491
14492// Result returns the result of the asynchronous operation.
14493// If the operation has not completed it will return an error.
14494func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
14495	var done bool
14496	done, err = future.DoneWithContext(context.Background(), client)
14497	if err != nil {
14498		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
14499		return
14500	}
14501	if !done {
14502		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
14503		return
14504	}
14505	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14506	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
14507		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
14508		if err != nil {
14509			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
14510		}
14511	}
14512	return
14513}
14514
14515// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
14516// results of a long-running operation.
14517type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
14518	azure.Future
14519}
14520
14521// Result returns the result of the asynchronous operation.
14522// If the operation has not completed it will return an error.
14523func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
14524	var done bool
14525	done, err = future.DoneWithContext(context.Background(), client)
14526	if err != nil {
14527		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
14528		return
14529	}
14530	if !done {
14531		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
14532		return
14533	}
14534	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14535	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
14536		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
14537		if err != nil {
14538			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
14539		}
14540	}
14541	return
14542}
14543
14544// InterfacesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
14545// operation.
14546type InterfacesUpdateTagsFuture struct {
14547	azure.Future
14548}
14549
14550// Result returns the result of the asynchronous operation.
14551// If the operation has not completed it will return an error.
14552func (future *InterfacesUpdateTagsFuture) Result(client InterfacesClient) (i Interface, err error) {
14553	var done bool
14554	done, err = future.DoneWithContext(context.Background(), client)
14555	if err != nil {
14556		err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
14557		return
14558	}
14559	if !done {
14560		err = azure.NewAsyncOpIncompleteError("network.InterfacesUpdateTagsFuture")
14561		return
14562	}
14563	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14564	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
14565		i, err = client.UpdateTagsResponder(i.Response.Response)
14566		if err != nil {
14567			err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", i.Response.Response, "Failure responding to request")
14568		}
14569	}
14570	return
14571}
14572
14573// InterfaceTapConfiguration tap configuration in a Network Interface
14574type InterfaceTapConfiguration struct {
14575	autorest.Response `json:"-"`
14576	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration
14577	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
14578	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14579	Name *string `json:"name,omitempty"`
14580	// Etag - A unique read-only string that changes whenever the resource is updated.
14581	Etag *string `json:"etag,omitempty"`
14582	// Type - READ-ONLY; Sub Resource type.
14583	Type *string `json:"type,omitempty"`
14584	// ID - Resource ID.
14585	ID *string `json:"id,omitempty"`
14586}
14587
14588// MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
14589func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
14590	objectMap := make(map[string]interface{})
14591	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
14592		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
14593	}
14594	if itc.Name != nil {
14595		objectMap["name"] = itc.Name
14596	}
14597	if itc.Etag != nil {
14598		objectMap["etag"] = itc.Etag
14599	}
14600	if itc.ID != nil {
14601		objectMap["id"] = itc.ID
14602	}
14603	return json.Marshal(objectMap)
14604}
14605
14606// UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
14607func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
14608	var m map[string]*json.RawMessage
14609	err := json.Unmarshal(body, &m)
14610	if err != nil {
14611		return err
14612	}
14613	for k, v := range m {
14614		switch k {
14615		case "properties":
14616			if v != nil {
14617				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
14618				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
14619				if err != nil {
14620					return err
14621				}
14622				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
14623			}
14624		case "name":
14625			if v != nil {
14626				var name string
14627				err = json.Unmarshal(*v, &name)
14628				if err != nil {
14629					return err
14630				}
14631				itc.Name = &name
14632			}
14633		case "etag":
14634			if v != nil {
14635				var etag string
14636				err = json.Unmarshal(*v, &etag)
14637				if err != nil {
14638					return err
14639				}
14640				itc.Etag = &etag
14641			}
14642		case "type":
14643			if v != nil {
14644				var typeVar string
14645				err = json.Unmarshal(*v, &typeVar)
14646				if err != nil {
14647					return err
14648				}
14649				itc.Type = &typeVar
14650			}
14651		case "id":
14652			if v != nil {
14653				var ID string
14654				err = json.Unmarshal(*v, &ID)
14655				if err != nil {
14656					return err
14657				}
14658				itc.ID = &ID
14659			}
14660		}
14661	}
14662
14663	return nil
14664}
14665
14666// InterfaceTapConfigurationListResult response for list tap configurations API service call.
14667type InterfaceTapConfigurationListResult struct {
14668	autorest.Response `json:"-"`
14669	// Value - A list of tap configurations.
14670	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
14671	// NextLink - READ-ONLY; The URL to get the next set of results.
14672	NextLink *string `json:"nextLink,omitempty"`
14673}
14674
14675// InterfaceTapConfigurationListResultIterator provides access to a complete listing of
14676// InterfaceTapConfiguration values.
14677type InterfaceTapConfigurationListResultIterator struct {
14678	i    int
14679	page InterfaceTapConfigurationListResultPage
14680}
14681
14682// NextWithContext advances to the next value.  If there was an error making
14683// the request the iterator does not advance and the error is returned.
14684func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
14685	if tracing.IsEnabled() {
14686		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
14687		defer func() {
14688			sc := -1
14689			if iter.Response().Response.Response != nil {
14690				sc = iter.Response().Response.Response.StatusCode
14691			}
14692			tracing.EndSpan(ctx, sc, err)
14693		}()
14694	}
14695	iter.i++
14696	if iter.i < len(iter.page.Values()) {
14697		return nil
14698	}
14699	err = iter.page.NextWithContext(ctx)
14700	if err != nil {
14701		iter.i--
14702		return err
14703	}
14704	iter.i = 0
14705	return nil
14706}
14707
14708// Next advances to the next value.  If there was an error making
14709// the request the iterator does not advance and the error is returned.
14710// Deprecated: Use NextWithContext() instead.
14711func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
14712	return iter.NextWithContext(context.Background())
14713}
14714
14715// NotDone returns true if the enumeration should be started or is not yet complete.
14716func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
14717	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14718}
14719
14720// Response returns the raw server response from the last page request.
14721func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
14722	return iter.page.Response()
14723}
14724
14725// Value returns the current value or a zero-initialized value if the
14726// iterator has advanced beyond the end of the collection.
14727func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
14728	if !iter.page.NotDone() {
14729		return InterfaceTapConfiguration{}
14730	}
14731	return iter.page.Values()[iter.i]
14732}
14733
14734// Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
14735func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
14736	return InterfaceTapConfigurationListResultIterator{page: page}
14737}
14738
14739// IsEmpty returns true if the ListResult contains no values.
14740func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
14741	return itclr.Value == nil || len(*itclr.Value) == 0
14742}
14743
14744// interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
14745// It returns nil if no more results exist.
14746func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
14747	if itclr.NextLink == nil || len(to.String(itclr.NextLink)) < 1 {
14748		return nil, nil
14749	}
14750	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14751		autorest.AsJSON(),
14752		autorest.AsGet(),
14753		autorest.WithBaseURL(to.String(itclr.NextLink)))
14754}
14755
14756// InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
14757type InterfaceTapConfigurationListResultPage struct {
14758	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
14759	itclr InterfaceTapConfigurationListResult
14760}
14761
14762// NextWithContext advances to the next page of values.  If there was an error making
14763// the request the page does not advance and the error is returned.
14764func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
14765	if tracing.IsEnabled() {
14766		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
14767		defer func() {
14768			sc := -1
14769			if page.Response().Response.Response != nil {
14770				sc = page.Response().Response.Response.StatusCode
14771			}
14772			tracing.EndSpan(ctx, sc, err)
14773		}()
14774	}
14775	next, err := page.fn(ctx, page.itclr)
14776	if err != nil {
14777		return err
14778	}
14779	page.itclr = next
14780	return nil
14781}
14782
14783// Next advances to the next page of values.  If there was an error making
14784// the request the page does not advance and the error is returned.
14785// Deprecated: Use NextWithContext() instead.
14786func (page *InterfaceTapConfigurationListResultPage) Next() error {
14787	return page.NextWithContext(context.Background())
14788}
14789
14790// NotDone returns true if the page enumeration should be started or is not yet complete.
14791func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
14792	return !page.itclr.IsEmpty()
14793}
14794
14795// Response returns the raw server response from the last page request.
14796func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
14797	return page.itclr
14798}
14799
14800// Values returns the slice of values for the current page or nil if there are no values.
14801func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
14802	if page.itclr.IsEmpty() {
14803		return nil
14804	}
14805	return *page.itclr.Value
14806}
14807
14808// Creates a new instance of the InterfaceTapConfigurationListResultPage type.
14809func NewInterfaceTapConfigurationListResultPage(getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
14810	return InterfaceTapConfigurationListResultPage{fn: getNextPage}
14811}
14812
14813// InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
14814type InterfaceTapConfigurationPropertiesFormat struct {
14815	// VirtualNetworkTap - The reference of the Virtual Network Tap resource.
14816	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
14817	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14818	ProvisioningState *string `json:"provisioningState,omitempty"`
14819}
14820
14821// InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
14822// of a long-running operation.
14823type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
14824	azure.Future
14825}
14826
14827// Result returns the result of the asynchronous operation.
14828// If the operation has not completed it will return an error.
14829func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) Result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
14830	var done bool
14831	done, err = future.DoneWithContext(context.Background(), client)
14832	if err != nil {
14833		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14834		return
14835	}
14836	if !done {
14837		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
14838		return
14839	}
14840	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14841	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
14842		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
14843		if err != nil {
14844			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
14845		}
14846	}
14847	return
14848}
14849
14850// InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
14851// long-running operation.
14852type InterfaceTapConfigurationsDeleteFuture struct {
14853	azure.Future
14854}
14855
14856// Result returns the result of the asynchronous operation.
14857// If the operation has not completed it will return an error.
14858func (future *InterfaceTapConfigurationsDeleteFuture) Result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
14859	var done bool
14860	done, err = future.DoneWithContext(context.Background(), client)
14861	if err != nil {
14862		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
14863		return
14864	}
14865	if !done {
14866		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
14867		return
14868	}
14869	ar.Response = future.Response()
14870	return
14871}
14872
14873// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call
14874type IPAddressAvailabilityResult struct {
14875	autorest.Response `json:"-"`
14876	// Available - Private IP address availability.
14877	Available *bool `json:"available,omitempty"`
14878	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
14879	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
14880}
14881
14882// IPConfiguration IP configuration
14883type IPConfiguration struct {
14884	// IPConfigurationPropertiesFormat - Properties of the IP configuration
14885	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
14886	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14887	Name *string `json:"name,omitempty"`
14888	// Etag - A unique read-only string that changes whenever the resource is updated.
14889	Etag *string `json:"etag,omitempty"`
14890	// ID - Resource ID.
14891	ID *string `json:"id,omitempty"`
14892}
14893
14894// MarshalJSON is the custom marshaler for IPConfiguration.
14895func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
14896	objectMap := make(map[string]interface{})
14897	if ic.IPConfigurationPropertiesFormat != nil {
14898		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
14899	}
14900	if ic.Name != nil {
14901		objectMap["name"] = ic.Name
14902	}
14903	if ic.Etag != nil {
14904		objectMap["etag"] = ic.Etag
14905	}
14906	if ic.ID != nil {
14907		objectMap["id"] = ic.ID
14908	}
14909	return json.Marshal(objectMap)
14910}
14911
14912// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
14913func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
14914	var m map[string]*json.RawMessage
14915	err := json.Unmarshal(body, &m)
14916	if err != nil {
14917		return err
14918	}
14919	for k, v := range m {
14920		switch k {
14921		case "properties":
14922			if v != nil {
14923				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
14924				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
14925				if err != nil {
14926					return err
14927				}
14928				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
14929			}
14930		case "name":
14931			if v != nil {
14932				var name string
14933				err = json.Unmarshal(*v, &name)
14934				if err != nil {
14935					return err
14936				}
14937				ic.Name = &name
14938			}
14939		case "etag":
14940			if v != nil {
14941				var etag string
14942				err = json.Unmarshal(*v, &etag)
14943				if err != nil {
14944					return err
14945				}
14946				ic.Etag = &etag
14947			}
14948		case "id":
14949			if v != nil {
14950				var ID string
14951				err = json.Unmarshal(*v, &ID)
14952				if err != nil {
14953					return err
14954				}
14955				ic.ID = &ID
14956			}
14957		}
14958	}
14959
14960	return nil
14961}
14962
14963// IPConfigurationProfile IP configuration profile child resource.
14964type IPConfigurationProfile struct {
14965	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
14966	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
14967	// Name - The name of the resource. This name can be used to access the resource.
14968	Name *string `json:"name,omitempty"`
14969	// Type - READ-ONLY; Sub Resource type.
14970	Type *string `json:"type,omitempty"`
14971	// Etag - A unique read-only string that changes whenever the resource is updated.
14972	Etag *string `json:"etag,omitempty"`
14973	// ID - Resource ID.
14974	ID *string `json:"id,omitempty"`
14975}
14976
14977// MarshalJSON is the custom marshaler for IPConfigurationProfile.
14978func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
14979	objectMap := make(map[string]interface{})
14980	if icp.IPConfigurationProfilePropertiesFormat != nil {
14981		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
14982	}
14983	if icp.Name != nil {
14984		objectMap["name"] = icp.Name
14985	}
14986	if icp.Etag != nil {
14987		objectMap["etag"] = icp.Etag
14988	}
14989	if icp.ID != nil {
14990		objectMap["id"] = icp.ID
14991	}
14992	return json.Marshal(objectMap)
14993}
14994
14995// UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
14996func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
14997	var m map[string]*json.RawMessage
14998	err := json.Unmarshal(body, &m)
14999	if err != nil {
15000		return err
15001	}
15002	for k, v := range m {
15003		switch k {
15004		case "properties":
15005			if v != nil {
15006				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
15007				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
15008				if err != nil {
15009					return err
15010				}
15011				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
15012			}
15013		case "name":
15014			if v != nil {
15015				var name string
15016				err = json.Unmarshal(*v, &name)
15017				if err != nil {
15018					return err
15019				}
15020				icp.Name = &name
15021			}
15022		case "type":
15023			if v != nil {
15024				var typeVar string
15025				err = json.Unmarshal(*v, &typeVar)
15026				if err != nil {
15027					return err
15028				}
15029				icp.Type = &typeVar
15030			}
15031		case "etag":
15032			if v != nil {
15033				var etag string
15034				err = json.Unmarshal(*v, &etag)
15035				if err != nil {
15036					return err
15037				}
15038				icp.Etag = &etag
15039			}
15040		case "id":
15041			if v != nil {
15042				var ID string
15043				err = json.Unmarshal(*v, &ID)
15044				if err != nil {
15045					return err
15046				}
15047				icp.ID = &ID
15048			}
15049		}
15050	}
15051
15052	return nil
15053}
15054
15055// IPConfigurationProfilePropertiesFormat IP configuration profile properties.
15056type IPConfigurationProfilePropertiesFormat struct {
15057	// Subnet - The reference of the subnet resource to create a container network interface ip configuration.
15058	Subnet *Subnet `json:"subnet,omitempty"`
15059	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
15060	ProvisioningState *string `json:"provisioningState,omitempty"`
15061}
15062
15063// IPConfigurationPropertiesFormat properties of IP configuration.
15064type IPConfigurationPropertiesFormat struct {
15065	// PrivateIPAddress - The private IP address of the IP configuration.
15066	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
15067	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
15068	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
15069	// Subnet - The reference of the subnet resource.
15070	Subnet *Subnet `json:"subnet,omitempty"`
15071	// PublicIPAddress - The reference of the public IP resource.
15072	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
15073	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
15074	ProvisioningState *string `json:"provisioningState,omitempty"`
15075}
15076
15077// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection
15078type IpsecPolicy struct {
15079	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
15080	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
15081	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
15082	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
15083	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
15084	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
15085	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
15086	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
15087	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
15088	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
15089	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
15090	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
15091	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
15092	DhGroup DhGroup `json:"dhGroup,omitempty"`
15093	// 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'
15094	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
15095}
15096
15097// IPTag contains the IpTag associated with the object
15098type IPTag struct {
15099	// IPTagType - Gets or sets the ipTag type: Example FirstPartyUsage.
15100	IPTagType *string `json:"ipTagType,omitempty"`
15101	// Tag - Gets or sets value of the IpTag associated with the public IP. Example SQL, Storage etc
15102	Tag *string `json:"tag,omitempty"`
15103}
15104
15105// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
15106type Ipv6ExpressRouteCircuitPeeringConfig struct {
15107	// PrimaryPeerAddressPrefix - The primary address prefix.
15108	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
15109	// SecondaryPeerAddressPrefix - The secondary address prefix.
15110	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
15111	// MicrosoftPeeringConfig - The Microsoft peering configuration.
15112	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
15113	// RouteFilter - The reference of the RouteFilter resource.
15114	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
15115	// State - The state of peering. Possible values are: 'Disabled' and 'Enabled'. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
15116	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
15117}
15118
15119// ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
15120// the next set of results.
15121type ListHubVirtualNetworkConnectionsResult struct {
15122	autorest.Response `json:"-"`
15123	// Value - List of HubVirtualNetworkConnections.
15124	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
15125	// NextLink - URL to get the next set of operation list results if there are any.
15126	NextLink *string `json:"nextLink,omitempty"`
15127}
15128
15129// ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
15130// HubVirtualNetworkConnection values.
15131type ListHubVirtualNetworkConnectionsResultIterator struct {
15132	i    int
15133	page ListHubVirtualNetworkConnectionsResultPage
15134}
15135
15136// NextWithContext advances to the next value.  If there was an error making
15137// the request the iterator does not advance and the error is returned.
15138func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
15139	if tracing.IsEnabled() {
15140		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
15141		defer func() {
15142			sc := -1
15143			if iter.Response().Response.Response != nil {
15144				sc = iter.Response().Response.Response.StatusCode
15145			}
15146			tracing.EndSpan(ctx, sc, err)
15147		}()
15148	}
15149	iter.i++
15150	if iter.i < len(iter.page.Values()) {
15151		return nil
15152	}
15153	err = iter.page.NextWithContext(ctx)
15154	if err != nil {
15155		iter.i--
15156		return err
15157	}
15158	iter.i = 0
15159	return nil
15160}
15161
15162// Next advances to the next value.  If there was an error making
15163// the request the iterator does not advance and the error is returned.
15164// Deprecated: Use NextWithContext() instead.
15165func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
15166	return iter.NextWithContext(context.Background())
15167}
15168
15169// NotDone returns true if the enumeration should be started or is not yet complete.
15170func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
15171	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15172}
15173
15174// Response returns the raw server response from the last page request.
15175func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
15176	return iter.page.Response()
15177}
15178
15179// Value returns the current value or a zero-initialized value if the
15180// iterator has advanced beyond the end of the collection.
15181func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
15182	if !iter.page.NotDone() {
15183		return HubVirtualNetworkConnection{}
15184	}
15185	return iter.page.Values()[iter.i]
15186}
15187
15188// Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
15189func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
15190	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
15191}
15192
15193// IsEmpty returns true if the ListResult contains no values.
15194func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
15195	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
15196}
15197
15198// listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
15199// It returns nil if no more results exist.
15200func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
15201	if lhvncr.NextLink == nil || len(to.String(lhvncr.NextLink)) < 1 {
15202		return nil, nil
15203	}
15204	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15205		autorest.AsJSON(),
15206		autorest.AsGet(),
15207		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
15208}
15209
15210// ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
15211type ListHubVirtualNetworkConnectionsResultPage struct {
15212	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
15213	lhvncr ListHubVirtualNetworkConnectionsResult
15214}
15215
15216// NextWithContext advances to the next page of values.  If there was an error making
15217// the request the page does not advance and the error is returned.
15218func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
15219	if tracing.IsEnabled() {
15220		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
15221		defer func() {
15222			sc := -1
15223			if page.Response().Response.Response != nil {
15224				sc = page.Response().Response.Response.StatusCode
15225			}
15226			tracing.EndSpan(ctx, sc, err)
15227		}()
15228	}
15229	next, err := page.fn(ctx, page.lhvncr)
15230	if err != nil {
15231		return err
15232	}
15233	page.lhvncr = next
15234	return nil
15235}
15236
15237// Next advances to the next page of values.  If there was an error making
15238// the request the page does not advance and the error is returned.
15239// Deprecated: Use NextWithContext() instead.
15240func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
15241	return page.NextWithContext(context.Background())
15242}
15243
15244// NotDone returns true if the page enumeration should be started or is not yet complete.
15245func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
15246	return !page.lhvncr.IsEmpty()
15247}
15248
15249// Response returns the raw server response from the last page request.
15250func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
15251	return page.lhvncr
15252}
15253
15254// Values returns the slice of values for the current page or nil if there are no values.
15255func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
15256	if page.lhvncr.IsEmpty() {
15257		return nil
15258	}
15259	return *page.lhvncr.Value
15260}
15261
15262// Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
15263func NewListHubVirtualNetworkConnectionsResultPage(getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
15264	return ListHubVirtualNetworkConnectionsResultPage{fn: getNextPage}
15265}
15266
15267// ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
15268// P2SVpnGateways and a URL nextLink to get the next set of results.
15269type ListP2SVpnGatewaysResult struct {
15270	autorest.Response `json:"-"`
15271	// Value - List of P2SVpnGateways.
15272	Value *[]P2SVpnGateway `json:"value,omitempty"`
15273	// NextLink - URL to get the next set of operation list results if there are any.
15274	NextLink *string `json:"nextLink,omitempty"`
15275}
15276
15277// ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
15278type ListP2SVpnGatewaysResultIterator struct {
15279	i    int
15280	page ListP2SVpnGatewaysResultPage
15281}
15282
15283// NextWithContext advances to the next value.  If there was an error making
15284// the request the iterator does not advance and the error is returned.
15285func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
15286	if tracing.IsEnabled() {
15287		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
15288		defer func() {
15289			sc := -1
15290			if iter.Response().Response.Response != nil {
15291				sc = iter.Response().Response.Response.StatusCode
15292			}
15293			tracing.EndSpan(ctx, sc, err)
15294		}()
15295	}
15296	iter.i++
15297	if iter.i < len(iter.page.Values()) {
15298		return nil
15299	}
15300	err = iter.page.NextWithContext(ctx)
15301	if err != nil {
15302		iter.i--
15303		return err
15304	}
15305	iter.i = 0
15306	return nil
15307}
15308
15309// Next advances to the next value.  If there was an error making
15310// the request the iterator does not advance and the error is returned.
15311// Deprecated: Use NextWithContext() instead.
15312func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
15313	return iter.NextWithContext(context.Background())
15314}
15315
15316// NotDone returns true if the enumeration should be started or is not yet complete.
15317func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
15318	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15319}
15320
15321// Response returns the raw server response from the last page request.
15322func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
15323	return iter.page.Response()
15324}
15325
15326// Value returns the current value or a zero-initialized value if the
15327// iterator has advanced beyond the end of the collection.
15328func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
15329	if !iter.page.NotDone() {
15330		return P2SVpnGateway{}
15331	}
15332	return iter.page.Values()[iter.i]
15333}
15334
15335// Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
15336func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
15337	return ListP2SVpnGatewaysResultIterator{page: page}
15338}
15339
15340// IsEmpty returns true if the ListResult contains no values.
15341func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
15342	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
15343}
15344
15345// listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
15346// It returns nil if no more results exist.
15347func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
15348	if lpvgr.NextLink == nil || len(to.String(lpvgr.NextLink)) < 1 {
15349		return nil, nil
15350	}
15351	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15352		autorest.AsJSON(),
15353		autorest.AsGet(),
15354		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
15355}
15356
15357// ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
15358type ListP2SVpnGatewaysResultPage struct {
15359	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
15360	lpvgr ListP2SVpnGatewaysResult
15361}
15362
15363// NextWithContext advances to the next page of values.  If there was an error making
15364// the request the page does not advance and the error is returned.
15365func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
15366	if tracing.IsEnabled() {
15367		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
15368		defer func() {
15369			sc := -1
15370			if page.Response().Response.Response != nil {
15371				sc = page.Response().Response.Response.StatusCode
15372			}
15373			tracing.EndSpan(ctx, sc, err)
15374		}()
15375	}
15376	next, err := page.fn(ctx, page.lpvgr)
15377	if err != nil {
15378		return err
15379	}
15380	page.lpvgr = next
15381	return nil
15382}
15383
15384// Next advances to the next page of values.  If there was an error making
15385// the request the page does not advance and the error is returned.
15386// Deprecated: Use NextWithContext() instead.
15387func (page *ListP2SVpnGatewaysResultPage) Next() error {
15388	return page.NextWithContext(context.Background())
15389}
15390
15391// NotDone returns true if the page enumeration should be started or is not yet complete.
15392func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
15393	return !page.lpvgr.IsEmpty()
15394}
15395
15396// Response returns the raw server response from the last page request.
15397func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
15398	return page.lpvgr
15399}
15400
15401// Values returns the slice of values for the current page or nil if there are no values.
15402func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
15403	if page.lpvgr.IsEmpty() {
15404		return nil
15405	}
15406	return *page.lpvgr.Value
15407}
15408
15409// Creates a new instance of the ListP2SVpnGatewaysResultPage type.
15410func NewListP2SVpnGatewaysResultPage(getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
15411	return ListP2SVpnGatewaysResultPage{fn: getNextPage}
15412}
15413
15414// ListP2SVpnServerConfigurationsResult result of the request to list all P2SVpnServerConfigurations
15415// associated to a VirtualWan. It contains a list of P2SVpnServerConfigurations and a URL nextLink to get
15416// the next set of results.
15417type ListP2SVpnServerConfigurationsResult struct {
15418	autorest.Response `json:"-"`
15419	// Value - List of P2SVpnServerConfigurations.
15420	Value *[]P2SVpnServerConfiguration `json:"value,omitempty"`
15421	// NextLink - URL to get the next set of operation list results if there are any.
15422	NextLink *string `json:"nextLink,omitempty"`
15423}
15424
15425// ListP2SVpnServerConfigurationsResultIterator provides access to a complete listing of
15426// P2SVpnServerConfiguration values.
15427type ListP2SVpnServerConfigurationsResultIterator struct {
15428	i    int
15429	page ListP2SVpnServerConfigurationsResultPage
15430}
15431
15432// NextWithContext advances to the next value.  If there was an error making
15433// the request the iterator does not advance and the error is returned.
15434func (iter *ListP2SVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
15435	if tracing.IsEnabled() {
15436		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultIterator.NextWithContext")
15437		defer func() {
15438			sc := -1
15439			if iter.Response().Response.Response != nil {
15440				sc = iter.Response().Response.Response.StatusCode
15441			}
15442			tracing.EndSpan(ctx, sc, err)
15443		}()
15444	}
15445	iter.i++
15446	if iter.i < len(iter.page.Values()) {
15447		return nil
15448	}
15449	err = iter.page.NextWithContext(ctx)
15450	if err != nil {
15451		iter.i--
15452		return err
15453	}
15454	iter.i = 0
15455	return nil
15456}
15457
15458// Next advances to the next value.  If there was an error making
15459// the request the iterator does not advance and the error is returned.
15460// Deprecated: Use NextWithContext() instead.
15461func (iter *ListP2SVpnServerConfigurationsResultIterator) Next() error {
15462	return iter.NextWithContext(context.Background())
15463}
15464
15465// NotDone returns true if the enumeration should be started or is not yet complete.
15466func (iter ListP2SVpnServerConfigurationsResultIterator) NotDone() bool {
15467	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15468}
15469
15470// Response returns the raw server response from the last page request.
15471func (iter ListP2SVpnServerConfigurationsResultIterator) Response() ListP2SVpnServerConfigurationsResult {
15472	return iter.page.Response()
15473}
15474
15475// Value returns the current value or a zero-initialized value if the
15476// iterator has advanced beyond the end of the collection.
15477func (iter ListP2SVpnServerConfigurationsResultIterator) Value() P2SVpnServerConfiguration {
15478	if !iter.page.NotDone() {
15479		return P2SVpnServerConfiguration{}
15480	}
15481	return iter.page.Values()[iter.i]
15482}
15483
15484// Creates a new instance of the ListP2SVpnServerConfigurationsResultIterator type.
15485func NewListP2SVpnServerConfigurationsResultIterator(page ListP2SVpnServerConfigurationsResultPage) ListP2SVpnServerConfigurationsResultIterator {
15486	return ListP2SVpnServerConfigurationsResultIterator{page: page}
15487}
15488
15489// IsEmpty returns true if the ListResult contains no values.
15490func (lpvscr ListP2SVpnServerConfigurationsResult) IsEmpty() bool {
15491	return lpvscr.Value == nil || len(*lpvscr.Value) == 0
15492}
15493
15494// listP2SVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
15495// It returns nil if no more results exist.
15496func (lpvscr ListP2SVpnServerConfigurationsResult) listP2SVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
15497	if lpvscr.NextLink == nil || len(to.String(lpvscr.NextLink)) < 1 {
15498		return nil, nil
15499	}
15500	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15501		autorest.AsJSON(),
15502		autorest.AsGet(),
15503		autorest.WithBaseURL(to.String(lpvscr.NextLink)))
15504}
15505
15506// ListP2SVpnServerConfigurationsResultPage contains a page of P2SVpnServerConfiguration values.
15507type ListP2SVpnServerConfigurationsResultPage struct {
15508	fn     func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)
15509	lpvscr ListP2SVpnServerConfigurationsResult
15510}
15511
15512// NextWithContext advances to the next page of values.  If there was an error making
15513// the request the page does not advance and the error is returned.
15514func (page *ListP2SVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
15515	if tracing.IsEnabled() {
15516		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultPage.NextWithContext")
15517		defer func() {
15518			sc := -1
15519			if page.Response().Response.Response != nil {
15520				sc = page.Response().Response.Response.StatusCode
15521			}
15522			tracing.EndSpan(ctx, sc, err)
15523		}()
15524	}
15525	next, err := page.fn(ctx, page.lpvscr)
15526	if err != nil {
15527		return err
15528	}
15529	page.lpvscr = next
15530	return nil
15531}
15532
15533// Next advances to the next page of values.  If there was an error making
15534// the request the page does not advance and the error is returned.
15535// Deprecated: Use NextWithContext() instead.
15536func (page *ListP2SVpnServerConfigurationsResultPage) Next() error {
15537	return page.NextWithContext(context.Background())
15538}
15539
15540// NotDone returns true if the page enumeration should be started or is not yet complete.
15541func (page ListP2SVpnServerConfigurationsResultPage) NotDone() bool {
15542	return !page.lpvscr.IsEmpty()
15543}
15544
15545// Response returns the raw server response from the last page request.
15546func (page ListP2SVpnServerConfigurationsResultPage) Response() ListP2SVpnServerConfigurationsResult {
15547	return page.lpvscr
15548}
15549
15550// Values returns the slice of values for the current page or nil if there are no values.
15551func (page ListP2SVpnServerConfigurationsResultPage) Values() []P2SVpnServerConfiguration {
15552	if page.lpvscr.IsEmpty() {
15553		return nil
15554	}
15555	return *page.lpvscr.Value
15556}
15557
15558// Creates a new instance of the ListP2SVpnServerConfigurationsResultPage type.
15559func NewListP2SVpnServerConfigurationsResultPage(getNextPage func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)) ListP2SVpnServerConfigurationsResultPage {
15560	return ListP2SVpnServerConfigurationsResultPage{fn: getNextPage}
15561}
15562
15563// ListString ...
15564type ListString struct {
15565	autorest.Response `json:"-"`
15566	Value             *[]string `json:"value,omitempty"`
15567}
15568
15569// ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
15570// URL nextLink to get the next set of results.
15571type ListVirtualHubsResult struct {
15572	autorest.Response `json:"-"`
15573	// Value - List of VirtualHubs.
15574	Value *[]VirtualHub `json:"value,omitempty"`
15575	// NextLink - URL to get the next set of operation list results if there are any.
15576	NextLink *string `json:"nextLink,omitempty"`
15577}
15578
15579// ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
15580type ListVirtualHubsResultIterator struct {
15581	i    int
15582	page ListVirtualHubsResultPage
15583}
15584
15585// NextWithContext advances to the next value.  If there was an error making
15586// the request the iterator does not advance and the error is returned.
15587func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
15588	if tracing.IsEnabled() {
15589		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
15590		defer func() {
15591			sc := -1
15592			if iter.Response().Response.Response != nil {
15593				sc = iter.Response().Response.Response.StatusCode
15594			}
15595			tracing.EndSpan(ctx, sc, err)
15596		}()
15597	}
15598	iter.i++
15599	if iter.i < len(iter.page.Values()) {
15600		return nil
15601	}
15602	err = iter.page.NextWithContext(ctx)
15603	if err != nil {
15604		iter.i--
15605		return err
15606	}
15607	iter.i = 0
15608	return nil
15609}
15610
15611// Next advances to the next value.  If there was an error making
15612// the request the iterator does not advance and the error is returned.
15613// Deprecated: Use NextWithContext() instead.
15614func (iter *ListVirtualHubsResultIterator) Next() error {
15615	return iter.NextWithContext(context.Background())
15616}
15617
15618// NotDone returns true if the enumeration should be started or is not yet complete.
15619func (iter ListVirtualHubsResultIterator) NotDone() bool {
15620	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15621}
15622
15623// Response returns the raw server response from the last page request.
15624func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
15625	return iter.page.Response()
15626}
15627
15628// Value returns the current value or a zero-initialized value if the
15629// iterator has advanced beyond the end of the collection.
15630func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
15631	if !iter.page.NotDone() {
15632		return VirtualHub{}
15633	}
15634	return iter.page.Values()[iter.i]
15635}
15636
15637// Creates a new instance of the ListVirtualHubsResultIterator type.
15638func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
15639	return ListVirtualHubsResultIterator{page: page}
15640}
15641
15642// IsEmpty returns true if the ListResult contains no values.
15643func (lvhr ListVirtualHubsResult) IsEmpty() bool {
15644	return lvhr.Value == nil || len(*lvhr.Value) == 0
15645}
15646
15647// listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
15648// It returns nil if no more results exist.
15649func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
15650	if lvhr.NextLink == nil || len(to.String(lvhr.NextLink)) < 1 {
15651		return nil, nil
15652	}
15653	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15654		autorest.AsJSON(),
15655		autorest.AsGet(),
15656		autorest.WithBaseURL(to.String(lvhr.NextLink)))
15657}
15658
15659// ListVirtualHubsResultPage contains a page of VirtualHub values.
15660type ListVirtualHubsResultPage struct {
15661	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
15662	lvhr ListVirtualHubsResult
15663}
15664
15665// NextWithContext advances to the next page of values.  If there was an error making
15666// the request the page does not advance and the error is returned.
15667func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
15668	if tracing.IsEnabled() {
15669		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
15670		defer func() {
15671			sc := -1
15672			if page.Response().Response.Response != nil {
15673				sc = page.Response().Response.Response.StatusCode
15674			}
15675			tracing.EndSpan(ctx, sc, err)
15676		}()
15677	}
15678	next, err := page.fn(ctx, page.lvhr)
15679	if err != nil {
15680		return err
15681	}
15682	page.lvhr = next
15683	return nil
15684}
15685
15686// Next advances to the next page of values.  If there was an error making
15687// the request the page does not advance and the error is returned.
15688// Deprecated: Use NextWithContext() instead.
15689func (page *ListVirtualHubsResultPage) Next() error {
15690	return page.NextWithContext(context.Background())
15691}
15692
15693// NotDone returns true if the page enumeration should be started or is not yet complete.
15694func (page ListVirtualHubsResultPage) NotDone() bool {
15695	return !page.lvhr.IsEmpty()
15696}
15697
15698// Response returns the raw server response from the last page request.
15699func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
15700	return page.lvhr
15701}
15702
15703// Values returns the slice of values for the current page or nil if there are no values.
15704func (page ListVirtualHubsResultPage) Values() []VirtualHub {
15705	if page.lvhr.IsEmpty() {
15706		return nil
15707	}
15708	return *page.lvhr.Value
15709}
15710
15711// Creates a new instance of the ListVirtualHubsResultPage type.
15712func NewListVirtualHubsResultPage(getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
15713	return ListVirtualHubsResultPage{fn: getNextPage}
15714}
15715
15716// ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
15717// URL nextLink to get the next set of results.
15718type ListVirtualWANsResult struct {
15719	autorest.Response `json:"-"`
15720	// Value - List of VirtualWANs.
15721	Value *[]VirtualWAN `json:"value,omitempty"`
15722	// NextLink - URL to get the next set of operation list results if there are any.
15723	NextLink *string `json:"nextLink,omitempty"`
15724}
15725
15726// ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
15727type ListVirtualWANsResultIterator struct {
15728	i    int
15729	page ListVirtualWANsResultPage
15730}
15731
15732// NextWithContext advances to the next value.  If there was an error making
15733// the request the iterator does not advance and the error is returned.
15734func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
15735	if tracing.IsEnabled() {
15736		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
15737		defer func() {
15738			sc := -1
15739			if iter.Response().Response.Response != nil {
15740				sc = iter.Response().Response.Response.StatusCode
15741			}
15742			tracing.EndSpan(ctx, sc, err)
15743		}()
15744	}
15745	iter.i++
15746	if iter.i < len(iter.page.Values()) {
15747		return nil
15748	}
15749	err = iter.page.NextWithContext(ctx)
15750	if err != nil {
15751		iter.i--
15752		return err
15753	}
15754	iter.i = 0
15755	return nil
15756}
15757
15758// Next advances to the next value.  If there was an error making
15759// the request the iterator does not advance and the error is returned.
15760// Deprecated: Use NextWithContext() instead.
15761func (iter *ListVirtualWANsResultIterator) Next() error {
15762	return iter.NextWithContext(context.Background())
15763}
15764
15765// NotDone returns true if the enumeration should be started or is not yet complete.
15766func (iter ListVirtualWANsResultIterator) NotDone() bool {
15767	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15768}
15769
15770// Response returns the raw server response from the last page request.
15771func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
15772	return iter.page.Response()
15773}
15774
15775// Value returns the current value or a zero-initialized value if the
15776// iterator has advanced beyond the end of the collection.
15777func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
15778	if !iter.page.NotDone() {
15779		return VirtualWAN{}
15780	}
15781	return iter.page.Values()[iter.i]
15782}
15783
15784// Creates a new instance of the ListVirtualWANsResultIterator type.
15785func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
15786	return ListVirtualWANsResultIterator{page: page}
15787}
15788
15789// IsEmpty returns true if the ListResult contains no values.
15790func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
15791	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
15792}
15793
15794// listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
15795// It returns nil if no more results exist.
15796func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
15797	if lvwnr.NextLink == nil || len(to.String(lvwnr.NextLink)) < 1 {
15798		return nil, nil
15799	}
15800	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15801		autorest.AsJSON(),
15802		autorest.AsGet(),
15803		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
15804}
15805
15806// ListVirtualWANsResultPage contains a page of VirtualWAN values.
15807type ListVirtualWANsResultPage struct {
15808	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
15809	lvwnr ListVirtualWANsResult
15810}
15811
15812// NextWithContext advances to the next page of values.  If there was an error making
15813// the request the page does not advance and the error is returned.
15814func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
15815	if tracing.IsEnabled() {
15816		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
15817		defer func() {
15818			sc := -1
15819			if page.Response().Response.Response != nil {
15820				sc = page.Response().Response.Response.StatusCode
15821			}
15822			tracing.EndSpan(ctx, sc, err)
15823		}()
15824	}
15825	next, err := page.fn(ctx, page.lvwnr)
15826	if err != nil {
15827		return err
15828	}
15829	page.lvwnr = next
15830	return nil
15831}
15832
15833// Next advances to the next page of values.  If there was an error making
15834// the request the page does not advance and the error is returned.
15835// Deprecated: Use NextWithContext() instead.
15836func (page *ListVirtualWANsResultPage) Next() error {
15837	return page.NextWithContext(context.Background())
15838}
15839
15840// NotDone returns true if the page enumeration should be started or is not yet complete.
15841func (page ListVirtualWANsResultPage) NotDone() bool {
15842	return !page.lvwnr.IsEmpty()
15843}
15844
15845// Response returns the raw server response from the last page request.
15846func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
15847	return page.lvwnr
15848}
15849
15850// Values returns the slice of values for the current page or nil if there are no values.
15851func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
15852	if page.lvwnr.IsEmpty() {
15853		return nil
15854	}
15855	return *page.lvwnr.Value
15856}
15857
15858// Creates a new instance of the ListVirtualWANsResultPage type.
15859func NewListVirtualWANsResultPage(getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
15860	return ListVirtualWANsResultPage{fn: getNextPage}
15861}
15862
15863// ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
15864// It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
15865type ListVpnConnectionsResult struct {
15866	autorest.Response `json:"-"`
15867	// Value - List of Vpn Connections.
15868	Value *[]VpnConnection `json:"value,omitempty"`
15869	// NextLink - URL to get the next set of operation list results if there are any.
15870	NextLink *string `json:"nextLink,omitempty"`
15871}
15872
15873// ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
15874type ListVpnConnectionsResultIterator struct {
15875	i    int
15876	page ListVpnConnectionsResultPage
15877}
15878
15879// NextWithContext advances to the next value.  If there was an error making
15880// the request the iterator does not advance and the error is returned.
15881func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
15882	if tracing.IsEnabled() {
15883		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
15884		defer func() {
15885			sc := -1
15886			if iter.Response().Response.Response != nil {
15887				sc = iter.Response().Response.Response.StatusCode
15888			}
15889			tracing.EndSpan(ctx, sc, err)
15890		}()
15891	}
15892	iter.i++
15893	if iter.i < len(iter.page.Values()) {
15894		return nil
15895	}
15896	err = iter.page.NextWithContext(ctx)
15897	if err != nil {
15898		iter.i--
15899		return err
15900	}
15901	iter.i = 0
15902	return nil
15903}
15904
15905// Next advances to the next value.  If there was an error making
15906// the request the iterator does not advance and the error is returned.
15907// Deprecated: Use NextWithContext() instead.
15908func (iter *ListVpnConnectionsResultIterator) Next() error {
15909	return iter.NextWithContext(context.Background())
15910}
15911
15912// NotDone returns true if the enumeration should be started or is not yet complete.
15913func (iter ListVpnConnectionsResultIterator) NotDone() bool {
15914	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15915}
15916
15917// Response returns the raw server response from the last page request.
15918func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
15919	return iter.page.Response()
15920}
15921
15922// Value returns the current value or a zero-initialized value if the
15923// iterator has advanced beyond the end of the collection.
15924func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
15925	if !iter.page.NotDone() {
15926		return VpnConnection{}
15927	}
15928	return iter.page.Values()[iter.i]
15929}
15930
15931// Creates a new instance of the ListVpnConnectionsResultIterator type.
15932func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
15933	return ListVpnConnectionsResultIterator{page: page}
15934}
15935
15936// IsEmpty returns true if the ListResult contains no values.
15937func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
15938	return lvcr.Value == nil || len(*lvcr.Value) == 0
15939}
15940
15941// listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
15942// It returns nil if no more results exist.
15943func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
15944	if lvcr.NextLink == nil || len(to.String(lvcr.NextLink)) < 1 {
15945		return nil, nil
15946	}
15947	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15948		autorest.AsJSON(),
15949		autorest.AsGet(),
15950		autorest.WithBaseURL(to.String(lvcr.NextLink)))
15951}
15952
15953// ListVpnConnectionsResultPage contains a page of VpnConnection values.
15954type ListVpnConnectionsResultPage struct {
15955	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
15956	lvcr ListVpnConnectionsResult
15957}
15958
15959// NextWithContext advances to the next page of values.  If there was an error making
15960// the request the page does not advance and the error is returned.
15961func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
15962	if tracing.IsEnabled() {
15963		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
15964		defer func() {
15965			sc := -1
15966			if page.Response().Response.Response != nil {
15967				sc = page.Response().Response.Response.StatusCode
15968			}
15969			tracing.EndSpan(ctx, sc, err)
15970		}()
15971	}
15972	next, err := page.fn(ctx, page.lvcr)
15973	if err != nil {
15974		return err
15975	}
15976	page.lvcr = next
15977	return nil
15978}
15979
15980// Next advances to the next page of values.  If there was an error making
15981// the request the page does not advance and the error is returned.
15982// Deprecated: Use NextWithContext() instead.
15983func (page *ListVpnConnectionsResultPage) Next() error {
15984	return page.NextWithContext(context.Background())
15985}
15986
15987// NotDone returns true if the page enumeration should be started or is not yet complete.
15988func (page ListVpnConnectionsResultPage) NotDone() bool {
15989	return !page.lvcr.IsEmpty()
15990}
15991
15992// Response returns the raw server response from the last page request.
15993func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
15994	return page.lvcr
15995}
15996
15997// Values returns the slice of values for the current page or nil if there are no values.
15998func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
15999	if page.lvcr.IsEmpty() {
16000		return nil
16001	}
16002	return *page.lvcr.Value
16003}
16004
16005// Creates a new instance of the ListVpnConnectionsResultPage type.
16006func NewListVpnConnectionsResultPage(getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
16007	return ListVpnConnectionsResultPage{fn: getNextPage}
16008}
16009
16010// ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
16011// URL nextLink to get the next set of results.
16012type ListVpnGatewaysResult struct {
16013	autorest.Response `json:"-"`
16014	// Value - List of VpnGateways.
16015	Value *[]VpnGateway `json:"value,omitempty"`
16016	// NextLink - URL to get the next set of operation list results if there are any.
16017	NextLink *string `json:"nextLink,omitempty"`
16018}
16019
16020// ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
16021type ListVpnGatewaysResultIterator struct {
16022	i    int
16023	page ListVpnGatewaysResultPage
16024}
16025
16026// NextWithContext advances to the next value.  If there was an error making
16027// the request the iterator does not advance and the error is returned.
16028func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
16029	if tracing.IsEnabled() {
16030		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
16031		defer func() {
16032			sc := -1
16033			if iter.Response().Response.Response != nil {
16034				sc = iter.Response().Response.Response.StatusCode
16035			}
16036			tracing.EndSpan(ctx, sc, err)
16037		}()
16038	}
16039	iter.i++
16040	if iter.i < len(iter.page.Values()) {
16041		return nil
16042	}
16043	err = iter.page.NextWithContext(ctx)
16044	if err != nil {
16045		iter.i--
16046		return err
16047	}
16048	iter.i = 0
16049	return nil
16050}
16051
16052// Next advances to the next value.  If there was an error making
16053// the request the iterator does not advance and the error is returned.
16054// Deprecated: Use NextWithContext() instead.
16055func (iter *ListVpnGatewaysResultIterator) Next() error {
16056	return iter.NextWithContext(context.Background())
16057}
16058
16059// NotDone returns true if the enumeration should be started or is not yet complete.
16060func (iter ListVpnGatewaysResultIterator) NotDone() bool {
16061	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16062}
16063
16064// Response returns the raw server response from the last page request.
16065func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
16066	return iter.page.Response()
16067}
16068
16069// Value returns the current value or a zero-initialized value if the
16070// iterator has advanced beyond the end of the collection.
16071func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
16072	if !iter.page.NotDone() {
16073		return VpnGateway{}
16074	}
16075	return iter.page.Values()[iter.i]
16076}
16077
16078// Creates a new instance of the ListVpnGatewaysResultIterator type.
16079func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
16080	return ListVpnGatewaysResultIterator{page: page}
16081}
16082
16083// IsEmpty returns true if the ListResult contains no values.
16084func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
16085	return lvgr.Value == nil || len(*lvgr.Value) == 0
16086}
16087
16088// listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
16089// It returns nil if no more results exist.
16090func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
16091	if lvgr.NextLink == nil || len(to.String(lvgr.NextLink)) < 1 {
16092		return nil, nil
16093	}
16094	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16095		autorest.AsJSON(),
16096		autorest.AsGet(),
16097		autorest.WithBaseURL(to.String(lvgr.NextLink)))
16098}
16099
16100// ListVpnGatewaysResultPage contains a page of VpnGateway values.
16101type ListVpnGatewaysResultPage struct {
16102	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
16103	lvgr ListVpnGatewaysResult
16104}
16105
16106// NextWithContext advances to the next page of values.  If there was an error making
16107// the request the page does not advance and the error is returned.
16108func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
16109	if tracing.IsEnabled() {
16110		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
16111		defer func() {
16112			sc := -1
16113			if page.Response().Response.Response != nil {
16114				sc = page.Response().Response.Response.StatusCode
16115			}
16116			tracing.EndSpan(ctx, sc, err)
16117		}()
16118	}
16119	next, err := page.fn(ctx, page.lvgr)
16120	if err != nil {
16121		return err
16122	}
16123	page.lvgr = next
16124	return nil
16125}
16126
16127// Next advances to the next page of values.  If there was an error making
16128// the request the page does not advance and the error is returned.
16129// Deprecated: Use NextWithContext() instead.
16130func (page *ListVpnGatewaysResultPage) Next() error {
16131	return page.NextWithContext(context.Background())
16132}
16133
16134// NotDone returns true if the page enumeration should be started or is not yet complete.
16135func (page ListVpnGatewaysResultPage) NotDone() bool {
16136	return !page.lvgr.IsEmpty()
16137}
16138
16139// Response returns the raw server response from the last page request.
16140func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
16141	return page.lvgr
16142}
16143
16144// Values returns the slice of values for the current page or nil if there are no values.
16145func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
16146	if page.lvgr.IsEmpty() {
16147		return nil
16148	}
16149	return *page.lvgr.Value
16150}
16151
16152// Creates a new instance of the ListVpnGatewaysResultPage type.
16153func NewListVpnGatewaysResultPage(getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
16154	return ListVpnGatewaysResultPage{fn: getNextPage}
16155}
16156
16157// ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
16158// nextLink to get the next set of results.
16159type ListVpnSitesResult struct {
16160	autorest.Response `json:"-"`
16161	// Value - List of VpnSites.
16162	Value *[]VpnSite `json:"value,omitempty"`
16163	// NextLink - URL to get the next set of operation list results if there are any.
16164	NextLink *string `json:"nextLink,omitempty"`
16165}
16166
16167// ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
16168type ListVpnSitesResultIterator struct {
16169	i    int
16170	page ListVpnSitesResultPage
16171}
16172
16173// NextWithContext advances to the next value.  If there was an error making
16174// the request the iterator does not advance and the error is returned.
16175func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
16176	if tracing.IsEnabled() {
16177		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
16178		defer func() {
16179			sc := -1
16180			if iter.Response().Response.Response != nil {
16181				sc = iter.Response().Response.Response.StatusCode
16182			}
16183			tracing.EndSpan(ctx, sc, err)
16184		}()
16185	}
16186	iter.i++
16187	if iter.i < len(iter.page.Values()) {
16188		return nil
16189	}
16190	err = iter.page.NextWithContext(ctx)
16191	if err != nil {
16192		iter.i--
16193		return err
16194	}
16195	iter.i = 0
16196	return nil
16197}
16198
16199// Next advances to the next value.  If there was an error making
16200// the request the iterator does not advance and the error is returned.
16201// Deprecated: Use NextWithContext() instead.
16202func (iter *ListVpnSitesResultIterator) Next() error {
16203	return iter.NextWithContext(context.Background())
16204}
16205
16206// NotDone returns true if the enumeration should be started or is not yet complete.
16207func (iter ListVpnSitesResultIterator) NotDone() bool {
16208	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16209}
16210
16211// Response returns the raw server response from the last page request.
16212func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
16213	return iter.page.Response()
16214}
16215
16216// Value returns the current value or a zero-initialized value if the
16217// iterator has advanced beyond the end of the collection.
16218func (iter ListVpnSitesResultIterator) Value() VpnSite {
16219	if !iter.page.NotDone() {
16220		return VpnSite{}
16221	}
16222	return iter.page.Values()[iter.i]
16223}
16224
16225// Creates a new instance of the ListVpnSitesResultIterator type.
16226func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
16227	return ListVpnSitesResultIterator{page: page}
16228}
16229
16230// IsEmpty returns true if the ListResult contains no values.
16231func (lvsr ListVpnSitesResult) IsEmpty() bool {
16232	return lvsr.Value == nil || len(*lvsr.Value) == 0
16233}
16234
16235// listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
16236// It returns nil if no more results exist.
16237func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
16238	if lvsr.NextLink == nil || len(to.String(lvsr.NextLink)) < 1 {
16239		return nil, nil
16240	}
16241	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16242		autorest.AsJSON(),
16243		autorest.AsGet(),
16244		autorest.WithBaseURL(to.String(lvsr.NextLink)))
16245}
16246
16247// ListVpnSitesResultPage contains a page of VpnSite values.
16248type ListVpnSitesResultPage struct {
16249	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
16250	lvsr ListVpnSitesResult
16251}
16252
16253// NextWithContext advances to the next page of values.  If there was an error making
16254// the request the page does not advance and the error is returned.
16255func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
16256	if tracing.IsEnabled() {
16257		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
16258		defer func() {
16259			sc := -1
16260			if page.Response().Response.Response != nil {
16261				sc = page.Response().Response.Response.StatusCode
16262			}
16263			tracing.EndSpan(ctx, sc, err)
16264		}()
16265	}
16266	next, err := page.fn(ctx, page.lvsr)
16267	if err != nil {
16268		return err
16269	}
16270	page.lvsr = next
16271	return nil
16272}
16273
16274// Next advances to the next page of values.  If there was an error making
16275// the request the page does not advance and the error is returned.
16276// Deprecated: Use NextWithContext() instead.
16277func (page *ListVpnSitesResultPage) Next() error {
16278	return page.NextWithContext(context.Background())
16279}
16280
16281// NotDone returns true if the page enumeration should be started or is not yet complete.
16282func (page ListVpnSitesResultPage) NotDone() bool {
16283	return !page.lvsr.IsEmpty()
16284}
16285
16286// Response returns the raw server response from the last page request.
16287func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
16288	return page.lvsr
16289}
16290
16291// Values returns the slice of values for the current page or nil if there are no values.
16292func (page ListVpnSitesResultPage) Values() []VpnSite {
16293	if page.lvsr.IsEmpty() {
16294		return nil
16295	}
16296	return *page.lvsr.Value
16297}
16298
16299// Creates a new instance of the ListVpnSitesResultPage type.
16300func NewListVpnSitesResultPage(getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
16301	return ListVpnSitesResultPage{fn: getNextPage}
16302}
16303
16304// LoadBalancer loadBalancer resource
16305type LoadBalancer struct {
16306	autorest.Response `json:"-"`
16307	// Sku - The load balancer SKU.
16308	Sku *LoadBalancerSku `json:"sku,omitempty"`
16309	// LoadBalancerPropertiesFormat - Properties of load balancer.
16310	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
16311	// Etag - A unique read-only string that changes whenever the resource is updated.
16312	Etag *string `json:"etag,omitempty"`
16313	// ID - Resource ID.
16314	ID *string `json:"id,omitempty"`
16315	// Name - READ-ONLY; Resource name.
16316	Name *string `json:"name,omitempty"`
16317	// Type - READ-ONLY; Resource type.
16318	Type *string `json:"type,omitempty"`
16319	// Location - Resource location.
16320	Location *string `json:"location,omitempty"`
16321	// Tags - Resource tags.
16322	Tags map[string]*string `json:"tags"`
16323}
16324
16325// MarshalJSON is the custom marshaler for LoadBalancer.
16326func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
16327	objectMap := make(map[string]interface{})
16328	if lb.Sku != nil {
16329		objectMap["sku"] = lb.Sku
16330	}
16331	if lb.LoadBalancerPropertiesFormat != nil {
16332		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
16333	}
16334	if lb.Etag != nil {
16335		objectMap["etag"] = lb.Etag
16336	}
16337	if lb.ID != nil {
16338		objectMap["id"] = lb.ID
16339	}
16340	if lb.Location != nil {
16341		objectMap["location"] = lb.Location
16342	}
16343	if lb.Tags != nil {
16344		objectMap["tags"] = lb.Tags
16345	}
16346	return json.Marshal(objectMap)
16347}
16348
16349// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
16350func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
16351	var m map[string]*json.RawMessage
16352	err := json.Unmarshal(body, &m)
16353	if err != nil {
16354		return err
16355	}
16356	for k, v := range m {
16357		switch k {
16358		case "sku":
16359			if v != nil {
16360				var sku LoadBalancerSku
16361				err = json.Unmarshal(*v, &sku)
16362				if err != nil {
16363					return err
16364				}
16365				lb.Sku = &sku
16366			}
16367		case "properties":
16368			if v != nil {
16369				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
16370				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
16371				if err != nil {
16372					return err
16373				}
16374				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
16375			}
16376		case "etag":
16377			if v != nil {
16378				var etag string
16379				err = json.Unmarshal(*v, &etag)
16380				if err != nil {
16381					return err
16382				}
16383				lb.Etag = &etag
16384			}
16385		case "id":
16386			if v != nil {
16387				var ID string
16388				err = json.Unmarshal(*v, &ID)
16389				if err != nil {
16390					return err
16391				}
16392				lb.ID = &ID
16393			}
16394		case "name":
16395			if v != nil {
16396				var name string
16397				err = json.Unmarshal(*v, &name)
16398				if err != nil {
16399					return err
16400				}
16401				lb.Name = &name
16402			}
16403		case "type":
16404			if v != nil {
16405				var typeVar string
16406				err = json.Unmarshal(*v, &typeVar)
16407				if err != nil {
16408					return err
16409				}
16410				lb.Type = &typeVar
16411			}
16412		case "location":
16413			if v != nil {
16414				var location string
16415				err = json.Unmarshal(*v, &location)
16416				if err != nil {
16417					return err
16418				}
16419				lb.Location = &location
16420			}
16421		case "tags":
16422			if v != nil {
16423				var tags map[string]*string
16424				err = json.Unmarshal(*v, &tags)
16425				if err != nil {
16426					return err
16427				}
16428				lb.Tags = tags
16429			}
16430		}
16431	}
16432
16433	return nil
16434}
16435
16436// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
16437type LoadBalancerBackendAddressPoolListResult struct {
16438	autorest.Response `json:"-"`
16439	// Value - A list of backend address pools in a load balancer.
16440	Value *[]BackendAddressPool `json:"value,omitempty"`
16441	// NextLink - READ-ONLY; The URL to get the next set of results.
16442	NextLink *string `json:"nextLink,omitempty"`
16443}
16444
16445// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
16446// BackendAddressPool values.
16447type LoadBalancerBackendAddressPoolListResultIterator struct {
16448	i    int
16449	page LoadBalancerBackendAddressPoolListResultPage
16450}
16451
16452// NextWithContext advances to the next value.  If there was an error making
16453// the request the iterator does not advance and the error is returned.
16454func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
16455	if tracing.IsEnabled() {
16456		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
16457		defer func() {
16458			sc := -1
16459			if iter.Response().Response.Response != nil {
16460				sc = iter.Response().Response.Response.StatusCode
16461			}
16462			tracing.EndSpan(ctx, sc, err)
16463		}()
16464	}
16465	iter.i++
16466	if iter.i < len(iter.page.Values()) {
16467		return nil
16468	}
16469	err = iter.page.NextWithContext(ctx)
16470	if err != nil {
16471		iter.i--
16472		return err
16473	}
16474	iter.i = 0
16475	return nil
16476}
16477
16478// Next advances to the next value.  If there was an error making
16479// the request the iterator does not advance and the error is returned.
16480// Deprecated: Use NextWithContext() instead.
16481func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
16482	return iter.NextWithContext(context.Background())
16483}
16484
16485// NotDone returns true if the enumeration should be started or is not yet complete.
16486func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
16487	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16488}
16489
16490// Response returns the raw server response from the last page request.
16491func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
16492	return iter.page.Response()
16493}
16494
16495// Value returns the current value or a zero-initialized value if the
16496// iterator has advanced beyond the end of the collection.
16497func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
16498	if !iter.page.NotDone() {
16499		return BackendAddressPool{}
16500	}
16501	return iter.page.Values()[iter.i]
16502}
16503
16504// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
16505func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
16506	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
16507}
16508
16509// IsEmpty returns true if the ListResult contains no values.
16510func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
16511	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
16512}
16513
16514// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
16515// It returns nil if no more results exist.
16516func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
16517	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
16518		return nil, nil
16519	}
16520	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16521		autorest.AsJSON(),
16522		autorest.AsGet(),
16523		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
16524}
16525
16526// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
16527type LoadBalancerBackendAddressPoolListResultPage struct {
16528	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
16529	lbbaplr LoadBalancerBackendAddressPoolListResult
16530}
16531
16532// NextWithContext advances to the next page of values.  If there was an error making
16533// the request the page does not advance and the error is returned.
16534func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
16535	if tracing.IsEnabled() {
16536		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
16537		defer func() {
16538			sc := -1
16539			if page.Response().Response.Response != nil {
16540				sc = page.Response().Response.Response.StatusCode
16541			}
16542			tracing.EndSpan(ctx, sc, err)
16543		}()
16544	}
16545	next, err := page.fn(ctx, page.lbbaplr)
16546	if err != nil {
16547		return err
16548	}
16549	page.lbbaplr = next
16550	return nil
16551}
16552
16553// Next advances to the next page of values.  If there was an error making
16554// the request the page does not advance and the error is returned.
16555// Deprecated: Use NextWithContext() instead.
16556func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
16557	return page.NextWithContext(context.Background())
16558}
16559
16560// NotDone returns true if the page enumeration should be started or is not yet complete.
16561func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
16562	return !page.lbbaplr.IsEmpty()
16563}
16564
16565// Response returns the raw server response from the last page request.
16566func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
16567	return page.lbbaplr
16568}
16569
16570// Values returns the slice of values for the current page or nil if there are no values.
16571func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
16572	if page.lbbaplr.IsEmpty() {
16573		return nil
16574	}
16575	return *page.lbbaplr.Value
16576}
16577
16578// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
16579func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
16580	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
16581}
16582
16583// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
16584type LoadBalancerFrontendIPConfigurationListResult struct {
16585	autorest.Response `json:"-"`
16586	// Value - A list of frontend IP configurations in a load balancer.
16587	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
16588	// NextLink - READ-ONLY; The URL to get the next set of results.
16589	NextLink *string `json:"nextLink,omitempty"`
16590}
16591
16592// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
16593// FrontendIPConfiguration values.
16594type LoadBalancerFrontendIPConfigurationListResultIterator struct {
16595	i    int
16596	page LoadBalancerFrontendIPConfigurationListResultPage
16597}
16598
16599// NextWithContext advances to the next value.  If there was an error making
16600// the request the iterator does not advance and the error is returned.
16601func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
16602	if tracing.IsEnabled() {
16603		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
16604		defer func() {
16605			sc := -1
16606			if iter.Response().Response.Response != nil {
16607				sc = iter.Response().Response.Response.StatusCode
16608			}
16609			tracing.EndSpan(ctx, sc, err)
16610		}()
16611	}
16612	iter.i++
16613	if iter.i < len(iter.page.Values()) {
16614		return nil
16615	}
16616	err = iter.page.NextWithContext(ctx)
16617	if err != nil {
16618		iter.i--
16619		return err
16620	}
16621	iter.i = 0
16622	return nil
16623}
16624
16625// Next advances to the next value.  If there was an error making
16626// the request the iterator does not advance and the error is returned.
16627// Deprecated: Use NextWithContext() instead.
16628func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
16629	return iter.NextWithContext(context.Background())
16630}
16631
16632// NotDone returns true if the enumeration should be started or is not yet complete.
16633func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
16634	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16635}
16636
16637// Response returns the raw server response from the last page request.
16638func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
16639	return iter.page.Response()
16640}
16641
16642// Value returns the current value or a zero-initialized value if the
16643// iterator has advanced beyond the end of the collection.
16644func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
16645	if !iter.page.NotDone() {
16646		return FrontendIPConfiguration{}
16647	}
16648	return iter.page.Values()[iter.i]
16649}
16650
16651// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
16652func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
16653	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
16654}
16655
16656// IsEmpty returns true if the ListResult contains no values.
16657func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
16658	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
16659}
16660
16661// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
16662// It returns nil if no more results exist.
16663func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
16664	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
16665		return nil, nil
16666	}
16667	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16668		autorest.AsJSON(),
16669		autorest.AsGet(),
16670		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
16671}
16672
16673// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
16674type LoadBalancerFrontendIPConfigurationListResultPage struct {
16675	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
16676	lbficlr LoadBalancerFrontendIPConfigurationListResult
16677}
16678
16679// NextWithContext advances to the next page of values.  If there was an error making
16680// the request the page does not advance and the error is returned.
16681func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
16682	if tracing.IsEnabled() {
16683		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
16684		defer func() {
16685			sc := -1
16686			if page.Response().Response.Response != nil {
16687				sc = page.Response().Response.Response.StatusCode
16688			}
16689			tracing.EndSpan(ctx, sc, err)
16690		}()
16691	}
16692	next, err := page.fn(ctx, page.lbficlr)
16693	if err != nil {
16694		return err
16695	}
16696	page.lbficlr = next
16697	return nil
16698}
16699
16700// Next advances to the next page of values.  If there was an error making
16701// the request the page does not advance and the error is returned.
16702// Deprecated: Use NextWithContext() instead.
16703func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
16704	return page.NextWithContext(context.Background())
16705}
16706
16707// NotDone returns true if the page enumeration should be started or is not yet complete.
16708func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
16709	return !page.lbficlr.IsEmpty()
16710}
16711
16712// Response returns the raw server response from the last page request.
16713func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
16714	return page.lbficlr
16715}
16716
16717// Values returns the slice of values for the current page or nil if there are no values.
16718func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
16719	if page.lbficlr.IsEmpty() {
16720		return nil
16721	}
16722	return *page.lbficlr.Value
16723}
16724
16725// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
16726func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
16727	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
16728}
16729
16730// LoadBalancerListResult response for ListLoadBalancers API service call.
16731type LoadBalancerListResult struct {
16732	autorest.Response `json:"-"`
16733	// Value - A list of load balancers in a resource group.
16734	Value *[]LoadBalancer `json:"value,omitempty"`
16735	// NextLink - READ-ONLY; The URL to get the next set of results.
16736	NextLink *string `json:"nextLink,omitempty"`
16737}
16738
16739// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
16740type LoadBalancerListResultIterator struct {
16741	i    int
16742	page LoadBalancerListResultPage
16743}
16744
16745// NextWithContext advances to the next value.  If there was an error making
16746// the request the iterator does not advance and the error is returned.
16747func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
16748	if tracing.IsEnabled() {
16749		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
16750		defer func() {
16751			sc := -1
16752			if iter.Response().Response.Response != nil {
16753				sc = iter.Response().Response.Response.StatusCode
16754			}
16755			tracing.EndSpan(ctx, sc, err)
16756		}()
16757	}
16758	iter.i++
16759	if iter.i < len(iter.page.Values()) {
16760		return nil
16761	}
16762	err = iter.page.NextWithContext(ctx)
16763	if err != nil {
16764		iter.i--
16765		return err
16766	}
16767	iter.i = 0
16768	return nil
16769}
16770
16771// Next advances to the next value.  If there was an error making
16772// the request the iterator does not advance and the error is returned.
16773// Deprecated: Use NextWithContext() instead.
16774func (iter *LoadBalancerListResultIterator) Next() error {
16775	return iter.NextWithContext(context.Background())
16776}
16777
16778// NotDone returns true if the enumeration should be started or is not yet complete.
16779func (iter LoadBalancerListResultIterator) NotDone() bool {
16780	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16781}
16782
16783// Response returns the raw server response from the last page request.
16784func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
16785	return iter.page.Response()
16786}
16787
16788// Value returns the current value or a zero-initialized value if the
16789// iterator has advanced beyond the end of the collection.
16790func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
16791	if !iter.page.NotDone() {
16792		return LoadBalancer{}
16793	}
16794	return iter.page.Values()[iter.i]
16795}
16796
16797// Creates a new instance of the LoadBalancerListResultIterator type.
16798func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
16799	return LoadBalancerListResultIterator{page: page}
16800}
16801
16802// IsEmpty returns true if the ListResult contains no values.
16803func (lblr LoadBalancerListResult) IsEmpty() bool {
16804	return lblr.Value == nil || len(*lblr.Value) == 0
16805}
16806
16807// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
16808// It returns nil if no more results exist.
16809func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
16810	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
16811		return nil, nil
16812	}
16813	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16814		autorest.AsJSON(),
16815		autorest.AsGet(),
16816		autorest.WithBaseURL(to.String(lblr.NextLink)))
16817}
16818
16819// LoadBalancerListResultPage contains a page of LoadBalancer values.
16820type LoadBalancerListResultPage struct {
16821	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
16822	lblr LoadBalancerListResult
16823}
16824
16825// NextWithContext advances to the next page of values.  If there was an error making
16826// the request the page does not advance and the error is returned.
16827func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
16828	if tracing.IsEnabled() {
16829		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
16830		defer func() {
16831			sc := -1
16832			if page.Response().Response.Response != nil {
16833				sc = page.Response().Response.Response.StatusCode
16834			}
16835			tracing.EndSpan(ctx, sc, err)
16836		}()
16837	}
16838	next, err := page.fn(ctx, page.lblr)
16839	if err != nil {
16840		return err
16841	}
16842	page.lblr = next
16843	return nil
16844}
16845
16846// Next advances to the next page of values.  If there was an error making
16847// the request the page does not advance and the error is returned.
16848// Deprecated: Use NextWithContext() instead.
16849func (page *LoadBalancerListResultPage) Next() error {
16850	return page.NextWithContext(context.Background())
16851}
16852
16853// NotDone returns true if the page enumeration should be started or is not yet complete.
16854func (page LoadBalancerListResultPage) NotDone() bool {
16855	return !page.lblr.IsEmpty()
16856}
16857
16858// Response returns the raw server response from the last page request.
16859func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
16860	return page.lblr
16861}
16862
16863// Values returns the slice of values for the current page or nil if there are no values.
16864func (page LoadBalancerListResultPage) Values() []LoadBalancer {
16865	if page.lblr.IsEmpty() {
16866		return nil
16867	}
16868	return *page.lblr.Value
16869}
16870
16871// Creates a new instance of the LoadBalancerListResultPage type.
16872func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
16873	return LoadBalancerListResultPage{fn: getNextPage}
16874}
16875
16876// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
16877type LoadBalancerLoadBalancingRuleListResult struct {
16878	autorest.Response `json:"-"`
16879	// Value - A list of load balancing rules in a load balancer.
16880	Value *[]LoadBalancingRule `json:"value,omitempty"`
16881	// NextLink - READ-ONLY; The URL to get the next set of results.
16882	NextLink *string `json:"nextLink,omitempty"`
16883}
16884
16885// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
16886// LoadBalancingRule values.
16887type LoadBalancerLoadBalancingRuleListResultIterator struct {
16888	i    int
16889	page LoadBalancerLoadBalancingRuleListResultPage
16890}
16891
16892// NextWithContext advances to the next value.  If there was an error making
16893// the request the iterator does not advance and the error is returned.
16894func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
16895	if tracing.IsEnabled() {
16896		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
16897		defer func() {
16898			sc := -1
16899			if iter.Response().Response.Response != nil {
16900				sc = iter.Response().Response.Response.StatusCode
16901			}
16902			tracing.EndSpan(ctx, sc, err)
16903		}()
16904	}
16905	iter.i++
16906	if iter.i < len(iter.page.Values()) {
16907		return nil
16908	}
16909	err = iter.page.NextWithContext(ctx)
16910	if err != nil {
16911		iter.i--
16912		return err
16913	}
16914	iter.i = 0
16915	return nil
16916}
16917
16918// Next advances to the next value.  If there was an error making
16919// the request the iterator does not advance and the error is returned.
16920// Deprecated: Use NextWithContext() instead.
16921func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
16922	return iter.NextWithContext(context.Background())
16923}
16924
16925// NotDone returns true if the enumeration should be started or is not yet complete.
16926func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
16927	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16928}
16929
16930// Response returns the raw server response from the last page request.
16931func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
16932	return iter.page.Response()
16933}
16934
16935// Value returns the current value or a zero-initialized value if the
16936// iterator has advanced beyond the end of the collection.
16937func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
16938	if !iter.page.NotDone() {
16939		return LoadBalancingRule{}
16940	}
16941	return iter.page.Values()[iter.i]
16942}
16943
16944// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
16945func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
16946	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
16947}
16948
16949// IsEmpty returns true if the ListResult contains no values.
16950func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
16951	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
16952}
16953
16954// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
16955// It returns nil if no more results exist.
16956func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
16957	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
16958		return nil, nil
16959	}
16960	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16961		autorest.AsJSON(),
16962		autorest.AsGet(),
16963		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
16964}
16965
16966// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
16967type LoadBalancerLoadBalancingRuleListResultPage struct {
16968	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
16969	lblbrlr LoadBalancerLoadBalancingRuleListResult
16970}
16971
16972// NextWithContext advances to the next page of values.  If there was an error making
16973// the request the page does not advance and the error is returned.
16974func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
16975	if tracing.IsEnabled() {
16976		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
16977		defer func() {
16978			sc := -1
16979			if page.Response().Response.Response != nil {
16980				sc = page.Response().Response.Response.StatusCode
16981			}
16982			tracing.EndSpan(ctx, sc, err)
16983		}()
16984	}
16985	next, err := page.fn(ctx, page.lblbrlr)
16986	if err != nil {
16987		return err
16988	}
16989	page.lblbrlr = next
16990	return nil
16991}
16992
16993// Next advances to the next page of values.  If there was an error making
16994// the request the page does not advance and the error is returned.
16995// Deprecated: Use NextWithContext() instead.
16996func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
16997	return page.NextWithContext(context.Background())
16998}
16999
17000// NotDone returns true if the page enumeration should be started or is not yet complete.
17001func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
17002	return !page.lblbrlr.IsEmpty()
17003}
17004
17005// Response returns the raw server response from the last page request.
17006func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
17007	return page.lblbrlr
17008}
17009
17010// Values returns the slice of values for the current page or nil if there are no values.
17011func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
17012	if page.lblbrlr.IsEmpty() {
17013		return nil
17014	}
17015	return *page.lblbrlr.Value
17016}
17017
17018// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
17019func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
17020	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
17021}
17022
17023// LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
17024type LoadBalancerOutboundRuleListResult struct {
17025	autorest.Response `json:"-"`
17026	// Value - A list of outbound rules in a load balancer.
17027	Value *[]OutboundRule `json:"value,omitempty"`
17028	// NextLink - READ-ONLY; The URL to get the next set of results.
17029	NextLink *string `json:"nextLink,omitempty"`
17030}
17031
17032// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
17033type LoadBalancerOutboundRuleListResultIterator struct {
17034	i    int
17035	page LoadBalancerOutboundRuleListResultPage
17036}
17037
17038// NextWithContext advances to the next value.  If there was an error making
17039// the request the iterator does not advance and the error is returned.
17040func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
17041	if tracing.IsEnabled() {
17042		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
17043		defer func() {
17044			sc := -1
17045			if iter.Response().Response.Response != nil {
17046				sc = iter.Response().Response.Response.StatusCode
17047			}
17048			tracing.EndSpan(ctx, sc, err)
17049		}()
17050	}
17051	iter.i++
17052	if iter.i < len(iter.page.Values()) {
17053		return nil
17054	}
17055	err = iter.page.NextWithContext(ctx)
17056	if err != nil {
17057		iter.i--
17058		return err
17059	}
17060	iter.i = 0
17061	return nil
17062}
17063
17064// Next advances to the next value.  If there was an error making
17065// the request the iterator does not advance and the error is returned.
17066// Deprecated: Use NextWithContext() instead.
17067func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
17068	return iter.NextWithContext(context.Background())
17069}
17070
17071// NotDone returns true if the enumeration should be started or is not yet complete.
17072func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
17073	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17074}
17075
17076// Response returns the raw server response from the last page request.
17077func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
17078	return iter.page.Response()
17079}
17080
17081// Value returns the current value or a zero-initialized value if the
17082// iterator has advanced beyond the end of the collection.
17083func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
17084	if !iter.page.NotDone() {
17085		return OutboundRule{}
17086	}
17087	return iter.page.Values()[iter.i]
17088}
17089
17090// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
17091func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
17092	return LoadBalancerOutboundRuleListResultIterator{page: page}
17093}
17094
17095// IsEmpty returns true if the ListResult contains no values.
17096func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
17097	return lborlr.Value == nil || len(*lborlr.Value) == 0
17098}
17099
17100// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
17101// It returns nil if no more results exist.
17102func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
17103	if lborlr.NextLink == nil || len(to.String(lborlr.NextLink)) < 1 {
17104		return nil, nil
17105	}
17106	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17107		autorest.AsJSON(),
17108		autorest.AsGet(),
17109		autorest.WithBaseURL(to.String(lborlr.NextLink)))
17110}
17111
17112// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
17113type LoadBalancerOutboundRuleListResultPage struct {
17114	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
17115	lborlr LoadBalancerOutboundRuleListResult
17116}
17117
17118// NextWithContext advances to the next page of values.  If there was an error making
17119// the request the page does not advance and the error is returned.
17120func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
17121	if tracing.IsEnabled() {
17122		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
17123		defer func() {
17124			sc := -1
17125			if page.Response().Response.Response != nil {
17126				sc = page.Response().Response.Response.StatusCode
17127			}
17128			tracing.EndSpan(ctx, sc, err)
17129		}()
17130	}
17131	next, err := page.fn(ctx, page.lborlr)
17132	if err != nil {
17133		return err
17134	}
17135	page.lborlr = next
17136	return nil
17137}
17138
17139// Next advances to the next page of values.  If there was an error making
17140// the request the page does not advance and the error is returned.
17141// Deprecated: Use NextWithContext() instead.
17142func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
17143	return page.NextWithContext(context.Background())
17144}
17145
17146// NotDone returns true if the page enumeration should be started or is not yet complete.
17147func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
17148	return !page.lborlr.IsEmpty()
17149}
17150
17151// Response returns the raw server response from the last page request.
17152func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
17153	return page.lborlr
17154}
17155
17156// Values returns the slice of values for the current page or nil if there are no values.
17157func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
17158	if page.lborlr.IsEmpty() {
17159		return nil
17160	}
17161	return *page.lborlr.Value
17162}
17163
17164// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
17165func NewLoadBalancerOutboundRuleListResultPage(getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
17166	return LoadBalancerOutboundRuleListResultPage{fn: getNextPage}
17167}
17168
17169// LoadBalancerProbeListResult response for ListProbe API service call.
17170type LoadBalancerProbeListResult struct {
17171	autorest.Response `json:"-"`
17172	// Value - A list of probes in a load balancer.
17173	Value *[]Probe `json:"value,omitempty"`
17174	// NextLink - READ-ONLY; The URL to get the next set of results.
17175	NextLink *string `json:"nextLink,omitempty"`
17176}
17177
17178// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
17179type LoadBalancerProbeListResultIterator struct {
17180	i    int
17181	page LoadBalancerProbeListResultPage
17182}
17183
17184// NextWithContext advances to the next value.  If there was an error making
17185// the request the iterator does not advance and the error is returned.
17186func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
17187	if tracing.IsEnabled() {
17188		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
17189		defer func() {
17190			sc := -1
17191			if iter.Response().Response.Response != nil {
17192				sc = iter.Response().Response.Response.StatusCode
17193			}
17194			tracing.EndSpan(ctx, sc, err)
17195		}()
17196	}
17197	iter.i++
17198	if iter.i < len(iter.page.Values()) {
17199		return nil
17200	}
17201	err = iter.page.NextWithContext(ctx)
17202	if err != nil {
17203		iter.i--
17204		return err
17205	}
17206	iter.i = 0
17207	return nil
17208}
17209
17210// Next advances to the next value.  If there was an error making
17211// the request the iterator does not advance and the error is returned.
17212// Deprecated: Use NextWithContext() instead.
17213func (iter *LoadBalancerProbeListResultIterator) Next() error {
17214	return iter.NextWithContext(context.Background())
17215}
17216
17217// NotDone returns true if the enumeration should be started or is not yet complete.
17218func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
17219	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17220}
17221
17222// Response returns the raw server response from the last page request.
17223func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
17224	return iter.page.Response()
17225}
17226
17227// Value returns the current value or a zero-initialized value if the
17228// iterator has advanced beyond the end of the collection.
17229func (iter LoadBalancerProbeListResultIterator) Value() Probe {
17230	if !iter.page.NotDone() {
17231		return Probe{}
17232	}
17233	return iter.page.Values()[iter.i]
17234}
17235
17236// Creates a new instance of the LoadBalancerProbeListResultIterator type.
17237func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
17238	return LoadBalancerProbeListResultIterator{page: page}
17239}
17240
17241// IsEmpty returns true if the ListResult contains no values.
17242func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
17243	return lbplr.Value == nil || len(*lbplr.Value) == 0
17244}
17245
17246// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
17247// It returns nil if no more results exist.
17248func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
17249	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
17250		return nil, nil
17251	}
17252	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17253		autorest.AsJSON(),
17254		autorest.AsGet(),
17255		autorest.WithBaseURL(to.String(lbplr.NextLink)))
17256}
17257
17258// LoadBalancerProbeListResultPage contains a page of Probe values.
17259type LoadBalancerProbeListResultPage struct {
17260	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
17261	lbplr LoadBalancerProbeListResult
17262}
17263
17264// NextWithContext advances to the next page of values.  If there was an error making
17265// the request the page does not advance and the error is returned.
17266func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
17267	if tracing.IsEnabled() {
17268		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
17269		defer func() {
17270			sc := -1
17271			if page.Response().Response.Response != nil {
17272				sc = page.Response().Response.Response.StatusCode
17273			}
17274			tracing.EndSpan(ctx, sc, err)
17275		}()
17276	}
17277	next, err := page.fn(ctx, page.lbplr)
17278	if err != nil {
17279		return err
17280	}
17281	page.lbplr = next
17282	return nil
17283}
17284
17285// Next advances to the next page of values.  If there was an error making
17286// the request the page does not advance and the error is returned.
17287// Deprecated: Use NextWithContext() instead.
17288func (page *LoadBalancerProbeListResultPage) Next() error {
17289	return page.NextWithContext(context.Background())
17290}
17291
17292// NotDone returns true if the page enumeration should be started or is not yet complete.
17293func (page LoadBalancerProbeListResultPage) NotDone() bool {
17294	return !page.lbplr.IsEmpty()
17295}
17296
17297// Response returns the raw server response from the last page request.
17298func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
17299	return page.lbplr
17300}
17301
17302// Values returns the slice of values for the current page or nil if there are no values.
17303func (page LoadBalancerProbeListResultPage) Values() []Probe {
17304	if page.lbplr.IsEmpty() {
17305		return nil
17306	}
17307	return *page.lbplr.Value
17308}
17309
17310// Creates a new instance of the LoadBalancerProbeListResultPage type.
17311func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
17312	return LoadBalancerProbeListResultPage{fn: getNextPage}
17313}
17314
17315// LoadBalancerPropertiesFormat properties of the load balancer.
17316type LoadBalancerPropertiesFormat struct {
17317	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer
17318	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
17319	// BackendAddressPools - Collection of backend address pools used by a load balancer
17320	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
17321	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning
17322	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
17323	// Probes - Collection of probe objects used in the load balancer
17324	Probes *[]Probe `json:"probes,omitempty"`
17325	// 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.
17326	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
17327	// 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.
17328	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
17329	// OutboundRules - The outbound rules.
17330	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
17331	// ResourceGUID - The resource GUID property of the load balancer resource.
17332	ResourceGUID *string `json:"resourceGuid,omitempty"`
17333	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17334	ProvisioningState *string `json:"provisioningState,omitempty"`
17335}
17336
17337// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17338// long-running operation.
17339type LoadBalancersCreateOrUpdateFuture struct {
17340	azure.Future
17341}
17342
17343// Result returns the result of the asynchronous operation.
17344// If the operation has not completed it will return an error.
17345func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
17346	var done bool
17347	done, err = future.DoneWithContext(context.Background(), client)
17348	if err != nil {
17349		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17350		return
17351	}
17352	if !done {
17353		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
17354		return
17355	}
17356	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17357	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
17358		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
17359		if err != nil {
17360			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
17361		}
17362	}
17363	return
17364}
17365
17366// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
17367// operation.
17368type LoadBalancersDeleteFuture struct {
17369	azure.Future
17370}
17371
17372// Result returns the result of the asynchronous operation.
17373// If the operation has not completed it will return an error.
17374func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
17375	var done bool
17376	done, err = future.DoneWithContext(context.Background(), client)
17377	if err != nil {
17378		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
17379		return
17380	}
17381	if !done {
17382		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
17383		return
17384	}
17385	ar.Response = future.Response()
17386	return
17387}
17388
17389// LoadBalancerSku SKU of a load balancer
17390type LoadBalancerSku struct {
17391	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
17392	Name LoadBalancerSkuName `json:"name,omitempty"`
17393}
17394
17395// LoadBalancersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
17396// operation.
17397type LoadBalancersUpdateTagsFuture struct {
17398	azure.Future
17399}
17400
17401// Result returns the result of the asynchronous operation.
17402// If the operation has not completed it will return an error.
17403func (future *LoadBalancersUpdateTagsFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
17404	var done bool
17405	done, err = future.DoneWithContext(context.Background(), client)
17406	if err != nil {
17407		err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
17408		return
17409	}
17410	if !done {
17411		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersUpdateTagsFuture")
17412		return
17413	}
17414	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17415	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
17416		lb, err = client.UpdateTagsResponder(lb.Response.Response)
17417		if err != nil {
17418			err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", lb.Response.Response, "Failure responding to request")
17419		}
17420	}
17421	return
17422}
17423
17424// LoadBalancingRule a load balancing rule for a load balancer.
17425type LoadBalancingRule struct {
17426	autorest.Response `json:"-"`
17427	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
17428	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
17429	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17430	Name *string `json:"name,omitempty"`
17431	// Etag - A unique read-only string that changes whenever the resource is updated.
17432	Etag *string `json:"etag,omitempty"`
17433	// ID - Resource ID.
17434	ID *string `json:"id,omitempty"`
17435}
17436
17437// MarshalJSON is the custom marshaler for LoadBalancingRule.
17438func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
17439	objectMap := make(map[string]interface{})
17440	if lbr.LoadBalancingRulePropertiesFormat != nil {
17441		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
17442	}
17443	if lbr.Name != nil {
17444		objectMap["name"] = lbr.Name
17445	}
17446	if lbr.Etag != nil {
17447		objectMap["etag"] = lbr.Etag
17448	}
17449	if lbr.ID != nil {
17450		objectMap["id"] = lbr.ID
17451	}
17452	return json.Marshal(objectMap)
17453}
17454
17455// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
17456func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
17457	var m map[string]*json.RawMessage
17458	err := json.Unmarshal(body, &m)
17459	if err != nil {
17460		return err
17461	}
17462	for k, v := range m {
17463		switch k {
17464		case "properties":
17465			if v != nil {
17466				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
17467				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
17468				if err != nil {
17469					return err
17470				}
17471				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
17472			}
17473		case "name":
17474			if v != nil {
17475				var name string
17476				err = json.Unmarshal(*v, &name)
17477				if err != nil {
17478					return err
17479				}
17480				lbr.Name = &name
17481			}
17482		case "etag":
17483			if v != nil {
17484				var etag string
17485				err = json.Unmarshal(*v, &etag)
17486				if err != nil {
17487					return err
17488				}
17489				lbr.Etag = &etag
17490			}
17491		case "id":
17492			if v != nil {
17493				var ID string
17494				err = json.Unmarshal(*v, &ID)
17495				if err != nil {
17496					return err
17497				}
17498				lbr.ID = &ID
17499			}
17500		}
17501	}
17502
17503	return nil
17504}
17505
17506// LoadBalancingRulePropertiesFormat properties of the load balancer.
17507type LoadBalancingRulePropertiesFormat struct {
17508	// FrontendIPConfiguration - A reference to frontend IP addresses.
17509	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
17510	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
17511	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
17512	// Probe - The reference of the load balancer probe used by the load balancing rule.
17513	Probe *SubResource `json:"probe,omitempty"`
17514	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
17515	Protocol TransportProtocol `json:"protocol,omitempty"`
17516	// LoadDistribution - The load distribution policy for this rule. Possible values are 'Default', 'SourceIP', and 'SourceIPProtocol'. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol'
17517	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
17518	// 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"
17519	FrontendPort *int32 `json:"frontendPort,omitempty"`
17520	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port"
17521	BackendPort *int32 `json:"backendPort,omitempty"`
17522	// 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.
17523	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
17524	// 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.
17525	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
17526	// 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.
17527	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
17528	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
17529	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
17530	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17531	ProvisioningState *string `json:"provisioningState,omitempty"`
17532}
17533
17534// LocalNetworkGateway a common class for general resource information
17535type LocalNetworkGateway struct {
17536	autorest.Response `json:"-"`
17537	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
17538	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
17539	// Etag - A unique read-only string that changes whenever the resource is updated.
17540	Etag *string `json:"etag,omitempty"`
17541	// ID - Resource ID.
17542	ID *string `json:"id,omitempty"`
17543	// Name - READ-ONLY; Resource name.
17544	Name *string `json:"name,omitempty"`
17545	// Type - READ-ONLY; Resource type.
17546	Type *string `json:"type,omitempty"`
17547	// Location - Resource location.
17548	Location *string `json:"location,omitempty"`
17549	// Tags - Resource tags.
17550	Tags map[string]*string `json:"tags"`
17551}
17552
17553// MarshalJSON is the custom marshaler for LocalNetworkGateway.
17554func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
17555	objectMap := make(map[string]interface{})
17556	if lng.LocalNetworkGatewayPropertiesFormat != nil {
17557		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
17558	}
17559	if lng.Etag != nil {
17560		objectMap["etag"] = lng.Etag
17561	}
17562	if lng.ID != nil {
17563		objectMap["id"] = lng.ID
17564	}
17565	if lng.Location != nil {
17566		objectMap["location"] = lng.Location
17567	}
17568	if lng.Tags != nil {
17569		objectMap["tags"] = lng.Tags
17570	}
17571	return json.Marshal(objectMap)
17572}
17573
17574// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
17575func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
17576	var m map[string]*json.RawMessage
17577	err := json.Unmarshal(body, &m)
17578	if err != nil {
17579		return err
17580	}
17581	for k, v := range m {
17582		switch k {
17583		case "properties":
17584			if v != nil {
17585				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
17586				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
17587				if err != nil {
17588					return err
17589				}
17590				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
17591			}
17592		case "etag":
17593			if v != nil {
17594				var etag string
17595				err = json.Unmarshal(*v, &etag)
17596				if err != nil {
17597					return err
17598				}
17599				lng.Etag = &etag
17600			}
17601		case "id":
17602			if v != nil {
17603				var ID string
17604				err = json.Unmarshal(*v, &ID)
17605				if err != nil {
17606					return err
17607				}
17608				lng.ID = &ID
17609			}
17610		case "name":
17611			if v != nil {
17612				var name string
17613				err = json.Unmarshal(*v, &name)
17614				if err != nil {
17615					return err
17616				}
17617				lng.Name = &name
17618			}
17619		case "type":
17620			if v != nil {
17621				var typeVar string
17622				err = json.Unmarshal(*v, &typeVar)
17623				if err != nil {
17624					return err
17625				}
17626				lng.Type = &typeVar
17627			}
17628		case "location":
17629			if v != nil {
17630				var location string
17631				err = json.Unmarshal(*v, &location)
17632				if err != nil {
17633					return err
17634				}
17635				lng.Location = &location
17636			}
17637		case "tags":
17638			if v != nil {
17639				var tags map[string]*string
17640				err = json.Unmarshal(*v, &tags)
17641				if err != nil {
17642					return err
17643				}
17644				lng.Tags = tags
17645			}
17646		}
17647	}
17648
17649	return nil
17650}
17651
17652// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
17653type LocalNetworkGatewayListResult struct {
17654	autorest.Response `json:"-"`
17655	// Value - A list of local network gateways that exists in a resource group.
17656	Value *[]LocalNetworkGateway `json:"value,omitempty"`
17657	// NextLink - READ-ONLY; The URL to get the next set of results.
17658	NextLink *string `json:"nextLink,omitempty"`
17659}
17660
17661// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
17662// values.
17663type LocalNetworkGatewayListResultIterator struct {
17664	i    int
17665	page LocalNetworkGatewayListResultPage
17666}
17667
17668// NextWithContext advances to the next value.  If there was an error making
17669// the request the iterator does not advance and the error is returned.
17670func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
17671	if tracing.IsEnabled() {
17672		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
17673		defer func() {
17674			sc := -1
17675			if iter.Response().Response.Response != nil {
17676				sc = iter.Response().Response.Response.StatusCode
17677			}
17678			tracing.EndSpan(ctx, sc, err)
17679		}()
17680	}
17681	iter.i++
17682	if iter.i < len(iter.page.Values()) {
17683		return nil
17684	}
17685	err = iter.page.NextWithContext(ctx)
17686	if err != nil {
17687		iter.i--
17688		return err
17689	}
17690	iter.i = 0
17691	return nil
17692}
17693
17694// Next advances to the next value.  If there was an error making
17695// the request the iterator does not advance and the error is returned.
17696// Deprecated: Use NextWithContext() instead.
17697func (iter *LocalNetworkGatewayListResultIterator) Next() error {
17698	return iter.NextWithContext(context.Background())
17699}
17700
17701// NotDone returns true if the enumeration should be started or is not yet complete.
17702func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
17703	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17704}
17705
17706// Response returns the raw server response from the last page request.
17707func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
17708	return iter.page.Response()
17709}
17710
17711// Value returns the current value or a zero-initialized value if the
17712// iterator has advanced beyond the end of the collection.
17713func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
17714	if !iter.page.NotDone() {
17715		return LocalNetworkGateway{}
17716	}
17717	return iter.page.Values()[iter.i]
17718}
17719
17720// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
17721func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
17722	return LocalNetworkGatewayListResultIterator{page: page}
17723}
17724
17725// IsEmpty returns true if the ListResult contains no values.
17726func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
17727	return lnglr.Value == nil || len(*lnglr.Value) == 0
17728}
17729
17730// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
17731// It returns nil if no more results exist.
17732func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
17733	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
17734		return nil, nil
17735	}
17736	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17737		autorest.AsJSON(),
17738		autorest.AsGet(),
17739		autorest.WithBaseURL(to.String(lnglr.NextLink)))
17740}
17741
17742// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
17743type LocalNetworkGatewayListResultPage struct {
17744	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
17745	lnglr LocalNetworkGatewayListResult
17746}
17747
17748// NextWithContext advances to the next page of values.  If there was an error making
17749// the request the page does not advance and the error is returned.
17750func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
17751	if tracing.IsEnabled() {
17752		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
17753		defer func() {
17754			sc := -1
17755			if page.Response().Response.Response != nil {
17756				sc = page.Response().Response.Response.StatusCode
17757			}
17758			tracing.EndSpan(ctx, sc, err)
17759		}()
17760	}
17761	next, err := page.fn(ctx, page.lnglr)
17762	if err != nil {
17763		return err
17764	}
17765	page.lnglr = next
17766	return nil
17767}
17768
17769// Next advances to the next page of values.  If there was an error making
17770// the request the page does not advance and the error is returned.
17771// Deprecated: Use NextWithContext() instead.
17772func (page *LocalNetworkGatewayListResultPage) Next() error {
17773	return page.NextWithContext(context.Background())
17774}
17775
17776// NotDone returns true if the page enumeration should be started or is not yet complete.
17777func (page LocalNetworkGatewayListResultPage) NotDone() bool {
17778	return !page.lnglr.IsEmpty()
17779}
17780
17781// Response returns the raw server response from the last page request.
17782func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
17783	return page.lnglr
17784}
17785
17786// Values returns the slice of values for the current page or nil if there are no values.
17787func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
17788	if page.lnglr.IsEmpty() {
17789		return nil
17790	}
17791	return *page.lnglr.Value
17792}
17793
17794// Creates a new instance of the LocalNetworkGatewayListResultPage type.
17795func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
17796	return LocalNetworkGatewayListResultPage{fn: getNextPage}
17797}
17798
17799// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties
17800type LocalNetworkGatewayPropertiesFormat struct {
17801	// LocalNetworkAddressSpace - Local network site address space.
17802	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
17803	// GatewayIPAddress - IP address of local network gateway.
17804	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
17805	// BgpSettings - Local network gateway's BGP speaker settings.
17806	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
17807	// ResourceGUID - The resource GUID property of the LocalNetworkGateway resource.
17808	ResourceGUID *string `json:"resourceGuid,omitempty"`
17809	// ProvisioningState - READ-ONLY; The provisioning state of the LocalNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17810	ProvisioningState *string `json:"provisioningState,omitempty"`
17811}
17812
17813// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17814// long-running operation.
17815type LocalNetworkGatewaysCreateOrUpdateFuture struct {
17816	azure.Future
17817}
17818
17819// Result returns the result of the asynchronous operation.
17820// If the operation has not completed it will return an error.
17821func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
17822	var done bool
17823	done, err = future.DoneWithContext(context.Background(), client)
17824	if err != nil {
17825		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17826		return
17827	}
17828	if !done {
17829		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
17830		return
17831	}
17832	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17833	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
17834		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
17835		if err != nil {
17836			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
17837		}
17838	}
17839	return
17840}
17841
17842// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
17843// long-running operation.
17844type LocalNetworkGatewaysDeleteFuture struct {
17845	azure.Future
17846}
17847
17848// Result returns the result of the asynchronous operation.
17849// If the operation has not completed it will return an error.
17850func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
17851	var done bool
17852	done, err = future.DoneWithContext(context.Background(), client)
17853	if err != nil {
17854		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
17855		return
17856	}
17857	if !done {
17858		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
17859		return
17860	}
17861	ar.Response = future.Response()
17862	return
17863}
17864
17865// LocalNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
17866// long-running operation.
17867type LocalNetworkGatewaysUpdateTagsFuture struct {
17868	azure.Future
17869}
17870
17871// Result returns the result of the asynchronous operation.
17872// If the operation has not completed it will return an error.
17873func (future *LocalNetworkGatewaysUpdateTagsFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
17874	var done bool
17875	done, err = future.DoneWithContext(context.Background(), client)
17876	if err != nil {
17877		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
17878		return
17879	}
17880	if !done {
17881		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysUpdateTagsFuture")
17882		return
17883	}
17884	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17885	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
17886		lng, err = client.UpdateTagsResponder(lng.Response.Response)
17887		if err != nil {
17888			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", lng.Response.Response, "Failure responding to request")
17889		}
17890	}
17891	return
17892}
17893
17894// LogSpecification description of logging specification.
17895type LogSpecification struct {
17896	// Name - The name of the specification.
17897	Name *string `json:"name,omitempty"`
17898	// DisplayName - The display name of the specification.
17899	DisplayName *string `json:"displayName,omitempty"`
17900	// BlobDuration - Duration of the blob.
17901	BlobDuration *string `json:"blobDuration,omitempty"`
17902}
17903
17904// ManagedServiceIdentity identity for the resource.
17905type ManagedServiceIdentity struct {
17906	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
17907	PrincipalID *string `json:"principalId,omitempty"`
17908	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
17909	TenantID *string `json:"tenantId,omitempty"`
17910	// 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'
17911	Type ResourceIdentityType `json:"type,omitempty"`
17912	// 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}'.
17913	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
17914}
17915
17916// MarshalJSON is the custom marshaler for ManagedServiceIdentity.
17917func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
17918	objectMap := make(map[string]interface{})
17919	if msi.Type != "" {
17920		objectMap["type"] = msi.Type
17921	}
17922	if msi.UserAssignedIdentities != nil {
17923		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
17924	}
17925	return json.Marshal(objectMap)
17926}
17927
17928// ManagedServiceIdentityUserAssignedIdentitiesValue ...
17929type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
17930	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
17931	PrincipalID *string `json:"principalId,omitempty"`
17932	// ClientID - READ-ONLY; The client id of user assigned identity.
17933	ClientID *string `json:"clientId,omitempty"`
17934}
17935
17936// MatchCondition define match conditions
17937type MatchCondition struct {
17938	// MatchVariables - List of match variables
17939	MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"`
17940	// Operator - Describes operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex'
17941	Operator WebApplicationFirewallOperator `json:"operator,omitempty"`
17942	// NegationConditon - Describes if this is negate condition or not
17943	NegationConditon *bool `json:"negationConditon,omitempty"`
17944	// MatchValues - Match value
17945	MatchValues *[]string `json:"matchValues,omitempty"`
17946	// Transforms - List of transforms
17947	Transforms *[]WebApplicationFirewallTransform `json:"transforms,omitempty"`
17948}
17949
17950// MatchedRule matched rule.
17951type MatchedRule struct {
17952	// RuleName - Name of the matched network security rule.
17953	RuleName *string `json:"ruleName,omitempty"`
17954	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
17955	Action *string `json:"action,omitempty"`
17956}
17957
17958// MatchVariable define match variables
17959type MatchVariable struct {
17960	// VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies'
17961	VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"`
17962	// Selector - Describes field of the matchVariable collection
17963	Selector *string `json:"selector,omitempty"`
17964}
17965
17966// MetricSpecification description of metrics specification.
17967type MetricSpecification struct {
17968	// Name - The name of the metric.
17969	Name *string `json:"name,omitempty"`
17970	// DisplayName - The display name of the metric.
17971	DisplayName *string `json:"displayName,omitempty"`
17972	// DisplayDescription - The description of the metric.
17973	DisplayDescription *string `json:"displayDescription,omitempty"`
17974	// Unit - Units the metric to be displayed in.
17975	Unit *string `json:"unit,omitempty"`
17976	// AggregationType - The aggregation type.
17977	AggregationType *string `json:"aggregationType,omitempty"`
17978	// Availabilities - List of availability.
17979	Availabilities *[]Availability `json:"availabilities,omitempty"`
17980	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
17981	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
17982	// FillGapWithZero - Whether gaps would be filled with zeros.
17983	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
17984	// MetricFilterPattern - Pattern for the filter of the metric.
17985	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
17986	// Dimensions - List of dimensions.
17987	Dimensions *[]Dimension `json:"dimensions,omitempty"`
17988	// IsInternal - Whether the metric is internal.
17989	IsInternal *bool `json:"isInternal,omitempty"`
17990	// SourceMdmAccount - The source MDM account.
17991	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
17992	// SourceMdmNamespace - The source MDM namespace.
17993	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
17994	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
17995	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
17996}
17997
17998// NatGateway nat Gateway resource.
17999type NatGateway struct {
18000	autorest.Response `json:"-"`
18001	// Sku - The nat gateway SKU.
18002	Sku *NatGatewaySku `json:"sku,omitempty"`
18003	// NatGatewayPropertiesFormat - Nat Gateway properties.
18004	*NatGatewayPropertiesFormat `json:"properties,omitempty"`
18005	// Etag - A unique read-only string that changes whenever the resource is updated.
18006	Etag *string `json:"etag,omitempty"`
18007	// ID - Resource ID.
18008	ID *string `json:"id,omitempty"`
18009	// Name - READ-ONLY; Resource name.
18010	Name *string `json:"name,omitempty"`
18011	// Type - READ-ONLY; Resource type.
18012	Type *string `json:"type,omitempty"`
18013	// Location - Resource location.
18014	Location *string `json:"location,omitempty"`
18015	// Tags - Resource tags.
18016	Tags map[string]*string `json:"tags"`
18017}
18018
18019// MarshalJSON is the custom marshaler for NatGateway.
18020func (ng NatGateway) MarshalJSON() ([]byte, error) {
18021	objectMap := make(map[string]interface{})
18022	if ng.Sku != nil {
18023		objectMap["sku"] = ng.Sku
18024	}
18025	if ng.NatGatewayPropertiesFormat != nil {
18026		objectMap["properties"] = ng.NatGatewayPropertiesFormat
18027	}
18028	if ng.Etag != nil {
18029		objectMap["etag"] = ng.Etag
18030	}
18031	if ng.ID != nil {
18032		objectMap["id"] = ng.ID
18033	}
18034	if ng.Location != nil {
18035		objectMap["location"] = ng.Location
18036	}
18037	if ng.Tags != nil {
18038		objectMap["tags"] = ng.Tags
18039	}
18040	return json.Marshal(objectMap)
18041}
18042
18043// UnmarshalJSON is the custom unmarshaler for NatGateway struct.
18044func (ng *NatGateway) UnmarshalJSON(body []byte) error {
18045	var m map[string]*json.RawMessage
18046	err := json.Unmarshal(body, &m)
18047	if err != nil {
18048		return err
18049	}
18050	for k, v := range m {
18051		switch k {
18052		case "sku":
18053			if v != nil {
18054				var sku NatGatewaySku
18055				err = json.Unmarshal(*v, &sku)
18056				if err != nil {
18057					return err
18058				}
18059				ng.Sku = &sku
18060			}
18061		case "properties":
18062			if v != nil {
18063				var natGatewayPropertiesFormat NatGatewayPropertiesFormat
18064				err = json.Unmarshal(*v, &natGatewayPropertiesFormat)
18065				if err != nil {
18066					return err
18067				}
18068				ng.NatGatewayPropertiesFormat = &natGatewayPropertiesFormat
18069			}
18070		case "etag":
18071			if v != nil {
18072				var etag string
18073				err = json.Unmarshal(*v, &etag)
18074				if err != nil {
18075					return err
18076				}
18077				ng.Etag = &etag
18078			}
18079		case "id":
18080			if v != nil {
18081				var ID string
18082				err = json.Unmarshal(*v, &ID)
18083				if err != nil {
18084					return err
18085				}
18086				ng.ID = &ID
18087			}
18088		case "name":
18089			if v != nil {
18090				var name string
18091				err = json.Unmarshal(*v, &name)
18092				if err != nil {
18093					return err
18094				}
18095				ng.Name = &name
18096			}
18097		case "type":
18098			if v != nil {
18099				var typeVar string
18100				err = json.Unmarshal(*v, &typeVar)
18101				if err != nil {
18102					return err
18103				}
18104				ng.Type = &typeVar
18105			}
18106		case "location":
18107			if v != nil {
18108				var location string
18109				err = json.Unmarshal(*v, &location)
18110				if err != nil {
18111					return err
18112				}
18113				ng.Location = &location
18114			}
18115		case "tags":
18116			if v != nil {
18117				var tags map[string]*string
18118				err = json.Unmarshal(*v, &tags)
18119				if err != nil {
18120					return err
18121				}
18122				ng.Tags = tags
18123			}
18124		}
18125	}
18126
18127	return nil
18128}
18129
18130// NatGatewayListResult response for ListNatGateways API service call.
18131type NatGatewayListResult struct {
18132	autorest.Response `json:"-"`
18133	// Value - A list of Nat Gateways that exists in a resource group.
18134	Value *[]NatGateway `json:"value,omitempty"`
18135	// NextLink - The URL to get the next set of results.
18136	NextLink *string `json:"nextLink,omitempty"`
18137}
18138
18139// NatGatewayListResultIterator provides access to a complete listing of NatGateway values.
18140type NatGatewayListResultIterator struct {
18141	i    int
18142	page NatGatewayListResultPage
18143}
18144
18145// NextWithContext advances to the next value.  If there was an error making
18146// the request the iterator does not advance and the error is returned.
18147func (iter *NatGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
18148	if tracing.IsEnabled() {
18149		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultIterator.NextWithContext")
18150		defer func() {
18151			sc := -1
18152			if iter.Response().Response.Response != nil {
18153				sc = iter.Response().Response.Response.StatusCode
18154			}
18155			tracing.EndSpan(ctx, sc, err)
18156		}()
18157	}
18158	iter.i++
18159	if iter.i < len(iter.page.Values()) {
18160		return nil
18161	}
18162	err = iter.page.NextWithContext(ctx)
18163	if err != nil {
18164		iter.i--
18165		return err
18166	}
18167	iter.i = 0
18168	return nil
18169}
18170
18171// Next advances to the next value.  If there was an error making
18172// the request the iterator does not advance and the error is returned.
18173// Deprecated: Use NextWithContext() instead.
18174func (iter *NatGatewayListResultIterator) Next() error {
18175	return iter.NextWithContext(context.Background())
18176}
18177
18178// NotDone returns true if the enumeration should be started or is not yet complete.
18179func (iter NatGatewayListResultIterator) NotDone() bool {
18180	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18181}
18182
18183// Response returns the raw server response from the last page request.
18184func (iter NatGatewayListResultIterator) Response() NatGatewayListResult {
18185	return iter.page.Response()
18186}
18187
18188// Value returns the current value or a zero-initialized value if the
18189// iterator has advanced beyond the end of the collection.
18190func (iter NatGatewayListResultIterator) Value() NatGateway {
18191	if !iter.page.NotDone() {
18192		return NatGateway{}
18193	}
18194	return iter.page.Values()[iter.i]
18195}
18196
18197// Creates a new instance of the NatGatewayListResultIterator type.
18198func NewNatGatewayListResultIterator(page NatGatewayListResultPage) NatGatewayListResultIterator {
18199	return NatGatewayListResultIterator{page: page}
18200}
18201
18202// IsEmpty returns true if the ListResult contains no values.
18203func (nglr NatGatewayListResult) IsEmpty() bool {
18204	return nglr.Value == nil || len(*nglr.Value) == 0
18205}
18206
18207// natGatewayListResultPreparer prepares a request to retrieve the next set of results.
18208// It returns nil if no more results exist.
18209func (nglr NatGatewayListResult) natGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
18210	if nglr.NextLink == nil || len(to.String(nglr.NextLink)) < 1 {
18211		return nil, nil
18212	}
18213	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18214		autorest.AsJSON(),
18215		autorest.AsGet(),
18216		autorest.WithBaseURL(to.String(nglr.NextLink)))
18217}
18218
18219// NatGatewayListResultPage contains a page of NatGateway values.
18220type NatGatewayListResultPage struct {
18221	fn   func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)
18222	nglr NatGatewayListResult
18223}
18224
18225// NextWithContext advances to the next page of values.  If there was an error making
18226// the request the page does not advance and the error is returned.
18227func (page *NatGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
18228	if tracing.IsEnabled() {
18229		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultPage.NextWithContext")
18230		defer func() {
18231			sc := -1
18232			if page.Response().Response.Response != nil {
18233				sc = page.Response().Response.Response.StatusCode
18234			}
18235			tracing.EndSpan(ctx, sc, err)
18236		}()
18237	}
18238	next, err := page.fn(ctx, page.nglr)
18239	if err != nil {
18240		return err
18241	}
18242	page.nglr = next
18243	return nil
18244}
18245
18246// Next advances to the next page of values.  If there was an error making
18247// the request the page does not advance and the error is returned.
18248// Deprecated: Use NextWithContext() instead.
18249func (page *NatGatewayListResultPage) Next() error {
18250	return page.NextWithContext(context.Background())
18251}
18252
18253// NotDone returns true if the page enumeration should be started or is not yet complete.
18254func (page NatGatewayListResultPage) NotDone() bool {
18255	return !page.nglr.IsEmpty()
18256}
18257
18258// Response returns the raw server response from the last page request.
18259func (page NatGatewayListResultPage) Response() NatGatewayListResult {
18260	return page.nglr
18261}
18262
18263// Values returns the slice of values for the current page or nil if there are no values.
18264func (page NatGatewayListResultPage) Values() []NatGateway {
18265	if page.nglr.IsEmpty() {
18266		return nil
18267	}
18268	return *page.nglr.Value
18269}
18270
18271// Creates a new instance of the NatGatewayListResultPage type.
18272func NewNatGatewayListResultPage(getNextPage func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)) NatGatewayListResultPage {
18273	return NatGatewayListResultPage{fn: getNextPage}
18274}
18275
18276// NatGatewayPropertiesFormat nat Gateway properties.
18277type NatGatewayPropertiesFormat struct {
18278	// IdleTimeoutInMinutes - The idle timeout of the nat gateway.
18279	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
18280	// PublicIPAddresses - An array of public ip addresses associated with the nat gateway resource.
18281	PublicIPAddresses *[]SubResource `json:"publicIpAddresses,omitempty"`
18282	// PublicIPPrefixes - An array of public ip prefixes associated with the nat gateway resource.
18283	PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"`
18284	// Subnets - READ-ONLY; An array of references to the subnets using this nat gateway resource.
18285	Subnets *[]SubResource `json:"subnets,omitempty"`
18286	// ResourceGUID - The resource GUID property of the nat gateway resource.
18287	ResourceGUID *string `json:"resourceGuid,omitempty"`
18288	// ProvisioningState - The provisioning state of the NatGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18289	ProvisioningState *string `json:"provisioningState,omitempty"`
18290}
18291
18292// NatGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
18293// long-running operation.
18294type NatGatewaysCreateOrUpdateFuture struct {
18295	azure.Future
18296}
18297
18298// Result returns the result of the asynchronous operation.
18299// If the operation has not completed it will return an error.
18300func (future *NatGatewaysCreateOrUpdateFuture) Result(client NatGatewaysClient) (ng NatGateway, err error) {
18301	var done bool
18302	done, err = future.DoneWithContext(context.Background(), client)
18303	if err != nil {
18304		err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18305		return
18306	}
18307	if !done {
18308		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysCreateOrUpdateFuture")
18309		return
18310	}
18311	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18312	if ng.Response.Response, err = future.GetResult(sender); err == nil && ng.Response.Response.StatusCode != http.StatusNoContent {
18313		ng, err = client.CreateOrUpdateResponder(ng.Response.Response)
18314		if err != nil {
18315			err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", ng.Response.Response, "Failure responding to request")
18316		}
18317	}
18318	return
18319}
18320
18321// NatGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
18322// operation.
18323type NatGatewaysDeleteFuture struct {
18324	azure.Future
18325}
18326
18327// Result returns the result of the asynchronous operation.
18328// If the operation has not completed it will return an error.
18329func (future *NatGatewaysDeleteFuture) Result(client NatGatewaysClient) (ar autorest.Response, err error) {
18330	var done bool
18331	done, err = future.DoneWithContext(context.Background(), client)
18332	if err != nil {
18333		err = autorest.NewErrorWithError(err, "network.NatGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
18334		return
18335	}
18336	if !done {
18337		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysDeleteFuture")
18338		return
18339	}
18340	ar.Response = future.Response()
18341	return
18342}
18343
18344// NatGatewaySku SKU of nat gateway
18345type NatGatewaySku struct {
18346	// Name - Name of Nat Gateway SKU. Possible values include: 'Standard'
18347	Name NatGatewaySkuName `json:"name,omitempty"`
18348}
18349
18350// NextHopParameters parameters that define the source and destination endpoint.
18351type NextHopParameters struct {
18352	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
18353	TargetResourceID *string `json:"targetResourceId,omitempty"`
18354	// SourceIPAddress - The source IP address.
18355	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
18356	// DestinationIPAddress - The destination IP address.
18357	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
18358	// 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).
18359	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
18360}
18361
18362// NextHopResult the information about next hop from the specified VM.
18363type NextHopResult struct {
18364	autorest.Response `json:"-"`
18365	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
18366	NextHopType NextHopType `json:"nextHopType,omitempty"`
18367	// NextHopIPAddress - Next hop IP Address
18368	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
18369	// 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'.
18370	RouteTableID *string `json:"routeTableId,omitempty"`
18371}
18372
18373// Operation network REST API operation definition.
18374type Operation struct {
18375	// Name - Operation name: {provider}/{resource}/{operation}
18376	Name *string `json:"name,omitempty"`
18377	// Display - Display metadata associated with the operation.
18378	Display *OperationDisplay `json:"display,omitempty"`
18379	// Origin - Origin of the operation.
18380	Origin *string `json:"origin,omitempty"`
18381	// OperationPropertiesFormat - Operation properties format.
18382	*OperationPropertiesFormat `json:"properties,omitempty"`
18383}
18384
18385// MarshalJSON is the custom marshaler for Operation.
18386func (o Operation) MarshalJSON() ([]byte, error) {
18387	objectMap := make(map[string]interface{})
18388	if o.Name != nil {
18389		objectMap["name"] = o.Name
18390	}
18391	if o.Display != nil {
18392		objectMap["display"] = o.Display
18393	}
18394	if o.Origin != nil {
18395		objectMap["origin"] = o.Origin
18396	}
18397	if o.OperationPropertiesFormat != nil {
18398		objectMap["properties"] = o.OperationPropertiesFormat
18399	}
18400	return json.Marshal(objectMap)
18401}
18402
18403// UnmarshalJSON is the custom unmarshaler for Operation struct.
18404func (o *Operation) UnmarshalJSON(body []byte) error {
18405	var m map[string]*json.RawMessage
18406	err := json.Unmarshal(body, &m)
18407	if err != nil {
18408		return err
18409	}
18410	for k, v := range m {
18411		switch k {
18412		case "name":
18413			if v != nil {
18414				var name string
18415				err = json.Unmarshal(*v, &name)
18416				if err != nil {
18417					return err
18418				}
18419				o.Name = &name
18420			}
18421		case "display":
18422			if v != nil {
18423				var display OperationDisplay
18424				err = json.Unmarshal(*v, &display)
18425				if err != nil {
18426					return err
18427				}
18428				o.Display = &display
18429			}
18430		case "origin":
18431			if v != nil {
18432				var origin string
18433				err = json.Unmarshal(*v, &origin)
18434				if err != nil {
18435					return err
18436				}
18437				o.Origin = &origin
18438			}
18439		case "properties":
18440			if v != nil {
18441				var operationPropertiesFormat OperationPropertiesFormat
18442				err = json.Unmarshal(*v, &operationPropertiesFormat)
18443				if err != nil {
18444					return err
18445				}
18446				o.OperationPropertiesFormat = &operationPropertiesFormat
18447			}
18448		}
18449	}
18450
18451	return nil
18452}
18453
18454// OperationDisplay display metadata associated with the operation.
18455type OperationDisplay struct {
18456	// Provider - Service provider: Microsoft Network.
18457	Provider *string `json:"provider,omitempty"`
18458	// Resource - Resource on which the operation is performed.
18459	Resource *string `json:"resource,omitempty"`
18460	// Operation - Type of the operation: get, read, delete, etc.
18461	Operation *string `json:"operation,omitempty"`
18462	// Description - Description of the operation.
18463	Description *string `json:"description,omitempty"`
18464}
18465
18466// OperationListResult result of the request to list Network operations. It contains a list of operations
18467// and a URL link to get the next set of results.
18468type OperationListResult struct {
18469	autorest.Response `json:"-"`
18470	// Value - List of Network operations supported by the Network resource provider.
18471	Value *[]Operation `json:"value,omitempty"`
18472	// NextLink - URL to get the next set of operation list results if there are any.
18473	NextLink *string `json:"nextLink,omitempty"`
18474}
18475
18476// OperationListResultIterator provides access to a complete listing of Operation values.
18477type OperationListResultIterator struct {
18478	i    int
18479	page OperationListResultPage
18480}
18481
18482// NextWithContext advances to the next value.  If there was an error making
18483// the request the iterator does not advance and the error is returned.
18484func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
18485	if tracing.IsEnabled() {
18486		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
18487		defer func() {
18488			sc := -1
18489			if iter.Response().Response.Response != nil {
18490				sc = iter.Response().Response.Response.StatusCode
18491			}
18492			tracing.EndSpan(ctx, sc, err)
18493		}()
18494	}
18495	iter.i++
18496	if iter.i < len(iter.page.Values()) {
18497		return nil
18498	}
18499	err = iter.page.NextWithContext(ctx)
18500	if err != nil {
18501		iter.i--
18502		return err
18503	}
18504	iter.i = 0
18505	return nil
18506}
18507
18508// Next advances to the next value.  If there was an error making
18509// the request the iterator does not advance and the error is returned.
18510// Deprecated: Use NextWithContext() instead.
18511func (iter *OperationListResultIterator) Next() error {
18512	return iter.NextWithContext(context.Background())
18513}
18514
18515// NotDone returns true if the enumeration should be started or is not yet complete.
18516func (iter OperationListResultIterator) NotDone() bool {
18517	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18518}
18519
18520// Response returns the raw server response from the last page request.
18521func (iter OperationListResultIterator) Response() OperationListResult {
18522	return iter.page.Response()
18523}
18524
18525// Value returns the current value or a zero-initialized value if the
18526// iterator has advanced beyond the end of the collection.
18527func (iter OperationListResultIterator) Value() Operation {
18528	if !iter.page.NotDone() {
18529		return Operation{}
18530	}
18531	return iter.page.Values()[iter.i]
18532}
18533
18534// Creates a new instance of the OperationListResultIterator type.
18535func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
18536	return OperationListResultIterator{page: page}
18537}
18538
18539// IsEmpty returns true if the ListResult contains no values.
18540func (olr OperationListResult) IsEmpty() bool {
18541	return olr.Value == nil || len(*olr.Value) == 0
18542}
18543
18544// operationListResultPreparer prepares a request to retrieve the next set of results.
18545// It returns nil if no more results exist.
18546func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
18547	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
18548		return nil, nil
18549	}
18550	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18551		autorest.AsJSON(),
18552		autorest.AsGet(),
18553		autorest.WithBaseURL(to.String(olr.NextLink)))
18554}
18555
18556// OperationListResultPage contains a page of Operation values.
18557type OperationListResultPage struct {
18558	fn  func(context.Context, OperationListResult) (OperationListResult, error)
18559	olr OperationListResult
18560}
18561
18562// NextWithContext advances to the next page of values.  If there was an error making
18563// the request the page does not advance and the error is returned.
18564func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
18565	if tracing.IsEnabled() {
18566		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
18567		defer func() {
18568			sc := -1
18569			if page.Response().Response.Response != nil {
18570				sc = page.Response().Response.Response.StatusCode
18571			}
18572			tracing.EndSpan(ctx, sc, err)
18573		}()
18574	}
18575	next, err := page.fn(ctx, page.olr)
18576	if err != nil {
18577		return err
18578	}
18579	page.olr = next
18580	return nil
18581}
18582
18583// Next advances to the next page of values.  If there was an error making
18584// the request the page does not advance and the error is returned.
18585// Deprecated: Use NextWithContext() instead.
18586func (page *OperationListResultPage) Next() error {
18587	return page.NextWithContext(context.Background())
18588}
18589
18590// NotDone returns true if the page enumeration should be started or is not yet complete.
18591func (page OperationListResultPage) NotDone() bool {
18592	return !page.olr.IsEmpty()
18593}
18594
18595// Response returns the raw server response from the last page request.
18596func (page OperationListResultPage) Response() OperationListResult {
18597	return page.olr
18598}
18599
18600// Values returns the slice of values for the current page or nil if there are no values.
18601func (page OperationListResultPage) Values() []Operation {
18602	if page.olr.IsEmpty() {
18603		return nil
18604	}
18605	return *page.olr.Value
18606}
18607
18608// Creates a new instance of the OperationListResultPage type.
18609func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
18610	return OperationListResultPage{fn: getNextPage}
18611}
18612
18613// OperationPropertiesFormat description of operation properties format.
18614type OperationPropertiesFormat struct {
18615	// ServiceSpecification - Specification of the service.
18616	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
18617}
18618
18619// OperationPropertiesFormatServiceSpecification specification of the service.
18620type OperationPropertiesFormatServiceSpecification struct {
18621	// MetricSpecifications - Operation service specification.
18622	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
18623	// LogSpecifications - Operation log specification.
18624	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
18625}
18626
18627// OutboundRule outbound pool of the load balancer.
18628type OutboundRule struct {
18629	autorest.Response `json:"-"`
18630	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
18631	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
18632	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
18633	Name *string `json:"name,omitempty"`
18634	// Etag - A unique read-only string that changes whenever the resource is updated.
18635	Etag *string `json:"etag,omitempty"`
18636	// ID - Resource ID.
18637	ID *string `json:"id,omitempty"`
18638}
18639
18640// MarshalJSON is the custom marshaler for OutboundRule.
18641func (or OutboundRule) MarshalJSON() ([]byte, error) {
18642	objectMap := make(map[string]interface{})
18643	if or.OutboundRulePropertiesFormat != nil {
18644		objectMap["properties"] = or.OutboundRulePropertiesFormat
18645	}
18646	if or.Name != nil {
18647		objectMap["name"] = or.Name
18648	}
18649	if or.Etag != nil {
18650		objectMap["etag"] = or.Etag
18651	}
18652	if or.ID != nil {
18653		objectMap["id"] = or.ID
18654	}
18655	return json.Marshal(objectMap)
18656}
18657
18658// UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
18659func (or *OutboundRule) UnmarshalJSON(body []byte) error {
18660	var m map[string]*json.RawMessage
18661	err := json.Unmarshal(body, &m)
18662	if err != nil {
18663		return err
18664	}
18665	for k, v := range m {
18666		switch k {
18667		case "properties":
18668			if v != nil {
18669				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
18670				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
18671				if err != nil {
18672					return err
18673				}
18674				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
18675			}
18676		case "name":
18677			if v != nil {
18678				var name string
18679				err = json.Unmarshal(*v, &name)
18680				if err != nil {
18681					return err
18682				}
18683				or.Name = &name
18684			}
18685		case "etag":
18686			if v != nil {
18687				var etag string
18688				err = json.Unmarshal(*v, &etag)
18689				if err != nil {
18690					return err
18691				}
18692				or.Etag = &etag
18693			}
18694		case "id":
18695			if v != nil {
18696				var ID string
18697				err = json.Unmarshal(*v, &ID)
18698				if err != nil {
18699					return err
18700				}
18701				or.ID = &ID
18702			}
18703		}
18704	}
18705
18706	return nil
18707}
18708
18709// OutboundRulePropertiesFormat outbound pool of the load balancer.
18710type OutboundRulePropertiesFormat struct {
18711	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
18712	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
18713	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
18714	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
18715	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
18716	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
18717	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18718	ProvisioningState *string `json:"provisioningState,omitempty"`
18719	// Protocol - The protocol for the outbound rule in load balancer. Possible values are: 'Tcp', 'Udp', and 'All'. Possible values include: 'LoadBalancerOutboundRuleProtocolTCP', 'LoadBalancerOutboundRuleProtocolUDP', 'LoadBalancerOutboundRuleProtocolAll'
18720	Protocol LoadBalancerOutboundRuleProtocol `json:"protocol,omitempty"`
18721	// 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.
18722	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
18723	// IdleTimeoutInMinutes - The timeout for the TCP idle connection
18724	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
18725}
18726
18727// P2SVpnGateway p2SVpnGateway Resource.
18728type P2SVpnGateway struct {
18729	autorest.Response `json:"-"`
18730	// P2SVpnGatewayProperties - Properties of the P2SVpnGateway.
18731	*P2SVpnGatewayProperties `json:"properties,omitempty"`
18732	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
18733	Etag *string `json:"etag,omitempty"`
18734	// ID - Resource ID.
18735	ID *string `json:"id,omitempty"`
18736	// Name - READ-ONLY; Resource name.
18737	Name *string `json:"name,omitempty"`
18738	// Type - READ-ONLY; Resource type.
18739	Type *string `json:"type,omitempty"`
18740	// Location - Resource location.
18741	Location *string `json:"location,omitempty"`
18742	// Tags - Resource tags.
18743	Tags map[string]*string `json:"tags"`
18744}
18745
18746// MarshalJSON is the custom marshaler for P2SVpnGateway.
18747func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
18748	objectMap := make(map[string]interface{})
18749	if pvg.P2SVpnGatewayProperties != nil {
18750		objectMap["properties"] = pvg.P2SVpnGatewayProperties
18751	}
18752	if pvg.ID != nil {
18753		objectMap["id"] = pvg.ID
18754	}
18755	if pvg.Location != nil {
18756		objectMap["location"] = pvg.Location
18757	}
18758	if pvg.Tags != nil {
18759		objectMap["tags"] = pvg.Tags
18760	}
18761	return json.Marshal(objectMap)
18762}
18763
18764// UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
18765func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
18766	var m map[string]*json.RawMessage
18767	err := json.Unmarshal(body, &m)
18768	if err != nil {
18769		return err
18770	}
18771	for k, v := range m {
18772		switch k {
18773		case "properties":
18774			if v != nil {
18775				var p2SVpnGatewayProperties P2SVpnGatewayProperties
18776				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
18777				if err != nil {
18778					return err
18779				}
18780				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
18781			}
18782		case "etag":
18783			if v != nil {
18784				var etag string
18785				err = json.Unmarshal(*v, &etag)
18786				if err != nil {
18787					return err
18788				}
18789				pvg.Etag = &etag
18790			}
18791		case "id":
18792			if v != nil {
18793				var ID string
18794				err = json.Unmarshal(*v, &ID)
18795				if err != nil {
18796					return err
18797				}
18798				pvg.ID = &ID
18799			}
18800		case "name":
18801			if v != nil {
18802				var name string
18803				err = json.Unmarshal(*v, &name)
18804				if err != nil {
18805					return err
18806				}
18807				pvg.Name = &name
18808			}
18809		case "type":
18810			if v != nil {
18811				var typeVar string
18812				err = json.Unmarshal(*v, &typeVar)
18813				if err != nil {
18814					return err
18815				}
18816				pvg.Type = &typeVar
18817			}
18818		case "location":
18819			if v != nil {
18820				var location string
18821				err = json.Unmarshal(*v, &location)
18822				if err != nil {
18823					return err
18824				}
18825				pvg.Location = &location
18826			}
18827		case "tags":
18828			if v != nil {
18829				var tags map[string]*string
18830				err = json.Unmarshal(*v, &tags)
18831				if err != nil {
18832					return err
18833				}
18834				pvg.Tags = tags
18835			}
18836		}
18837	}
18838
18839	return nil
18840}
18841
18842// P2SVpnGatewayProperties parameters for P2SVpnGateway
18843type P2SVpnGatewayProperties struct {
18844	// VirtualHub - The VirtualHub to which the gateway belongs
18845	VirtualHub *SubResource `json:"virtualHub,omitempty"`
18846	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18847	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18848	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
18849	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
18850	// P2SVpnServerConfiguration - The P2SVpnServerConfiguration to which the p2sVpnGateway is attached to.
18851	P2SVpnServerConfiguration *SubResource `json:"p2SVpnServerConfiguration,omitempty"`
18852	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
18853	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
18854	// CustomRoutes - The reference of the address space resource which represents the custom routes specified by the customer for P2SVpnGateway and P2S VpnClient.
18855	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
18856	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
18857	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
18858}
18859
18860// P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
18861// long-running operation.
18862type P2sVpnGatewaysCreateOrUpdateFuture struct {
18863	azure.Future
18864}
18865
18866// Result returns the result of the asynchronous operation.
18867// If the operation has not completed it will return an error.
18868func (future *P2sVpnGatewaysCreateOrUpdateFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
18869	var done bool
18870	done, err = future.DoneWithContext(context.Background(), client)
18871	if err != nil {
18872		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18873		return
18874	}
18875	if !done {
18876		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
18877		return
18878	}
18879	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18880	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
18881		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
18882		if err != nil {
18883			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
18884		}
18885	}
18886	return
18887}
18888
18889// P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
18890// operation.
18891type P2sVpnGatewaysDeleteFuture struct {
18892	azure.Future
18893}
18894
18895// Result returns the result of the asynchronous operation.
18896// If the operation has not completed it will return an error.
18897func (future *P2sVpnGatewaysDeleteFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
18898	var done bool
18899	done, err = future.DoneWithContext(context.Background(), client)
18900	if err != nil {
18901		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
18902		return
18903	}
18904	if !done {
18905		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
18906		return
18907	}
18908	ar.Response = future.Response()
18909	return
18910}
18911
18912// P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
18913// long-running operation.
18914type P2sVpnGatewaysGenerateVpnProfileFuture struct {
18915	azure.Future
18916}
18917
18918// Result returns the result of the asynchronous operation.
18919// If the operation has not completed it will return an error.
18920func (future *P2sVpnGatewaysGenerateVpnProfileFuture) Result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
18921	var done bool
18922	done, err = future.DoneWithContext(context.Background(), client)
18923	if err != nil {
18924		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
18925		return
18926	}
18927	if !done {
18928		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
18929		return
18930	}
18931	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18932	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
18933		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
18934		if err != nil {
18935			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
18936		}
18937	}
18938	return
18939}
18940
18941// P2sVpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
18942// long-running operation.
18943type P2sVpnGatewaysUpdateTagsFuture struct {
18944	azure.Future
18945}
18946
18947// Result returns the result of the asynchronous operation.
18948// If the operation has not completed it will return an error.
18949func (future *P2sVpnGatewaysUpdateTagsFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
18950	var done bool
18951	done, err = future.DoneWithContext(context.Background(), client)
18952	if err != nil {
18953		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
18954		return
18955	}
18956	if !done {
18957		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysUpdateTagsFuture")
18958		return
18959	}
18960	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18961	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
18962		pvg, err = client.UpdateTagsResponder(pvg.Response.Response)
18963		if err != nil {
18964			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", pvg.Response.Response, "Failure responding to request")
18965		}
18966	}
18967	return
18968}
18969
18970// P2SVpnProfileParameters vpn Client Parameters for package generation
18971type P2SVpnProfileParameters struct {
18972	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
18973	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
18974}
18975
18976// P2SVpnServerConfigRadiusClientRootCertificate radius client root certificate of
18977// P2SVpnServerConfiguration.
18978type P2SVpnServerConfigRadiusClientRootCertificate struct {
18979	// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat - Properties of the Radius client root certificate.
18980	*P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
18981	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
18982	Name *string `json:"name,omitempty"`
18983	// Etag - A unique read-only string that changes whenever the resource is updated.
18984	Etag *string `json:"etag,omitempty"`
18985	// ID - Resource ID.
18986	ID *string `json:"id,omitempty"`
18987}
18988
18989// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusClientRootCertificate.
18990func (pvscrcrc P2SVpnServerConfigRadiusClientRootCertificate) MarshalJSON() ([]byte, error) {
18991	objectMap := make(map[string]interface{})
18992	if pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat != nil {
18993		objectMap["properties"] = pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
18994	}
18995	if pvscrcrc.Name != nil {
18996		objectMap["name"] = pvscrcrc.Name
18997	}
18998	if pvscrcrc.Etag != nil {
18999		objectMap["etag"] = pvscrcrc.Etag
19000	}
19001	if pvscrcrc.ID != nil {
19002		objectMap["id"] = pvscrcrc.ID
19003	}
19004	return json.Marshal(objectMap)
19005}
19006
19007// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusClientRootCertificate struct.
19008func (pvscrcrc *P2SVpnServerConfigRadiusClientRootCertificate) UnmarshalJSON(body []byte) error {
19009	var m map[string]*json.RawMessage
19010	err := json.Unmarshal(body, &m)
19011	if err != nil {
19012		return err
19013	}
19014	for k, v := range m {
19015		switch k {
19016		case "properties":
19017			if v != nil {
19018				var p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
19019				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat)
19020				if err != nil {
19021					return err
19022				}
19023				pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
19024			}
19025		case "name":
19026			if v != nil {
19027				var name string
19028				err = json.Unmarshal(*v, &name)
19029				if err != nil {
19030					return err
19031				}
19032				pvscrcrc.Name = &name
19033			}
19034		case "etag":
19035			if v != nil {
19036				var etag string
19037				err = json.Unmarshal(*v, &etag)
19038				if err != nil {
19039					return err
19040				}
19041				pvscrcrc.Etag = &etag
19042			}
19043		case "id":
19044			if v != nil {
19045				var ID string
19046				err = json.Unmarshal(*v, &ID)
19047				if err != nil {
19048					return err
19049				}
19050				pvscrcrc.ID = &ID
19051			}
19052		}
19053	}
19054
19055	return nil
19056}
19057
19058// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat properties of the Radius client root
19059// certificate of P2SVpnServerConfiguration.
19060type P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat struct {
19061	// Thumbprint - The Radius client root certificate thumbprint.
19062	Thumbprint *string `json:"thumbprint,omitempty"`
19063	// ProvisioningState - READ-ONLY; The provisioning state of the Radius client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19064	ProvisioningState *string `json:"provisioningState,omitempty"`
19065}
19066
19067// P2SVpnServerConfigRadiusServerRootCertificate radius Server root certificate of
19068// P2SVpnServerConfiguration.
19069type P2SVpnServerConfigRadiusServerRootCertificate struct {
19070	// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration Radius Server root certificate.
19071	*P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat `json:"properties,omitempty"`
19072	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19073	Name *string `json:"name,omitempty"`
19074	// Etag - A unique read-only string that changes whenever the resource is updated.
19075	Etag *string `json:"etag,omitempty"`
19076	// ID - Resource ID.
19077	ID *string `json:"id,omitempty"`
19078}
19079
19080// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusServerRootCertificate.
19081func (pvscrsrc P2SVpnServerConfigRadiusServerRootCertificate) MarshalJSON() ([]byte, error) {
19082	objectMap := make(map[string]interface{})
19083	if pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat != nil {
19084		objectMap["properties"] = pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
19085	}
19086	if pvscrsrc.Name != nil {
19087		objectMap["name"] = pvscrsrc.Name
19088	}
19089	if pvscrsrc.Etag != nil {
19090		objectMap["etag"] = pvscrsrc.Etag
19091	}
19092	if pvscrsrc.ID != nil {
19093		objectMap["id"] = pvscrsrc.ID
19094	}
19095	return json.Marshal(objectMap)
19096}
19097
19098// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusServerRootCertificate struct.
19099func (pvscrsrc *P2SVpnServerConfigRadiusServerRootCertificate) UnmarshalJSON(body []byte) error {
19100	var m map[string]*json.RawMessage
19101	err := json.Unmarshal(body, &m)
19102	if err != nil {
19103		return err
19104	}
19105	for k, v := range m {
19106		switch k {
19107		case "properties":
19108			if v != nil {
19109				var p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
19110				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat)
19111				if err != nil {
19112					return err
19113				}
19114				pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
19115			}
19116		case "name":
19117			if v != nil {
19118				var name string
19119				err = json.Unmarshal(*v, &name)
19120				if err != nil {
19121					return err
19122				}
19123				pvscrsrc.Name = &name
19124			}
19125		case "etag":
19126			if v != nil {
19127				var etag string
19128				err = json.Unmarshal(*v, &etag)
19129				if err != nil {
19130					return err
19131				}
19132				pvscrsrc.Etag = &etag
19133			}
19134		case "id":
19135			if v != nil {
19136				var ID string
19137				err = json.Unmarshal(*v, &ID)
19138				if err != nil {
19139					return err
19140				}
19141				pvscrsrc.ID = &ID
19142			}
19143		}
19144	}
19145
19146	return nil
19147}
19148
19149// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat properties of Radius Server root
19150// certificate of P2SVpnServerConfiguration.
19151type P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat struct {
19152	// PublicCertData - The certificate public data.
19153	PublicCertData *string `json:"publicCertData,omitempty"`
19154	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration Radius Server root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19155	ProvisioningState *string `json:"provisioningState,omitempty"`
19156}
19157
19158// P2SVpnServerConfiguration p2SVpnServerConfiguration Resource.
19159type P2SVpnServerConfiguration struct {
19160	autorest.Response `json:"-"`
19161	// P2SVpnServerConfigurationProperties - Properties of the P2SVpnServer configuration.
19162	*P2SVpnServerConfigurationProperties `json:"properties,omitempty"`
19163	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19164	Name *string `json:"name,omitempty"`
19165	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
19166	Etag *string `json:"etag,omitempty"`
19167	// ID - Resource ID.
19168	ID *string `json:"id,omitempty"`
19169}
19170
19171// MarshalJSON is the custom marshaler for P2SVpnServerConfiguration.
19172func (pvsc P2SVpnServerConfiguration) MarshalJSON() ([]byte, error) {
19173	objectMap := make(map[string]interface{})
19174	if pvsc.P2SVpnServerConfigurationProperties != nil {
19175		objectMap["properties"] = pvsc.P2SVpnServerConfigurationProperties
19176	}
19177	if pvsc.Name != nil {
19178		objectMap["name"] = pvsc.Name
19179	}
19180	if pvsc.ID != nil {
19181		objectMap["id"] = pvsc.ID
19182	}
19183	return json.Marshal(objectMap)
19184}
19185
19186// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfiguration struct.
19187func (pvsc *P2SVpnServerConfiguration) UnmarshalJSON(body []byte) error {
19188	var m map[string]*json.RawMessage
19189	err := json.Unmarshal(body, &m)
19190	if err != nil {
19191		return err
19192	}
19193	for k, v := range m {
19194		switch k {
19195		case "properties":
19196			if v != nil {
19197				var p2SVpnServerConfigurationProperties P2SVpnServerConfigurationProperties
19198				err = json.Unmarshal(*v, &p2SVpnServerConfigurationProperties)
19199				if err != nil {
19200					return err
19201				}
19202				pvsc.P2SVpnServerConfigurationProperties = &p2SVpnServerConfigurationProperties
19203			}
19204		case "name":
19205			if v != nil {
19206				var name string
19207				err = json.Unmarshal(*v, &name)
19208				if err != nil {
19209					return err
19210				}
19211				pvsc.Name = &name
19212			}
19213		case "etag":
19214			if v != nil {
19215				var etag string
19216				err = json.Unmarshal(*v, &etag)
19217				if err != nil {
19218					return err
19219				}
19220				pvsc.Etag = &etag
19221			}
19222		case "id":
19223			if v != nil {
19224				var ID string
19225				err = json.Unmarshal(*v, &ID)
19226				if err != nil {
19227					return err
19228				}
19229				pvsc.ID = &ID
19230			}
19231		}
19232	}
19233
19234	return nil
19235}
19236
19237// P2SVpnServerConfigurationProperties parameters for P2SVpnServerConfiguration
19238type P2SVpnServerConfigurationProperties struct {
19239	// Name - The name of the P2SVpnServerConfiguration that is unique within a VirtualWan in a resource group. This name can be used to access the resource along with Paren VirtualWan resource name.
19240	Name *string `json:"name,omitempty"`
19241	// VpnProtocols - VPN protocols for the P2SVpnServerConfiguration.
19242	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
19243	// P2SVpnServerConfigVpnClientRootCertificates - VPN client root certificate of P2SVpnServerConfiguration.
19244	P2SVpnServerConfigVpnClientRootCertificates *[]P2SVpnServerConfigVpnClientRootCertificate `json:"p2SVpnServerConfigVpnClientRootCertificates,omitempty"`
19245	// P2SVpnServerConfigVpnClientRevokedCertificates - VPN client revoked certificate of P2SVpnServerConfiguration.
19246	P2SVpnServerConfigVpnClientRevokedCertificates *[]P2SVpnServerConfigVpnClientRevokedCertificate `json:"p2SVpnServerConfigVpnClientRevokedCertificates,omitempty"`
19247	// P2SVpnServerConfigRadiusServerRootCertificates - Radius Server root certificate of P2SVpnServerConfiguration.
19248	P2SVpnServerConfigRadiusServerRootCertificates *[]P2SVpnServerConfigRadiusServerRootCertificate `json:"p2SVpnServerConfigRadiusServerRootCertificates,omitempty"`
19249	// P2SVpnServerConfigRadiusClientRootCertificates - Radius client root certificate of P2SVpnServerConfiguration.
19250	P2SVpnServerConfigRadiusClientRootCertificates *[]P2SVpnServerConfigRadiusClientRootCertificate `json:"p2SVpnServerConfigRadiusClientRootCertificates,omitempty"`
19251	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for P2SVpnServerConfiguration.
19252	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
19253	// RadiusServerAddress - The radius server address property of the P2SVpnServerConfiguration resource for point to site client connection.
19254	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
19255	// RadiusServerSecret - The radius secret property of the P2SVpnServerConfiguration resource for point to site client connection.
19256	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
19257	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19258	ProvisioningState *string `json:"provisioningState,omitempty"`
19259	// P2SVpnGateways - READ-ONLY; List of references to P2SVpnGateways.
19260	P2SVpnGateways *[]SubResource `json:"p2SVpnGateways,omitempty"`
19261	// Etag - A unique read-only string that changes whenever the resource is updated.
19262	Etag *string `json:"etag,omitempty"`
19263}
19264
19265// P2sVpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
19266// of a long-running operation.
19267type P2sVpnServerConfigurationsCreateOrUpdateFuture struct {
19268	azure.Future
19269}
19270
19271// Result returns the result of the asynchronous operation.
19272// If the operation has not completed it will return an error.
19273func (future *P2sVpnServerConfigurationsCreateOrUpdateFuture) Result(client P2sVpnServerConfigurationsClient) (pvsc P2SVpnServerConfiguration, err error) {
19274	var done bool
19275	done, err = future.DoneWithContext(context.Background(), client)
19276	if err != nil {
19277		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19278		return
19279	}
19280	if !done {
19281		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsCreateOrUpdateFuture")
19282		return
19283	}
19284	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19285	if pvsc.Response.Response, err = future.GetResult(sender); err == nil && pvsc.Response.Response.StatusCode != http.StatusNoContent {
19286		pvsc, err = client.CreateOrUpdateResponder(pvsc.Response.Response)
19287		if err != nil {
19288			err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", pvsc.Response.Response, "Failure responding to request")
19289		}
19290	}
19291	return
19292}
19293
19294// P2sVpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
19295// long-running operation.
19296type P2sVpnServerConfigurationsDeleteFuture struct {
19297	azure.Future
19298}
19299
19300// Result returns the result of the asynchronous operation.
19301// If the operation has not completed it will return an error.
19302func (future *P2sVpnServerConfigurationsDeleteFuture) Result(client P2sVpnServerConfigurationsClient) (ar autorest.Response, err error) {
19303	var done bool
19304	done, err = future.DoneWithContext(context.Background(), client)
19305	if err != nil {
19306		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
19307		return
19308	}
19309	if !done {
19310		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsDeleteFuture")
19311		return
19312	}
19313	ar.Response = future.Response()
19314	return
19315}
19316
19317// P2SVpnServerConfigVpnClientRevokedCertificate VPN client revoked certificate of
19318// P2SVpnServerConfiguration.
19319type P2SVpnServerConfigVpnClientRevokedCertificate struct {
19320	// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
19321	*P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
19322	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19323	Name *string `json:"name,omitempty"`
19324	// Etag - A unique read-only string that changes whenever the resource is updated.
19325	Etag *string `json:"etag,omitempty"`
19326	// ID - Resource ID.
19327	ID *string `json:"id,omitempty"`
19328}
19329
19330// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRevokedCertificate.
19331func (pvscvcrc P2SVpnServerConfigVpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
19332	objectMap := make(map[string]interface{})
19333	if pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat != nil {
19334		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
19335	}
19336	if pvscvcrc.Name != nil {
19337		objectMap["name"] = pvscvcrc.Name
19338	}
19339	if pvscvcrc.Etag != nil {
19340		objectMap["etag"] = pvscvcrc.Etag
19341	}
19342	if pvscvcrc.ID != nil {
19343		objectMap["id"] = pvscvcrc.ID
19344	}
19345	return json.Marshal(objectMap)
19346}
19347
19348// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRevokedCertificate struct.
19349func (pvscvcrc *P2SVpnServerConfigVpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
19350	var m map[string]*json.RawMessage
19351	err := json.Unmarshal(body, &m)
19352	if err != nil {
19353		return err
19354	}
19355	for k, v := range m {
19356		switch k {
19357		case "properties":
19358			if v != nil {
19359				var p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
19360				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat)
19361				if err != nil {
19362					return err
19363				}
19364				pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
19365			}
19366		case "name":
19367			if v != nil {
19368				var name string
19369				err = json.Unmarshal(*v, &name)
19370				if err != nil {
19371					return err
19372				}
19373				pvscvcrc.Name = &name
19374			}
19375		case "etag":
19376			if v != nil {
19377				var etag string
19378				err = json.Unmarshal(*v, &etag)
19379				if err != nil {
19380					return err
19381				}
19382				pvscvcrc.Etag = &etag
19383			}
19384		case "id":
19385			if v != nil {
19386				var ID string
19387				err = json.Unmarshal(*v, &ID)
19388				if err != nil {
19389					return err
19390				}
19391				pvscvcrc.ID = &ID
19392			}
19393		}
19394	}
19395
19396	return nil
19397}
19398
19399// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client
19400// certificate of P2SVpnServerConfiguration.
19401type P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat struct {
19402	// Thumbprint - The revoked VPN client certificate thumbprint.
19403	Thumbprint *string `json:"thumbprint,omitempty"`
19404	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19405	ProvisioningState *string `json:"provisioningState,omitempty"`
19406}
19407
19408// P2SVpnServerConfigVpnClientRootCertificate VPN client root certificate of P2SVpnServerConfiguration.
19409type P2SVpnServerConfigVpnClientRootCertificate struct {
19410	// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration VPN client root certificate.
19411	*P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
19412	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19413	Name *string `json:"name,omitempty"`
19414	// Etag - A unique read-only string that changes whenever the resource is updated.
19415	Etag *string `json:"etag,omitempty"`
19416	// ID - Resource ID.
19417	ID *string `json:"id,omitempty"`
19418}
19419
19420// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRootCertificate.
19421func (pvscvcrc P2SVpnServerConfigVpnClientRootCertificate) MarshalJSON() ([]byte, error) {
19422	objectMap := make(map[string]interface{})
19423	if pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat != nil {
19424		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
19425	}
19426	if pvscvcrc.Name != nil {
19427		objectMap["name"] = pvscvcrc.Name
19428	}
19429	if pvscvcrc.Etag != nil {
19430		objectMap["etag"] = pvscvcrc.Etag
19431	}
19432	if pvscvcrc.ID != nil {
19433		objectMap["id"] = pvscvcrc.ID
19434	}
19435	return json.Marshal(objectMap)
19436}
19437
19438// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRootCertificate struct.
19439func (pvscvcrc *P2SVpnServerConfigVpnClientRootCertificate) UnmarshalJSON(body []byte) error {
19440	var m map[string]*json.RawMessage
19441	err := json.Unmarshal(body, &m)
19442	if err != nil {
19443		return err
19444	}
19445	for k, v := range m {
19446		switch k {
19447		case "properties":
19448			if v != nil {
19449				var p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
19450				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat)
19451				if err != nil {
19452					return err
19453				}
19454				pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
19455			}
19456		case "name":
19457			if v != nil {
19458				var name string
19459				err = json.Unmarshal(*v, &name)
19460				if err != nil {
19461					return err
19462				}
19463				pvscvcrc.Name = &name
19464			}
19465		case "etag":
19466			if v != nil {
19467				var etag string
19468				err = json.Unmarshal(*v, &etag)
19469				if err != nil {
19470					return err
19471				}
19472				pvscvcrc.Etag = &etag
19473			}
19474		case "id":
19475			if v != nil {
19476				var ID string
19477				err = json.Unmarshal(*v, &ID)
19478				if err != nil {
19479					return err
19480				}
19481				pvscvcrc.ID = &ID
19482			}
19483		}
19484	}
19485
19486	return nil
19487}
19488
19489// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat properties of VPN client root certificate of
19490// P2SVpnServerConfiguration.
19491type P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat struct {
19492	// PublicCertData - The certificate public data.
19493	PublicCertData *string `json:"publicCertData,omitempty"`
19494	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19495	ProvisioningState *string `json:"provisioningState,omitempty"`
19496}
19497
19498// PacketCapture parameters that define the create packet capture operation.
19499type PacketCapture struct {
19500	// PacketCaptureParameters - Properties of the packet capture.
19501	*PacketCaptureParameters `json:"properties,omitempty"`
19502}
19503
19504// MarshalJSON is the custom marshaler for PacketCapture.
19505func (pc PacketCapture) MarshalJSON() ([]byte, error) {
19506	objectMap := make(map[string]interface{})
19507	if pc.PacketCaptureParameters != nil {
19508		objectMap["properties"] = pc.PacketCaptureParameters
19509	}
19510	return json.Marshal(objectMap)
19511}
19512
19513// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
19514func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
19515	var m map[string]*json.RawMessage
19516	err := json.Unmarshal(body, &m)
19517	if err != nil {
19518		return err
19519	}
19520	for k, v := range m {
19521		switch k {
19522		case "properties":
19523			if v != nil {
19524				var packetCaptureParameters PacketCaptureParameters
19525				err = json.Unmarshal(*v, &packetCaptureParameters)
19526				if err != nil {
19527					return err
19528				}
19529				pc.PacketCaptureParameters = &packetCaptureParameters
19530			}
19531		}
19532	}
19533
19534	return nil
19535}
19536
19537// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
19538type PacketCaptureFilter struct {
19539	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
19540	Protocol PcProtocol `json:"protocol,omitempty"`
19541	// 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.
19542	LocalIPAddress *string `json:"localIPAddress,omitempty"`
19543	// 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.
19544	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
19545	// 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.
19546	LocalPort *string `json:"localPort,omitempty"`
19547	// 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.
19548	RemotePort *string `json:"remotePort,omitempty"`
19549}
19550
19551// PacketCaptureListResult list of packet capture sessions.
19552type PacketCaptureListResult struct {
19553	autorest.Response `json:"-"`
19554	// Value - Information about packet capture sessions.
19555	Value *[]PacketCaptureResult `json:"value,omitempty"`
19556}
19557
19558// PacketCaptureParameters parameters that define the create packet capture operation.
19559type PacketCaptureParameters struct {
19560	// Target - The ID of the targeted resource, only VM is currently supported.
19561	Target *string `json:"target,omitempty"`
19562	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
19563	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
19564	// TotalBytesPerSession - Maximum size of the capture output.
19565	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
19566	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
19567	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
19568	// StorageLocation - Describes the storage location for a packet capture session.
19569	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
19570	// Filters - A list of packet capture filters.
19571	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
19572}
19573
19574// PacketCaptureQueryStatusResult status of packet capture session.
19575type PacketCaptureQueryStatusResult struct {
19576	autorest.Response `json:"-"`
19577	// Name - The name of the packet capture resource.
19578	Name *string `json:"name,omitempty"`
19579	// ID - The ID of the packet capture resource.
19580	ID *string `json:"id,omitempty"`
19581	// CaptureStartTime - The start time of the packet capture session.
19582	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
19583	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
19584	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
19585	// StopReason - The reason the current packet capture session was stopped.
19586	StopReason *string `json:"stopReason,omitempty"`
19587	// PacketCaptureError - List of errors of packet capture session.
19588	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
19589}
19590
19591// PacketCaptureResult information about packet capture session.
19592type PacketCaptureResult struct {
19593	autorest.Response `json:"-"`
19594	// Name - READ-ONLY; Name of the packet capture session.
19595	Name *string `json:"name,omitempty"`
19596	// ID - READ-ONLY; ID of the packet capture operation.
19597	ID *string `json:"id,omitempty"`
19598	// Etag - A unique read-only string that changes whenever the resource is updated.
19599	Etag *string `json:"etag,omitempty"`
19600	// PacketCaptureResultProperties - Properties of the packet capture result.
19601	*PacketCaptureResultProperties `json:"properties,omitempty"`
19602}
19603
19604// MarshalJSON is the custom marshaler for PacketCaptureResult.
19605func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
19606	objectMap := make(map[string]interface{})
19607	if pcr.Etag != nil {
19608		objectMap["etag"] = pcr.Etag
19609	}
19610	if pcr.PacketCaptureResultProperties != nil {
19611		objectMap["properties"] = pcr.PacketCaptureResultProperties
19612	}
19613	return json.Marshal(objectMap)
19614}
19615
19616// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
19617func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
19618	var m map[string]*json.RawMessage
19619	err := json.Unmarshal(body, &m)
19620	if err != nil {
19621		return err
19622	}
19623	for k, v := range m {
19624		switch k {
19625		case "name":
19626			if v != nil {
19627				var name string
19628				err = json.Unmarshal(*v, &name)
19629				if err != nil {
19630					return err
19631				}
19632				pcr.Name = &name
19633			}
19634		case "id":
19635			if v != nil {
19636				var ID string
19637				err = json.Unmarshal(*v, &ID)
19638				if err != nil {
19639					return err
19640				}
19641				pcr.ID = &ID
19642			}
19643		case "etag":
19644			if v != nil {
19645				var etag string
19646				err = json.Unmarshal(*v, &etag)
19647				if err != nil {
19648					return err
19649				}
19650				pcr.Etag = &etag
19651			}
19652		case "properties":
19653			if v != nil {
19654				var packetCaptureResultProperties PacketCaptureResultProperties
19655				err = json.Unmarshal(*v, &packetCaptureResultProperties)
19656				if err != nil {
19657					return err
19658				}
19659				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
19660			}
19661		}
19662	}
19663
19664	return nil
19665}
19666
19667// PacketCaptureResultProperties describes the properties of a packet capture session.
19668type PacketCaptureResultProperties struct {
19669	// ProvisioningState - The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
19670	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
19671	// Target - The ID of the targeted resource, only VM is currently supported.
19672	Target *string `json:"target,omitempty"`
19673	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
19674	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
19675	// TotalBytesPerSession - Maximum size of the capture output.
19676	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
19677	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
19678	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
19679	// StorageLocation - Describes the storage location for a packet capture session.
19680	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
19681	// Filters - A list of packet capture filters.
19682	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
19683}
19684
19685// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
19686// operation.
19687type PacketCapturesCreateFuture struct {
19688	azure.Future
19689}
19690
19691// Result returns the result of the asynchronous operation.
19692// If the operation has not completed it will return an error.
19693func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
19694	var done bool
19695	done, err = future.DoneWithContext(context.Background(), client)
19696	if err != nil {
19697		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
19698		return
19699	}
19700	if !done {
19701		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
19702		return
19703	}
19704	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19705	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
19706		pcr, err = client.CreateResponder(pcr.Response.Response)
19707		if err != nil {
19708			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
19709		}
19710	}
19711	return
19712}
19713
19714// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19715// operation.
19716type PacketCapturesDeleteFuture struct {
19717	azure.Future
19718}
19719
19720// Result returns the result of the asynchronous operation.
19721// If the operation has not completed it will return an error.
19722func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
19723	var done bool
19724	done, err = future.DoneWithContext(context.Background(), client)
19725	if err != nil {
19726		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
19727		return
19728	}
19729	if !done {
19730		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
19731		return
19732	}
19733	ar.Response = future.Response()
19734	return
19735}
19736
19737// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
19738// operation.
19739type PacketCapturesGetStatusFuture struct {
19740	azure.Future
19741}
19742
19743// Result returns the result of the asynchronous operation.
19744// If the operation has not completed it will return an error.
19745func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
19746	var done bool
19747	done, err = future.DoneWithContext(context.Background(), client)
19748	if err != nil {
19749		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
19750		return
19751	}
19752	if !done {
19753		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
19754		return
19755	}
19756	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19757	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
19758		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
19759		if err != nil {
19760			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
19761		}
19762	}
19763	return
19764}
19765
19766// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
19767// operation.
19768type PacketCapturesStopFuture struct {
19769	azure.Future
19770}
19771
19772// Result returns the result of the asynchronous operation.
19773// If the operation has not completed it will return an error.
19774func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
19775	var done bool
19776	done, err = future.DoneWithContext(context.Background(), client)
19777	if err != nil {
19778		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
19779		return
19780	}
19781	if !done {
19782		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
19783		return
19784	}
19785	ar.Response = future.Response()
19786	return
19787}
19788
19789// PacketCaptureStorageLocation describes the storage location for a packet capture session.
19790type PacketCaptureStorageLocation struct {
19791	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
19792	StorageID *string `json:"storageId,omitempty"`
19793	// 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.
19794	StoragePath *string `json:"storagePath,omitempty"`
19795	// 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.
19796	FilePath *string `json:"filePath,omitempty"`
19797}
19798
19799// PatchRouteFilter route Filter Resource.
19800type PatchRouteFilter struct {
19801	// RouteFilterPropertiesFormat - Properties of the route filter.
19802	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
19803	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
19804	Name *string `json:"name,omitempty"`
19805	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
19806	Etag *string `json:"etag,omitempty"`
19807	// Type - READ-ONLY; Resource type.
19808	Type *string `json:"type,omitempty"`
19809	// Tags - Resource tags.
19810	Tags map[string]*string `json:"tags"`
19811	// ID - Resource ID.
19812	ID *string `json:"id,omitempty"`
19813}
19814
19815// MarshalJSON is the custom marshaler for PatchRouteFilter.
19816func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
19817	objectMap := make(map[string]interface{})
19818	if prf.RouteFilterPropertiesFormat != nil {
19819		objectMap["properties"] = prf.RouteFilterPropertiesFormat
19820	}
19821	if prf.Tags != nil {
19822		objectMap["tags"] = prf.Tags
19823	}
19824	if prf.ID != nil {
19825		objectMap["id"] = prf.ID
19826	}
19827	return json.Marshal(objectMap)
19828}
19829
19830// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
19831func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
19832	var m map[string]*json.RawMessage
19833	err := json.Unmarshal(body, &m)
19834	if err != nil {
19835		return err
19836	}
19837	for k, v := range m {
19838		switch k {
19839		case "properties":
19840			if v != nil {
19841				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
19842				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
19843				if err != nil {
19844					return err
19845				}
19846				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
19847			}
19848		case "name":
19849			if v != nil {
19850				var name string
19851				err = json.Unmarshal(*v, &name)
19852				if err != nil {
19853					return err
19854				}
19855				prf.Name = &name
19856			}
19857		case "etag":
19858			if v != nil {
19859				var etag string
19860				err = json.Unmarshal(*v, &etag)
19861				if err != nil {
19862					return err
19863				}
19864				prf.Etag = &etag
19865			}
19866		case "type":
19867			if v != nil {
19868				var typeVar string
19869				err = json.Unmarshal(*v, &typeVar)
19870				if err != nil {
19871					return err
19872				}
19873				prf.Type = &typeVar
19874			}
19875		case "tags":
19876			if v != nil {
19877				var tags map[string]*string
19878				err = json.Unmarshal(*v, &tags)
19879				if err != nil {
19880					return err
19881				}
19882				prf.Tags = tags
19883			}
19884		case "id":
19885			if v != nil {
19886				var ID string
19887				err = json.Unmarshal(*v, &ID)
19888				if err != nil {
19889					return err
19890				}
19891				prf.ID = &ID
19892			}
19893		}
19894	}
19895
19896	return nil
19897}
19898
19899// PatchRouteFilterRule route Filter Rule Resource
19900type PatchRouteFilterRule struct {
19901	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
19902	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
19903	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
19904	Name *string `json:"name,omitempty"`
19905	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
19906	Etag *string `json:"etag,omitempty"`
19907	// ID - Resource ID.
19908	ID *string `json:"id,omitempty"`
19909}
19910
19911// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
19912func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
19913	objectMap := make(map[string]interface{})
19914	if prfr.RouteFilterRulePropertiesFormat != nil {
19915		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
19916	}
19917	if prfr.ID != nil {
19918		objectMap["id"] = prfr.ID
19919	}
19920	return json.Marshal(objectMap)
19921}
19922
19923// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
19924func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
19925	var m map[string]*json.RawMessage
19926	err := json.Unmarshal(body, &m)
19927	if err != nil {
19928		return err
19929	}
19930	for k, v := range m {
19931		switch k {
19932		case "properties":
19933			if v != nil {
19934				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
19935				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
19936				if err != nil {
19937					return err
19938				}
19939				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
19940			}
19941		case "name":
19942			if v != nil {
19943				var name string
19944				err = json.Unmarshal(*v, &name)
19945				if err != nil {
19946					return err
19947				}
19948				prfr.Name = &name
19949			}
19950		case "etag":
19951			if v != nil {
19952				var etag string
19953				err = json.Unmarshal(*v, &etag)
19954				if err != nil {
19955					return err
19956				}
19957				prfr.Etag = &etag
19958			}
19959		case "id":
19960			if v != nil {
19961				var ID string
19962				err = json.Unmarshal(*v, &ID)
19963				if err != nil {
19964					return err
19965				}
19966				prfr.ID = &ID
19967			}
19968		}
19969	}
19970
19971	return nil
19972}
19973
19974// PeerExpressRouteCircuitConnection peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
19975// resource.
19976type PeerExpressRouteCircuitConnection struct {
19977	autorest.Response `json:"-"`
19978	// PeerExpressRouteCircuitConnectionPropertiesFormat - Properties of the peer express route circuit connection.
19979	*PeerExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
19980	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
19981	Name *string `json:"name,omitempty"`
19982	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
19983	Etag *string `json:"etag,omitempty"`
19984	// ID - Resource ID.
19985	ID *string `json:"id,omitempty"`
19986}
19987
19988// MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnection.
19989func (percc PeerExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
19990	objectMap := make(map[string]interface{})
19991	if percc.PeerExpressRouteCircuitConnectionPropertiesFormat != nil {
19992		objectMap["properties"] = percc.PeerExpressRouteCircuitConnectionPropertiesFormat
19993	}
19994	if percc.Name != nil {
19995		objectMap["name"] = percc.Name
19996	}
19997	if percc.ID != nil {
19998		objectMap["id"] = percc.ID
19999	}
20000	return json.Marshal(objectMap)
20001}
20002
20003// UnmarshalJSON is the custom unmarshaler for PeerExpressRouteCircuitConnection struct.
20004func (percc *PeerExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
20005	var m map[string]*json.RawMessage
20006	err := json.Unmarshal(body, &m)
20007	if err != nil {
20008		return err
20009	}
20010	for k, v := range m {
20011		switch k {
20012		case "properties":
20013			if v != nil {
20014				var peerExpressRouteCircuitConnectionPropertiesFormat PeerExpressRouteCircuitConnectionPropertiesFormat
20015				err = json.Unmarshal(*v, &peerExpressRouteCircuitConnectionPropertiesFormat)
20016				if err != nil {
20017					return err
20018				}
20019				percc.PeerExpressRouteCircuitConnectionPropertiesFormat = &peerExpressRouteCircuitConnectionPropertiesFormat
20020			}
20021		case "name":
20022			if v != nil {
20023				var name string
20024				err = json.Unmarshal(*v, &name)
20025				if err != nil {
20026					return err
20027				}
20028				percc.Name = &name
20029			}
20030		case "etag":
20031			if v != nil {
20032				var etag string
20033				err = json.Unmarshal(*v, &etag)
20034				if err != nil {
20035					return err
20036				}
20037				percc.Etag = &etag
20038			}
20039		case "id":
20040			if v != nil {
20041				var ID string
20042				err = json.Unmarshal(*v, &ID)
20043				if err != nil {
20044					return err
20045				}
20046				percc.ID = &ID
20047			}
20048		}
20049	}
20050
20051	return nil
20052}
20053
20054// PeerExpressRouteCircuitConnectionListResult response for ListPeeredConnections API service call
20055// retrieves all global reach peer circuit connections that belongs to a Private Peering for an
20056// ExpressRouteCircuit.
20057type PeerExpressRouteCircuitConnectionListResult struct {
20058	autorest.Response `json:"-"`
20059	// Value - The global reach peer circuit connection associated with Private Peering in an ExpressRoute Circuit.
20060	Value *[]PeerExpressRouteCircuitConnection `json:"value,omitempty"`
20061	// NextLink - The URL to get the next set of results.
20062	NextLink *string `json:"nextLink,omitempty"`
20063}
20064
20065// PeerExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
20066// PeerExpressRouteCircuitConnection values.
20067type PeerExpressRouteCircuitConnectionListResultIterator struct {
20068	i    int
20069	page PeerExpressRouteCircuitConnectionListResultPage
20070}
20071
20072// NextWithContext advances to the next value.  If there was an error making
20073// the request the iterator does not advance and the error is returned.
20074func (iter *PeerExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
20075	if tracing.IsEnabled() {
20076		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultIterator.NextWithContext")
20077		defer func() {
20078			sc := -1
20079			if iter.Response().Response.Response != nil {
20080				sc = iter.Response().Response.Response.StatusCode
20081			}
20082			tracing.EndSpan(ctx, sc, err)
20083		}()
20084	}
20085	iter.i++
20086	if iter.i < len(iter.page.Values()) {
20087		return nil
20088	}
20089	err = iter.page.NextWithContext(ctx)
20090	if err != nil {
20091		iter.i--
20092		return err
20093	}
20094	iter.i = 0
20095	return nil
20096}
20097
20098// Next advances to the next value.  If there was an error making
20099// the request the iterator does not advance and the error is returned.
20100// Deprecated: Use NextWithContext() instead.
20101func (iter *PeerExpressRouteCircuitConnectionListResultIterator) Next() error {
20102	return iter.NextWithContext(context.Background())
20103}
20104
20105// NotDone returns true if the enumeration should be started or is not yet complete.
20106func (iter PeerExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
20107	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20108}
20109
20110// Response returns the raw server response from the last page request.
20111func (iter PeerExpressRouteCircuitConnectionListResultIterator) Response() PeerExpressRouteCircuitConnectionListResult {
20112	return iter.page.Response()
20113}
20114
20115// Value returns the current value or a zero-initialized value if the
20116// iterator has advanced beyond the end of the collection.
20117func (iter PeerExpressRouteCircuitConnectionListResultIterator) Value() PeerExpressRouteCircuitConnection {
20118	if !iter.page.NotDone() {
20119		return PeerExpressRouteCircuitConnection{}
20120	}
20121	return iter.page.Values()[iter.i]
20122}
20123
20124// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultIterator type.
20125func NewPeerExpressRouteCircuitConnectionListResultIterator(page PeerExpressRouteCircuitConnectionListResultPage) PeerExpressRouteCircuitConnectionListResultIterator {
20126	return PeerExpressRouteCircuitConnectionListResultIterator{page: page}
20127}
20128
20129// IsEmpty returns true if the ListResult contains no values.
20130func (percclr PeerExpressRouteCircuitConnectionListResult) IsEmpty() bool {
20131	return percclr.Value == nil || len(*percclr.Value) == 0
20132}
20133
20134// peerExpressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
20135// It returns nil if no more results exist.
20136func (percclr PeerExpressRouteCircuitConnectionListResult) peerExpressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
20137	if percclr.NextLink == nil || len(to.String(percclr.NextLink)) < 1 {
20138		return nil, nil
20139	}
20140	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20141		autorest.AsJSON(),
20142		autorest.AsGet(),
20143		autorest.WithBaseURL(to.String(percclr.NextLink)))
20144}
20145
20146// PeerExpressRouteCircuitConnectionListResultPage contains a page of PeerExpressRouteCircuitConnection
20147// values.
20148type PeerExpressRouteCircuitConnectionListResultPage struct {
20149	fn      func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)
20150	percclr PeerExpressRouteCircuitConnectionListResult
20151}
20152
20153// NextWithContext advances to the next page of values.  If there was an error making
20154// the request the page does not advance and the error is returned.
20155func (page *PeerExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
20156	if tracing.IsEnabled() {
20157		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultPage.NextWithContext")
20158		defer func() {
20159			sc := -1
20160			if page.Response().Response.Response != nil {
20161				sc = page.Response().Response.Response.StatusCode
20162			}
20163			tracing.EndSpan(ctx, sc, err)
20164		}()
20165	}
20166	next, err := page.fn(ctx, page.percclr)
20167	if err != nil {
20168		return err
20169	}
20170	page.percclr = next
20171	return nil
20172}
20173
20174// Next advances to the next page of values.  If there was an error making
20175// the request the page does not advance and the error is returned.
20176// Deprecated: Use NextWithContext() instead.
20177func (page *PeerExpressRouteCircuitConnectionListResultPage) Next() error {
20178	return page.NextWithContext(context.Background())
20179}
20180
20181// NotDone returns true if the page enumeration should be started or is not yet complete.
20182func (page PeerExpressRouteCircuitConnectionListResultPage) NotDone() bool {
20183	return !page.percclr.IsEmpty()
20184}
20185
20186// Response returns the raw server response from the last page request.
20187func (page PeerExpressRouteCircuitConnectionListResultPage) Response() PeerExpressRouteCircuitConnectionListResult {
20188	return page.percclr
20189}
20190
20191// Values returns the slice of values for the current page or nil if there are no values.
20192func (page PeerExpressRouteCircuitConnectionListResultPage) Values() []PeerExpressRouteCircuitConnection {
20193	if page.percclr.IsEmpty() {
20194		return nil
20195	}
20196	return *page.percclr.Value
20197}
20198
20199// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultPage type.
20200func NewPeerExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)) PeerExpressRouteCircuitConnectionListResultPage {
20201	return PeerExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
20202}
20203
20204// PeerExpressRouteCircuitConnectionPropertiesFormat properties of the peer express route circuit
20205// connection.
20206type PeerExpressRouteCircuitConnectionPropertiesFormat struct {
20207	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit.
20208	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
20209	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
20210	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
20211	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
20212	AddressPrefix *string `json:"addressPrefix,omitempty"`
20213	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
20214	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
20215	// ConnectionName - The name of the express route circuit connection resource.
20216	ConnectionName *string `json:"connectionName,omitempty"`
20217	// AuthResourceGUID - The resource guid of the authorization used for the express route circuit connection.
20218	AuthResourceGUID *string `json:"authResourceGuid,omitempty"`
20219	// ProvisioningState - READ-ONLY; Provisioning state of the peer express route circuit connection resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
20220	ProvisioningState *string `json:"provisioningState,omitempty"`
20221}
20222
20223// PolicySettings defines contents of a web application firewall global configuration
20224type PolicySettings struct {
20225	// EnabledState - Describes if the policy is in enabled state or disabled state. Possible values include: 'WebApplicationFirewallEnabledStateDisabled', 'WebApplicationFirewallEnabledStateEnabled'
20226	EnabledState WebApplicationFirewallEnabledState `json:"enabledState,omitempty"`
20227	// Mode - Describes if it is in detection mode  or prevention mode at policy level. Possible values include: 'WebApplicationFirewallModePrevention', 'WebApplicationFirewallModeDetection'
20228	Mode WebApplicationFirewallMode `json:"mode,omitempty"`
20229}
20230
20231// PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet.
20232type PrepareNetworkPoliciesRequest struct {
20233	// ServiceName - The name of the service for which subnet is being prepared for.
20234	ServiceName *string `json:"serviceName,omitempty"`
20235	// ResourceGroupName - The name of the resource group where the Network Intent Policy will be stored.
20236	ResourceGroupName *string `json:"resourceGroupName,omitempty"`
20237	// NetworkIntentPolicyConfigurations - A list of NetworkIntentPolicyConfiguration.
20238	NetworkIntentPolicyConfigurations *[]IntentPolicyConfiguration `json:"networkIntentPolicyConfigurations,omitempty"`
20239}
20240
20241// Probe a load balancer probe.
20242type Probe struct {
20243	autorest.Response `json:"-"`
20244	// ProbePropertiesFormat - Properties of load balancer probe.
20245	*ProbePropertiesFormat `json:"properties,omitempty"`
20246	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
20247	Name *string `json:"name,omitempty"`
20248	// Etag - A unique read-only string that changes whenever the resource is updated.
20249	Etag *string `json:"etag,omitempty"`
20250	// ID - Resource ID.
20251	ID *string `json:"id,omitempty"`
20252}
20253
20254// MarshalJSON is the custom marshaler for Probe.
20255func (p Probe) MarshalJSON() ([]byte, error) {
20256	objectMap := make(map[string]interface{})
20257	if p.ProbePropertiesFormat != nil {
20258		objectMap["properties"] = p.ProbePropertiesFormat
20259	}
20260	if p.Name != nil {
20261		objectMap["name"] = p.Name
20262	}
20263	if p.Etag != nil {
20264		objectMap["etag"] = p.Etag
20265	}
20266	if p.ID != nil {
20267		objectMap["id"] = p.ID
20268	}
20269	return json.Marshal(objectMap)
20270}
20271
20272// UnmarshalJSON is the custom unmarshaler for Probe struct.
20273func (p *Probe) UnmarshalJSON(body []byte) error {
20274	var m map[string]*json.RawMessage
20275	err := json.Unmarshal(body, &m)
20276	if err != nil {
20277		return err
20278	}
20279	for k, v := range m {
20280		switch k {
20281		case "properties":
20282			if v != nil {
20283				var probePropertiesFormat ProbePropertiesFormat
20284				err = json.Unmarshal(*v, &probePropertiesFormat)
20285				if err != nil {
20286					return err
20287				}
20288				p.ProbePropertiesFormat = &probePropertiesFormat
20289			}
20290		case "name":
20291			if v != nil {
20292				var name string
20293				err = json.Unmarshal(*v, &name)
20294				if err != nil {
20295					return err
20296				}
20297				p.Name = &name
20298			}
20299		case "etag":
20300			if v != nil {
20301				var etag string
20302				err = json.Unmarshal(*v, &etag)
20303				if err != nil {
20304					return err
20305				}
20306				p.Etag = &etag
20307			}
20308		case "id":
20309			if v != nil {
20310				var ID string
20311				err = json.Unmarshal(*v, &ID)
20312				if err != nil {
20313					return err
20314				}
20315				p.ID = &ID
20316			}
20317		}
20318	}
20319
20320	return nil
20321}
20322
20323// ProbePropertiesFormat load balancer probe resource.
20324type ProbePropertiesFormat struct {
20325	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
20326	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
20327	// Protocol - The protocol of the end point. Possible values are: 'Http', 'Tcp', or 'Https'. 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'
20328	Protocol ProbeProtocol `json:"protocol,omitempty"`
20329	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
20330	Port *int32 `json:"port,omitempty"`
20331	// 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.
20332	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
20333	// 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.
20334	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
20335	// 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.
20336	RequestPath *string `json:"requestPath,omitempty"`
20337	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
20338	ProvisioningState *string `json:"provisioningState,omitempty"`
20339}
20340
20341// Profile network profile resource.
20342type Profile struct {
20343	autorest.Response `json:"-"`
20344	// ProfilePropertiesFormat - Network profile properties.
20345	*ProfilePropertiesFormat `json:"properties,omitempty"`
20346	// Etag - A unique read-only string that changes whenever the resource is updated.
20347	Etag *string `json:"etag,omitempty"`
20348	// ID - Resource ID.
20349	ID *string `json:"id,omitempty"`
20350	// Name - READ-ONLY; Resource name.
20351	Name *string `json:"name,omitempty"`
20352	// Type - READ-ONLY; Resource type.
20353	Type *string `json:"type,omitempty"`
20354	// Location - Resource location.
20355	Location *string `json:"location,omitempty"`
20356	// Tags - Resource tags.
20357	Tags map[string]*string `json:"tags"`
20358}
20359
20360// MarshalJSON is the custom marshaler for Profile.
20361func (p Profile) MarshalJSON() ([]byte, error) {
20362	objectMap := make(map[string]interface{})
20363	if p.ProfilePropertiesFormat != nil {
20364		objectMap["properties"] = p.ProfilePropertiesFormat
20365	}
20366	if p.Etag != nil {
20367		objectMap["etag"] = p.Etag
20368	}
20369	if p.ID != nil {
20370		objectMap["id"] = p.ID
20371	}
20372	if p.Location != nil {
20373		objectMap["location"] = p.Location
20374	}
20375	if p.Tags != nil {
20376		objectMap["tags"] = p.Tags
20377	}
20378	return json.Marshal(objectMap)
20379}
20380
20381// UnmarshalJSON is the custom unmarshaler for Profile struct.
20382func (p *Profile) UnmarshalJSON(body []byte) error {
20383	var m map[string]*json.RawMessage
20384	err := json.Unmarshal(body, &m)
20385	if err != nil {
20386		return err
20387	}
20388	for k, v := range m {
20389		switch k {
20390		case "properties":
20391			if v != nil {
20392				var profilePropertiesFormat ProfilePropertiesFormat
20393				err = json.Unmarshal(*v, &profilePropertiesFormat)
20394				if err != nil {
20395					return err
20396				}
20397				p.ProfilePropertiesFormat = &profilePropertiesFormat
20398			}
20399		case "etag":
20400			if v != nil {
20401				var etag string
20402				err = json.Unmarshal(*v, &etag)
20403				if err != nil {
20404					return err
20405				}
20406				p.Etag = &etag
20407			}
20408		case "id":
20409			if v != nil {
20410				var ID string
20411				err = json.Unmarshal(*v, &ID)
20412				if err != nil {
20413					return err
20414				}
20415				p.ID = &ID
20416			}
20417		case "name":
20418			if v != nil {
20419				var name string
20420				err = json.Unmarshal(*v, &name)
20421				if err != nil {
20422					return err
20423				}
20424				p.Name = &name
20425			}
20426		case "type":
20427			if v != nil {
20428				var typeVar string
20429				err = json.Unmarshal(*v, &typeVar)
20430				if err != nil {
20431					return err
20432				}
20433				p.Type = &typeVar
20434			}
20435		case "location":
20436			if v != nil {
20437				var location string
20438				err = json.Unmarshal(*v, &location)
20439				if err != nil {
20440					return err
20441				}
20442				p.Location = &location
20443			}
20444		case "tags":
20445			if v != nil {
20446				var tags map[string]*string
20447				err = json.Unmarshal(*v, &tags)
20448				if err != nil {
20449					return err
20450				}
20451				p.Tags = tags
20452			}
20453		}
20454	}
20455
20456	return nil
20457}
20458
20459// ProfileListResult response for ListNetworkProfiles API service call.
20460type ProfileListResult struct {
20461	autorest.Response `json:"-"`
20462	// Value - A list of network profiles that exist in a resource group.
20463	Value *[]Profile `json:"value,omitempty"`
20464	// NextLink - The URL to get the next set of results.
20465	NextLink *string `json:"nextLink,omitempty"`
20466}
20467
20468// ProfileListResultIterator provides access to a complete listing of Profile values.
20469type ProfileListResultIterator struct {
20470	i    int
20471	page ProfileListResultPage
20472}
20473
20474// NextWithContext advances to the next value.  If there was an error making
20475// the request the iterator does not advance and the error is returned.
20476func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
20477	if tracing.IsEnabled() {
20478		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
20479		defer func() {
20480			sc := -1
20481			if iter.Response().Response.Response != nil {
20482				sc = iter.Response().Response.Response.StatusCode
20483			}
20484			tracing.EndSpan(ctx, sc, err)
20485		}()
20486	}
20487	iter.i++
20488	if iter.i < len(iter.page.Values()) {
20489		return nil
20490	}
20491	err = iter.page.NextWithContext(ctx)
20492	if err != nil {
20493		iter.i--
20494		return err
20495	}
20496	iter.i = 0
20497	return nil
20498}
20499
20500// Next advances to the next value.  If there was an error making
20501// the request the iterator does not advance and the error is returned.
20502// Deprecated: Use NextWithContext() instead.
20503func (iter *ProfileListResultIterator) Next() error {
20504	return iter.NextWithContext(context.Background())
20505}
20506
20507// NotDone returns true if the enumeration should be started or is not yet complete.
20508func (iter ProfileListResultIterator) NotDone() bool {
20509	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20510}
20511
20512// Response returns the raw server response from the last page request.
20513func (iter ProfileListResultIterator) Response() ProfileListResult {
20514	return iter.page.Response()
20515}
20516
20517// Value returns the current value or a zero-initialized value if the
20518// iterator has advanced beyond the end of the collection.
20519func (iter ProfileListResultIterator) Value() Profile {
20520	if !iter.page.NotDone() {
20521		return Profile{}
20522	}
20523	return iter.page.Values()[iter.i]
20524}
20525
20526// Creates a new instance of the ProfileListResultIterator type.
20527func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
20528	return ProfileListResultIterator{page: page}
20529}
20530
20531// IsEmpty returns true if the ListResult contains no values.
20532func (plr ProfileListResult) IsEmpty() bool {
20533	return plr.Value == nil || len(*plr.Value) == 0
20534}
20535
20536// profileListResultPreparer prepares a request to retrieve the next set of results.
20537// It returns nil if no more results exist.
20538func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
20539	if plr.NextLink == nil || len(to.String(plr.NextLink)) < 1 {
20540		return nil, nil
20541	}
20542	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20543		autorest.AsJSON(),
20544		autorest.AsGet(),
20545		autorest.WithBaseURL(to.String(plr.NextLink)))
20546}
20547
20548// ProfileListResultPage contains a page of Profile values.
20549type ProfileListResultPage struct {
20550	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
20551	plr ProfileListResult
20552}
20553
20554// NextWithContext advances to the next page of values.  If there was an error making
20555// the request the page does not advance and the error is returned.
20556func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
20557	if tracing.IsEnabled() {
20558		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
20559		defer func() {
20560			sc := -1
20561			if page.Response().Response.Response != nil {
20562				sc = page.Response().Response.Response.StatusCode
20563			}
20564			tracing.EndSpan(ctx, sc, err)
20565		}()
20566	}
20567	next, err := page.fn(ctx, page.plr)
20568	if err != nil {
20569		return err
20570	}
20571	page.plr = next
20572	return nil
20573}
20574
20575// Next advances to the next page of values.  If there was an error making
20576// the request the page does not advance and the error is returned.
20577// Deprecated: Use NextWithContext() instead.
20578func (page *ProfileListResultPage) Next() error {
20579	return page.NextWithContext(context.Background())
20580}
20581
20582// NotDone returns true if the page enumeration should be started or is not yet complete.
20583func (page ProfileListResultPage) NotDone() bool {
20584	return !page.plr.IsEmpty()
20585}
20586
20587// Response returns the raw server response from the last page request.
20588func (page ProfileListResultPage) Response() ProfileListResult {
20589	return page.plr
20590}
20591
20592// Values returns the slice of values for the current page or nil if there are no values.
20593func (page ProfileListResultPage) Values() []Profile {
20594	if page.plr.IsEmpty() {
20595		return nil
20596	}
20597	return *page.plr.Value
20598}
20599
20600// Creates a new instance of the ProfileListResultPage type.
20601func NewProfileListResultPage(getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
20602	return ProfileListResultPage{fn: getNextPage}
20603}
20604
20605// ProfilePropertiesFormat network profile properties.
20606type ProfilePropertiesFormat struct {
20607	// ContainerNetworkInterfaces - List of child container network interfaces.
20608	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
20609	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
20610	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
20611	// ResourceGUID - READ-ONLY; The resource GUID property of the network interface resource.
20612	ResourceGUID *string `json:"resourceGuid,omitempty"`
20613	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
20614	ProvisioningState *string `json:"provisioningState,omitempty"`
20615}
20616
20617// ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20618// operation.
20619type ProfilesDeleteFuture struct {
20620	azure.Future
20621}
20622
20623// Result returns the result of the asynchronous operation.
20624// If the operation has not completed it will return an error.
20625func (future *ProfilesDeleteFuture) Result(client ProfilesClient) (ar autorest.Response, err error) {
20626	var done bool
20627	done, err = future.DoneWithContext(context.Background(), client)
20628	if err != nil {
20629		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
20630		return
20631	}
20632	if !done {
20633		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
20634		return
20635	}
20636	ar.Response = future.Response()
20637	return
20638}
20639
20640// ProtocolConfiguration configuration of the protocol.
20641type ProtocolConfiguration struct {
20642	// HTTPConfiguration - HTTP configuration of the connectivity check.
20643	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
20644}
20645
20646// ProtocolCustomSettingsFormat dDoS custom policy properties.
20647type ProtocolCustomSettingsFormat struct {
20648	// Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn'
20649	Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"`
20650	// TriggerRateOverride - The customized DDoS protection trigger rate.
20651	TriggerRateOverride *string `json:"triggerRateOverride,omitempty"`
20652	// SourceRateOverride - The customized DDoS protection source rate.
20653	SourceRateOverride *string `json:"sourceRateOverride,omitempty"`
20654	// 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'
20655	TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"`
20656}
20657
20658// PublicIPAddress public IP address resource.
20659type PublicIPAddress struct {
20660	autorest.Response `json:"-"`
20661	// Sku - The public IP address SKU.
20662	Sku *PublicIPAddressSku `json:"sku,omitempty"`
20663	// PublicIPAddressPropertiesFormat - Public IP address properties.
20664	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
20665	// Etag - A unique read-only string that changes whenever the resource is updated.
20666	Etag *string `json:"etag,omitempty"`
20667	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
20668	Zones *[]string `json:"zones,omitempty"`
20669	// ID - Resource ID.
20670	ID *string `json:"id,omitempty"`
20671	// Name - READ-ONLY; Resource name.
20672	Name *string `json:"name,omitempty"`
20673	// Type - READ-ONLY; Resource type.
20674	Type *string `json:"type,omitempty"`
20675	// Location - Resource location.
20676	Location *string `json:"location,omitempty"`
20677	// Tags - Resource tags.
20678	Tags map[string]*string `json:"tags"`
20679}
20680
20681// MarshalJSON is the custom marshaler for PublicIPAddress.
20682func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
20683	objectMap := make(map[string]interface{})
20684	if pia.Sku != nil {
20685		objectMap["sku"] = pia.Sku
20686	}
20687	if pia.PublicIPAddressPropertiesFormat != nil {
20688		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
20689	}
20690	if pia.Etag != nil {
20691		objectMap["etag"] = pia.Etag
20692	}
20693	if pia.Zones != nil {
20694		objectMap["zones"] = pia.Zones
20695	}
20696	if pia.ID != nil {
20697		objectMap["id"] = pia.ID
20698	}
20699	if pia.Location != nil {
20700		objectMap["location"] = pia.Location
20701	}
20702	if pia.Tags != nil {
20703		objectMap["tags"] = pia.Tags
20704	}
20705	return json.Marshal(objectMap)
20706}
20707
20708// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
20709func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
20710	var m map[string]*json.RawMessage
20711	err := json.Unmarshal(body, &m)
20712	if err != nil {
20713		return err
20714	}
20715	for k, v := range m {
20716		switch k {
20717		case "sku":
20718			if v != nil {
20719				var sku PublicIPAddressSku
20720				err = json.Unmarshal(*v, &sku)
20721				if err != nil {
20722					return err
20723				}
20724				pia.Sku = &sku
20725			}
20726		case "properties":
20727			if v != nil {
20728				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
20729				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
20730				if err != nil {
20731					return err
20732				}
20733				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
20734			}
20735		case "etag":
20736			if v != nil {
20737				var etag string
20738				err = json.Unmarshal(*v, &etag)
20739				if err != nil {
20740					return err
20741				}
20742				pia.Etag = &etag
20743			}
20744		case "zones":
20745			if v != nil {
20746				var zones []string
20747				err = json.Unmarshal(*v, &zones)
20748				if err != nil {
20749					return err
20750				}
20751				pia.Zones = &zones
20752			}
20753		case "id":
20754			if v != nil {
20755				var ID string
20756				err = json.Unmarshal(*v, &ID)
20757				if err != nil {
20758					return err
20759				}
20760				pia.ID = &ID
20761			}
20762		case "name":
20763			if v != nil {
20764				var name string
20765				err = json.Unmarshal(*v, &name)
20766				if err != nil {
20767					return err
20768				}
20769				pia.Name = &name
20770			}
20771		case "type":
20772			if v != nil {
20773				var typeVar string
20774				err = json.Unmarshal(*v, &typeVar)
20775				if err != nil {
20776					return err
20777				}
20778				pia.Type = &typeVar
20779			}
20780		case "location":
20781			if v != nil {
20782				var location string
20783				err = json.Unmarshal(*v, &location)
20784				if err != nil {
20785					return err
20786				}
20787				pia.Location = &location
20788			}
20789		case "tags":
20790			if v != nil {
20791				var tags map[string]*string
20792				err = json.Unmarshal(*v, &tags)
20793				if err != nil {
20794					return err
20795				}
20796				pia.Tags = tags
20797			}
20798		}
20799	}
20800
20801	return nil
20802}
20803
20804// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address
20805type PublicIPAddressDNSSettings struct {
20806	// DomainNameLabel - Gets or sets 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.
20807	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
20808	// Fqdn - Gets the FQDN, 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.
20809	Fqdn *string `json:"fqdn,omitempty"`
20810	// ReverseFqdn - Gets or Sets 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.
20811	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
20812}
20813
20814// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
20815// long-running operation.
20816type PublicIPAddressesCreateOrUpdateFuture struct {
20817	azure.Future
20818}
20819
20820// Result returns the result of the asynchronous operation.
20821// If the operation has not completed it will return an error.
20822func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
20823	var done bool
20824	done, err = future.DoneWithContext(context.Background(), client)
20825	if err != nil {
20826		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20827		return
20828	}
20829	if !done {
20830		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
20831		return
20832	}
20833	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20834	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
20835		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
20836		if err != nil {
20837			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
20838		}
20839	}
20840	return
20841}
20842
20843// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20844// operation.
20845type PublicIPAddressesDeleteFuture struct {
20846	azure.Future
20847}
20848
20849// Result returns the result of the asynchronous operation.
20850// If the operation has not completed it will return an error.
20851func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
20852	var done bool
20853	done, err = future.DoneWithContext(context.Background(), client)
20854	if err != nil {
20855		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
20856		return
20857	}
20858	if !done {
20859		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
20860		return
20861	}
20862	ar.Response = future.Response()
20863	return
20864}
20865
20866// PublicIPAddressesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
20867// long-running operation.
20868type PublicIPAddressesUpdateTagsFuture struct {
20869	azure.Future
20870}
20871
20872// Result returns the result of the asynchronous operation.
20873// If the operation has not completed it will return an error.
20874func (future *PublicIPAddressesUpdateTagsFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
20875	var done bool
20876	done, err = future.DoneWithContext(context.Background(), client)
20877	if err != nil {
20878		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
20879		return
20880	}
20881	if !done {
20882		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesUpdateTagsFuture")
20883		return
20884	}
20885	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20886	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
20887		pia, err = client.UpdateTagsResponder(pia.Response.Response)
20888		if err != nil {
20889			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", pia.Response.Response, "Failure responding to request")
20890		}
20891	}
20892	return
20893}
20894
20895// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
20896type PublicIPAddressListResult struct {
20897	autorest.Response `json:"-"`
20898	// Value - A list of public IP addresses that exists in a resource group.
20899	Value *[]PublicIPAddress `json:"value,omitempty"`
20900	// NextLink - The URL to get the next set of results.
20901	NextLink *string `json:"nextLink,omitempty"`
20902}
20903
20904// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
20905type PublicIPAddressListResultIterator struct {
20906	i    int
20907	page PublicIPAddressListResultPage
20908}
20909
20910// NextWithContext advances to the next value.  If there was an error making
20911// the request the iterator does not advance and the error is returned.
20912func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
20913	if tracing.IsEnabled() {
20914		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
20915		defer func() {
20916			sc := -1
20917			if iter.Response().Response.Response != nil {
20918				sc = iter.Response().Response.Response.StatusCode
20919			}
20920			tracing.EndSpan(ctx, sc, err)
20921		}()
20922	}
20923	iter.i++
20924	if iter.i < len(iter.page.Values()) {
20925		return nil
20926	}
20927	err = iter.page.NextWithContext(ctx)
20928	if err != nil {
20929		iter.i--
20930		return err
20931	}
20932	iter.i = 0
20933	return nil
20934}
20935
20936// Next advances to the next value.  If there was an error making
20937// the request the iterator does not advance and the error is returned.
20938// Deprecated: Use NextWithContext() instead.
20939func (iter *PublicIPAddressListResultIterator) Next() error {
20940	return iter.NextWithContext(context.Background())
20941}
20942
20943// NotDone returns true if the enumeration should be started or is not yet complete.
20944func (iter PublicIPAddressListResultIterator) NotDone() bool {
20945	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20946}
20947
20948// Response returns the raw server response from the last page request.
20949func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
20950	return iter.page.Response()
20951}
20952
20953// Value returns the current value or a zero-initialized value if the
20954// iterator has advanced beyond the end of the collection.
20955func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
20956	if !iter.page.NotDone() {
20957		return PublicIPAddress{}
20958	}
20959	return iter.page.Values()[iter.i]
20960}
20961
20962// Creates a new instance of the PublicIPAddressListResultIterator type.
20963func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
20964	return PublicIPAddressListResultIterator{page: page}
20965}
20966
20967// IsEmpty returns true if the ListResult contains no values.
20968func (pialr PublicIPAddressListResult) IsEmpty() bool {
20969	return pialr.Value == nil || len(*pialr.Value) == 0
20970}
20971
20972// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
20973// It returns nil if no more results exist.
20974func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
20975	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
20976		return nil, nil
20977	}
20978	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20979		autorest.AsJSON(),
20980		autorest.AsGet(),
20981		autorest.WithBaseURL(to.String(pialr.NextLink)))
20982}
20983
20984// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
20985type PublicIPAddressListResultPage struct {
20986	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
20987	pialr PublicIPAddressListResult
20988}
20989
20990// NextWithContext advances to the next page of values.  If there was an error making
20991// the request the page does not advance and the error is returned.
20992func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
20993	if tracing.IsEnabled() {
20994		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
20995		defer func() {
20996			sc := -1
20997			if page.Response().Response.Response != nil {
20998				sc = page.Response().Response.Response.StatusCode
20999			}
21000			tracing.EndSpan(ctx, sc, err)
21001		}()
21002	}
21003	next, err := page.fn(ctx, page.pialr)
21004	if err != nil {
21005		return err
21006	}
21007	page.pialr = next
21008	return nil
21009}
21010
21011// Next advances to the next page of values.  If there was an error making
21012// the request the page does not advance and the error is returned.
21013// Deprecated: Use NextWithContext() instead.
21014func (page *PublicIPAddressListResultPage) Next() error {
21015	return page.NextWithContext(context.Background())
21016}
21017
21018// NotDone returns true if the page enumeration should be started or is not yet complete.
21019func (page PublicIPAddressListResultPage) NotDone() bool {
21020	return !page.pialr.IsEmpty()
21021}
21022
21023// Response returns the raw server response from the last page request.
21024func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
21025	return page.pialr
21026}
21027
21028// Values returns the slice of values for the current page or nil if there are no values.
21029func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
21030	if page.pialr.IsEmpty() {
21031		return nil
21032	}
21033	return *page.pialr.Value
21034}
21035
21036// Creates a new instance of the PublicIPAddressListResultPage type.
21037func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
21038	return PublicIPAddressListResultPage{fn: getNextPage}
21039}
21040
21041// PublicIPAddressPropertiesFormat public IP address properties.
21042type PublicIPAddressPropertiesFormat struct {
21043	// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
21044	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
21045	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
21046	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
21047	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
21048	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
21049	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
21050	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
21051	// DdosSettings - The DDoS protection custom policy associated with the public IP address.
21052	DdosSettings *DdosSettings `json:"ddosSettings,omitempty"`
21053	// IPTags - The list of tags associated with the public IP address.
21054	IPTags *[]IPTag `json:"ipTags,omitempty"`
21055	// IPAddress - The IP address associated with the public IP address resource.
21056	IPAddress *string `json:"ipAddress,omitempty"`
21057	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
21058	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
21059	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
21060	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
21061	// ResourceGUID - The resource GUID property of the public IP resource.
21062	ResourceGUID *string `json:"resourceGuid,omitempty"`
21063	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
21064	ProvisioningState *string `json:"provisioningState,omitempty"`
21065}
21066
21067// PublicIPAddressSku SKU of a public IP address
21068type PublicIPAddressSku struct {
21069	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
21070	Name PublicIPAddressSkuName `json:"name,omitempty"`
21071}
21072
21073// PublicIPPrefix public IP prefix resource.
21074type PublicIPPrefix struct {
21075	autorest.Response `json:"-"`
21076	// Sku - The public IP prefix SKU.
21077	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
21078	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
21079	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
21080	// Etag - A unique read-only string that changes whenever the resource is updated.
21081	Etag *string `json:"etag,omitempty"`
21082	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
21083	Zones *[]string `json:"zones,omitempty"`
21084	// ID - Resource ID.
21085	ID *string `json:"id,omitempty"`
21086	// Name - READ-ONLY; Resource name.
21087	Name *string `json:"name,omitempty"`
21088	// Type - READ-ONLY; Resource type.
21089	Type *string `json:"type,omitempty"`
21090	// Location - Resource location.
21091	Location *string `json:"location,omitempty"`
21092	// Tags - Resource tags.
21093	Tags map[string]*string `json:"tags"`
21094}
21095
21096// MarshalJSON is the custom marshaler for PublicIPPrefix.
21097func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
21098	objectMap := make(map[string]interface{})
21099	if pip.Sku != nil {
21100		objectMap["sku"] = pip.Sku
21101	}
21102	if pip.PublicIPPrefixPropertiesFormat != nil {
21103		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
21104	}
21105	if pip.Etag != nil {
21106		objectMap["etag"] = pip.Etag
21107	}
21108	if pip.Zones != nil {
21109		objectMap["zones"] = pip.Zones
21110	}
21111	if pip.ID != nil {
21112		objectMap["id"] = pip.ID
21113	}
21114	if pip.Location != nil {
21115		objectMap["location"] = pip.Location
21116	}
21117	if pip.Tags != nil {
21118		objectMap["tags"] = pip.Tags
21119	}
21120	return json.Marshal(objectMap)
21121}
21122
21123// UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
21124func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
21125	var m map[string]*json.RawMessage
21126	err := json.Unmarshal(body, &m)
21127	if err != nil {
21128		return err
21129	}
21130	for k, v := range m {
21131		switch k {
21132		case "sku":
21133			if v != nil {
21134				var sku PublicIPPrefixSku
21135				err = json.Unmarshal(*v, &sku)
21136				if err != nil {
21137					return err
21138				}
21139				pip.Sku = &sku
21140			}
21141		case "properties":
21142			if v != nil {
21143				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
21144				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
21145				if err != nil {
21146					return err
21147				}
21148				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
21149			}
21150		case "etag":
21151			if v != nil {
21152				var etag string
21153				err = json.Unmarshal(*v, &etag)
21154				if err != nil {
21155					return err
21156				}
21157				pip.Etag = &etag
21158			}
21159		case "zones":
21160			if v != nil {
21161				var zones []string
21162				err = json.Unmarshal(*v, &zones)
21163				if err != nil {
21164					return err
21165				}
21166				pip.Zones = &zones
21167			}
21168		case "id":
21169			if v != nil {
21170				var ID string
21171				err = json.Unmarshal(*v, &ID)
21172				if err != nil {
21173					return err
21174				}
21175				pip.ID = &ID
21176			}
21177		case "name":
21178			if v != nil {
21179				var name string
21180				err = json.Unmarshal(*v, &name)
21181				if err != nil {
21182					return err
21183				}
21184				pip.Name = &name
21185			}
21186		case "type":
21187			if v != nil {
21188				var typeVar string
21189				err = json.Unmarshal(*v, &typeVar)
21190				if err != nil {
21191					return err
21192				}
21193				pip.Type = &typeVar
21194			}
21195		case "location":
21196			if v != nil {
21197				var location string
21198				err = json.Unmarshal(*v, &location)
21199				if err != nil {
21200					return err
21201				}
21202				pip.Location = &location
21203			}
21204		case "tags":
21205			if v != nil {
21206				var tags map[string]*string
21207				err = json.Unmarshal(*v, &tags)
21208				if err != nil {
21209					return err
21210				}
21211				pip.Tags = tags
21212			}
21213		}
21214	}
21215
21216	return nil
21217}
21218
21219// PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21220// long-running operation.
21221type PublicIPPrefixesCreateOrUpdateFuture struct {
21222	azure.Future
21223}
21224
21225// Result returns the result of the asynchronous operation.
21226// If the operation has not completed it will return an error.
21227func (future *PublicIPPrefixesCreateOrUpdateFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
21228	var done bool
21229	done, err = future.DoneWithContext(context.Background(), client)
21230	if err != nil {
21231		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21232		return
21233	}
21234	if !done {
21235		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
21236		return
21237	}
21238	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21239	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
21240		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
21241		if err != nil {
21242			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
21243		}
21244	}
21245	return
21246}
21247
21248// PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21249// operation.
21250type PublicIPPrefixesDeleteFuture struct {
21251	azure.Future
21252}
21253
21254// Result returns the result of the asynchronous operation.
21255// If the operation has not completed it will return an error.
21256func (future *PublicIPPrefixesDeleteFuture) Result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
21257	var done bool
21258	done, err = future.DoneWithContext(context.Background(), client)
21259	if err != nil {
21260		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
21261		return
21262	}
21263	if !done {
21264		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
21265		return
21266	}
21267	ar.Response = future.Response()
21268	return
21269}
21270
21271// PublicIPPrefixesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
21272// long-running operation.
21273type PublicIPPrefixesUpdateTagsFuture struct {
21274	azure.Future
21275}
21276
21277// Result returns the result of the asynchronous operation.
21278// If the operation has not completed it will return an error.
21279func (future *PublicIPPrefixesUpdateTagsFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
21280	var done bool
21281	done, err = future.DoneWithContext(context.Background(), client)
21282	if err != nil {
21283		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
21284		return
21285	}
21286	if !done {
21287		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesUpdateTagsFuture")
21288		return
21289	}
21290	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21291	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
21292		pip, err = client.UpdateTagsResponder(pip.Response.Response)
21293		if err != nil {
21294			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", pip.Response.Response, "Failure responding to request")
21295		}
21296	}
21297	return
21298}
21299
21300// PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
21301type PublicIPPrefixListResult struct {
21302	autorest.Response `json:"-"`
21303	// Value - A list of public IP prefixes that exists in a resource group.
21304	Value *[]PublicIPPrefix `json:"value,omitempty"`
21305	// NextLink - The URL to get the next set of results.
21306	NextLink *string `json:"nextLink,omitempty"`
21307}
21308
21309// PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
21310type PublicIPPrefixListResultIterator struct {
21311	i    int
21312	page PublicIPPrefixListResultPage
21313}
21314
21315// NextWithContext advances to the next value.  If there was an error making
21316// the request the iterator does not advance and the error is returned.
21317func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
21318	if tracing.IsEnabled() {
21319		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
21320		defer func() {
21321			sc := -1
21322			if iter.Response().Response.Response != nil {
21323				sc = iter.Response().Response.Response.StatusCode
21324			}
21325			tracing.EndSpan(ctx, sc, err)
21326		}()
21327	}
21328	iter.i++
21329	if iter.i < len(iter.page.Values()) {
21330		return nil
21331	}
21332	err = iter.page.NextWithContext(ctx)
21333	if err != nil {
21334		iter.i--
21335		return err
21336	}
21337	iter.i = 0
21338	return nil
21339}
21340
21341// Next advances to the next value.  If there was an error making
21342// the request the iterator does not advance and the error is returned.
21343// Deprecated: Use NextWithContext() instead.
21344func (iter *PublicIPPrefixListResultIterator) Next() error {
21345	return iter.NextWithContext(context.Background())
21346}
21347
21348// NotDone returns true if the enumeration should be started or is not yet complete.
21349func (iter PublicIPPrefixListResultIterator) NotDone() bool {
21350	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21351}
21352
21353// Response returns the raw server response from the last page request.
21354func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
21355	return iter.page.Response()
21356}
21357
21358// Value returns the current value or a zero-initialized value if the
21359// iterator has advanced beyond the end of the collection.
21360func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
21361	if !iter.page.NotDone() {
21362		return PublicIPPrefix{}
21363	}
21364	return iter.page.Values()[iter.i]
21365}
21366
21367// Creates a new instance of the PublicIPPrefixListResultIterator type.
21368func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
21369	return PublicIPPrefixListResultIterator{page: page}
21370}
21371
21372// IsEmpty returns true if the ListResult contains no values.
21373func (piplr PublicIPPrefixListResult) IsEmpty() bool {
21374	return piplr.Value == nil || len(*piplr.Value) == 0
21375}
21376
21377// publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
21378// It returns nil if no more results exist.
21379func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
21380	if piplr.NextLink == nil || len(to.String(piplr.NextLink)) < 1 {
21381		return nil, nil
21382	}
21383	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21384		autorest.AsJSON(),
21385		autorest.AsGet(),
21386		autorest.WithBaseURL(to.String(piplr.NextLink)))
21387}
21388
21389// PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
21390type PublicIPPrefixListResultPage struct {
21391	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
21392	piplr PublicIPPrefixListResult
21393}
21394
21395// NextWithContext advances to the next page of values.  If there was an error making
21396// the request the page does not advance and the error is returned.
21397func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
21398	if tracing.IsEnabled() {
21399		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
21400		defer func() {
21401			sc := -1
21402			if page.Response().Response.Response != nil {
21403				sc = page.Response().Response.Response.StatusCode
21404			}
21405			tracing.EndSpan(ctx, sc, err)
21406		}()
21407	}
21408	next, err := page.fn(ctx, page.piplr)
21409	if err != nil {
21410		return err
21411	}
21412	page.piplr = next
21413	return nil
21414}
21415
21416// Next advances to the next page of values.  If there was an error making
21417// the request the page does not advance and the error is returned.
21418// Deprecated: Use NextWithContext() instead.
21419func (page *PublicIPPrefixListResultPage) Next() error {
21420	return page.NextWithContext(context.Background())
21421}
21422
21423// NotDone returns true if the page enumeration should be started or is not yet complete.
21424func (page PublicIPPrefixListResultPage) NotDone() bool {
21425	return !page.piplr.IsEmpty()
21426}
21427
21428// Response returns the raw server response from the last page request.
21429func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
21430	return page.piplr
21431}
21432
21433// Values returns the slice of values for the current page or nil if there are no values.
21434func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
21435	if page.piplr.IsEmpty() {
21436		return nil
21437	}
21438	return *page.piplr.Value
21439}
21440
21441// Creates a new instance of the PublicIPPrefixListResultPage type.
21442func NewPublicIPPrefixListResultPage(getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
21443	return PublicIPPrefixListResultPage{fn: getNextPage}
21444}
21445
21446// PublicIPPrefixPropertiesFormat public IP prefix properties.
21447type PublicIPPrefixPropertiesFormat struct {
21448	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
21449	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
21450	// IPTags - The list of tags associated with the public IP prefix.
21451	IPTags *[]IPTag `json:"ipTags,omitempty"`
21452	// PrefixLength - The Length of the Public IP Prefix.
21453	PrefixLength *int32 `json:"prefixLength,omitempty"`
21454	// IPPrefix - The allocated Prefix
21455	IPPrefix *string `json:"ipPrefix,omitempty"`
21456	// PublicIPAddresses - The list of all referenced PublicIPAddresses
21457	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
21458	// ResourceGUID - The resource GUID property of the public IP prefix resource.
21459	ResourceGUID *string `json:"resourceGuid,omitempty"`
21460	// ProvisioningState - The provisioning state of the Public IP prefix resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
21461	ProvisioningState *string `json:"provisioningState,omitempty"`
21462}
21463
21464// PublicIPPrefixSku SKU of a public IP prefix
21465type PublicIPPrefixSku struct {
21466	// Name - Name of a public IP prefix SKU. Possible values include: 'PublicIPPrefixSkuNameStandard'
21467	Name PublicIPPrefixSkuName `json:"name,omitempty"`
21468}
21469
21470// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
21471type QueryTroubleshootingParameters struct {
21472	// TargetResourceID - The target resource ID to query the troubleshooting result.
21473	TargetResourceID *string `json:"targetResourceId,omitempty"`
21474}
21475
21476// ReferencedPublicIPAddress reference to a public IP address.
21477type ReferencedPublicIPAddress struct {
21478	// ID - The PublicIPAddress Reference
21479	ID *string `json:"id,omitempty"`
21480}
21481
21482// Resource common resource representation.
21483type Resource struct {
21484	// ID - Resource ID.
21485	ID *string `json:"id,omitempty"`
21486	// Name - READ-ONLY; Resource name.
21487	Name *string `json:"name,omitempty"`
21488	// Type - READ-ONLY; Resource type.
21489	Type *string `json:"type,omitempty"`
21490	// Location - Resource location.
21491	Location *string `json:"location,omitempty"`
21492	// Tags - Resource tags.
21493	Tags map[string]*string `json:"tags"`
21494}
21495
21496// MarshalJSON is the custom marshaler for Resource.
21497func (r Resource) MarshalJSON() ([]byte, error) {
21498	objectMap := make(map[string]interface{})
21499	if r.ID != nil {
21500		objectMap["id"] = r.ID
21501	}
21502	if r.Location != nil {
21503		objectMap["location"] = r.Location
21504	}
21505	if r.Tags != nil {
21506		objectMap["tags"] = r.Tags
21507	}
21508	return json.Marshal(objectMap)
21509}
21510
21511// ResourceNavigationLink resourceNavigationLink resource.
21512type ResourceNavigationLink struct {
21513	// ResourceNavigationLinkFormat - Resource navigation link properties format.
21514	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
21515	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
21516	Name *string `json:"name,omitempty"`
21517	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21518	Etag *string `json:"etag,omitempty"`
21519	// ID - Resource ID.
21520	ID *string `json:"id,omitempty"`
21521}
21522
21523// MarshalJSON is the custom marshaler for ResourceNavigationLink.
21524func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
21525	objectMap := make(map[string]interface{})
21526	if rnl.ResourceNavigationLinkFormat != nil {
21527		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
21528	}
21529	if rnl.Name != nil {
21530		objectMap["name"] = rnl.Name
21531	}
21532	if rnl.ID != nil {
21533		objectMap["id"] = rnl.ID
21534	}
21535	return json.Marshal(objectMap)
21536}
21537
21538// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
21539func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
21540	var m map[string]*json.RawMessage
21541	err := json.Unmarshal(body, &m)
21542	if err != nil {
21543		return err
21544	}
21545	for k, v := range m {
21546		switch k {
21547		case "properties":
21548			if v != nil {
21549				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
21550				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
21551				if err != nil {
21552					return err
21553				}
21554				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
21555			}
21556		case "name":
21557			if v != nil {
21558				var name string
21559				err = json.Unmarshal(*v, &name)
21560				if err != nil {
21561					return err
21562				}
21563				rnl.Name = &name
21564			}
21565		case "etag":
21566			if v != nil {
21567				var etag string
21568				err = json.Unmarshal(*v, &etag)
21569				if err != nil {
21570					return err
21571				}
21572				rnl.Etag = &etag
21573			}
21574		case "id":
21575			if v != nil {
21576				var ID string
21577				err = json.Unmarshal(*v, &ID)
21578				if err != nil {
21579					return err
21580				}
21581				rnl.ID = &ID
21582			}
21583		}
21584	}
21585
21586	return nil
21587}
21588
21589// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
21590type ResourceNavigationLinkFormat struct {
21591	// LinkedResourceType - Resource type of the linked resource.
21592	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
21593	// Link - Link to the external resource
21594	Link *string `json:"link,omitempty"`
21595	// ProvisioningState - READ-ONLY; Provisioning state of the ResourceNavigationLink resource.
21596	ProvisioningState *string `json:"provisioningState,omitempty"`
21597}
21598
21599// ResourceNavigationLinksListResult response for ResourceNavigationLinks_Get operation.
21600type ResourceNavigationLinksListResult struct {
21601	autorest.Response `json:"-"`
21602	// Value - The resource navigation links in a subnet.
21603	Value *[]ResourceNavigationLink `json:"value,omitempty"`
21604	// NextLink - The URL to get the next set of results.
21605	NextLink *string `json:"nextLink,omitempty"`
21606}
21607
21608// RetentionPolicyParameters parameters that define the retention policy for flow log.
21609type RetentionPolicyParameters struct {
21610	// Days - Number of days to retain flow log records.
21611	Days *int32 `json:"days,omitempty"`
21612	// Enabled - Flag to enable/disable retention.
21613	Enabled *bool `json:"enabled,omitempty"`
21614}
21615
21616// Route route resource
21617type Route struct {
21618	autorest.Response `json:"-"`
21619	// RoutePropertiesFormat - Properties of the route.
21620	*RoutePropertiesFormat `json:"properties,omitempty"`
21621	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21622	Name *string `json:"name,omitempty"`
21623	// Etag - A unique read-only string that changes whenever the resource is updated.
21624	Etag *string `json:"etag,omitempty"`
21625	// ID - Resource ID.
21626	ID *string `json:"id,omitempty"`
21627}
21628
21629// MarshalJSON is the custom marshaler for Route.
21630func (r Route) MarshalJSON() ([]byte, error) {
21631	objectMap := make(map[string]interface{})
21632	if r.RoutePropertiesFormat != nil {
21633		objectMap["properties"] = r.RoutePropertiesFormat
21634	}
21635	if r.Name != nil {
21636		objectMap["name"] = r.Name
21637	}
21638	if r.Etag != nil {
21639		objectMap["etag"] = r.Etag
21640	}
21641	if r.ID != nil {
21642		objectMap["id"] = r.ID
21643	}
21644	return json.Marshal(objectMap)
21645}
21646
21647// UnmarshalJSON is the custom unmarshaler for Route struct.
21648func (r *Route) UnmarshalJSON(body []byte) error {
21649	var m map[string]*json.RawMessage
21650	err := json.Unmarshal(body, &m)
21651	if err != nil {
21652		return err
21653	}
21654	for k, v := range m {
21655		switch k {
21656		case "properties":
21657			if v != nil {
21658				var routePropertiesFormat RoutePropertiesFormat
21659				err = json.Unmarshal(*v, &routePropertiesFormat)
21660				if err != nil {
21661					return err
21662				}
21663				r.RoutePropertiesFormat = &routePropertiesFormat
21664			}
21665		case "name":
21666			if v != nil {
21667				var name string
21668				err = json.Unmarshal(*v, &name)
21669				if err != nil {
21670					return err
21671				}
21672				r.Name = &name
21673			}
21674		case "etag":
21675			if v != nil {
21676				var etag string
21677				err = json.Unmarshal(*v, &etag)
21678				if err != nil {
21679					return err
21680				}
21681				r.Etag = &etag
21682			}
21683		case "id":
21684			if v != nil {
21685				var ID string
21686				err = json.Unmarshal(*v, &ID)
21687				if err != nil {
21688					return err
21689				}
21690				r.ID = &ID
21691			}
21692		}
21693	}
21694
21695	return nil
21696}
21697
21698// RouteFilter route Filter Resource.
21699type RouteFilter struct {
21700	autorest.Response `json:"-"`
21701	// RouteFilterPropertiesFormat - Properties of the route filter.
21702	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
21703	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
21704	Etag *string `json:"etag,omitempty"`
21705	// ID - Resource ID.
21706	ID *string `json:"id,omitempty"`
21707	// Name - READ-ONLY; Resource name.
21708	Name *string `json:"name,omitempty"`
21709	// Type - READ-ONLY; Resource type.
21710	Type *string `json:"type,omitempty"`
21711	// Location - Resource location.
21712	Location *string `json:"location,omitempty"`
21713	// Tags - Resource tags.
21714	Tags map[string]*string `json:"tags"`
21715}
21716
21717// MarshalJSON is the custom marshaler for RouteFilter.
21718func (rf RouteFilter) MarshalJSON() ([]byte, error) {
21719	objectMap := make(map[string]interface{})
21720	if rf.RouteFilterPropertiesFormat != nil {
21721		objectMap["properties"] = rf.RouteFilterPropertiesFormat
21722	}
21723	if rf.ID != nil {
21724		objectMap["id"] = rf.ID
21725	}
21726	if rf.Location != nil {
21727		objectMap["location"] = rf.Location
21728	}
21729	if rf.Tags != nil {
21730		objectMap["tags"] = rf.Tags
21731	}
21732	return json.Marshal(objectMap)
21733}
21734
21735// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
21736func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
21737	var m map[string]*json.RawMessage
21738	err := json.Unmarshal(body, &m)
21739	if err != nil {
21740		return err
21741	}
21742	for k, v := range m {
21743		switch k {
21744		case "properties":
21745			if v != nil {
21746				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
21747				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
21748				if err != nil {
21749					return err
21750				}
21751				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
21752			}
21753		case "etag":
21754			if v != nil {
21755				var etag string
21756				err = json.Unmarshal(*v, &etag)
21757				if err != nil {
21758					return err
21759				}
21760				rf.Etag = &etag
21761			}
21762		case "id":
21763			if v != nil {
21764				var ID string
21765				err = json.Unmarshal(*v, &ID)
21766				if err != nil {
21767					return err
21768				}
21769				rf.ID = &ID
21770			}
21771		case "name":
21772			if v != nil {
21773				var name string
21774				err = json.Unmarshal(*v, &name)
21775				if err != nil {
21776					return err
21777				}
21778				rf.Name = &name
21779			}
21780		case "type":
21781			if v != nil {
21782				var typeVar string
21783				err = json.Unmarshal(*v, &typeVar)
21784				if err != nil {
21785					return err
21786				}
21787				rf.Type = &typeVar
21788			}
21789		case "location":
21790			if v != nil {
21791				var location string
21792				err = json.Unmarshal(*v, &location)
21793				if err != nil {
21794					return err
21795				}
21796				rf.Location = &location
21797			}
21798		case "tags":
21799			if v != nil {
21800				var tags map[string]*string
21801				err = json.Unmarshal(*v, &tags)
21802				if err != nil {
21803					return err
21804				}
21805				rf.Tags = tags
21806			}
21807		}
21808	}
21809
21810	return nil
21811}
21812
21813// RouteFilterListResult response for the ListRouteFilters API service call.
21814type RouteFilterListResult struct {
21815	autorest.Response `json:"-"`
21816	// Value - Gets a list of route filters in a resource group.
21817	Value *[]RouteFilter `json:"value,omitempty"`
21818	// NextLink - The URL to get the next set of results.
21819	NextLink *string `json:"nextLink,omitempty"`
21820}
21821
21822// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
21823type RouteFilterListResultIterator struct {
21824	i    int
21825	page RouteFilterListResultPage
21826}
21827
21828// NextWithContext advances to the next value.  If there was an error making
21829// the request the iterator does not advance and the error is returned.
21830func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
21831	if tracing.IsEnabled() {
21832		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
21833		defer func() {
21834			sc := -1
21835			if iter.Response().Response.Response != nil {
21836				sc = iter.Response().Response.Response.StatusCode
21837			}
21838			tracing.EndSpan(ctx, sc, err)
21839		}()
21840	}
21841	iter.i++
21842	if iter.i < len(iter.page.Values()) {
21843		return nil
21844	}
21845	err = iter.page.NextWithContext(ctx)
21846	if err != nil {
21847		iter.i--
21848		return err
21849	}
21850	iter.i = 0
21851	return nil
21852}
21853
21854// Next advances to the next value.  If there was an error making
21855// the request the iterator does not advance and the error is returned.
21856// Deprecated: Use NextWithContext() instead.
21857func (iter *RouteFilterListResultIterator) Next() error {
21858	return iter.NextWithContext(context.Background())
21859}
21860
21861// NotDone returns true if the enumeration should be started or is not yet complete.
21862func (iter RouteFilterListResultIterator) NotDone() bool {
21863	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21864}
21865
21866// Response returns the raw server response from the last page request.
21867func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
21868	return iter.page.Response()
21869}
21870
21871// Value returns the current value or a zero-initialized value if the
21872// iterator has advanced beyond the end of the collection.
21873func (iter RouteFilterListResultIterator) Value() RouteFilter {
21874	if !iter.page.NotDone() {
21875		return RouteFilter{}
21876	}
21877	return iter.page.Values()[iter.i]
21878}
21879
21880// Creates a new instance of the RouteFilterListResultIterator type.
21881func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
21882	return RouteFilterListResultIterator{page: page}
21883}
21884
21885// IsEmpty returns true if the ListResult contains no values.
21886func (rflr RouteFilterListResult) IsEmpty() bool {
21887	return rflr.Value == nil || len(*rflr.Value) == 0
21888}
21889
21890// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
21891// It returns nil if no more results exist.
21892func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
21893	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
21894		return nil, nil
21895	}
21896	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21897		autorest.AsJSON(),
21898		autorest.AsGet(),
21899		autorest.WithBaseURL(to.String(rflr.NextLink)))
21900}
21901
21902// RouteFilterListResultPage contains a page of RouteFilter values.
21903type RouteFilterListResultPage struct {
21904	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
21905	rflr RouteFilterListResult
21906}
21907
21908// NextWithContext advances to the next page of values.  If there was an error making
21909// the request the page does not advance and the error is returned.
21910func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
21911	if tracing.IsEnabled() {
21912		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
21913		defer func() {
21914			sc := -1
21915			if page.Response().Response.Response != nil {
21916				sc = page.Response().Response.Response.StatusCode
21917			}
21918			tracing.EndSpan(ctx, sc, err)
21919		}()
21920	}
21921	next, err := page.fn(ctx, page.rflr)
21922	if err != nil {
21923		return err
21924	}
21925	page.rflr = next
21926	return nil
21927}
21928
21929// Next advances to the next page of values.  If there was an error making
21930// the request the page does not advance and the error is returned.
21931// Deprecated: Use NextWithContext() instead.
21932func (page *RouteFilterListResultPage) Next() error {
21933	return page.NextWithContext(context.Background())
21934}
21935
21936// NotDone returns true if the page enumeration should be started or is not yet complete.
21937func (page RouteFilterListResultPage) NotDone() bool {
21938	return !page.rflr.IsEmpty()
21939}
21940
21941// Response returns the raw server response from the last page request.
21942func (page RouteFilterListResultPage) Response() RouteFilterListResult {
21943	return page.rflr
21944}
21945
21946// Values returns the slice of values for the current page or nil if there are no values.
21947func (page RouteFilterListResultPage) Values() []RouteFilter {
21948	if page.rflr.IsEmpty() {
21949		return nil
21950	}
21951	return *page.rflr.Value
21952}
21953
21954// Creates a new instance of the RouteFilterListResultPage type.
21955func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
21956	return RouteFilterListResultPage{fn: getNextPage}
21957}
21958
21959// RouteFilterPropertiesFormat route Filter Resource
21960type RouteFilterPropertiesFormat struct {
21961	// Rules - Collection of RouteFilterRules contained within a route filter.
21962	Rules *[]RouteFilterRule `json:"rules,omitempty"`
21963	// Peerings - A collection of references to express route circuit peerings.
21964	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
21965	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
21966	ProvisioningState *string `json:"provisioningState,omitempty"`
21967}
21968
21969// RouteFilterRule route Filter Rule Resource
21970type RouteFilterRule struct {
21971	autorest.Response `json:"-"`
21972	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
21973	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
21974	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21975	Name *string `json:"name,omitempty"`
21976	// Location - Resource location.
21977	Location *string `json:"location,omitempty"`
21978	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21979	Etag *string `json:"etag,omitempty"`
21980	// ID - Resource ID.
21981	ID *string `json:"id,omitempty"`
21982}
21983
21984// MarshalJSON is the custom marshaler for RouteFilterRule.
21985func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
21986	objectMap := make(map[string]interface{})
21987	if rfr.RouteFilterRulePropertiesFormat != nil {
21988		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
21989	}
21990	if rfr.Name != nil {
21991		objectMap["name"] = rfr.Name
21992	}
21993	if rfr.Location != nil {
21994		objectMap["location"] = rfr.Location
21995	}
21996	if rfr.ID != nil {
21997		objectMap["id"] = rfr.ID
21998	}
21999	return json.Marshal(objectMap)
22000}
22001
22002// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
22003func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
22004	var m map[string]*json.RawMessage
22005	err := json.Unmarshal(body, &m)
22006	if err != nil {
22007		return err
22008	}
22009	for k, v := range m {
22010		switch k {
22011		case "properties":
22012			if v != nil {
22013				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
22014				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
22015				if err != nil {
22016					return err
22017				}
22018				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
22019			}
22020		case "name":
22021			if v != nil {
22022				var name string
22023				err = json.Unmarshal(*v, &name)
22024				if err != nil {
22025					return err
22026				}
22027				rfr.Name = &name
22028			}
22029		case "location":
22030			if v != nil {
22031				var location string
22032				err = json.Unmarshal(*v, &location)
22033				if err != nil {
22034					return err
22035				}
22036				rfr.Location = &location
22037			}
22038		case "etag":
22039			if v != nil {
22040				var etag string
22041				err = json.Unmarshal(*v, &etag)
22042				if err != nil {
22043					return err
22044				}
22045				rfr.Etag = &etag
22046			}
22047		case "id":
22048			if v != nil {
22049				var ID string
22050				err = json.Unmarshal(*v, &ID)
22051				if err != nil {
22052					return err
22053				}
22054				rfr.ID = &ID
22055			}
22056		}
22057	}
22058
22059	return nil
22060}
22061
22062// RouteFilterRuleListResult response for the ListRouteFilterRules API service call
22063type RouteFilterRuleListResult struct {
22064	autorest.Response `json:"-"`
22065	// Value - Gets a list of RouteFilterRules in a resource group.
22066	Value *[]RouteFilterRule `json:"value,omitempty"`
22067	// NextLink - The URL to get the next set of results.
22068	NextLink *string `json:"nextLink,omitempty"`
22069}
22070
22071// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
22072type RouteFilterRuleListResultIterator struct {
22073	i    int
22074	page RouteFilterRuleListResultPage
22075}
22076
22077// NextWithContext advances to the next value.  If there was an error making
22078// the request the iterator does not advance and the error is returned.
22079func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
22080	if tracing.IsEnabled() {
22081		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
22082		defer func() {
22083			sc := -1
22084			if iter.Response().Response.Response != nil {
22085				sc = iter.Response().Response.Response.StatusCode
22086			}
22087			tracing.EndSpan(ctx, sc, err)
22088		}()
22089	}
22090	iter.i++
22091	if iter.i < len(iter.page.Values()) {
22092		return nil
22093	}
22094	err = iter.page.NextWithContext(ctx)
22095	if err != nil {
22096		iter.i--
22097		return err
22098	}
22099	iter.i = 0
22100	return nil
22101}
22102
22103// Next advances to the next value.  If there was an error making
22104// the request the iterator does not advance and the error is returned.
22105// Deprecated: Use NextWithContext() instead.
22106func (iter *RouteFilterRuleListResultIterator) Next() error {
22107	return iter.NextWithContext(context.Background())
22108}
22109
22110// NotDone returns true if the enumeration should be started or is not yet complete.
22111func (iter RouteFilterRuleListResultIterator) NotDone() bool {
22112	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22113}
22114
22115// Response returns the raw server response from the last page request.
22116func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
22117	return iter.page.Response()
22118}
22119
22120// Value returns the current value or a zero-initialized value if the
22121// iterator has advanced beyond the end of the collection.
22122func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
22123	if !iter.page.NotDone() {
22124		return RouteFilterRule{}
22125	}
22126	return iter.page.Values()[iter.i]
22127}
22128
22129// Creates a new instance of the RouteFilterRuleListResultIterator type.
22130func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
22131	return RouteFilterRuleListResultIterator{page: page}
22132}
22133
22134// IsEmpty returns true if the ListResult contains no values.
22135func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
22136	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
22137}
22138
22139// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
22140// It returns nil if no more results exist.
22141func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
22142	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
22143		return nil, nil
22144	}
22145	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22146		autorest.AsJSON(),
22147		autorest.AsGet(),
22148		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
22149}
22150
22151// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
22152type RouteFilterRuleListResultPage struct {
22153	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
22154	rfrlr RouteFilterRuleListResult
22155}
22156
22157// NextWithContext advances to the next page of values.  If there was an error making
22158// the request the page does not advance and the error is returned.
22159func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
22160	if tracing.IsEnabled() {
22161		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
22162		defer func() {
22163			sc := -1
22164			if page.Response().Response.Response != nil {
22165				sc = page.Response().Response.Response.StatusCode
22166			}
22167			tracing.EndSpan(ctx, sc, err)
22168		}()
22169	}
22170	next, err := page.fn(ctx, page.rfrlr)
22171	if err != nil {
22172		return err
22173	}
22174	page.rfrlr = next
22175	return nil
22176}
22177
22178// Next advances to the next page of values.  If there was an error making
22179// the request the page does not advance and the error is returned.
22180// Deprecated: Use NextWithContext() instead.
22181func (page *RouteFilterRuleListResultPage) Next() error {
22182	return page.NextWithContext(context.Background())
22183}
22184
22185// NotDone returns true if the page enumeration should be started or is not yet complete.
22186func (page RouteFilterRuleListResultPage) NotDone() bool {
22187	return !page.rfrlr.IsEmpty()
22188}
22189
22190// Response returns the raw server response from the last page request.
22191func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
22192	return page.rfrlr
22193}
22194
22195// Values returns the slice of values for the current page or nil if there are no values.
22196func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
22197	if page.rfrlr.IsEmpty() {
22198		return nil
22199	}
22200	return *page.rfrlr.Value
22201}
22202
22203// Creates a new instance of the RouteFilterRuleListResultPage type.
22204func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
22205	return RouteFilterRuleListResultPage{fn: getNextPage}
22206}
22207
22208// RouteFilterRulePropertiesFormat route Filter Rule Resource
22209type RouteFilterRulePropertiesFormat struct {
22210	// Access - The access type of the rule. Possible values include: 'Allow', 'Deny'
22211	Access Access `json:"access,omitempty"`
22212	// RouteFilterRuleType - The rule type of the rule. Valid value is: 'Community'
22213	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
22214	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020']
22215	Communities *[]string `json:"communities,omitempty"`
22216	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
22217	ProvisioningState *string `json:"provisioningState,omitempty"`
22218}
22219
22220// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22221// long-running operation.
22222type RouteFilterRulesCreateOrUpdateFuture struct {
22223	azure.Future
22224}
22225
22226// Result returns the result of the asynchronous operation.
22227// If the operation has not completed it will return an error.
22228func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
22229	var done bool
22230	done, err = future.DoneWithContext(context.Background(), client)
22231	if err != nil {
22232		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22233		return
22234	}
22235	if !done {
22236		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
22237		return
22238	}
22239	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22240	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
22241		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
22242		if err != nil {
22243			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
22244		}
22245	}
22246	return
22247}
22248
22249// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22250// operation.
22251type RouteFilterRulesDeleteFuture struct {
22252	azure.Future
22253}
22254
22255// Result returns the result of the asynchronous operation.
22256// If the operation has not completed it will return an error.
22257func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
22258	var done bool
22259	done, err = future.DoneWithContext(context.Background(), client)
22260	if err != nil {
22261		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
22262		return
22263	}
22264	if !done {
22265		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
22266		return
22267	}
22268	ar.Response = future.Response()
22269	return
22270}
22271
22272// RouteFilterRulesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
22273// operation.
22274type RouteFilterRulesUpdateFuture struct {
22275	azure.Future
22276}
22277
22278// Result returns the result of the asynchronous operation.
22279// If the operation has not completed it will return an error.
22280func (future *RouteFilterRulesUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
22281	var done bool
22282	done, err = future.DoneWithContext(context.Background(), client)
22283	if err != nil {
22284		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", future.Response(), "Polling failure")
22285		return
22286	}
22287	if !done {
22288		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesUpdateFuture")
22289		return
22290	}
22291	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22292	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
22293		rfr, err = client.UpdateResponder(rfr.Response.Response)
22294		if err != nil {
22295			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
22296		}
22297	}
22298	return
22299}
22300
22301// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22302// long-running operation.
22303type RouteFiltersCreateOrUpdateFuture struct {
22304	azure.Future
22305}
22306
22307// Result returns the result of the asynchronous operation.
22308// If the operation has not completed it will return an error.
22309func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
22310	var done bool
22311	done, err = future.DoneWithContext(context.Background(), client)
22312	if err != nil {
22313		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22314		return
22315	}
22316	if !done {
22317		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
22318		return
22319	}
22320	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22321	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
22322		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
22323		if err != nil {
22324			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
22325		}
22326	}
22327	return
22328}
22329
22330// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22331// operation.
22332type RouteFiltersDeleteFuture struct {
22333	azure.Future
22334}
22335
22336// Result returns the result of the asynchronous operation.
22337// If the operation has not completed it will return an error.
22338func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
22339	var done bool
22340	done, err = future.DoneWithContext(context.Background(), client)
22341	if err != nil {
22342		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
22343		return
22344	}
22345	if !done {
22346		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
22347		return
22348	}
22349	ar.Response = future.Response()
22350	return
22351}
22352
22353// RouteFiltersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
22354// operation.
22355type RouteFiltersUpdateFuture struct {
22356	azure.Future
22357}
22358
22359// Result returns the result of the asynchronous operation.
22360// If the operation has not completed it will return an error.
22361func (future *RouteFiltersUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
22362	var done bool
22363	done, err = future.DoneWithContext(context.Background(), client)
22364	if err != nil {
22365		err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", future.Response(), "Polling failure")
22366		return
22367	}
22368	if !done {
22369		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersUpdateFuture")
22370		return
22371	}
22372	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22373	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
22374		rf, err = client.UpdateResponder(rf.Response.Response)
22375		if err != nil {
22376			err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
22377		}
22378	}
22379	return
22380}
22381
22382// RouteListResult response for the ListRoute API service call
22383type RouteListResult struct {
22384	autorest.Response `json:"-"`
22385	// Value - Gets a list of routes in a resource group.
22386	Value *[]Route `json:"value,omitempty"`
22387	// NextLink - The URL to get the next set of results.
22388	NextLink *string `json:"nextLink,omitempty"`
22389}
22390
22391// RouteListResultIterator provides access to a complete listing of Route values.
22392type RouteListResultIterator struct {
22393	i    int
22394	page RouteListResultPage
22395}
22396
22397// NextWithContext advances to the next value.  If there was an error making
22398// the request the iterator does not advance and the error is returned.
22399func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
22400	if tracing.IsEnabled() {
22401		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
22402		defer func() {
22403			sc := -1
22404			if iter.Response().Response.Response != nil {
22405				sc = iter.Response().Response.Response.StatusCode
22406			}
22407			tracing.EndSpan(ctx, sc, err)
22408		}()
22409	}
22410	iter.i++
22411	if iter.i < len(iter.page.Values()) {
22412		return nil
22413	}
22414	err = iter.page.NextWithContext(ctx)
22415	if err != nil {
22416		iter.i--
22417		return err
22418	}
22419	iter.i = 0
22420	return nil
22421}
22422
22423// Next advances to the next value.  If there was an error making
22424// the request the iterator does not advance and the error is returned.
22425// Deprecated: Use NextWithContext() instead.
22426func (iter *RouteListResultIterator) Next() error {
22427	return iter.NextWithContext(context.Background())
22428}
22429
22430// NotDone returns true if the enumeration should be started or is not yet complete.
22431func (iter RouteListResultIterator) NotDone() bool {
22432	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22433}
22434
22435// Response returns the raw server response from the last page request.
22436func (iter RouteListResultIterator) Response() RouteListResult {
22437	return iter.page.Response()
22438}
22439
22440// Value returns the current value or a zero-initialized value if the
22441// iterator has advanced beyond the end of the collection.
22442func (iter RouteListResultIterator) Value() Route {
22443	if !iter.page.NotDone() {
22444		return Route{}
22445	}
22446	return iter.page.Values()[iter.i]
22447}
22448
22449// Creates a new instance of the RouteListResultIterator type.
22450func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
22451	return RouteListResultIterator{page: page}
22452}
22453
22454// IsEmpty returns true if the ListResult contains no values.
22455func (rlr RouteListResult) IsEmpty() bool {
22456	return rlr.Value == nil || len(*rlr.Value) == 0
22457}
22458
22459// routeListResultPreparer prepares a request to retrieve the next set of results.
22460// It returns nil if no more results exist.
22461func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
22462	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
22463		return nil, nil
22464	}
22465	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22466		autorest.AsJSON(),
22467		autorest.AsGet(),
22468		autorest.WithBaseURL(to.String(rlr.NextLink)))
22469}
22470
22471// RouteListResultPage contains a page of Route values.
22472type RouteListResultPage struct {
22473	fn  func(context.Context, RouteListResult) (RouteListResult, error)
22474	rlr RouteListResult
22475}
22476
22477// NextWithContext advances to the next page of values.  If there was an error making
22478// the request the page does not advance and the error is returned.
22479func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
22480	if tracing.IsEnabled() {
22481		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
22482		defer func() {
22483			sc := -1
22484			if page.Response().Response.Response != nil {
22485				sc = page.Response().Response.Response.StatusCode
22486			}
22487			tracing.EndSpan(ctx, sc, err)
22488		}()
22489	}
22490	next, err := page.fn(ctx, page.rlr)
22491	if err != nil {
22492		return err
22493	}
22494	page.rlr = next
22495	return nil
22496}
22497
22498// Next advances to the next page of values.  If there was an error making
22499// the request the page does not advance and the error is returned.
22500// Deprecated: Use NextWithContext() instead.
22501func (page *RouteListResultPage) Next() error {
22502	return page.NextWithContext(context.Background())
22503}
22504
22505// NotDone returns true if the page enumeration should be started or is not yet complete.
22506func (page RouteListResultPage) NotDone() bool {
22507	return !page.rlr.IsEmpty()
22508}
22509
22510// Response returns the raw server response from the last page request.
22511func (page RouteListResultPage) Response() RouteListResult {
22512	return page.rlr
22513}
22514
22515// Values returns the slice of values for the current page or nil if there are no values.
22516func (page RouteListResultPage) Values() []Route {
22517	if page.rlr.IsEmpty() {
22518		return nil
22519	}
22520	return *page.rlr.Value
22521}
22522
22523// Creates a new instance of the RouteListResultPage type.
22524func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
22525	return RouteListResultPage{fn: getNextPage}
22526}
22527
22528// RoutePropertiesFormat route resource
22529type RoutePropertiesFormat struct {
22530	// AddressPrefix - The destination CIDR to which the route applies.
22531	AddressPrefix *string `json:"addressPrefix,omitempty"`
22532	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
22533	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
22534	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
22535	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
22536	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
22537	ProvisioningState *string `json:"provisioningState,omitempty"`
22538}
22539
22540// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
22541// operation.
22542type RoutesCreateOrUpdateFuture struct {
22543	azure.Future
22544}
22545
22546// Result returns the result of the asynchronous operation.
22547// If the operation has not completed it will return an error.
22548func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
22549	var done bool
22550	done, err = future.DoneWithContext(context.Background(), client)
22551	if err != nil {
22552		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22553		return
22554	}
22555	if !done {
22556		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
22557		return
22558	}
22559	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22560	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
22561		r, err = client.CreateOrUpdateResponder(r.Response.Response)
22562		if err != nil {
22563			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
22564		}
22565	}
22566	return
22567}
22568
22569// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
22570type RoutesDeleteFuture struct {
22571	azure.Future
22572}
22573
22574// Result returns the result of the asynchronous operation.
22575// If the operation has not completed it will return an error.
22576func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
22577	var done bool
22578	done, err = future.DoneWithContext(context.Background(), client)
22579	if err != nil {
22580		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
22581		return
22582	}
22583	if !done {
22584		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
22585		return
22586	}
22587	ar.Response = future.Response()
22588	return
22589}
22590
22591// RouteTable route table resource.
22592type RouteTable struct {
22593	autorest.Response `json:"-"`
22594	// RouteTablePropertiesFormat - Properties of the route table.
22595	*RouteTablePropertiesFormat `json:"properties,omitempty"`
22596	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
22597	Etag *string `json:"etag,omitempty"`
22598	// ID - Resource ID.
22599	ID *string `json:"id,omitempty"`
22600	// Name - READ-ONLY; Resource name.
22601	Name *string `json:"name,omitempty"`
22602	// Type - READ-ONLY; Resource type.
22603	Type *string `json:"type,omitempty"`
22604	// Location - Resource location.
22605	Location *string `json:"location,omitempty"`
22606	// Tags - Resource tags.
22607	Tags map[string]*string `json:"tags"`
22608}
22609
22610// MarshalJSON is the custom marshaler for RouteTable.
22611func (rt RouteTable) MarshalJSON() ([]byte, error) {
22612	objectMap := make(map[string]interface{})
22613	if rt.RouteTablePropertiesFormat != nil {
22614		objectMap["properties"] = rt.RouteTablePropertiesFormat
22615	}
22616	if rt.Etag != nil {
22617		objectMap["etag"] = rt.Etag
22618	}
22619	if rt.ID != nil {
22620		objectMap["id"] = rt.ID
22621	}
22622	if rt.Location != nil {
22623		objectMap["location"] = rt.Location
22624	}
22625	if rt.Tags != nil {
22626		objectMap["tags"] = rt.Tags
22627	}
22628	return json.Marshal(objectMap)
22629}
22630
22631// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
22632func (rt *RouteTable) UnmarshalJSON(body []byte) error {
22633	var m map[string]*json.RawMessage
22634	err := json.Unmarshal(body, &m)
22635	if err != nil {
22636		return err
22637	}
22638	for k, v := range m {
22639		switch k {
22640		case "properties":
22641			if v != nil {
22642				var routeTablePropertiesFormat RouteTablePropertiesFormat
22643				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
22644				if err != nil {
22645					return err
22646				}
22647				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
22648			}
22649		case "etag":
22650			if v != nil {
22651				var etag string
22652				err = json.Unmarshal(*v, &etag)
22653				if err != nil {
22654					return err
22655				}
22656				rt.Etag = &etag
22657			}
22658		case "id":
22659			if v != nil {
22660				var ID string
22661				err = json.Unmarshal(*v, &ID)
22662				if err != nil {
22663					return err
22664				}
22665				rt.ID = &ID
22666			}
22667		case "name":
22668			if v != nil {
22669				var name string
22670				err = json.Unmarshal(*v, &name)
22671				if err != nil {
22672					return err
22673				}
22674				rt.Name = &name
22675			}
22676		case "type":
22677			if v != nil {
22678				var typeVar string
22679				err = json.Unmarshal(*v, &typeVar)
22680				if err != nil {
22681					return err
22682				}
22683				rt.Type = &typeVar
22684			}
22685		case "location":
22686			if v != nil {
22687				var location string
22688				err = json.Unmarshal(*v, &location)
22689				if err != nil {
22690					return err
22691				}
22692				rt.Location = &location
22693			}
22694		case "tags":
22695			if v != nil {
22696				var tags map[string]*string
22697				err = json.Unmarshal(*v, &tags)
22698				if err != nil {
22699					return err
22700				}
22701				rt.Tags = tags
22702			}
22703		}
22704	}
22705
22706	return nil
22707}
22708
22709// RouteTableListResult response for the ListRouteTable API service call.
22710type RouteTableListResult struct {
22711	autorest.Response `json:"-"`
22712	// Value - Gets a list of route tables in a resource group.
22713	Value *[]RouteTable `json:"value,omitempty"`
22714	// NextLink - The URL to get the next set of results.
22715	NextLink *string `json:"nextLink,omitempty"`
22716}
22717
22718// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
22719type RouteTableListResultIterator struct {
22720	i    int
22721	page RouteTableListResultPage
22722}
22723
22724// NextWithContext advances to the next value.  If there was an error making
22725// the request the iterator does not advance and the error is returned.
22726func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
22727	if tracing.IsEnabled() {
22728		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
22729		defer func() {
22730			sc := -1
22731			if iter.Response().Response.Response != nil {
22732				sc = iter.Response().Response.Response.StatusCode
22733			}
22734			tracing.EndSpan(ctx, sc, err)
22735		}()
22736	}
22737	iter.i++
22738	if iter.i < len(iter.page.Values()) {
22739		return nil
22740	}
22741	err = iter.page.NextWithContext(ctx)
22742	if err != nil {
22743		iter.i--
22744		return err
22745	}
22746	iter.i = 0
22747	return nil
22748}
22749
22750// Next advances to the next value.  If there was an error making
22751// the request the iterator does not advance and the error is returned.
22752// Deprecated: Use NextWithContext() instead.
22753func (iter *RouteTableListResultIterator) Next() error {
22754	return iter.NextWithContext(context.Background())
22755}
22756
22757// NotDone returns true if the enumeration should be started or is not yet complete.
22758func (iter RouteTableListResultIterator) NotDone() bool {
22759	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22760}
22761
22762// Response returns the raw server response from the last page request.
22763func (iter RouteTableListResultIterator) Response() RouteTableListResult {
22764	return iter.page.Response()
22765}
22766
22767// Value returns the current value or a zero-initialized value if the
22768// iterator has advanced beyond the end of the collection.
22769func (iter RouteTableListResultIterator) Value() RouteTable {
22770	if !iter.page.NotDone() {
22771		return RouteTable{}
22772	}
22773	return iter.page.Values()[iter.i]
22774}
22775
22776// Creates a new instance of the RouteTableListResultIterator type.
22777func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
22778	return RouteTableListResultIterator{page: page}
22779}
22780
22781// IsEmpty returns true if the ListResult contains no values.
22782func (rtlr RouteTableListResult) IsEmpty() bool {
22783	return rtlr.Value == nil || len(*rtlr.Value) == 0
22784}
22785
22786// routeTableListResultPreparer prepares a request to retrieve the next set of results.
22787// It returns nil if no more results exist.
22788func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
22789	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
22790		return nil, nil
22791	}
22792	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22793		autorest.AsJSON(),
22794		autorest.AsGet(),
22795		autorest.WithBaseURL(to.String(rtlr.NextLink)))
22796}
22797
22798// RouteTableListResultPage contains a page of RouteTable values.
22799type RouteTableListResultPage struct {
22800	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
22801	rtlr RouteTableListResult
22802}
22803
22804// NextWithContext advances to the next page of values.  If there was an error making
22805// the request the page does not advance and the error is returned.
22806func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
22807	if tracing.IsEnabled() {
22808		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
22809		defer func() {
22810			sc := -1
22811			if page.Response().Response.Response != nil {
22812				sc = page.Response().Response.Response.StatusCode
22813			}
22814			tracing.EndSpan(ctx, sc, err)
22815		}()
22816	}
22817	next, err := page.fn(ctx, page.rtlr)
22818	if err != nil {
22819		return err
22820	}
22821	page.rtlr = next
22822	return nil
22823}
22824
22825// Next advances to the next page of values.  If there was an error making
22826// the request the page does not advance and the error is returned.
22827// Deprecated: Use NextWithContext() instead.
22828func (page *RouteTableListResultPage) Next() error {
22829	return page.NextWithContext(context.Background())
22830}
22831
22832// NotDone returns true if the page enumeration should be started or is not yet complete.
22833func (page RouteTableListResultPage) NotDone() bool {
22834	return !page.rtlr.IsEmpty()
22835}
22836
22837// Response returns the raw server response from the last page request.
22838func (page RouteTableListResultPage) Response() RouteTableListResult {
22839	return page.rtlr
22840}
22841
22842// Values returns the slice of values for the current page or nil if there are no values.
22843func (page RouteTableListResultPage) Values() []RouteTable {
22844	if page.rtlr.IsEmpty() {
22845		return nil
22846	}
22847	return *page.rtlr.Value
22848}
22849
22850// Creates a new instance of the RouteTableListResultPage type.
22851func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
22852	return RouteTableListResultPage{fn: getNextPage}
22853}
22854
22855// RouteTablePropertiesFormat route Table resource
22856type RouteTablePropertiesFormat struct {
22857	// Routes - Collection of routes contained within a route table.
22858	Routes *[]Route `json:"routes,omitempty"`
22859	// Subnets - READ-ONLY; A collection of references to subnets.
22860	Subnets *[]Subnet `json:"subnets,omitempty"`
22861	// DisableBgpRoutePropagation - Gets or sets whether to disable the routes learned by BGP on that route table. True means disable.
22862	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
22863	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
22864	ProvisioningState *string `json:"provisioningState,omitempty"`
22865}
22866
22867// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22868// long-running operation.
22869type RouteTablesCreateOrUpdateFuture struct {
22870	azure.Future
22871}
22872
22873// Result returns the result of the asynchronous operation.
22874// If the operation has not completed it will return an error.
22875func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
22876	var done bool
22877	done, err = future.DoneWithContext(context.Background(), client)
22878	if err != nil {
22879		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22880		return
22881	}
22882	if !done {
22883		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
22884		return
22885	}
22886	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22887	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
22888		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
22889		if err != nil {
22890			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
22891		}
22892	}
22893	return
22894}
22895
22896// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22897// operation.
22898type RouteTablesDeleteFuture struct {
22899	azure.Future
22900}
22901
22902// Result returns the result of the asynchronous operation.
22903// If the operation has not completed it will return an error.
22904func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
22905	var done bool
22906	done, err = future.DoneWithContext(context.Background(), client)
22907	if err != nil {
22908		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
22909		return
22910	}
22911	if !done {
22912		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
22913		return
22914	}
22915	ar.Response = future.Response()
22916	return
22917}
22918
22919// RouteTablesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
22920// operation.
22921type RouteTablesUpdateTagsFuture struct {
22922	azure.Future
22923}
22924
22925// Result returns the result of the asynchronous operation.
22926// If the operation has not completed it will return an error.
22927func (future *RouteTablesUpdateTagsFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
22928	var done bool
22929	done, err = future.DoneWithContext(context.Background(), client)
22930	if err != nil {
22931		err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
22932		return
22933	}
22934	if !done {
22935		err = azure.NewAsyncOpIncompleteError("network.RouteTablesUpdateTagsFuture")
22936		return
22937	}
22938	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22939	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
22940		rt, err = client.UpdateTagsResponder(rt.Response.Response)
22941		if err != nil {
22942			err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", rt.Response.Response, "Failure responding to request")
22943		}
22944	}
22945	return
22946}
22947
22948// SecurityGroup networkSecurityGroup resource.
22949type SecurityGroup struct {
22950	autorest.Response `json:"-"`
22951	// SecurityGroupPropertiesFormat - Properties of the network security group
22952	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
22953	// Etag - A unique read-only string that changes whenever the resource is updated.
22954	Etag *string `json:"etag,omitempty"`
22955	// ID - Resource ID.
22956	ID *string `json:"id,omitempty"`
22957	// Name - READ-ONLY; Resource name.
22958	Name *string `json:"name,omitempty"`
22959	// Type - READ-ONLY; Resource type.
22960	Type *string `json:"type,omitempty"`
22961	// Location - Resource location.
22962	Location *string `json:"location,omitempty"`
22963	// Tags - Resource tags.
22964	Tags map[string]*string `json:"tags"`
22965}
22966
22967// MarshalJSON is the custom marshaler for SecurityGroup.
22968func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
22969	objectMap := make(map[string]interface{})
22970	if sg.SecurityGroupPropertiesFormat != nil {
22971		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
22972	}
22973	if sg.Etag != nil {
22974		objectMap["etag"] = sg.Etag
22975	}
22976	if sg.ID != nil {
22977		objectMap["id"] = sg.ID
22978	}
22979	if sg.Location != nil {
22980		objectMap["location"] = sg.Location
22981	}
22982	if sg.Tags != nil {
22983		objectMap["tags"] = sg.Tags
22984	}
22985	return json.Marshal(objectMap)
22986}
22987
22988// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
22989func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
22990	var m map[string]*json.RawMessage
22991	err := json.Unmarshal(body, &m)
22992	if err != nil {
22993		return err
22994	}
22995	for k, v := range m {
22996		switch k {
22997		case "properties":
22998			if v != nil {
22999				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
23000				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
23001				if err != nil {
23002					return err
23003				}
23004				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
23005			}
23006		case "etag":
23007			if v != nil {
23008				var etag string
23009				err = json.Unmarshal(*v, &etag)
23010				if err != nil {
23011					return err
23012				}
23013				sg.Etag = &etag
23014			}
23015		case "id":
23016			if v != nil {
23017				var ID string
23018				err = json.Unmarshal(*v, &ID)
23019				if err != nil {
23020					return err
23021				}
23022				sg.ID = &ID
23023			}
23024		case "name":
23025			if v != nil {
23026				var name string
23027				err = json.Unmarshal(*v, &name)
23028				if err != nil {
23029					return err
23030				}
23031				sg.Name = &name
23032			}
23033		case "type":
23034			if v != nil {
23035				var typeVar string
23036				err = json.Unmarshal(*v, &typeVar)
23037				if err != nil {
23038					return err
23039				}
23040				sg.Type = &typeVar
23041			}
23042		case "location":
23043			if v != nil {
23044				var location string
23045				err = json.Unmarshal(*v, &location)
23046				if err != nil {
23047					return err
23048				}
23049				sg.Location = &location
23050			}
23051		case "tags":
23052			if v != nil {
23053				var tags map[string]*string
23054				err = json.Unmarshal(*v, &tags)
23055				if err != nil {
23056					return err
23057				}
23058				sg.Tags = tags
23059			}
23060		}
23061	}
23062
23063	return nil
23064}
23065
23066// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
23067type SecurityGroupListResult struct {
23068	autorest.Response `json:"-"`
23069	// Value - A list of NetworkSecurityGroup resources.
23070	Value *[]SecurityGroup `json:"value,omitempty"`
23071	// NextLink - The URL to get the next set of results.
23072	NextLink *string `json:"nextLink,omitempty"`
23073}
23074
23075// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
23076type SecurityGroupListResultIterator struct {
23077	i    int
23078	page SecurityGroupListResultPage
23079}
23080
23081// NextWithContext advances to the next value.  If there was an error making
23082// the request the iterator does not advance and the error is returned.
23083func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
23084	if tracing.IsEnabled() {
23085		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
23086		defer func() {
23087			sc := -1
23088			if iter.Response().Response.Response != nil {
23089				sc = iter.Response().Response.Response.StatusCode
23090			}
23091			tracing.EndSpan(ctx, sc, err)
23092		}()
23093	}
23094	iter.i++
23095	if iter.i < len(iter.page.Values()) {
23096		return nil
23097	}
23098	err = iter.page.NextWithContext(ctx)
23099	if err != nil {
23100		iter.i--
23101		return err
23102	}
23103	iter.i = 0
23104	return nil
23105}
23106
23107// Next advances to the next value.  If there was an error making
23108// the request the iterator does not advance and the error is returned.
23109// Deprecated: Use NextWithContext() instead.
23110func (iter *SecurityGroupListResultIterator) Next() error {
23111	return iter.NextWithContext(context.Background())
23112}
23113
23114// NotDone returns true if the enumeration should be started or is not yet complete.
23115func (iter SecurityGroupListResultIterator) NotDone() bool {
23116	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23117}
23118
23119// Response returns the raw server response from the last page request.
23120func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
23121	return iter.page.Response()
23122}
23123
23124// Value returns the current value or a zero-initialized value if the
23125// iterator has advanced beyond the end of the collection.
23126func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
23127	if !iter.page.NotDone() {
23128		return SecurityGroup{}
23129	}
23130	return iter.page.Values()[iter.i]
23131}
23132
23133// Creates a new instance of the SecurityGroupListResultIterator type.
23134func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
23135	return SecurityGroupListResultIterator{page: page}
23136}
23137
23138// IsEmpty returns true if the ListResult contains no values.
23139func (sglr SecurityGroupListResult) IsEmpty() bool {
23140	return sglr.Value == nil || len(*sglr.Value) == 0
23141}
23142
23143// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
23144// It returns nil if no more results exist.
23145func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
23146	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
23147		return nil, nil
23148	}
23149	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23150		autorest.AsJSON(),
23151		autorest.AsGet(),
23152		autorest.WithBaseURL(to.String(sglr.NextLink)))
23153}
23154
23155// SecurityGroupListResultPage contains a page of SecurityGroup values.
23156type SecurityGroupListResultPage struct {
23157	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
23158	sglr SecurityGroupListResult
23159}
23160
23161// NextWithContext advances to the next page of values.  If there was an error making
23162// the request the page does not advance and the error is returned.
23163func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
23164	if tracing.IsEnabled() {
23165		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
23166		defer func() {
23167			sc := -1
23168			if page.Response().Response.Response != nil {
23169				sc = page.Response().Response.Response.StatusCode
23170			}
23171			tracing.EndSpan(ctx, sc, err)
23172		}()
23173	}
23174	next, err := page.fn(ctx, page.sglr)
23175	if err != nil {
23176		return err
23177	}
23178	page.sglr = next
23179	return nil
23180}
23181
23182// Next advances to the next page of values.  If there was an error making
23183// the request the page does not advance and the error is returned.
23184// Deprecated: Use NextWithContext() instead.
23185func (page *SecurityGroupListResultPage) Next() error {
23186	return page.NextWithContext(context.Background())
23187}
23188
23189// NotDone returns true if the page enumeration should be started or is not yet complete.
23190func (page SecurityGroupListResultPage) NotDone() bool {
23191	return !page.sglr.IsEmpty()
23192}
23193
23194// Response returns the raw server response from the last page request.
23195func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
23196	return page.sglr
23197}
23198
23199// Values returns the slice of values for the current page or nil if there are no values.
23200func (page SecurityGroupListResultPage) Values() []SecurityGroup {
23201	if page.sglr.IsEmpty() {
23202		return nil
23203	}
23204	return *page.sglr.Value
23205}
23206
23207// Creates a new instance of the SecurityGroupListResultPage type.
23208func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
23209	return SecurityGroupListResultPage{fn: getNextPage}
23210}
23211
23212// SecurityGroupNetworkInterface network interface and all its associated security rules.
23213type SecurityGroupNetworkInterface struct {
23214	// ID - ID of the network interface.
23215	ID *string `json:"id,omitempty"`
23216	// SecurityRuleAssociations - All security rules associated with the network interface.
23217	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
23218}
23219
23220// SecurityGroupPropertiesFormat network Security Group resource.
23221type SecurityGroupPropertiesFormat struct {
23222	// SecurityRules - A collection of security rules of the network security group.
23223	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
23224	// DefaultSecurityRules - The default security rules of network security group.
23225	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
23226	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
23227	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
23228	// Subnets - READ-ONLY; A collection of references to subnets.
23229	Subnets *[]Subnet `json:"subnets,omitempty"`
23230	// ResourceGUID - The resource GUID property of the network security group resource.
23231	ResourceGUID *string `json:"resourceGuid,omitempty"`
23232	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
23233	ProvisioningState *string `json:"provisioningState,omitempty"`
23234}
23235
23236// SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
23237type SecurityGroupResult struct {
23238	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
23239	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
23240	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
23241	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
23242}
23243
23244// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23245// long-running operation.
23246type SecurityGroupsCreateOrUpdateFuture struct {
23247	azure.Future
23248}
23249
23250// Result returns the result of the asynchronous operation.
23251// If the operation has not completed it will return an error.
23252func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
23253	var done bool
23254	done, err = future.DoneWithContext(context.Background(), client)
23255	if err != nil {
23256		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23257		return
23258	}
23259	if !done {
23260		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
23261		return
23262	}
23263	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23264	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
23265		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
23266		if err != nil {
23267			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
23268		}
23269	}
23270	return
23271}
23272
23273// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23274// operation.
23275type SecurityGroupsDeleteFuture struct {
23276	azure.Future
23277}
23278
23279// Result returns the result of the asynchronous operation.
23280// If the operation has not completed it will return an error.
23281func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
23282	var done bool
23283	done, err = future.DoneWithContext(context.Background(), client)
23284	if err != nil {
23285		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
23286		return
23287	}
23288	if !done {
23289		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
23290		return
23291	}
23292	ar.Response = future.Response()
23293	return
23294}
23295
23296// SecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
23297// long-running operation.
23298type SecurityGroupsUpdateTagsFuture struct {
23299	azure.Future
23300}
23301
23302// Result returns the result of the asynchronous operation.
23303// If the operation has not completed it will return an error.
23304func (future *SecurityGroupsUpdateTagsFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
23305	var done bool
23306	done, err = future.DoneWithContext(context.Background(), client)
23307	if err != nil {
23308		err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
23309		return
23310	}
23311	if !done {
23312		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsUpdateTagsFuture")
23313		return
23314	}
23315	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23316	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
23317		sg, err = client.UpdateTagsResponder(sg.Response.Response)
23318		if err != nil {
23319			err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", sg.Response.Response, "Failure responding to request")
23320		}
23321	}
23322	return
23323}
23324
23325// SecurityGroupViewParameters parameters that define the VM to check security groups for.
23326type SecurityGroupViewParameters struct {
23327	// TargetResourceID - ID of the target VM.
23328	TargetResourceID *string `json:"targetResourceId,omitempty"`
23329}
23330
23331// SecurityGroupViewResult the information about security rules applied to the specified VM.
23332type SecurityGroupViewResult struct {
23333	autorest.Response `json:"-"`
23334	// NetworkInterfaces - List of network interfaces on the specified VM.
23335	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
23336}
23337
23338// SecurityRule network security rule.
23339type SecurityRule struct {
23340	autorest.Response `json:"-"`
23341	// SecurityRulePropertiesFormat - Properties of the security rule
23342	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
23343	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23344	Name *string `json:"name,omitempty"`
23345	// Etag - A unique read-only string that changes whenever the resource is updated.
23346	Etag *string `json:"etag,omitempty"`
23347	// ID - Resource ID.
23348	ID *string `json:"id,omitempty"`
23349}
23350
23351// MarshalJSON is the custom marshaler for SecurityRule.
23352func (sr SecurityRule) MarshalJSON() ([]byte, error) {
23353	objectMap := make(map[string]interface{})
23354	if sr.SecurityRulePropertiesFormat != nil {
23355		objectMap["properties"] = sr.SecurityRulePropertiesFormat
23356	}
23357	if sr.Name != nil {
23358		objectMap["name"] = sr.Name
23359	}
23360	if sr.Etag != nil {
23361		objectMap["etag"] = sr.Etag
23362	}
23363	if sr.ID != nil {
23364		objectMap["id"] = sr.ID
23365	}
23366	return json.Marshal(objectMap)
23367}
23368
23369// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
23370func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
23371	var m map[string]*json.RawMessage
23372	err := json.Unmarshal(body, &m)
23373	if err != nil {
23374		return err
23375	}
23376	for k, v := range m {
23377		switch k {
23378		case "properties":
23379			if v != nil {
23380				var securityRulePropertiesFormat SecurityRulePropertiesFormat
23381				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
23382				if err != nil {
23383					return err
23384				}
23385				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
23386			}
23387		case "name":
23388			if v != nil {
23389				var name string
23390				err = json.Unmarshal(*v, &name)
23391				if err != nil {
23392					return err
23393				}
23394				sr.Name = &name
23395			}
23396		case "etag":
23397			if v != nil {
23398				var etag string
23399				err = json.Unmarshal(*v, &etag)
23400				if err != nil {
23401					return err
23402				}
23403				sr.Etag = &etag
23404			}
23405		case "id":
23406			if v != nil {
23407				var ID string
23408				err = json.Unmarshal(*v, &ID)
23409				if err != nil {
23410					return err
23411				}
23412				sr.ID = &ID
23413			}
23414		}
23415	}
23416
23417	return nil
23418}
23419
23420// SecurityRuleAssociations all security rules associated with the network interface.
23421type SecurityRuleAssociations struct {
23422	// NetworkInterfaceAssociation - Network interface and it's custom security rules.
23423	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
23424	// SubnetAssociation - Subnet and it's custom security rules.
23425	SubnetAssociation *SubnetAssociation `json:"subnetAssociation,omitempty"`
23426	// DefaultSecurityRules - Collection of default security rules of the network security group.
23427	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
23428	// EffectiveSecurityRules - Collection of effective security rules.
23429	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
23430}
23431
23432// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
23433// belongs to a network security group.
23434type SecurityRuleListResult struct {
23435	autorest.Response `json:"-"`
23436	// Value - The security rules in a network security group.
23437	Value *[]SecurityRule `json:"value,omitempty"`
23438	// NextLink - The URL to get the next set of results.
23439	NextLink *string `json:"nextLink,omitempty"`
23440}
23441
23442// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
23443type SecurityRuleListResultIterator struct {
23444	i    int
23445	page SecurityRuleListResultPage
23446}
23447
23448// NextWithContext advances to the next value.  If there was an error making
23449// the request the iterator does not advance and the error is returned.
23450func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
23451	if tracing.IsEnabled() {
23452		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
23453		defer func() {
23454			sc := -1
23455			if iter.Response().Response.Response != nil {
23456				sc = iter.Response().Response.Response.StatusCode
23457			}
23458			tracing.EndSpan(ctx, sc, err)
23459		}()
23460	}
23461	iter.i++
23462	if iter.i < len(iter.page.Values()) {
23463		return nil
23464	}
23465	err = iter.page.NextWithContext(ctx)
23466	if err != nil {
23467		iter.i--
23468		return err
23469	}
23470	iter.i = 0
23471	return nil
23472}
23473
23474// Next advances to the next value.  If there was an error making
23475// the request the iterator does not advance and the error is returned.
23476// Deprecated: Use NextWithContext() instead.
23477func (iter *SecurityRuleListResultIterator) Next() error {
23478	return iter.NextWithContext(context.Background())
23479}
23480
23481// NotDone returns true if the enumeration should be started or is not yet complete.
23482func (iter SecurityRuleListResultIterator) NotDone() bool {
23483	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23484}
23485
23486// Response returns the raw server response from the last page request.
23487func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
23488	return iter.page.Response()
23489}
23490
23491// Value returns the current value or a zero-initialized value if the
23492// iterator has advanced beyond the end of the collection.
23493func (iter SecurityRuleListResultIterator) Value() SecurityRule {
23494	if !iter.page.NotDone() {
23495		return SecurityRule{}
23496	}
23497	return iter.page.Values()[iter.i]
23498}
23499
23500// Creates a new instance of the SecurityRuleListResultIterator type.
23501func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
23502	return SecurityRuleListResultIterator{page: page}
23503}
23504
23505// IsEmpty returns true if the ListResult contains no values.
23506func (srlr SecurityRuleListResult) IsEmpty() bool {
23507	return srlr.Value == nil || len(*srlr.Value) == 0
23508}
23509
23510// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
23511// It returns nil if no more results exist.
23512func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
23513	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
23514		return nil, nil
23515	}
23516	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23517		autorest.AsJSON(),
23518		autorest.AsGet(),
23519		autorest.WithBaseURL(to.String(srlr.NextLink)))
23520}
23521
23522// SecurityRuleListResultPage contains a page of SecurityRule values.
23523type SecurityRuleListResultPage struct {
23524	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
23525	srlr SecurityRuleListResult
23526}
23527
23528// NextWithContext advances to the next page of values.  If there was an error making
23529// the request the page does not advance and the error is returned.
23530func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
23531	if tracing.IsEnabled() {
23532		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
23533		defer func() {
23534			sc := -1
23535			if page.Response().Response.Response != nil {
23536				sc = page.Response().Response.Response.StatusCode
23537			}
23538			tracing.EndSpan(ctx, sc, err)
23539		}()
23540	}
23541	next, err := page.fn(ctx, page.srlr)
23542	if err != nil {
23543		return err
23544	}
23545	page.srlr = next
23546	return nil
23547}
23548
23549// Next advances to the next page of values.  If there was an error making
23550// the request the page does not advance and the error is returned.
23551// Deprecated: Use NextWithContext() instead.
23552func (page *SecurityRuleListResultPage) Next() error {
23553	return page.NextWithContext(context.Background())
23554}
23555
23556// NotDone returns true if the page enumeration should be started or is not yet complete.
23557func (page SecurityRuleListResultPage) NotDone() bool {
23558	return !page.srlr.IsEmpty()
23559}
23560
23561// Response returns the raw server response from the last page request.
23562func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
23563	return page.srlr
23564}
23565
23566// Values returns the slice of values for the current page or nil if there are no values.
23567func (page SecurityRuleListResultPage) Values() []SecurityRule {
23568	if page.srlr.IsEmpty() {
23569		return nil
23570	}
23571	return *page.srlr.Value
23572}
23573
23574// Creates a new instance of the SecurityRuleListResultPage type.
23575func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
23576	return SecurityRuleListResultPage{fn: getNextPage}
23577}
23578
23579// SecurityRulePropertiesFormat security rule resource.
23580type SecurityRulePropertiesFormat struct {
23581	// Description - A description for this rule. Restricted to 140 chars.
23582	Description *string `json:"description,omitempty"`
23583	// Protocol - Network protocol this rule applies to. Possible values are 'Tcp', 'Udp', 'Icmp', 'Esp', and '*'. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolIcmp', 'SecurityRuleProtocolEsp', 'SecurityRuleProtocolAsterisk'
23584	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
23585	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
23586	SourcePortRange *string `json:"sourcePortRange,omitempty"`
23587	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
23588	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
23589	// 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.
23590	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
23591	// SourceAddressPrefixes - The CIDR or source IP ranges.
23592	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
23593	// SourceApplicationSecurityGroups - The application security group specified as source.
23594	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
23595	// 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.
23596	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
23597	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
23598	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
23599	// DestinationApplicationSecurityGroups - The application security group specified as destination.
23600	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
23601	// SourcePortRanges - The source port ranges.
23602	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
23603	// DestinationPortRanges - The destination port ranges.
23604	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
23605	// Access - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
23606	Access SecurityRuleAccess `json:"access,omitempty"`
23607	// 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.
23608	Priority *int32 `json:"priority,omitempty"`
23609	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
23610	Direction SecurityRuleDirection `json:"direction,omitempty"`
23611	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
23612	ProvisioningState *string `json:"provisioningState,omitempty"`
23613}
23614
23615// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23616// long-running operation.
23617type SecurityRulesCreateOrUpdateFuture struct {
23618	azure.Future
23619}
23620
23621// Result returns the result of the asynchronous operation.
23622// If the operation has not completed it will return an error.
23623func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
23624	var done bool
23625	done, err = future.DoneWithContext(context.Background(), client)
23626	if err != nil {
23627		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23628		return
23629	}
23630	if !done {
23631		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
23632		return
23633	}
23634	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23635	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
23636		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
23637		if err != nil {
23638			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
23639		}
23640	}
23641	return
23642}
23643
23644// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23645// operation.
23646type SecurityRulesDeleteFuture struct {
23647	azure.Future
23648}
23649
23650// Result returns the result of the asynchronous operation.
23651// If the operation has not completed it will return an error.
23652func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
23653	var done bool
23654	done, err = future.DoneWithContext(context.Background(), client)
23655	if err != nil {
23656		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
23657		return
23658	}
23659	if !done {
23660		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
23661		return
23662	}
23663	ar.Response = future.Response()
23664	return
23665}
23666
23667// SecurityRulesEvaluationResult network security rules evaluation result.
23668type SecurityRulesEvaluationResult struct {
23669	// Name - Name of the network security rule.
23670	Name *string `json:"name,omitempty"`
23671	// ProtocolMatched - Value indicating whether protocol is matched.
23672	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
23673	// SourceMatched - Value indicating whether source is matched.
23674	SourceMatched *bool `json:"sourceMatched,omitempty"`
23675	// SourcePortMatched - Value indicating whether source port is matched.
23676	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
23677	// DestinationMatched - Value indicating whether destination is matched.
23678	DestinationMatched *bool `json:"destinationMatched,omitempty"`
23679	// DestinationPortMatched - Value indicating whether destination port is matched.
23680	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
23681}
23682
23683// ServiceAssociationLink serviceAssociationLink resource.
23684type ServiceAssociationLink struct {
23685	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
23686	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
23687	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
23688	Name *string `json:"name,omitempty"`
23689	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23690	Etag *string `json:"etag,omitempty"`
23691	// ID - Resource ID.
23692	ID *string `json:"id,omitempty"`
23693}
23694
23695// MarshalJSON is the custom marshaler for ServiceAssociationLink.
23696func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
23697	objectMap := make(map[string]interface{})
23698	if sal.ServiceAssociationLinkPropertiesFormat != nil {
23699		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
23700	}
23701	if sal.Name != nil {
23702		objectMap["name"] = sal.Name
23703	}
23704	if sal.ID != nil {
23705		objectMap["id"] = sal.ID
23706	}
23707	return json.Marshal(objectMap)
23708}
23709
23710// UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
23711func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
23712	var m map[string]*json.RawMessage
23713	err := json.Unmarshal(body, &m)
23714	if err != nil {
23715		return err
23716	}
23717	for k, v := range m {
23718		switch k {
23719		case "properties":
23720			if v != nil {
23721				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
23722				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
23723				if err != nil {
23724					return err
23725				}
23726				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
23727			}
23728		case "name":
23729			if v != nil {
23730				var name string
23731				err = json.Unmarshal(*v, &name)
23732				if err != nil {
23733					return err
23734				}
23735				sal.Name = &name
23736			}
23737		case "etag":
23738			if v != nil {
23739				var etag string
23740				err = json.Unmarshal(*v, &etag)
23741				if err != nil {
23742					return err
23743				}
23744				sal.Etag = &etag
23745			}
23746		case "id":
23747			if v != nil {
23748				var ID string
23749				err = json.Unmarshal(*v, &ID)
23750				if err != nil {
23751					return err
23752				}
23753				sal.ID = &ID
23754			}
23755		}
23756	}
23757
23758	return nil
23759}
23760
23761// ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
23762type ServiceAssociationLinkPropertiesFormat struct {
23763	// LinkedResourceType - Resource type of the linked resource.
23764	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
23765	// Link - Link to the external resource.
23766	Link *string `json:"link,omitempty"`
23767	// ProvisioningState - READ-ONLY; Provisioning state of the ServiceAssociationLink resource.
23768	ProvisioningState *string `json:"provisioningState,omitempty"`
23769}
23770
23771// ServiceAssociationLinksListResult response for ServiceAssociationLinks_Get operation.
23772type ServiceAssociationLinksListResult struct {
23773	autorest.Response `json:"-"`
23774	// Value - The service association links in a subnet.
23775	Value *[]ServiceAssociationLink `json:"value,omitempty"`
23776	// NextLink - The URL to get the next set of results.
23777	NextLink *string `json:"nextLink,omitempty"`
23778}
23779
23780// ServiceDelegationPropertiesFormat properties of a service delegation.
23781type ServiceDelegationPropertiesFormat struct {
23782	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers)
23783	ServiceName *string `json:"serviceName,omitempty"`
23784	// Actions - Describes the actions permitted to the service upon delegation
23785	Actions *[]string `json:"actions,omitempty"`
23786	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
23787	ProvisioningState *string `json:"provisioningState,omitempty"`
23788}
23789
23790// ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
23791// a long-running operation.
23792type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
23793	azure.Future
23794}
23795
23796// Result returns the result of the asynchronous operation.
23797// If the operation has not completed it will return an error.
23798func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
23799	var done bool
23800	done, err = future.DoneWithContext(context.Background(), client)
23801	if err != nil {
23802		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23803		return
23804	}
23805	if !done {
23806		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
23807		return
23808	}
23809	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23810	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
23811		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
23812		if err != nil {
23813			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
23814		}
23815	}
23816	return
23817}
23818
23819// ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
23820// long-running operation.
23821type ServiceEndpointPoliciesDeleteFuture struct {
23822	azure.Future
23823}
23824
23825// Result returns the result of the asynchronous operation.
23826// If the operation has not completed it will return an error.
23827func (future *ServiceEndpointPoliciesDeleteFuture) Result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
23828	var done bool
23829	done, err = future.DoneWithContext(context.Background(), client)
23830	if err != nil {
23831		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
23832		return
23833	}
23834	if !done {
23835		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
23836		return
23837	}
23838	ar.Response = future.Response()
23839	return
23840}
23841
23842// ServiceEndpointPoliciesUpdateFuture an abstraction for monitoring and retrieving the results of a
23843// long-running operation.
23844type ServiceEndpointPoliciesUpdateFuture struct {
23845	azure.Future
23846}
23847
23848// Result returns the result of the asynchronous operation.
23849// If the operation has not completed it will return an error.
23850func (future *ServiceEndpointPoliciesUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
23851	var done bool
23852	done, err = future.DoneWithContext(context.Background(), client)
23853	if err != nil {
23854		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", future.Response(), "Polling failure")
23855		return
23856	}
23857	if !done {
23858		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesUpdateFuture")
23859		return
23860	}
23861	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23862	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
23863		sep, err = client.UpdateResponder(sep.Response.Response)
23864		if err != nil {
23865			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
23866		}
23867	}
23868	return
23869}
23870
23871// ServiceEndpointPolicy service End point policy resource.
23872type ServiceEndpointPolicy struct {
23873	autorest.Response `json:"-"`
23874	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy
23875	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
23876	// Etag - A unique read-only string that changes whenever the resource is updated.
23877	Etag *string `json:"etag,omitempty"`
23878	// ID - Resource ID.
23879	ID *string `json:"id,omitempty"`
23880	// Name - READ-ONLY; Resource name.
23881	Name *string `json:"name,omitempty"`
23882	// Type - READ-ONLY; Resource type.
23883	Type *string `json:"type,omitempty"`
23884	// Location - Resource location.
23885	Location *string `json:"location,omitempty"`
23886	// Tags - Resource tags.
23887	Tags map[string]*string `json:"tags"`
23888}
23889
23890// MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
23891func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
23892	objectMap := make(map[string]interface{})
23893	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
23894		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
23895	}
23896	if sep.Etag != nil {
23897		objectMap["etag"] = sep.Etag
23898	}
23899	if sep.ID != nil {
23900		objectMap["id"] = sep.ID
23901	}
23902	if sep.Location != nil {
23903		objectMap["location"] = sep.Location
23904	}
23905	if sep.Tags != nil {
23906		objectMap["tags"] = sep.Tags
23907	}
23908	return json.Marshal(objectMap)
23909}
23910
23911// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
23912func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
23913	var m map[string]*json.RawMessage
23914	err := json.Unmarshal(body, &m)
23915	if err != nil {
23916		return err
23917	}
23918	for k, v := range m {
23919		switch k {
23920		case "properties":
23921			if v != nil {
23922				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
23923				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
23924				if err != nil {
23925					return err
23926				}
23927				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
23928			}
23929		case "etag":
23930			if v != nil {
23931				var etag string
23932				err = json.Unmarshal(*v, &etag)
23933				if err != nil {
23934					return err
23935				}
23936				sep.Etag = &etag
23937			}
23938		case "id":
23939			if v != nil {
23940				var ID string
23941				err = json.Unmarshal(*v, &ID)
23942				if err != nil {
23943					return err
23944				}
23945				sep.ID = &ID
23946			}
23947		case "name":
23948			if v != nil {
23949				var name string
23950				err = json.Unmarshal(*v, &name)
23951				if err != nil {
23952					return err
23953				}
23954				sep.Name = &name
23955			}
23956		case "type":
23957			if v != nil {
23958				var typeVar string
23959				err = json.Unmarshal(*v, &typeVar)
23960				if err != nil {
23961					return err
23962				}
23963				sep.Type = &typeVar
23964			}
23965		case "location":
23966			if v != nil {
23967				var location string
23968				err = json.Unmarshal(*v, &location)
23969				if err != nil {
23970					return err
23971				}
23972				sep.Location = &location
23973			}
23974		case "tags":
23975			if v != nil {
23976				var tags map[string]*string
23977				err = json.Unmarshal(*v, &tags)
23978				if err != nil {
23979					return err
23980				}
23981				sep.Tags = tags
23982			}
23983		}
23984	}
23985
23986	return nil
23987}
23988
23989// ServiceEndpointPolicyDefinition service Endpoint policy definitions.
23990type ServiceEndpointPolicyDefinition struct {
23991	autorest.Response `json:"-"`
23992	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition
23993	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
23994	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23995	Name *string `json:"name,omitempty"`
23996	// Etag - A unique read-only string that changes whenever the resource is updated.
23997	Etag *string `json:"etag,omitempty"`
23998	// ID - Resource ID.
23999	ID *string `json:"id,omitempty"`
24000}
24001
24002// MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
24003func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
24004	objectMap := make(map[string]interface{})
24005	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
24006		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
24007	}
24008	if sepd.Name != nil {
24009		objectMap["name"] = sepd.Name
24010	}
24011	if sepd.Etag != nil {
24012		objectMap["etag"] = sepd.Etag
24013	}
24014	if sepd.ID != nil {
24015		objectMap["id"] = sepd.ID
24016	}
24017	return json.Marshal(objectMap)
24018}
24019
24020// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
24021func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
24022	var m map[string]*json.RawMessage
24023	err := json.Unmarshal(body, &m)
24024	if err != nil {
24025		return err
24026	}
24027	for k, v := range m {
24028		switch k {
24029		case "properties":
24030			if v != nil {
24031				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
24032				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
24033				if err != nil {
24034					return err
24035				}
24036				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
24037			}
24038		case "name":
24039			if v != nil {
24040				var name string
24041				err = json.Unmarshal(*v, &name)
24042				if err != nil {
24043					return err
24044				}
24045				sepd.Name = &name
24046			}
24047		case "etag":
24048			if v != nil {
24049				var etag string
24050				err = json.Unmarshal(*v, &etag)
24051				if err != nil {
24052					return err
24053				}
24054				sepd.Etag = &etag
24055			}
24056		case "id":
24057			if v != nil {
24058				var ID string
24059				err = json.Unmarshal(*v, &ID)
24060				if err != nil {
24061					return err
24062				}
24063				sepd.ID = &ID
24064			}
24065		}
24066	}
24067
24068	return nil
24069}
24070
24071// ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
24072// call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
24073type ServiceEndpointPolicyDefinitionListResult struct {
24074	autorest.Response `json:"-"`
24075	// Value - The service endpoint policy definition in a service endpoint policy.
24076	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
24077	// NextLink - The URL to get the next set of results.
24078	NextLink *string `json:"nextLink,omitempty"`
24079}
24080
24081// ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
24082// ServiceEndpointPolicyDefinition values.
24083type ServiceEndpointPolicyDefinitionListResultIterator struct {
24084	i    int
24085	page ServiceEndpointPolicyDefinitionListResultPage
24086}
24087
24088// NextWithContext advances to the next value.  If there was an error making
24089// the request the iterator does not advance and the error is returned.
24090func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
24091	if tracing.IsEnabled() {
24092		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
24093		defer func() {
24094			sc := -1
24095			if iter.Response().Response.Response != nil {
24096				sc = iter.Response().Response.Response.StatusCode
24097			}
24098			tracing.EndSpan(ctx, sc, err)
24099		}()
24100	}
24101	iter.i++
24102	if iter.i < len(iter.page.Values()) {
24103		return nil
24104	}
24105	err = iter.page.NextWithContext(ctx)
24106	if err != nil {
24107		iter.i--
24108		return err
24109	}
24110	iter.i = 0
24111	return nil
24112}
24113
24114// Next advances to the next value.  If there was an error making
24115// the request the iterator does not advance and the error is returned.
24116// Deprecated: Use NextWithContext() instead.
24117func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
24118	return iter.NextWithContext(context.Background())
24119}
24120
24121// NotDone returns true if the enumeration should be started or is not yet complete.
24122func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
24123	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24124}
24125
24126// Response returns the raw server response from the last page request.
24127func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
24128	return iter.page.Response()
24129}
24130
24131// Value returns the current value or a zero-initialized value if the
24132// iterator has advanced beyond the end of the collection.
24133func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
24134	if !iter.page.NotDone() {
24135		return ServiceEndpointPolicyDefinition{}
24136	}
24137	return iter.page.Values()[iter.i]
24138}
24139
24140// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
24141func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
24142	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
24143}
24144
24145// IsEmpty returns true if the ListResult contains no values.
24146func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
24147	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
24148}
24149
24150// serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
24151// It returns nil if no more results exist.
24152func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
24153	if sepdlr.NextLink == nil || len(to.String(sepdlr.NextLink)) < 1 {
24154		return nil, nil
24155	}
24156	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24157		autorest.AsJSON(),
24158		autorest.AsGet(),
24159		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
24160}
24161
24162// ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
24163type ServiceEndpointPolicyDefinitionListResultPage struct {
24164	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
24165	sepdlr ServiceEndpointPolicyDefinitionListResult
24166}
24167
24168// NextWithContext advances to the next page of values.  If there was an error making
24169// the request the page does not advance and the error is returned.
24170func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
24171	if tracing.IsEnabled() {
24172		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
24173		defer func() {
24174			sc := -1
24175			if page.Response().Response.Response != nil {
24176				sc = page.Response().Response.Response.StatusCode
24177			}
24178			tracing.EndSpan(ctx, sc, err)
24179		}()
24180	}
24181	next, err := page.fn(ctx, page.sepdlr)
24182	if err != nil {
24183		return err
24184	}
24185	page.sepdlr = next
24186	return nil
24187}
24188
24189// Next advances to the next page of values.  If there was an error making
24190// the request the page does not advance and the error is returned.
24191// Deprecated: Use NextWithContext() instead.
24192func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
24193	return page.NextWithContext(context.Background())
24194}
24195
24196// NotDone returns true if the page enumeration should be started or is not yet complete.
24197func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
24198	return !page.sepdlr.IsEmpty()
24199}
24200
24201// Response returns the raw server response from the last page request.
24202func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
24203	return page.sepdlr
24204}
24205
24206// Values returns the slice of values for the current page or nil if there are no values.
24207func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
24208	if page.sepdlr.IsEmpty() {
24209		return nil
24210	}
24211	return *page.sepdlr.Value
24212}
24213
24214// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
24215func NewServiceEndpointPolicyDefinitionListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
24216	return ServiceEndpointPolicyDefinitionListResultPage{fn: getNextPage}
24217}
24218
24219// ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
24220type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
24221	// Description - A description for this rule. Restricted to 140 chars.
24222	Description *string `json:"description,omitempty"`
24223	// Service - Service endpoint name.
24224	Service *string `json:"service,omitempty"`
24225	// ServiceResources - A list of service resources.
24226	ServiceResources *[]string `json:"serviceResources,omitempty"`
24227	// ProvisioningState - READ-ONLY; The provisioning state of the service end point policy definition. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24228	ProvisioningState *string `json:"provisioningState,omitempty"`
24229}
24230
24231// ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
24232// results of a long-running operation.
24233type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
24234	azure.Future
24235}
24236
24237// Result returns the result of the asynchronous operation.
24238// If the operation has not completed it will return an error.
24239func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
24240	var done bool
24241	done, err = future.DoneWithContext(context.Background(), client)
24242	if err != nil {
24243		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24244		return
24245	}
24246	if !done {
24247		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
24248		return
24249	}
24250	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24251	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
24252		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
24253		if err != nil {
24254			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
24255		}
24256	}
24257	return
24258}
24259
24260// ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
24261// a long-running operation.
24262type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
24263	azure.Future
24264}
24265
24266// Result returns the result of the asynchronous operation.
24267// If the operation has not completed it will return an error.
24268func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
24269	var done bool
24270	done, err = future.DoneWithContext(context.Background(), client)
24271	if err != nil {
24272		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
24273		return
24274	}
24275	if !done {
24276		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
24277		return
24278	}
24279	ar.Response = future.Response()
24280	return
24281}
24282
24283// ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
24284type ServiceEndpointPolicyListResult struct {
24285	autorest.Response `json:"-"`
24286	// Value - A list of ServiceEndpointPolicy resources.
24287	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
24288	// NextLink - READ-ONLY; The URL to get the next set of results.
24289	NextLink *string `json:"nextLink,omitempty"`
24290}
24291
24292// ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
24293// values.
24294type ServiceEndpointPolicyListResultIterator struct {
24295	i    int
24296	page ServiceEndpointPolicyListResultPage
24297}
24298
24299// NextWithContext advances to the next value.  If there was an error making
24300// the request the iterator does not advance and the error is returned.
24301func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
24302	if tracing.IsEnabled() {
24303		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
24304		defer func() {
24305			sc := -1
24306			if iter.Response().Response.Response != nil {
24307				sc = iter.Response().Response.Response.StatusCode
24308			}
24309			tracing.EndSpan(ctx, sc, err)
24310		}()
24311	}
24312	iter.i++
24313	if iter.i < len(iter.page.Values()) {
24314		return nil
24315	}
24316	err = iter.page.NextWithContext(ctx)
24317	if err != nil {
24318		iter.i--
24319		return err
24320	}
24321	iter.i = 0
24322	return nil
24323}
24324
24325// Next advances to the next value.  If there was an error making
24326// the request the iterator does not advance and the error is returned.
24327// Deprecated: Use NextWithContext() instead.
24328func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
24329	return iter.NextWithContext(context.Background())
24330}
24331
24332// NotDone returns true if the enumeration should be started or is not yet complete.
24333func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
24334	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24335}
24336
24337// Response returns the raw server response from the last page request.
24338func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
24339	return iter.page.Response()
24340}
24341
24342// Value returns the current value or a zero-initialized value if the
24343// iterator has advanced beyond the end of the collection.
24344func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
24345	if !iter.page.NotDone() {
24346		return ServiceEndpointPolicy{}
24347	}
24348	return iter.page.Values()[iter.i]
24349}
24350
24351// Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
24352func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
24353	return ServiceEndpointPolicyListResultIterator{page: page}
24354}
24355
24356// IsEmpty returns true if the ListResult contains no values.
24357func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
24358	return seplr.Value == nil || len(*seplr.Value) == 0
24359}
24360
24361// serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
24362// It returns nil if no more results exist.
24363func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
24364	if seplr.NextLink == nil || len(to.String(seplr.NextLink)) < 1 {
24365		return nil, nil
24366	}
24367	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24368		autorest.AsJSON(),
24369		autorest.AsGet(),
24370		autorest.WithBaseURL(to.String(seplr.NextLink)))
24371}
24372
24373// ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
24374type ServiceEndpointPolicyListResultPage struct {
24375	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
24376	seplr ServiceEndpointPolicyListResult
24377}
24378
24379// NextWithContext advances to the next page of values.  If there was an error making
24380// the request the page does not advance and the error is returned.
24381func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
24382	if tracing.IsEnabled() {
24383		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
24384		defer func() {
24385			sc := -1
24386			if page.Response().Response.Response != nil {
24387				sc = page.Response().Response.Response.StatusCode
24388			}
24389			tracing.EndSpan(ctx, sc, err)
24390		}()
24391	}
24392	next, err := page.fn(ctx, page.seplr)
24393	if err != nil {
24394		return err
24395	}
24396	page.seplr = next
24397	return nil
24398}
24399
24400// Next advances to the next page of values.  If there was an error making
24401// the request the page does not advance and the error is returned.
24402// Deprecated: Use NextWithContext() instead.
24403func (page *ServiceEndpointPolicyListResultPage) Next() error {
24404	return page.NextWithContext(context.Background())
24405}
24406
24407// NotDone returns true if the page enumeration should be started or is not yet complete.
24408func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
24409	return !page.seplr.IsEmpty()
24410}
24411
24412// Response returns the raw server response from the last page request.
24413func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
24414	return page.seplr
24415}
24416
24417// Values returns the slice of values for the current page or nil if there are no values.
24418func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
24419	if page.seplr.IsEmpty() {
24420		return nil
24421	}
24422	return *page.seplr.Value
24423}
24424
24425// Creates a new instance of the ServiceEndpointPolicyListResultPage type.
24426func NewServiceEndpointPolicyListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
24427	return ServiceEndpointPolicyListResultPage{fn: getNextPage}
24428}
24429
24430// ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
24431type ServiceEndpointPolicyPropertiesFormat struct {
24432	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
24433	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
24434	// Subnets - READ-ONLY; A collection of references to subnets.
24435	Subnets *[]Subnet `json:"subnets,omitempty"`
24436	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
24437	ResourceGUID *string `json:"resourceGuid,omitempty"`
24438	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24439	ProvisioningState *string `json:"provisioningState,omitempty"`
24440}
24441
24442// ServiceEndpointPropertiesFormat the service endpoint properties.
24443type ServiceEndpointPropertiesFormat struct {
24444	// Service - The type of the endpoint service.
24445	Service *string `json:"service,omitempty"`
24446	// Locations - A list of locations.
24447	Locations *[]string `json:"locations,omitempty"`
24448	// ProvisioningState - The provisioning state of the resource.
24449	ProvisioningState *string `json:"provisioningState,omitempty"`
24450}
24451
24452// String ...
24453type String struct {
24454	autorest.Response `json:"-"`
24455	Value             *string `json:"value,omitempty"`
24456}
24457
24458// Subnet subnet in a virtual network resource.
24459type Subnet struct {
24460	autorest.Response `json:"-"`
24461	// SubnetPropertiesFormat - Properties of the subnet.
24462	*SubnetPropertiesFormat `json:"properties,omitempty"`
24463	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
24464	Name *string `json:"name,omitempty"`
24465	// Etag - A unique read-only string that changes whenever the resource is updated.
24466	Etag *string `json:"etag,omitempty"`
24467	// ID - Resource ID.
24468	ID *string `json:"id,omitempty"`
24469}
24470
24471// MarshalJSON is the custom marshaler for Subnet.
24472func (s Subnet) MarshalJSON() ([]byte, error) {
24473	objectMap := make(map[string]interface{})
24474	if s.SubnetPropertiesFormat != nil {
24475		objectMap["properties"] = s.SubnetPropertiesFormat
24476	}
24477	if s.Name != nil {
24478		objectMap["name"] = s.Name
24479	}
24480	if s.Etag != nil {
24481		objectMap["etag"] = s.Etag
24482	}
24483	if s.ID != nil {
24484		objectMap["id"] = s.ID
24485	}
24486	return json.Marshal(objectMap)
24487}
24488
24489// UnmarshalJSON is the custom unmarshaler for Subnet struct.
24490func (s *Subnet) UnmarshalJSON(body []byte) error {
24491	var m map[string]*json.RawMessage
24492	err := json.Unmarshal(body, &m)
24493	if err != nil {
24494		return err
24495	}
24496	for k, v := range m {
24497		switch k {
24498		case "properties":
24499			if v != nil {
24500				var subnetPropertiesFormat SubnetPropertiesFormat
24501				err = json.Unmarshal(*v, &subnetPropertiesFormat)
24502				if err != nil {
24503					return err
24504				}
24505				s.SubnetPropertiesFormat = &subnetPropertiesFormat
24506			}
24507		case "name":
24508			if v != nil {
24509				var name string
24510				err = json.Unmarshal(*v, &name)
24511				if err != nil {
24512					return err
24513				}
24514				s.Name = &name
24515			}
24516		case "etag":
24517			if v != nil {
24518				var etag string
24519				err = json.Unmarshal(*v, &etag)
24520				if err != nil {
24521					return err
24522				}
24523				s.Etag = &etag
24524			}
24525		case "id":
24526			if v != nil {
24527				var ID string
24528				err = json.Unmarshal(*v, &ID)
24529				if err != nil {
24530					return err
24531				}
24532				s.ID = &ID
24533			}
24534		}
24535	}
24536
24537	return nil
24538}
24539
24540// SubnetAssociation subnet and it's custom security rules.
24541type SubnetAssociation struct {
24542	// ID - READ-ONLY; Subnet ID.
24543	ID *string `json:"id,omitempty"`
24544	// SecurityRules - Collection of custom security rules.
24545	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
24546}
24547
24548// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
24549// network
24550type SubnetListResult struct {
24551	autorest.Response `json:"-"`
24552	// Value - The subnets in a virtual network.
24553	Value *[]Subnet `json:"value,omitempty"`
24554	// NextLink - The URL to get the next set of results.
24555	NextLink *string `json:"nextLink,omitempty"`
24556}
24557
24558// SubnetListResultIterator provides access to a complete listing of Subnet values.
24559type SubnetListResultIterator struct {
24560	i    int
24561	page SubnetListResultPage
24562}
24563
24564// NextWithContext advances to the next value.  If there was an error making
24565// the request the iterator does not advance and the error is returned.
24566func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
24567	if tracing.IsEnabled() {
24568		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
24569		defer func() {
24570			sc := -1
24571			if iter.Response().Response.Response != nil {
24572				sc = iter.Response().Response.Response.StatusCode
24573			}
24574			tracing.EndSpan(ctx, sc, err)
24575		}()
24576	}
24577	iter.i++
24578	if iter.i < len(iter.page.Values()) {
24579		return nil
24580	}
24581	err = iter.page.NextWithContext(ctx)
24582	if err != nil {
24583		iter.i--
24584		return err
24585	}
24586	iter.i = 0
24587	return nil
24588}
24589
24590// Next advances to the next value.  If there was an error making
24591// the request the iterator does not advance and the error is returned.
24592// Deprecated: Use NextWithContext() instead.
24593func (iter *SubnetListResultIterator) Next() error {
24594	return iter.NextWithContext(context.Background())
24595}
24596
24597// NotDone returns true if the enumeration should be started or is not yet complete.
24598func (iter SubnetListResultIterator) NotDone() bool {
24599	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24600}
24601
24602// Response returns the raw server response from the last page request.
24603func (iter SubnetListResultIterator) Response() SubnetListResult {
24604	return iter.page.Response()
24605}
24606
24607// Value returns the current value or a zero-initialized value if the
24608// iterator has advanced beyond the end of the collection.
24609func (iter SubnetListResultIterator) Value() Subnet {
24610	if !iter.page.NotDone() {
24611		return Subnet{}
24612	}
24613	return iter.page.Values()[iter.i]
24614}
24615
24616// Creates a new instance of the SubnetListResultIterator type.
24617func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
24618	return SubnetListResultIterator{page: page}
24619}
24620
24621// IsEmpty returns true if the ListResult contains no values.
24622func (slr SubnetListResult) IsEmpty() bool {
24623	return slr.Value == nil || len(*slr.Value) == 0
24624}
24625
24626// subnetListResultPreparer prepares a request to retrieve the next set of results.
24627// It returns nil if no more results exist.
24628func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
24629	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
24630		return nil, nil
24631	}
24632	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24633		autorest.AsJSON(),
24634		autorest.AsGet(),
24635		autorest.WithBaseURL(to.String(slr.NextLink)))
24636}
24637
24638// SubnetListResultPage contains a page of Subnet values.
24639type SubnetListResultPage struct {
24640	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
24641	slr SubnetListResult
24642}
24643
24644// NextWithContext advances to the next page of values.  If there was an error making
24645// the request the page does not advance and the error is returned.
24646func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
24647	if tracing.IsEnabled() {
24648		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
24649		defer func() {
24650			sc := -1
24651			if page.Response().Response.Response != nil {
24652				sc = page.Response().Response.Response.StatusCode
24653			}
24654			tracing.EndSpan(ctx, sc, err)
24655		}()
24656	}
24657	next, err := page.fn(ctx, page.slr)
24658	if err != nil {
24659		return err
24660	}
24661	page.slr = next
24662	return nil
24663}
24664
24665// Next advances to the next page of values.  If there was an error making
24666// the request the page does not advance and the error is returned.
24667// Deprecated: Use NextWithContext() instead.
24668func (page *SubnetListResultPage) Next() error {
24669	return page.NextWithContext(context.Background())
24670}
24671
24672// NotDone returns true if the page enumeration should be started or is not yet complete.
24673func (page SubnetListResultPage) NotDone() bool {
24674	return !page.slr.IsEmpty()
24675}
24676
24677// Response returns the raw server response from the last page request.
24678func (page SubnetListResultPage) Response() SubnetListResult {
24679	return page.slr
24680}
24681
24682// Values returns the slice of values for the current page or nil if there are no values.
24683func (page SubnetListResultPage) Values() []Subnet {
24684	if page.slr.IsEmpty() {
24685		return nil
24686	}
24687	return *page.slr.Value
24688}
24689
24690// Creates a new instance of the SubnetListResultPage type.
24691func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
24692	return SubnetListResultPage{fn: getNextPage}
24693}
24694
24695// SubnetPropertiesFormat properties of the subnet.
24696type SubnetPropertiesFormat struct {
24697	// AddressPrefix - The address prefix for the subnet.
24698	AddressPrefix *string `json:"addressPrefix,omitempty"`
24699	// AddressPrefixes - List of  address prefixes for the subnet.
24700	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
24701	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
24702	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
24703	// RouteTable - The reference of the RouteTable resource.
24704	RouteTable *RouteTable `json:"routeTable,omitempty"`
24705	// NatGateway - Nat gateway associated with this subnet.
24706	NatGateway *SubResource `json:"natGateway,omitempty"`
24707	// ServiceEndpoints - An array of service endpoints.
24708	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
24709	// ServiceEndpointPolicies - An array of service endpoint policies.
24710	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
24711	// InterfaceEndpoints - READ-ONLY; An array of references to interface endpoints
24712	InterfaceEndpoints *[]InterfaceEndpoint `json:"interfaceEndpoints,omitempty"`
24713	// IPConfigurations - READ-ONLY; Gets an array of references to the network interface IP configurations using subnet.
24714	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
24715	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
24716	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
24717	// ResourceNavigationLinks - Gets an array of references to the external resources using subnet.
24718	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
24719	// ServiceAssociationLinks - Gets an array of references to services injecting into this subnet.
24720	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
24721	// Delegations - Gets an array of references to the delegations on the subnet.
24722	Delegations *[]Delegation `json:"delegations,omitempty"`
24723	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
24724	Purpose *string `json:"purpose,omitempty"`
24725	// ProvisioningState - The provisioning state of the resource.
24726	ProvisioningState *string `json:"provisioningState,omitempty"`
24727}
24728
24729// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
24730// operation.
24731type SubnetsCreateOrUpdateFuture struct {
24732	azure.Future
24733}
24734
24735// Result returns the result of the asynchronous operation.
24736// If the operation has not completed it will return an error.
24737func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
24738	var done bool
24739	done, err = future.DoneWithContext(context.Background(), client)
24740	if err != nil {
24741		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24742		return
24743	}
24744	if !done {
24745		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
24746		return
24747	}
24748	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24749	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
24750		s, err = client.CreateOrUpdateResponder(s.Response.Response)
24751		if err != nil {
24752			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
24753		}
24754	}
24755	return
24756}
24757
24758// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24759// operation.
24760type SubnetsDeleteFuture struct {
24761	azure.Future
24762}
24763
24764// Result returns the result of the asynchronous operation.
24765// If the operation has not completed it will return an error.
24766func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
24767	var done bool
24768	done, err = future.DoneWithContext(context.Background(), client)
24769	if err != nil {
24770		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
24771		return
24772	}
24773	if !done {
24774		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
24775		return
24776	}
24777	ar.Response = future.Response()
24778	return
24779}
24780
24781// SubnetsPrepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
24782// long-running operation.
24783type SubnetsPrepareNetworkPoliciesFuture struct {
24784	azure.Future
24785}
24786
24787// Result returns the result of the asynchronous operation.
24788// If the operation has not completed it will return an error.
24789func (future *SubnetsPrepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
24790	var done bool
24791	done, err = future.DoneWithContext(context.Background(), client)
24792	if err != nil {
24793		err = autorest.NewErrorWithError(err, "network.SubnetsPrepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
24794		return
24795	}
24796	if !done {
24797		err = azure.NewAsyncOpIncompleteError("network.SubnetsPrepareNetworkPoliciesFuture")
24798		return
24799	}
24800	ar.Response = future.Response()
24801	return
24802}
24803
24804// SubResource reference to another subresource.
24805type SubResource struct {
24806	// ID - Resource ID.
24807	ID *string `json:"id,omitempty"`
24808}
24809
24810// TagsObject tags object for patch operations.
24811type TagsObject struct {
24812	// Tags - Resource tags.
24813	Tags map[string]*string `json:"tags"`
24814}
24815
24816// MarshalJSON is the custom marshaler for TagsObject.
24817func (toVar TagsObject) MarshalJSON() ([]byte, error) {
24818	objectMap := make(map[string]interface{})
24819	if toVar.Tags != nil {
24820		objectMap["tags"] = toVar.Tags
24821	}
24822	return json.Marshal(objectMap)
24823}
24824
24825// Topology topology of the specified resource group.
24826type Topology struct {
24827	autorest.Response `json:"-"`
24828	// ID - READ-ONLY; GUID representing the operation id.
24829	ID *string `json:"id,omitempty"`
24830	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
24831	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
24832	// LastModified - READ-ONLY; The datetime when the topology was last modified.
24833	LastModified *date.Time `json:"lastModified,omitempty"`
24834	// Resources - A list of topology resources.
24835	Resources *[]TopologyResource `json:"resources,omitempty"`
24836}
24837
24838// TopologyAssociation resources that have an association with the parent resource.
24839type TopologyAssociation struct {
24840	// Name - The name of the resource that is associated with the parent resource.
24841	Name *string `json:"name,omitempty"`
24842	// ResourceID - The ID of the resource that is associated with the parent resource.
24843	ResourceID *string `json:"resourceId,omitempty"`
24844	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
24845	AssociationType AssociationType `json:"associationType,omitempty"`
24846}
24847
24848// TopologyParameters parameters that define the representation of topology.
24849type TopologyParameters struct {
24850	// TargetResourceGroupName - The name of the target resource group to perform topology on.
24851	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
24852	// TargetVirtualNetwork - The reference of the Virtual Network resource.
24853	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
24854	// TargetSubnet - The reference of the Subnet resource.
24855	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
24856}
24857
24858// TopologyResource the network resource topology information for the given resource group.
24859type TopologyResource struct {
24860	// Name - Name of the resource.
24861	Name *string `json:"name,omitempty"`
24862	// ID - ID of the resource.
24863	ID *string `json:"id,omitempty"`
24864	// Location - Resource location.
24865	Location *string `json:"location,omitempty"`
24866	// Associations - Holds the associations the resource has with other resources in the resource group.
24867	Associations *[]TopologyAssociation `json:"associations,omitempty"`
24868}
24869
24870// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
24871type TrafficAnalyticsConfigurationProperties struct {
24872	// Enabled - Flag to enable/disable traffic analytics.
24873	Enabled *bool `json:"enabled,omitempty"`
24874	// WorkspaceID - The resource guid of the attached workspace
24875	WorkspaceID *string `json:"workspaceId,omitempty"`
24876	// WorkspaceRegion - The location of the attached workspace
24877	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
24878	// WorkspaceResourceID - Resource Id of the attached workspace
24879	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
24880	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics
24881	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
24882}
24883
24884// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
24885type TrafficAnalyticsProperties struct {
24886	// NetworkWatcherFlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
24887	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
24888}
24889
24890// TroubleshootingDetails information gained from troubleshooting of specified resource.
24891type TroubleshootingDetails struct {
24892	// ID - The id of the get troubleshoot operation.
24893	ID *string `json:"id,omitempty"`
24894	// ReasonType - Reason type of failure.
24895	ReasonType *string `json:"reasonType,omitempty"`
24896	// Summary - A summary of troubleshooting.
24897	Summary *string `json:"summary,omitempty"`
24898	// Detail - Details on troubleshooting results.
24899	Detail *string `json:"detail,omitempty"`
24900	// RecommendedActions - List of recommended actions.
24901	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
24902}
24903
24904// TroubleshootingParameters parameters that define the resource to troubleshoot.
24905type TroubleshootingParameters struct {
24906	// TargetResourceID - The target resource to troubleshoot.
24907	TargetResourceID *string `json:"targetResourceId,omitempty"`
24908	// TroubleshootingProperties - Properties of the troubleshooting resource.
24909	*TroubleshootingProperties `json:"properties,omitempty"`
24910}
24911
24912// MarshalJSON is the custom marshaler for TroubleshootingParameters.
24913func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
24914	objectMap := make(map[string]interface{})
24915	if tp.TargetResourceID != nil {
24916		objectMap["targetResourceId"] = tp.TargetResourceID
24917	}
24918	if tp.TroubleshootingProperties != nil {
24919		objectMap["properties"] = tp.TroubleshootingProperties
24920	}
24921	return json.Marshal(objectMap)
24922}
24923
24924// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
24925func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
24926	var m map[string]*json.RawMessage
24927	err := json.Unmarshal(body, &m)
24928	if err != nil {
24929		return err
24930	}
24931	for k, v := range m {
24932		switch k {
24933		case "targetResourceId":
24934			if v != nil {
24935				var targetResourceID string
24936				err = json.Unmarshal(*v, &targetResourceID)
24937				if err != nil {
24938					return err
24939				}
24940				tp.TargetResourceID = &targetResourceID
24941			}
24942		case "properties":
24943			if v != nil {
24944				var troubleshootingProperties TroubleshootingProperties
24945				err = json.Unmarshal(*v, &troubleshootingProperties)
24946				if err != nil {
24947					return err
24948				}
24949				tp.TroubleshootingProperties = &troubleshootingProperties
24950			}
24951		}
24952	}
24953
24954	return nil
24955}
24956
24957// TroubleshootingProperties storage location provided for troubleshoot.
24958type TroubleshootingProperties struct {
24959	// StorageID - The ID for the storage account to save the troubleshoot result.
24960	StorageID *string `json:"storageId,omitempty"`
24961	// StoragePath - The path to the blob to save the troubleshoot result in.
24962	StoragePath *string `json:"storagePath,omitempty"`
24963}
24964
24965// TroubleshootingRecommendedActions recommended actions based on discovered issues.
24966type TroubleshootingRecommendedActions struct {
24967	// ActionID - ID of the recommended action.
24968	ActionID *string `json:"actionId,omitempty"`
24969	// ActionText - Description of recommended actions.
24970	ActionText *string `json:"actionText,omitempty"`
24971	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
24972	ActionURI *string `json:"actionUri,omitempty"`
24973	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
24974	ActionURIText *string `json:"actionUriText,omitempty"`
24975}
24976
24977// TroubleshootingResult troubleshooting information gained from specified resource.
24978type TroubleshootingResult struct {
24979	autorest.Response `json:"-"`
24980	// StartTime - The start time of the troubleshooting.
24981	StartTime *date.Time `json:"startTime,omitempty"`
24982	// EndTime - The end time of the troubleshooting.
24983	EndTime *date.Time `json:"endTime,omitempty"`
24984	// Code - The result code of the troubleshooting.
24985	Code *string `json:"code,omitempty"`
24986	// Results - Information from troubleshooting.
24987	Results *[]TroubleshootingDetails `json:"results,omitempty"`
24988}
24989
24990// TunnelConnectionHealth virtualNetworkGatewayConnection properties
24991type TunnelConnectionHealth struct {
24992	// Tunnel - READ-ONLY; Tunnel name.
24993	Tunnel *string `json:"tunnel,omitempty"`
24994	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
24995	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
24996	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection
24997	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
24998	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection
24999	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
25000	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
25001	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
25002}
25003
25004// Usage describes network resource usage.
25005type Usage struct {
25006	// ID - READ-ONLY; Resource identifier.
25007	ID *string `json:"id,omitempty"`
25008	// Unit - An enum describing the unit of measurement.
25009	Unit *string `json:"unit,omitempty"`
25010	// CurrentValue - The current value of the usage.
25011	CurrentValue *int64 `json:"currentValue,omitempty"`
25012	// Limit - The limit of usage.
25013	Limit *int64 `json:"limit,omitempty"`
25014	// Name - The name of the type of usage.
25015	Name *UsageName `json:"name,omitempty"`
25016}
25017
25018// UsageName the usage names.
25019type UsageName struct {
25020	// Value - A string describing the resource name.
25021	Value *string `json:"value,omitempty"`
25022	// LocalizedValue - A localized string describing the resource name.
25023	LocalizedValue *string `json:"localizedValue,omitempty"`
25024}
25025
25026// UsagesListResult the list usages operation response.
25027type UsagesListResult struct {
25028	autorest.Response `json:"-"`
25029	// Value - The list network resource usages.
25030	Value *[]Usage `json:"value,omitempty"`
25031	// NextLink - URL to get the next set of results.
25032	NextLink *string `json:"nextLink,omitempty"`
25033}
25034
25035// UsagesListResultIterator provides access to a complete listing of Usage values.
25036type UsagesListResultIterator struct {
25037	i    int
25038	page UsagesListResultPage
25039}
25040
25041// NextWithContext advances to the next value.  If there was an error making
25042// the request the iterator does not advance and the error is returned.
25043func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
25044	if tracing.IsEnabled() {
25045		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
25046		defer func() {
25047			sc := -1
25048			if iter.Response().Response.Response != nil {
25049				sc = iter.Response().Response.Response.StatusCode
25050			}
25051			tracing.EndSpan(ctx, sc, err)
25052		}()
25053	}
25054	iter.i++
25055	if iter.i < len(iter.page.Values()) {
25056		return nil
25057	}
25058	err = iter.page.NextWithContext(ctx)
25059	if err != nil {
25060		iter.i--
25061		return err
25062	}
25063	iter.i = 0
25064	return nil
25065}
25066
25067// Next advances to the next value.  If there was an error making
25068// the request the iterator does not advance and the error is returned.
25069// Deprecated: Use NextWithContext() instead.
25070func (iter *UsagesListResultIterator) Next() error {
25071	return iter.NextWithContext(context.Background())
25072}
25073
25074// NotDone returns true if the enumeration should be started or is not yet complete.
25075func (iter UsagesListResultIterator) NotDone() bool {
25076	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25077}
25078
25079// Response returns the raw server response from the last page request.
25080func (iter UsagesListResultIterator) Response() UsagesListResult {
25081	return iter.page.Response()
25082}
25083
25084// Value returns the current value or a zero-initialized value if the
25085// iterator has advanced beyond the end of the collection.
25086func (iter UsagesListResultIterator) Value() Usage {
25087	if !iter.page.NotDone() {
25088		return Usage{}
25089	}
25090	return iter.page.Values()[iter.i]
25091}
25092
25093// Creates a new instance of the UsagesListResultIterator type.
25094func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
25095	return UsagesListResultIterator{page: page}
25096}
25097
25098// IsEmpty returns true if the ListResult contains no values.
25099func (ulr UsagesListResult) IsEmpty() bool {
25100	return ulr.Value == nil || len(*ulr.Value) == 0
25101}
25102
25103// usagesListResultPreparer prepares a request to retrieve the next set of results.
25104// It returns nil if no more results exist.
25105func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
25106	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
25107		return nil, nil
25108	}
25109	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25110		autorest.AsJSON(),
25111		autorest.AsGet(),
25112		autorest.WithBaseURL(to.String(ulr.NextLink)))
25113}
25114
25115// UsagesListResultPage contains a page of Usage values.
25116type UsagesListResultPage struct {
25117	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
25118	ulr UsagesListResult
25119}
25120
25121// NextWithContext advances to the next page of values.  If there was an error making
25122// the request the page does not advance and the error is returned.
25123func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
25124	if tracing.IsEnabled() {
25125		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
25126		defer func() {
25127			sc := -1
25128			if page.Response().Response.Response != nil {
25129				sc = page.Response().Response.Response.StatusCode
25130			}
25131			tracing.EndSpan(ctx, sc, err)
25132		}()
25133	}
25134	next, err := page.fn(ctx, page.ulr)
25135	if err != nil {
25136		return err
25137	}
25138	page.ulr = next
25139	return nil
25140}
25141
25142// Next advances to the next page of values.  If there was an error making
25143// the request the page does not advance and the error is returned.
25144// Deprecated: Use NextWithContext() instead.
25145func (page *UsagesListResultPage) Next() error {
25146	return page.NextWithContext(context.Background())
25147}
25148
25149// NotDone returns true if the page enumeration should be started or is not yet complete.
25150func (page UsagesListResultPage) NotDone() bool {
25151	return !page.ulr.IsEmpty()
25152}
25153
25154// Response returns the raw server response from the last page request.
25155func (page UsagesListResultPage) Response() UsagesListResult {
25156	return page.ulr
25157}
25158
25159// Values returns the slice of values for the current page or nil if there are no values.
25160func (page UsagesListResultPage) Values() []Usage {
25161	if page.ulr.IsEmpty() {
25162		return nil
25163	}
25164	return *page.ulr.Value
25165}
25166
25167// Creates a new instance of the UsagesListResultPage type.
25168func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
25169	return UsagesListResultPage{fn: getNextPage}
25170}
25171
25172// VerificationIPFlowParameters parameters that define the IP flow to be verified.
25173type VerificationIPFlowParameters struct {
25174	// TargetResourceID - The ID of the target resource to perform next-hop on.
25175	TargetResourceID *string `json:"targetResourceId,omitempty"`
25176	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
25177	Direction Direction `json:"direction,omitempty"`
25178	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
25179	Protocol IPFlowProtocol `json:"protocol,omitempty"`
25180	// 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.
25181	LocalPort *string `json:"localPort,omitempty"`
25182	// 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.
25183	RemotePort *string `json:"remotePort,omitempty"`
25184	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
25185	LocalIPAddress *string `json:"localIPAddress,omitempty"`
25186	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
25187	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
25188	// 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).
25189	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
25190}
25191
25192// VerificationIPFlowResult results of IP flow verification on the target resource.
25193type VerificationIPFlowResult struct {
25194	autorest.Response `json:"-"`
25195	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
25196	Access Access `json:"access,omitempty"`
25197	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
25198	RuleName *string `json:"ruleName,omitempty"`
25199}
25200
25201// VirtualHub virtualHub Resource.
25202type VirtualHub struct {
25203	autorest.Response `json:"-"`
25204	// VirtualHubProperties - Properties of the virtual hub.
25205	*VirtualHubProperties `json:"properties,omitempty"`
25206	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
25207	Etag *string `json:"etag,omitempty"`
25208	// ID - Resource ID.
25209	ID *string `json:"id,omitempty"`
25210	// Name - READ-ONLY; Resource name.
25211	Name *string `json:"name,omitempty"`
25212	// Type - READ-ONLY; Resource type.
25213	Type *string `json:"type,omitempty"`
25214	// Location - Resource location.
25215	Location *string `json:"location,omitempty"`
25216	// Tags - Resource tags.
25217	Tags map[string]*string `json:"tags"`
25218}
25219
25220// MarshalJSON is the custom marshaler for VirtualHub.
25221func (vh VirtualHub) MarshalJSON() ([]byte, error) {
25222	objectMap := make(map[string]interface{})
25223	if vh.VirtualHubProperties != nil {
25224		objectMap["properties"] = vh.VirtualHubProperties
25225	}
25226	if vh.ID != nil {
25227		objectMap["id"] = vh.ID
25228	}
25229	if vh.Location != nil {
25230		objectMap["location"] = vh.Location
25231	}
25232	if vh.Tags != nil {
25233		objectMap["tags"] = vh.Tags
25234	}
25235	return json.Marshal(objectMap)
25236}
25237
25238// UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
25239func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
25240	var m map[string]*json.RawMessage
25241	err := json.Unmarshal(body, &m)
25242	if err != nil {
25243		return err
25244	}
25245	for k, v := range m {
25246		switch k {
25247		case "properties":
25248			if v != nil {
25249				var virtualHubProperties VirtualHubProperties
25250				err = json.Unmarshal(*v, &virtualHubProperties)
25251				if err != nil {
25252					return err
25253				}
25254				vh.VirtualHubProperties = &virtualHubProperties
25255			}
25256		case "etag":
25257			if v != nil {
25258				var etag string
25259				err = json.Unmarshal(*v, &etag)
25260				if err != nil {
25261					return err
25262				}
25263				vh.Etag = &etag
25264			}
25265		case "id":
25266			if v != nil {
25267				var ID string
25268				err = json.Unmarshal(*v, &ID)
25269				if err != nil {
25270					return err
25271				}
25272				vh.ID = &ID
25273			}
25274		case "name":
25275			if v != nil {
25276				var name string
25277				err = json.Unmarshal(*v, &name)
25278				if err != nil {
25279					return err
25280				}
25281				vh.Name = &name
25282			}
25283		case "type":
25284			if v != nil {
25285				var typeVar string
25286				err = json.Unmarshal(*v, &typeVar)
25287				if err != nil {
25288					return err
25289				}
25290				vh.Type = &typeVar
25291			}
25292		case "location":
25293			if v != nil {
25294				var location string
25295				err = json.Unmarshal(*v, &location)
25296				if err != nil {
25297					return err
25298				}
25299				vh.Location = &location
25300			}
25301		case "tags":
25302			if v != nil {
25303				var tags map[string]*string
25304				err = json.Unmarshal(*v, &tags)
25305				if err != nil {
25306					return err
25307				}
25308				vh.Tags = tags
25309			}
25310		}
25311	}
25312
25313	return nil
25314}
25315
25316// VirtualHubID virtual Hub identifier.
25317type VirtualHubID struct {
25318	// 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.
25319	ID *string `json:"id,omitempty"`
25320}
25321
25322// VirtualHubProperties parameters for VirtualHub
25323type VirtualHubProperties struct {
25324	// VirtualWan - The VirtualWAN to which the VirtualHub belongs
25325	VirtualWan *SubResource `json:"virtualWan,omitempty"`
25326	// VpnGateway - The VpnGateway associated with this VirtualHub
25327	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
25328	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub
25329	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
25330	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub
25331	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
25332	// VirtualNetworkConnections - List of all vnet connections with this VirtualHub.
25333	VirtualNetworkConnections *[]HubVirtualNetworkConnection `json:"virtualNetworkConnections,omitempty"`
25334	// AddressPrefix - Address-prefix for this VirtualHub.
25335	AddressPrefix *string `json:"addressPrefix,omitempty"`
25336	// RouteTable - The routeTable associated with this virtual hub.
25337	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
25338	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25339	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25340}
25341
25342// VirtualHubRoute virtualHub route
25343type VirtualHubRoute struct {
25344	// AddressPrefixes - List of all addressPrefixes.
25345	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
25346	// NextHopIPAddress - NextHop ip address.
25347	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
25348}
25349
25350// VirtualHubRouteTable virtualHub route table
25351type VirtualHubRouteTable struct {
25352	// Routes - List of all routes.
25353	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
25354}
25355
25356// VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25357// long-running operation.
25358type VirtualHubsCreateOrUpdateFuture struct {
25359	azure.Future
25360}
25361
25362// Result returns the result of the asynchronous operation.
25363// If the operation has not completed it will return an error.
25364func (future *VirtualHubsCreateOrUpdateFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
25365	var done bool
25366	done, err = future.DoneWithContext(context.Background(), client)
25367	if err != nil {
25368		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25369		return
25370	}
25371	if !done {
25372		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
25373		return
25374	}
25375	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25376	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
25377		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
25378		if err != nil {
25379			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
25380		}
25381	}
25382	return
25383}
25384
25385// VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25386// operation.
25387type VirtualHubsDeleteFuture struct {
25388	azure.Future
25389}
25390
25391// Result returns the result of the asynchronous operation.
25392// If the operation has not completed it will return an error.
25393func (future *VirtualHubsDeleteFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
25394	var done bool
25395	done, err = future.DoneWithContext(context.Background(), client)
25396	if err != nil {
25397		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
25398		return
25399	}
25400	if !done {
25401		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
25402		return
25403	}
25404	ar.Response = future.Response()
25405	return
25406}
25407
25408// VirtualHubsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
25409// operation.
25410type VirtualHubsUpdateTagsFuture struct {
25411	azure.Future
25412}
25413
25414// Result returns the result of the asynchronous operation.
25415// If the operation has not completed it will return an error.
25416func (future *VirtualHubsUpdateTagsFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
25417	var done bool
25418	done, err = future.DoneWithContext(context.Background(), client)
25419	if err != nil {
25420		err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
25421		return
25422	}
25423	if !done {
25424		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsUpdateTagsFuture")
25425		return
25426	}
25427	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25428	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
25429		vh, err = client.UpdateTagsResponder(vh.Response.Response)
25430		if err != nil {
25431			err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", vh.Response.Response, "Failure responding to request")
25432		}
25433	}
25434	return
25435}
25436
25437// VirtualNetwork virtual Network resource.
25438type VirtualNetwork struct {
25439	autorest.Response `json:"-"`
25440	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
25441	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
25442	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
25443	Etag *string `json:"etag,omitempty"`
25444	// ID - Resource ID.
25445	ID *string `json:"id,omitempty"`
25446	// Name - READ-ONLY; Resource name.
25447	Name *string `json:"name,omitempty"`
25448	// Type - READ-ONLY; Resource type.
25449	Type *string `json:"type,omitempty"`
25450	// Location - Resource location.
25451	Location *string `json:"location,omitempty"`
25452	// Tags - Resource tags.
25453	Tags map[string]*string `json:"tags"`
25454}
25455
25456// MarshalJSON is the custom marshaler for VirtualNetwork.
25457func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
25458	objectMap := make(map[string]interface{})
25459	if vn.VirtualNetworkPropertiesFormat != nil {
25460		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
25461	}
25462	if vn.Etag != nil {
25463		objectMap["etag"] = vn.Etag
25464	}
25465	if vn.ID != nil {
25466		objectMap["id"] = vn.ID
25467	}
25468	if vn.Location != nil {
25469		objectMap["location"] = vn.Location
25470	}
25471	if vn.Tags != nil {
25472		objectMap["tags"] = vn.Tags
25473	}
25474	return json.Marshal(objectMap)
25475}
25476
25477// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
25478func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
25479	var m map[string]*json.RawMessage
25480	err := json.Unmarshal(body, &m)
25481	if err != nil {
25482		return err
25483	}
25484	for k, v := range m {
25485		switch k {
25486		case "properties":
25487			if v != nil {
25488				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
25489				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
25490				if err != nil {
25491					return err
25492				}
25493				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
25494			}
25495		case "etag":
25496			if v != nil {
25497				var etag string
25498				err = json.Unmarshal(*v, &etag)
25499				if err != nil {
25500					return err
25501				}
25502				vn.Etag = &etag
25503			}
25504		case "id":
25505			if v != nil {
25506				var ID string
25507				err = json.Unmarshal(*v, &ID)
25508				if err != nil {
25509					return err
25510				}
25511				vn.ID = &ID
25512			}
25513		case "name":
25514			if v != nil {
25515				var name string
25516				err = json.Unmarshal(*v, &name)
25517				if err != nil {
25518					return err
25519				}
25520				vn.Name = &name
25521			}
25522		case "type":
25523			if v != nil {
25524				var typeVar string
25525				err = json.Unmarshal(*v, &typeVar)
25526				if err != nil {
25527					return err
25528				}
25529				vn.Type = &typeVar
25530			}
25531		case "location":
25532			if v != nil {
25533				var location string
25534				err = json.Unmarshal(*v, &location)
25535				if err != nil {
25536					return err
25537				}
25538				vn.Location = &location
25539			}
25540		case "tags":
25541			if v != nil {
25542				var tags map[string]*string
25543				err = json.Unmarshal(*v, &tags)
25544				if err != nil {
25545					return err
25546				}
25547				vn.Tags = tags
25548			}
25549		}
25550	}
25551
25552	return nil
25553}
25554
25555// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
25556// resource.
25557type VirtualNetworkConnectionGatewayReference struct {
25558	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
25559	ID *string `json:"id,omitempty"`
25560}
25561
25562// VirtualNetworkGateway a common class for general resource information
25563type VirtualNetworkGateway struct {
25564	autorest.Response `json:"-"`
25565	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
25566	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
25567	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
25568	Etag *string `json:"etag,omitempty"`
25569	// ID - Resource ID.
25570	ID *string `json:"id,omitempty"`
25571	// Name - READ-ONLY; Resource name.
25572	Name *string `json:"name,omitempty"`
25573	// Type - READ-ONLY; Resource type.
25574	Type *string `json:"type,omitempty"`
25575	// Location - Resource location.
25576	Location *string `json:"location,omitempty"`
25577	// Tags - Resource tags.
25578	Tags map[string]*string `json:"tags"`
25579}
25580
25581// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
25582func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
25583	objectMap := make(map[string]interface{})
25584	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
25585		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
25586	}
25587	if vng.Etag != nil {
25588		objectMap["etag"] = vng.Etag
25589	}
25590	if vng.ID != nil {
25591		objectMap["id"] = vng.ID
25592	}
25593	if vng.Location != nil {
25594		objectMap["location"] = vng.Location
25595	}
25596	if vng.Tags != nil {
25597		objectMap["tags"] = vng.Tags
25598	}
25599	return json.Marshal(objectMap)
25600}
25601
25602// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
25603func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
25604	var m map[string]*json.RawMessage
25605	err := json.Unmarshal(body, &m)
25606	if err != nil {
25607		return err
25608	}
25609	for k, v := range m {
25610		switch k {
25611		case "properties":
25612			if v != nil {
25613				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
25614				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
25615				if err != nil {
25616					return err
25617				}
25618				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
25619			}
25620		case "etag":
25621			if v != nil {
25622				var etag string
25623				err = json.Unmarshal(*v, &etag)
25624				if err != nil {
25625					return err
25626				}
25627				vng.Etag = &etag
25628			}
25629		case "id":
25630			if v != nil {
25631				var ID string
25632				err = json.Unmarshal(*v, &ID)
25633				if err != nil {
25634					return err
25635				}
25636				vng.ID = &ID
25637			}
25638		case "name":
25639			if v != nil {
25640				var name string
25641				err = json.Unmarshal(*v, &name)
25642				if err != nil {
25643					return err
25644				}
25645				vng.Name = &name
25646			}
25647		case "type":
25648			if v != nil {
25649				var typeVar string
25650				err = json.Unmarshal(*v, &typeVar)
25651				if err != nil {
25652					return err
25653				}
25654				vng.Type = &typeVar
25655			}
25656		case "location":
25657			if v != nil {
25658				var location string
25659				err = json.Unmarshal(*v, &location)
25660				if err != nil {
25661					return err
25662				}
25663				vng.Location = &location
25664			}
25665		case "tags":
25666			if v != nil {
25667				var tags map[string]*string
25668				err = json.Unmarshal(*v, &tags)
25669				if err != nil {
25670					return err
25671				}
25672				vng.Tags = tags
25673			}
25674		}
25675	}
25676
25677	return nil
25678}
25679
25680// VirtualNetworkGatewayConnection a common class for general resource information
25681type VirtualNetworkGatewayConnection struct {
25682	autorest.Response `json:"-"`
25683	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
25684	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
25685	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
25686	Etag *string `json:"etag,omitempty"`
25687	// ID - Resource ID.
25688	ID *string `json:"id,omitempty"`
25689	// Name - READ-ONLY; Resource name.
25690	Name *string `json:"name,omitempty"`
25691	// Type - READ-ONLY; Resource type.
25692	Type *string `json:"type,omitempty"`
25693	// Location - Resource location.
25694	Location *string `json:"location,omitempty"`
25695	// Tags - Resource tags.
25696	Tags map[string]*string `json:"tags"`
25697}
25698
25699// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
25700func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
25701	objectMap := make(map[string]interface{})
25702	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
25703		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
25704	}
25705	if vngc.Etag != nil {
25706		objectMap["etag"] = vngc.Etag
25707	}
25708	if vngc.ID != nil {
25709		objectMap["id"] = vngc.ID
25710	}
25711	if vngc.Location != nil {
25712		objectMap["location"] = vngc.Location
25713	}
25714	if vngc.Tags != nil {
25715		objectMap["tags"] = vngc.Tags
25716	}
25717	return json.Marshal(objectMap)
25718}
25719
25720// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
25721func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
25722	var m map[string]*json.RawMessage
25723	err := json.Unmarshal(body, &m)
25724	if err != nil {
25725		return err
25726	}
25727	for k, v := range m {
25728		switch k {
25729		case "properties":
25730			if v != nil {
25731				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
25732				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
25733				if err != nil {
25734					return err
25735				}
25736				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
25737			}
25738		case "etag":
25739			if v != nil {
25740				var etag string
25741				err = json.Unmarshal(*v, &etag)
25742				if err != nil {
25743					return err
25744				}
25745				vngc.Etag = &etag
25746			}
25747		case "id":
25748			if v != nil {
25749				var ID string
25750				err = json.Unmarshal(*v, &ID)
25751				if err != nil {
25752					return err
25753				}
25754				vngc.ID = &ID
25755			}
25756		case "name":
25757			if v != nil {
25758				var name string
25759				err = json.Unmarshal(*v, &name)
25760				if err != nil {
25761					return err
25762				}
25763				vngc.Name = &name
25764			}
25765		case "type":
25766			if v != nil {
25767				var typeVar string
25768				err = json.Unmarshal(*v, &typeVar)
25769				if err != nil {
25770					return err
25771				}
25772				vngc.Type = &typeVar
25773			}
25774		case "location":
25775			if v != nil {
25776				var location string
25777				err = json.Unmarshal(*v, &location)
25778				if err != nil {
25779					return err
25780				}
25781				vngc.Location = &location
25782			}
25783		case "tags":
25784			if v != nil {
25785				var tags map[string]*string
25786				err = json.Unmarshal(*v, &tags)
25787				if err != nil {
25788					return err
25789				}
25790				vngc.Tags = tags
25791			}
25792		}
25793	}
25794
25795	return nil
25796}
25797
25798// VirtualNetworkGatewayConnectionListEntity a common class for general resource information
25799type VirtualNetworkGatewayConnectionListEntity struct {
25800	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
25801	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
25802	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
25803	Etag *string `json:"etag,omitempty"`
25804	// ID - Resource ID.
25805	ID *string `json:"id,omitempty"`
25806	// Name - READ-ONLY; Resource name.
25807	Name *string `json:"name,omitempty"`
25808	// Type - READ-ONLY; Resource type.
25809	Type *string `json:"type,omitempty"`
25810	// Location - Resource location.
25811	Location *string `json:"location,omitempty"`
25812	// Tags - Resource tags.
25813	Tags map[string]*string `json:"tags"`
25814}
25815
25816// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
25817func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
25818	objectMap := make(map[string]interface{})
25819	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
25820		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
25821	}
25822	if vngcle.Etag != nil {
25823		objectMap["etag"] = vngcle.Etag
25824	}
25825	if vngcle.ID != nil {
25826		objectMap["id"] = vngcle.ID
25827	}
25828	if vngcle.Location != nil {
25829		objectMap["location"] = vngcle.Location
25830	}
25831	if vngcle.Tags != nil {
25832		objectMap["tags"] = vngcle.Tags
25833	}
25834	return json.Marshal(objectMap)
25835}
25836
25837// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
25838func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
25839	var m map[string]*json.RawMessage
25840	err := json.Unmarshal(body, &m)
25841	if err != nil {
25842		return err
25843	}
25844	for k, v := range m {
25845		switch k {
25846		case "properties":
25847			if v != nil {
25848				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
25849				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
25850				if err != nil {
25851					return err
25852				}
25853				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
25854			}
25855		case "etag":
25856			if v != nil {
25857				var etag string
25858				err = json.Unmarshal(*v, &etag)
25859				if err != nil {
25860					return err
25861				}
25862				vngcle.Etag = &etag
25863			}
25864		case "id":
25865			if v != nil {
25866				var ID string
25867				err = json.Unmarshal(*v, &ID)
25868				if err != nil {
25869					return err
25870				}
25871				vngcle.ID = &ID
25872			}
25873		case "name":
25874			if v != nil {
25875				var name string
25876				err = json.Unmarshal(*v, &name)
25877				if err != nil {
25878					return err
25879				}
25880				vngcle.Name = &name
25881			}
25882		case "type":
25883			if v != nil {
25884				var typeVar string
25885				err = json.Unmarshal(*v, &typeVar)
25886				if err != nil {
25887					return err
25888				}
25889				vngcle.Type = &typeVar
25890			}
25891		case "location":
25892			if v != nil {
25893				var location string
25894				err = json.Unmarshal(*v, &location)
25895				if err != nil {
25896					return err
25897				}
25898				vngcle.Location = &location
25899			}
25900		case "tags":
25901			if v != nil {
25902				var tags map[string]*string
25903				err = json.Unmarshal(*v, &tags)
25904				if err != nil {
25905					return err
25906				}
25907				vngcle.Tags = tags
25908			}
25909		}
25910	}
25911
25912	return nil
25913}
25914
25915// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties
25916type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
25917	// AuthorizationKey - The authorizationKey.
25918	AuthorizationKey *string `json:"authorizationKey,omitempty"`
25919	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
25920	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
25921	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
25922	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
25923	// LocalNetworkGateway2 - The reference to local network gateway resource.
25924	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
25925	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
25926	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
25927	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
25928	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
25929	// RoutingWeight - The routing weight.
25930	RoutingWeight *int32 `json:"routingWeight,omitempty"`
25931	// SharedKey - The IPSec shared key.
25932	SharedKey *string `json:"sharedKey,omitempty"`
25933	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
25934	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
25935	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
25936	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
25937	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
25938	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
25939	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
25940	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
25941	// Peer - The reference to peerings resource.
25942	Peer *SubResource `json:"peer,omitempty"`
25943	// EnableBgp - EnableBgp flag
25944	EnableBgp *bool `json:"enableBgp,omitempty"`
25945	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
25946	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
25947	// IpsecPolicies - The IPSec Policies to be considered by this connection.
25948	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
25949	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
25950	ResourceGUID *string `json:"resourceGuid,omitempty"`
25951	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
25952	ProvisioningState *string `json:"provisioningState,omitempty"`
25953	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding
25954	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
25955}
25956
25957// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
25958// service call
25959type VirtualNetworkGatewayConnectionListResult struct {
25960	autorest.Response `json:"-"`
25961	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
25962	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
25963	// NextLink - READ-ONLY; The URL to get the next set of results.
25964	NextLink *string `json:"nextLink,omitempty"`
25965}
25966
25967// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
25968// VirtualNetworkGatewayConnection values.
25969type VirtualNetworkGatewayConnectionListResultIterator struct {
25970	i    int
25971	page VirtualNetworkGatewayConnectionListResultPage
25972}
25973
25974// NextWithContext advances to the next value.  If there was an error making
25975// the request the iterator does not advance and the error is returned.
25976func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
25977	if tracing.IsEnabled() {
25978		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
25979		defer func() {
25980			sc := -1
25981			if iter.Response().Response.Response != nil {
25982				sc = iter.Response().Response.Response.StatusCode
25983			}
25984			tracing.EndSpan(ctx, sc, err)
25985		}()
25986	}
25987	iter.i++
25988	if iter.i < len(iter.page.Values()) {
25989		return nil
25990	}
25991	err = iter.page.NextWithContext(ctx)
25992	if err != nil {
25993		iter.i--
25994		return err
25995	}
25996	iter.i = 0
25997	return nil
25998}
25999
26000// Next advances to the next value.  If there was an error making
26001// the request the iterator does not advance and the error is returned.
26002// Deprecated: Use NextWithContext() instead.
26003func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
26004	return iter.NextWithContext(context.Background())
26005}
26006
26007// NotDone returns true if the enumeration should be started or is not yet complete.
26008func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
26009	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26010}
26011
26012// Response returns the raw server response from the last page request.
26013func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
26014	return iter.page.Response()
26015}
26016
26017// Value returns the current value or a zero-initialized value if the
26018// iterator has advanced beyond the end of the collection.
26019func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
26020	if !iter.page.NotDone() {
26021		return VirtualNetworkGatewayConnection{}
26022	}
26023	return iter.page.Values()[iter.i]
26024}
26025
26026// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
26027func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
26028	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
26029}
26030
26031// IsEmpty returns true if the ListResult contains no values.
26032func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
26033	return vngclr.Value == nil || len(*vngclr.Value) == 0
26034}
26035
26036// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
26037// It returns nil if no more results exist.
26038func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
26039	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
26040		return nil, nil
26041	}
26042	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26043		autorest.AsJSON(),
26044		autorest.AsGet(),
26045		autorest.WithBaseURL(to.String(vngclr.NextLink)))
26046}
26047
26048// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
26049type VirtualNetworkGatewayConnectionListResultPage struct {
26050	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
26051	vngclr VirtualNetworkGatewayConnectionListResult
26052}
26053
26054// NextWithContext advances to the next page of values.  If there was an error making
26055// the request the page does not advance and the error is returned.
26056func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
26057	if tracing.IsEnabled() {
26058		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
26059		defer func() {
26060			sc := -1
26061			if page.Response().Response.Response != nil {
26062				sc = page.Response().Response.Response.StatusCode
26063			}
26064			tracing.EndSpan(ctx, sc, err)
26065		}()
26066	}
26067	next, err := page.fn(ctx, page.vngclr)
26068	if err != nil {
26069		return err
26070	}
26071	page.vngclr = next
26072	return nil
26073}
26074
26075// Next advances to the next page of values.  If there was an error making
26076// the request the page does not advance and the error is returned.
26077// Deprecated: Use NextWithContext() instead.
26078func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
26079	return page.NextWithContext(context.Background())
26080}
26081
26082// NotDone returns true if the page enumeration should be started or is not yet complete.
26083func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
26084	return !page.vngclr.IsEmpty()
26085}
26086
26087// Response returns the raw server response from the last page request.
26088func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
26089	return page.vngclr
26090}
26091
26092// Values returns the slice of values for the current page or nil if there are no values.
26093func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
26094	if page.vngclr.IsEmpty() {
26095		return nil
26096	}
26097	return *page.vngclr.Value
26098}
26099
26100// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
26101func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
26102	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
26103}
26104
26105// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties
26106type VirtualNetworkGatewayConnectionPropertiesFormat struct {
26107	// AuthorizationKey - The authorizationKey.
26108	AuthorizationKey *string `json:"authorizationKey,omitempty"`
26109	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
26110	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
26111	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
26112	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
26113	// LocalNetworkGateway2 - The reference to local network gateway resource.
26114	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
26115	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
26116	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
26117	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
26118	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
26119	// RoutingWeight - The routing weight.
26120	RoutingWeight *int32 `json:"routingWeight,omitempty"`
26121	// SharedKey - The IPSec shared key.
26122	SharedKey *string `json:"sharedKey,omitempty"`
26123	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
26124	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
26125	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
26126	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
26127	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
26128	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
26129	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
26130	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
26131	// Peer - The reference to peerings resource.
26132	Peer *SubResource `json:"peer,omitempty"`
26133	// EnableBgp - EnableBgp flag
26134	EnableBgp *bool `json:"enableBgp,omitempty"`
26135	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
26136	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
26137	// IpsecPolicies - The IPSec Policies to be considered by this connection.
26138	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
26139	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
26140	ResourceGUID *string `json:"resourceGuid,omitempty"`
26141	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
26142	ProvisioningState *string `json:"provisioningState,omitempty"`
26143	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding
26144	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
26145}
26146
26147// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
26148// results of a long-running operation.
26149type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
26150	azure.Future
26151}
26152
26153// Result returns the result of the asynchronous operation.
26154// If the operation has not completed it will return an error.
26155func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
26156	var done bool
26157	done, err = future.DoneWithContext(context.Background(), client)
26158	if err != nil {
26159		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26160		return
26161	}
26162	if !done {
26163		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
26164		return
26165	}
26166	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26167	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
26168		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
26169		if err != nil {
26170			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
26171		}
26172	}
26173	return
26174}
26175
26176// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
26177// a long-running operation.
26178type VirtualNetworkGatewayConnectionsDeleteFuture struct {
26179	azure.Future
26180}
26181
26182// Result returns the result of the asynchronous operation.
26183// If the operation has not completed it will return an error.
26184func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
26185	var done bool
26186	done, err = future.DoneWithContext(context.Background(), client)
26187	if err != nil {
26188		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
26189		return
26190	}
26191	if !done {
26192		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
26193		return
26194	}
26195	ar.Response = future.Response()
26196	return
26197}
26198
26199// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
26200// results of a long-running operation.
26201type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
26202	azure.Future
26203}
26204
26205// Result returns the result of the asynchronous operation.
26206// If the operation has not completed it will return an error.
26207func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
26208	var done bool
26209	done, err = future.DoneWithContext(context.Background(), client)
26210	if err != nil {
26211		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
26212		return
26213	}
26214	if !done {
26215		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
26216		return
26217	}
26218	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26219	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
26220		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
26221		if err != nil {
26222			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
26223		}
26224	}
26225	return
26226}
26227
26228// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
26229// results of a long-running operation.
26230type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
26231	azure.Future
26232}
26233
26234// Result returns the result of the asynchronous operation.
26235// If the operation has not completed it will return an error.
26236func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
26237	var done bool
26238	done, err = future.DoneWithContext(context.Background(), client)
26239	if err != nil {
26240		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
26241		return
26242	}
26243	if !done {
26244		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
26245		return
26246	}
26247	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26248	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
26249		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
26250		if err != nil {
26251			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
26252		}
26253	}
26254	return
26255}
26256
26257// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
26258// results of a long-running operation.
26259type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
26260	azure.Future
26261}
26262
26263// Result returns the result of the asynchronous operation.
26264// If the operation has not completed it will return an error.
26265func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
26266	var done bool
26267	done, err = future.DoneWithContext(context.Background(), client)
26268	if err != nil {
26269		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26270		return
26271	}
26272	if !done {
26273		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
26274		return
26275	}
26276	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26277	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
26278		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
26279		if err != nil {
26280			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
26281		}
26282	}
26283	return
26284}
26285
26286// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway
26287type VirtualNetworkGatewayIPConfiguration struct {
26288	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
26289	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
26290	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26291	Name *string `json:"name,omitempty"`
26292	// Etag - A unique read-only string that changes whenever the resource is updated.
26293	Etag *string `json:"etag,omitempty"`
26294	// ID - Resource ID.
26295	ID *string `json:"id,omitempty"`
26296}
26297
26298// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
26299func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
26300	objectMap := make(map[string]interface{})
26301	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
26302		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
26303	}
26304	if vngic.Name != nil {
26305		objectMap["name"] = vngic.Name
26306	}
26307	if vngic.Etag != nil {
26308		objectMap["etag"] = vngic.Etag
26309	}
26310	if vngic.ID != nil {
26311		objectMap["id"] = vngic.ID
26312	}
26313	return json.Marshal(objectMap)
26314}
26315
26316// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
26317func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
26318	var m map[string]*json.RawMessage
26319	err := json.Unmarshal(body, &m)
26320	if err != nil {
26321		return err
26322	}
26323	for k, v := range m {
26324		switch k {
26325		case "properties":
26326			if v != nil {
26327				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
26328				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
26329				if err != nil {
26330					return err
26331				}
26332				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
26333			}
26334		case "name":
26335			if v != nil {
26336				var name string
26337				err = json.Unmarshal(*v, &name)
26338				if err != nil {
26339					return err
26340				}
26341				vngic.Name = &name
26342			}
26343		case "etag":
26344			if v != nil {
26345				var etag string
26346				err = json.Unmarshal(*v, &etag)
26347				if err != nil {
26348					return err
26349				}
26350				vngic.Etag = &etag
26351			}
26352		case "id":
26353			if v != nil {
26354				var ID string
26355				err = json.Unmarshal(*v, &ID)
26356				if err != nil {
26357					return err
26358				}
26359				vngic.ID = &ID
26360			}
26361		}
26362	}
26363
26364	return nil
26365}
26366
26367// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration
26368type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
26369	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
26370	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
26371	// Subnet - The reference of the subnet resource.
26372	Subnet *SubResource `json:"subnet,omitempty"`
26373	// PublicIPAddress - The reference of the public IP resource.
26374	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
26375	// ProvisioningState - READ-ONLY; The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
26376	ProvisioningState *string `json:"provisioningState,omitempty"`
26377}
26378
26379// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
26380// service call
26381type VirtualNetworkGatewayListConnectionsResult struct {
26382	autorest.Response `json:"-"`
26383	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
26384	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
26385	// NextLink - READ-ONLY; The URL to get the next set of results.
26386	NextLink *string `json:"nextLink,omitempty"`
26387}
26388
26389// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
26390// VirtualNetworkGatewayConnectionListEntity values.
26391type VirtualNetworkGatewayListConnectionsResultIterator struct {
26392	i    int
26393	page VirtualNetworkGatewayListConnectionsResultPage
26394}
26395
26396// NextWithContext advances to the next value.  If there was an error making
26397// the request the iterator does not advance and the error is returned.
26398func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
26399	if tracing.IsEnabled() {
26400		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
26401		defer func() {
26402			sc := -1
26403			if iter.Response().Response.Response != nil {
26404				sc = iter.Response().Response.Response.StatusCode
26405			}
26406			tracing.EndSpan(ctx, sc, err)
26407		}()
26408	}
26409	iter.i++
26410	if iter.i < len(iter.page.Values()) {
26411		return nil
26412	}
26413	err = iter.page.NextWithContext(ctx)
26414	if err != nil {
26415		iter.i--
26416		return err
26417	}
26418	iter.i = 0
26419	return nil
26420}
26421
26422// Next advances to the next value.  If there was an error making
26423// the request the iterator does not advance and the error is returned.
26424// Deprecated: Use NextWithContext() instead.
26425func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
26426	return iter.NextWithContext(context.Background())
26427}
26428
26429// NotDone returns true if the enumeration should be started or is not yet complete.
26430func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
26431	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26432}
26433
26434// Response returns the raw server response from the last page request.
26435func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
26436	return iter.page.Response()
26437}
26438
26439// Value returns the current value or a zero-initialized value if the
26440// iterator has advanced beyond the end of the collection.
26441func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
26442	if !iter.page.NotDone() {
26443		return VirtualNetworkGatewayConnectionListEntity{}
26444	}
26445	return iter.page.Values()[iter.i]
26446}
26447
26448// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
26449func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
26450	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
26451}
26452
26453// IsEmpty returns true if the ListResult contains no values.
26454func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
26455	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
26456}
26457
26458// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
26459// It returns nil if no more results exist.
26460func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
26461	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
26462		return nil, nil
26463	}
26464	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26465		autorest.AsJSON(),
26466		autorest.AsGet(),
26467		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
26468}
26469
26470// VirtualNetworkGatewayListConnectionsResultPage contains a page of
26471// VirtualNetworkGatewayConnectionListEntity values.
26472type VirtualNetworkGatewayListConnectionsResultPage struct {
26473	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
26474	vnglcr VirtualNetworkGatewayListConnectionsResult
26475}
26476
26477// NextWithContext advances to the next page of values.  If there was an error making
26478// the request the page does not advance and the error is returned.
26479func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
26480	if tracing.IsEnabled() {
26481		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
26482		defer func() {
26483			sc := -1
26484			if page.Response().Response.Response != nil {
26485				sc = page.Response().Response.Response.StatusCode
26486			}
26487			tracing.EndSpan(ctx, sc, err)
26488		}()
26489	}
26490	next, err := page.fn(ctx, page.vnglcr)
26491	if err != nil {
26492		return err
26493	}
26494	page.vnglcr = next
26495	return nil
26496}
26497
26498// Next advances to the next page of values.  If there was an error making
26499// the request the page does not advance and the error is returned.
26500// Deprecated: Use NextWithContext() instead.
26501func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
26502	return page.NextWithContext(context.Background())
26503}
26504
26505// NotDone returns true if the page enumeration should be started or is not yet complete.
26506func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
26507	return !page.vnglcr.IsEmpty()
26508}
26509
26510// Response returns the raw server response from the last page request.
26511func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
26512	return page.vnglcr
26513}
26514
26515// Values returns the slice of values for the current page or nil if there are no values.
26516func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
26517	if page.vnglcr.IsEmpty() {
26518		return nil
26519	}
26520	return *page.vnglcr.Value
26521}
26522
26523// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
26524func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
26525	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
26526}
26527
26528// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
26529type VirtualNetworkGatewayListResult struct {
26530	autorest.Response `json:"-"`
26531	// Value - Gets a list of VirtualNetworkGateway resources that exists in a resource group.
26532	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
26533	// NextLink - READ-ONLY; The URL to get the next set of results.
26534	NextLink *string `json:"nextLink,omitempty"`
26535}
26536
26537// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
26538// values.
26539type VirtualNetworkGatewayListResultIterator struct {
26540	i    int
26541	page VirtualNetworkGatewayListResultPage
26542}
26543
26544// NextWithContext advances to the next value.  If there was an error making
26545// the request the iterator does not advance and the error is returned.
26546func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
26547	if tracing.IsEnabled() {
26548		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
26549		defer func() {
26550			sc := -1
26551			if iter.Response().Response.Response != nil {
26552				sc = iter.Response().Response.Response.StatusCode
26553			}
26554			tracing.EndSpan(ctx, sc, err)
26555		}()
26556	}
26557	iter.i++
26558	if iter.i < len(iter.page.Values()) {
26559		return nil
26560	}
26561	err = iter.page.NextWithContext(ctx)
26562	if err != nil {
26563		iter.i--
26564		return err
26565	}
26566	iter.i = 0
26567	return nil
26568}
26569
26570// Next advances to the next value.  If there was an error making
26571// the request the iterator does not advance and the error is returned.
26572// Deprecated: Use NextWithContext() instead.
26573func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
26574	return iter.NextWithContext(context.Background())
26575}
26576
26577// NotDone returns true if the enumeration should be started or is not yet complete.
26578func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
26579	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26580}
26581
26582// Response returns the raw server response from the last page request.
26583func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
26584	return iter.page.Response()
26585}
26586
26587// Value returns the current value or a zero-initialized value if the
26588// iterator has advanced beyond the end of the collection.
26589func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
26590	if !iter.page.NotDone() {
26591		return VirtualNetworkGateway{}
26592	}
26593	return iter.page.Values()[iter.i]
26594}
26595
26596// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
26597func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
26598	return VirtualNetworkGatewayListResultIterator{page: page}
26599}
26600
26601// IsEmpty returns true if the ListResult contains no values.
26602func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
26603	return vnglr.Value == nil || len(*vnglr.Value) == 0
26604}
26605
26606// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
26607// It returns nil if no more results exist.
26608func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
26609	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
26610		return nil, nil
26611	}
26612	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26613		autorest.AsJSON(),
26614		autorest.AsGet(),
26615		autorest.WithBaseURL(to.String(vnglr.NextLink)))
26616}
26617
26618// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
26619type VirtualNetworkGatewayListResultPage struct {
26620	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
26621	vnglr VirtualNetworkGatewayListResult
26622}
26623
26624// NextWithContext advances to the next page of values.  If there was an error making
26625// the request the page does not advance and the error is returned.
26626func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
26627	if tracing.IsEnabled() {
26628		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
26629		defer func() {
26630			sc := -1
26631			if page.Response().Response.Response != nil {
26632				sc = page.Response().Response.Response.StatusCode
26633			}
26634			tracing.EndSpan(ctx, sc, err)
26635		}()
26636	}
26637	next, err := page.fn(ctx, page.vnglr)
26638	if err != nil {
26639		return err
26640	}
26641	page.vnglr = next
26642	return nil
26643}
26644
26645// Next advances to the next page of values.  If there was an error making
26646// the request the page does not advance and the error is returned.
26647// Deprecated: Use NextWithContext() instead.
26648func (page *VirtualNetworkGatewayListResultPage) Next() error {
26649	return page.NextWithContext(context.Background())
26650}
26651
26652// NotDone returns true if the page enumeration should be started or is not yet complete.
26653func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
26654	return !page.vnglr.IsEmpty()
26655}
26656
26657// Response returns the raw server response from the last page request.
26658func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
26659	return page.vnglr
26660}
26661
26662// Values returns the slice of values for the current page or nil if there are no values.
26663func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
26664	if page.vnglr.IsEmpty() {
26665		return nil
26666	}
26667	return *page.vnglr.Value
26668}
26669
26670// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
26671func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
26672	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
26673}
26674
26675// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties
26676type VirtualNetworkGatewayPropertiesFormat struct {
26677	// IPConfigurations - IP configurations for virtual network gateway.
26678	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
26679	// GatewayType - The type of this virtual network gateway. Possible values are: 'Vpn' and 'ExpressRoute'. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
26680	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
26681	// VpnType - The type of this virtual network gateway. Possible values are: 'PolicyBased' and 'RouteBased'. Possible values include: 'PolicyBased', 'RouteBased'
26682	VpnType VpnType `json:"vpnType,omitempty"`
26683	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
26684	EnableBgp *bool `json:"enableBgp,omitempty"`
26685	// ActiveActive - ActiveActive flag
26686	ActiveActive *bool `json:"activeActive,omitempty"`
26687	// 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.
26688	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
26689	// Sku - The reference of the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
26690	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
26691	// VpnClientConfiguration - The reference of the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
26692	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
26693	// BgpSettings - Virtual network gateway's BGP speaker settings.
26694	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
26695	// 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.
26696	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
26697	// ResourceGUID - The resource GUID property of the VirtualNetworkGateway resource.
26698	ResourceGUID *string `json:"resourceGuid,omitempty"`
26699	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
26700	ProvisioningState *string `json:"provisioningState,omitempty"`
26701}
26702
26703// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26704// long-running operation.
26705type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
26706	azure.Future
26707}
26708
26709// Result returns the result of the asynchronous operation.
26710// If the operation has not completed it will return an error.
26711func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
26712	var done bool
26713	done, err = future.DoneWithContext(context.Background(), client)
26714	if err != nil {
26715		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26716		return
26717	}
26718	if !done {
26719		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
26720		return
26721	}
26722	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26723	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
26724		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
26725		if err != nil {
26726			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
26727		}
26728	}
26729	return
26730}
26731
26732// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
26733// long-running operation.
26734type VirtualNetworkGatewaysDeleteFuture struct {
26735	azure.Future
26736}
26737
26738// Result returns the result of the asynchronous operation.
26739// If the operation has not completed it will return an error.
26740func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
26741	var done bool
26742	done, err = future.DoneWithContext(context.Background(), client)
26743	if err != nil {
26744		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
26745		return
26746	}
26747	if !done {
26748		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
26749		return
26750	}
26751	ar.Response = future.Response()
26752	return
26753}
26754
26755// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
26756// results of a long-running operation.
26757type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
26758	azure.Future
26759}
26760
26761// Result returns the result of the asynchronous operation.
26762// If the operation has not completed it will return an error.
26763func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
26764	var done bool
26765	done, err = future.DoneWithContext(context.Background(), client)
26766	if err != nil {
26767		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
26768		return
26769	}
26770	if !done {
26771		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
26772		return
26773	}
26774	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26775	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
26776		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
26777		if err != nil {
26778			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
26779		}
26780	}
26781	return
26782}
26783
26784// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
26785// of a long-running operation.
26786type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
26787	azure.Future
26788}
26789
26790// Result returns the result of the asynchronous operation.
26791// If the operation has not completed it will return an error.
26792func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
26793	var done bool
26794	done, err = future.DoneWithContext(context.Background(), client)
26795	if err != nil {
26796		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
26797		return
26798	}
26799	if !done {
26800		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
26801		return
26802	}
26803	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26804	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
26805		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
26806		if err != nil {
26807			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
26808		}
26809	}
26810	return
26811}
26812
26813// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
26814// of a long-running operation.
26815type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
26816	azure.Future
26817}
26818
26819// Result returns the result of the asynchronous operation.
26820// If the operation has not completed it will return an error.
26821func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
26822	var done bool
26823	done, err = future.DoneWithContext(context.Background(), client)
26824	if err != nil {
26825		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
26826		return
26827	}
26828	if !done {
26829		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
26830		return
26831	}
26832	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26833	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
26834		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
26835		if err != nil {
26836			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
26837		}
26838	}
26839	return
26840}
26841
26842// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
26843// a long-running operation.
26844type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
26845	azure.Future
26846}
26847
26848// Result returns the result of the asynchronous operation.
26849// If the operation has not completed it will return an error.
26850func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
26851	var done bool
26852	done, err = future.DoneWithContext(context.Background(), client)
26853	if err != nil {
26854		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
26855		return
26856	}
26857	if !done {
26858		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
26859		return
26860	}
26861	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26862	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
26863		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
26864		if err != nil {
26865			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
26866		}
26867	}
26868	return
26869}
26870
26871// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
26872// a long-running operation.
26873type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
26874	azure.Future
26875}
26876
26877// Result returns the result of the asynchronous operation.
26878// If the operation has not completed it will return an error.
26879func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
26880	var done bool
26881	done, err = future.DoneWithContext(context.Background(), client)
26882	if err != nil {
26883		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
26884		return
26885	}
26886	if !done {
26887		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
26888		return
26889	}
26890	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26891	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
26892		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
26893		if err != nil {
26894			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
26895		}
26896	}
26897	return
26898}
26899
26900// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
26901// results of a long-running operation.
26902type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
26903	azure.Future
26904}
26905
26906// Result returns the result of the asynchronous operation.
26907// If the operation has not completed it will return an error.
26908func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
26909	var done bool
26910	done, err = future.DoneWithContext(context.Background(), client)
26911	if err != nil {
26912		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
26913		return
26914	}
26915	if !done {
26916		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
26917		return
26918	}
26919	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26920	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
26921		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
26922		if err != nil {
26923			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
26924		}
26925	}
26926	return
26927}
26928
26929// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
26930// results of a long-running operation.
26931type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
26932	azure.Future
26933}
26934
26935// Result returns the result of the asynchronous operation.
26936// If the operation has not completed it will return an error.
26937func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
26938	var done bool
26939	done, err = future.DoneWithContext(context.Background(), client)
26940	if err != nil {
26941		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
26942		return
26943	}
26944	if !done {
26945		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
26946		return
26947	}
26948	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26949	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
26950		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
26951		if err != nil {
26952			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
26953		}
26954	}
26955	return
26956}
26957
26958// VirtualNetworkGatewaySku virtualNetworkGatewaySku details
26959type VirtualNetworkGatewaySku struct {
26960	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
26961	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
26962	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
26963	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
26964	// Capacity - The capacity.
26965	Capacity *int32 `json:"capacity,omitempty"`
26966}
26967
26968// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
26969// long-running operation.
26970type VirtualNetworkGatewaysResetFuture struct {
26971	azure.Future
26972}
26973
26974// Result returns the result of the asynchronous operation.
26975// If the operation has not completed it will return an error.
26976func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
26977	var done bool
26978	done, err = future.DoneWithContext(context.Background(), client)
26979	if err != nil {
26980		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
26981		return
26982	}
26983	if !done {
26984		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
26985		return
26986	}
26987	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26988	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
26989		vng, err = client.ResetResponder(vng.Response.Response)
26990		if err != nil {
26991			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
26992		}
26993	}
26994	return
26995}
26996
26997// VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
26998// results of a long-running operation.
26999type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
27000	azure.Future
27001}
27002
27003// Result returns the result of the asynchronous operation.
27004// If the operation has not completed it will return an error.
27005func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
27006	var done bool
27007	done, err = future.DoneWithContext(context.Background(), client)
27008	if err != nil {
27009		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
27010		return
27011	}
27012	if !done {
27013		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
27014		return
27015	}
27016	ar.Response = future.Response()
27017	return
27018}
27019
27020// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
27021// results of a long-running operation.
27022type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
27023	azure.Future
27024}
27025
27026// Result returns the result of the asynchronous operation.
27027// If the operation has not completed it will return an error.
27028func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
27029	var done bool
27030	done, err = future.DoneWithContext(context.Background(), client)
27031	if err != nil {
27032		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
27033		return
27034	}
27035	if !done {
27036		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
27037		return
27038	}
27039	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27040	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
27041		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
27042		if err != nil {
27043			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
27044		}
27045	}
27046	return
27047}
27048
27049// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
27050// long-running operation.
27051type VirtualNetworkGatewaysUpdateTagsFuture struct {
27052	azure.Future
27053}
27054
27055// Result returns the result of the asynchronous operation.
27056// If the operation has not completed it will return an error.
27057func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
27058	var done bool
27059	done, err = future.DoneWithContext(context.Background(), client)
27060	if err != nil {
27061		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
27062		return
27063	}
27064	if !done {
27065		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
27066		return
27067	}
27068	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27069	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
27070		vng, err = client.UpdateTagsResponder(vng.Response.Response)
27071		if err != nil {
27072			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
27073		}
27074	}
27075	return
27076}
27077
27078// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
27079type VirtualNetworkListResult struct {
27080	autorest.Response `json:"-"`
27081	// Value - Gets a list of VirtualNetwork resources in a resource group.
27082	Value *[]VirtualNetwork `json:"value,omitempty"`
27083	// NextLink - The URL to get the next set of results.
27084	NextLink *string `json:"nextLink,omitempty"`
27085}
27086
27087// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
27088type VirtualNetworkListResultIterator struct {
27089	i    int
27090	page VirtualNetworkListResultPage
27091}
27092
27093// NextWithContext advances to the next value.  If there was an error making
27094// the request the iterator does not advance and the error is returned.
27095func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
27096	if tracing.IsEnabled() {
27097		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
27098		defer func() {
27099			sc := -1
27100			if iter.Response().Response.Response != nil {
27101				sc = iter.Response().Response.Response.StatusCode
27102			}
27103			tracing.EndSpan(ctx, sc, err)
27104		}()
27105	}
27106	iter.i++
27107	if iter.i < len(iter.page.Values()) {
27108		return nil
27109	}
27110	err = iter.page.NextWithContext(ctx)
27111	if err != nil {
27112		iter.i--
27113		return err
27114	}
27115	iter.i = 0
27116	return nil
27117}
27118
27119// Next advances to the next value.  If there was an error making
27120// the request the iterator does not advance and the error is returned.
27121// Deprecated: Use NextWithContext() instead.
27122func (iter *VirtualNetworkListResultIterator) Next() error {
27123	return iter.NextWithContext(context.Background())
27124}
27125
27126// NotDone returns true if the enumeration should be started or is not yet complete.
27127func (iter VirtualNetworkListResultIterator) NotDone() bool {
27128	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27129}
27130
27131// Response returns the raw server response from the last page request.
27132func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
27133	return iter.page.Response()
27134}
27135
27136// Value returns the current value or a zero-initialized value if the
27137// iterator has advanced beyond the end of the collection.
27138func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
27139	if !iter.page.NotDone() {
27140		return VirtualNetwork{}
27141	}
27142	return iter.page.Values()[iter.i]
27143}
27144
27145// Creates a new instance of the VirtualNetworkListResultIterator type.
27146func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
27147	return VirtualNetworkListResultIterator{page: page}
27148}
27149
27150// IsEmpty returns true if the ListResult contains no values.
27151func (vnlr VirtualNetworkListResult) IsEmpty() bool {
27152	return vnlr.Value == nil || len(*vnlr.Value) == 0
27153}
27154
27155// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
27156// It returns nil if no more results exist.
27157func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
27158	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
27159		return nil, nil
27160	}
27161	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27162		autorest.AsJSON(),
27163		autorest.AsGet(),
27164		autorest.WithBaseURL(to.String(vnlr.NextLink)))
27165}
27166
27167// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
27168type VirtualNetworkListResultPage struct {
27169	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
27170	vnlr VirtualNetworkListResult
27171}
27172
27173// NextWithContext advances to the next page of values.  If there was an error making
27174// the request the page does not advance and the error is returned.
27175func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
27176	if tracing.IsEnabled() {
27177		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
27178		defer func() {
27179			sc := -1
27180			if page.Response().Response.Response != nil {
27181				sc = page.Response().Response.Response.StatusCode
27182			}
27183			tracing.EndSpan(ctx, sc, err)
27184		}()
27185	}
27186	next, err := page.fn(ctx, page.vnlr)
27187	if err != nil {
27188		return err
27189	}
27190	page.vnlr = next
27191	return nil
27192}
27193
27194// Next advances to the next page of values.  If there was an error making
27195// the request the page does not advance and the error is returned.
27196// Deprecated: Use NextWithContext() instead.
27197func (page *VirtualNetworkListResultPage) Next() error {
27198	return page.NextWithContext(context.Background())
27199}
27200
27201// NotDone returns true if the page enumeration should be started or is not yet complete.
27202func (page VirtualNetworkListResultPage) NotDone() bool {
27203	return !page.vnlr.IsEmpty()
27204}
27205
27206// Response returns the raw server response from the last page request.
27207func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
27208	return page.vnlr
27209}
27210
27211// Values returns the slice of values for the current page or nil if there are no values.
27212func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
27213	if page.vnlr.IsEmpty() {
27214		return nil
27215	}
27216	return *page.vnlr.Value
27217}
27218
27219// Creates a new instance of the VirtualNetworkListResultPage type.
27220func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
27221	return VirtualNetworkListResultPage{fn: getNextPage}
27222}
27223
27224// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
27225type VirtualNetworkListUsageResult struct {
27226	autorest.Response `json:"-"`
27227	// Value - READ-ONLY; VirtualNetwork usage stats.
27228	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
27229	// NextLink - The URL to get the next set of results.
27230	NextLink *string `json:"nextLink,omitempty"`
27231}
27232
27233// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
27234// values.
27235type VirtualNetworkListUsageResultIterator struct {
27236	i    int
27237	page VirtualNetworkListUsageResultPage
27238}
27239
27240// NextWithContext advances to the next value.  If there was an error making
27241// the request the iterator does not advance and the error is returned.
27242func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
27243	if tracing.IsEnabled() {
27244		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
27245		defer func() {
27246			sc := -1
27247			if iter.Response().Response.Response != nil {
27248				sc = iter.Response().Response.Response.StatusCode
27249			}
27250			tracing.EndSpan(ctx, sc, err)
27251		}()
27252	}
27253	iter.i++
27254	if iter.i < len(iter.page.Values()) {
27255		return nil
27256	}
27257	err = iter.page.NextWithContext(ctx)
27258	if err != nil {
27259		iter.i--
27260		return err
27261	}
27262	iter.i = 0
27263	return nil
27264}
27265
27266// Next advances to the next value.  If there was an error making
27267// the request the iterator does not advance and the error is returned.
27268// Deprecated: Use NextWithContext() instead.
27269func (iter *VirtualNetworkListUsageResultIterator) Next() error {
27270	return iter.NextWithContext(context.Background())
27271}
27272
27273// NotDone returns true if the enumeration should be started or is not yet complete.
27274func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
27275	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27276}
27277
27278// Response returns the raw server response from the last page request.
27279func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
27280	return iter.page.Response()
27281}
27282
27283// Value returns the current value or a zero-initialized value if the
27284// iterator has advanced beyond the end of the collection.
27285func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
27286	if !iter.page.NotDone() {
27287		return VirtualNetworkUsage{}
27288	}
27289	return iter.page.Values()[iter.i]
27290}
27291
27292// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
27293func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
27294	return VirtualNetworkListUsageResultIterator{page: page}
27295}
27296
27297// IsEmpty returns true if the ListResult contains no values.
27298func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
27299	return vnlur.Value == nil || len(*vnlur.Value) == 0
27300}
27301
27302// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
27303// It returns nil if no more results exist.
27304func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
27305	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
27306		return nil, nil
27307	}
27308	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27309		autorest.AsJSON(),
27310		autorest.AsGet(),
27311		autorest.WithBaseURL(to.String(vnlur.NextLink)))
27312}
27313
27314// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
27315type VirtualNetworkListUsageResultPage struct {
27316	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
27317	vnlur VirtualNetworkListUsageResult
27318}
27319
27320// NextWithContext advances to the next page of values.  If there was an error making
27321// the request the page does not advance and the error is returned.
27322func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
27323	if tracing.IsEnabled() {
27324		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
27325		defer func() {
27326			sc := -1
27327			if page.Response().Response.Response != nil {
27328				sc = page.Response().Response.Response.StatusCode
27329			}
27330			tracing.EndSpan(ctx, sc, err)
27331		}()
27332	}
27333	next, err := page.fn(ctx, page.vnlur)
27334	if err != nil {
27335		return err
27336	}
27337	page.vnlur = next
27338	return nil
27339}
27340
27341// Next advances to the next page of values.  If there was an error making
27342// the request the page does not advance and the error is returned.
27343// Deprecated: Use NextWithContext() instead.
27344func (page *VirtualNetworkListUsageResultPage) Next() error {
27345	return page.NextWithContext(context.Background())
27346}
27347
27348// NotDone returns true if the page enumeration should be started or is not yet complete.
27349func (page VirtualNetworkListUsageResultPage) NotDone() bool {
27350	return !page.vnlur.IsEmpty()
27351}
27352
27353// Response returns the raw server response from the last page request.
27354func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
27355	return page.vnlur
27356}
27357
27358// Values returns the slice of values for the current page or nil if there are no values.
27359func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
27360	if page.vnlur.IsEmpty() {
27361		return nil
27362	}
27363	return *page.vnlur.Value
27364}
27365
27366// Creates a new instance of the VirtualNetworkListUsageResultPage type.
27367func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
27368	return VirtualNetworkListUsageResultPage{fn: getNextPage}
27369}
27370
27371// VirtualNetworkPeering peerings in a virtual network resource.
27372type VirtualNetworkPeering struct {
27373	autorest.Response `json:"-"`
27374	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
27375	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
27376	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27377	Name *string `json:"name,omitempty"`
27378	// Etag - A unique read-only string that changes whenever the resource is updated.
27379	Etag *string `json:"etag,omitempty"`
27380	// ID - Resource ID.
27381	ID *string `json:"id,omitempty"`
27382}
27383
27384// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
27385func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
27386	objectMap := make(map[string]interface{})
27387	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
27388		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
27389	}
27390	if vnp.Name != nil {
27391		objectMap["name"] = vnp.Name
27392	}
27393	if vnp.Etag != nil {
27394		objectMap["etag"] = vnp.Etag
27395	}
27396	if vnp.ID != nil {
27397		objectMap["id"] = vnp.ID
27398	}
27399	return json.Marshal(objectMap)
27400}
27401
27402// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
27403func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
27404	var m map[string]*json.RawMessage
27405	err := json.Unmarshal(body, &m)
27406	if err != nil {
27407		return err
27408	}
27409	for k, v := range m {
27410		switch k {
27411		case "properties":
27412			if v != nil {
27413				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
27414				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
27415				if err != nil {
27416					return err
27417				}
27418				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
27419			}
27420		case "name":
27421			if v != nil {
27422				var name string
27423				err = json.Unmarshal(*v, &name)
27424				if err != nil {
27425					return err
27426				}
27427				vnp.Name = &name
27428			}
27429		case "etag":
27430			if v != nil {
27431				var etag string
27432				err = json.Unmarshal(*v, &etag)
27433				if err != nil {
27434					return err
27435				}
27436				vnp.Etag = &etag
27437			}
27438		case "id":
27439			if v != nil {
27440				var ID string
27441				err = json.Unmarshal(*v, &ID)
27442				if err != nil {
27443					return err
27444				}
27445				vnp.ID = &ID
27446			}
27447		}
27448	}
27449
27450	return nil
27451}
27452
27453// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
27454// belong to a virtual network.
27455type VirtualNetworkPeeringListResult struct {
27456	autorest.Response `json:"-"`
27457	// Value - The peerings in a virtual network.
27458	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
27459	// NextLink - The URL to get the next set of results.
27460	NextLink *string `json:"nextLink,omitempty"`
27461}
27462
27463// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
27464// values.
27465type VirtualNetworkPeeringListResultIterator struct {
27466	i    int
27467	page VirtualNetworkPeeringListResultPage
27468}
27469
27470// NextWithContext advances to the next value.  If there was an error making
27471// the request the iterator does not advance and the error is returned.
27472func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
27473	if tracing.IsEnabled() {
27474		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
27475		defer func() {
27476			sc := -1
27477			if iter.Response().Response.Response != nil {
27478				sc = iter.Response().Response.Response.StatusCode
27479			}
27480			tracing.EndSpan(ctx, sc, err)
27481		}()
27482	}
27483	iter.i++
27484	if iter.i < len(iter.page.Values()) {
27485		return nil
27486	}
27487	err = iter.page.NextWithContext(ctx)
27488	if err != nil {
27489		iter.i--
27490		return err
27491	}
27492	iter.i = 0
27493	return nil
27494}
27495
27496// Next advances to the next value.  If there was an error making
27497// the request the iterator does not advance and the error is returned.
27498// Deprecated: Use NextWithContext() instead.
27499func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
27500	return iter.NextWithContext(context.Background())
27501}
27502
27503// NotDone returns true if the enumeration should be started or is not yet complete.
27504func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
27505	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27506}
27507
27508// Response returns the raw server response from the last page request.
27509func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
27510	return iter.page.Response()
27511}
27512
27513// Value returns the current value or a zero-initialized value if the
27514// iterator has advanced beyond the end of the collection.
27515func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
27516	if !iter.page.NotDone() {
27517		return VirtualNetworkPeering{}
27518	}
27519	return iter.page.Values()[iter.i]
27520}
27521
27522// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
27523func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
27524	return VirtualNetworkPeeringListResultIterator{page: page}
27525}
27526
27527// IsEmpty returns true if the ListResult contains no values.
27528func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
27529	return vnplr.Value == nil || len(*vnplr.Value) == 0
27530}
27531
27532// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
27533// It returns nil if no more results exist.
27534func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
27535	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
27536		return nil, nil
27537	}
27538	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27539		autorest.AsJSON(),
27540		autorest.AsGet(),
27541		autorest.WithBaseURL(to.String(vnplr.NextLink)))
27542}
27543
27544// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
27545type VirtualNetworkPeeringListResultPage struct {
27546	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
27547	vnplr VirtualNetworkPeeringListResult
27548}
27549
27550// NextWithContext advances to the next page of values.  If there was an error making
27551// the request the page does not advance and the error is returned.
27552func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
27553	if tracing.IsEnabled() {
27554		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
27555		defer func() {
27556			sc := -1
27557			if page.Response().Response.Response != nil {
27558				sc = page.Response().Response.Response.StatusCode
27559			}
27560			tracing.EndSpan(ctx, sc, err)
27561		}()
27562	}
27563	next, err := page.fn(ctx, page.vnplr)
27564	if err != nil {
27565		return err
27566	}
27567	page.vnplr = next
27568	return nil
27569}
27570
27571// Next advances to the next page of values.  If there was an error making
27572// the request the page does not advance and the error is returned.
27573// Deprecated: Use NextWithContext() instead.
27574func (page *VirtualNetworkPeeringListResultPage) Next() error {
27575	return page.NextWithContext(context.Background())
27576}
27577
27578// NotDone returns true if the page enumeration should be started or is not yet complete.
27579func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
27580	return !page.vnplr.IsEmpty()
27581}
27582
27583// Response returns the raw server response from the last page request.
27584func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
27585	return page.vnplr
27586}
27587
27588// Values returns the slice of values for the current page or nil if there are no values.
27589func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
27590	if page.vnplr.IsEmpty() {
27591		return nil
27592	}
27593	return *page.vnplr.Value
27594}
27595
27596// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
27597func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
27598	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
27599}
27600
27601// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
27602type VirtualNetworkPeeringPropertiesFormat struct {
27603	// AllowVirtualNetworkAccess - Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.
27604	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
27605	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.
27606	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
27607	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
27608	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
27609	// 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.
27610	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
27611	// 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).
27612	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
27613	// RemoteAddressSpace - The reference of the remote virtual network address space.
27614	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
27615	// PeeringState - The status of the virtual network peering. Possible values are 'Initiated', 'Connected', and 'Disconnected'. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
27616	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
27617	// ProvisioningState - The provisioning state of the resource.
27618	ProvisioningState *string `json:"provisioningState,omitempty"`
27619}
27620
27621// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27622// long-running operation.
27623type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
27624	azure.Future
27625}
27626
27627// Result returns the result of the asynchronous operation.
27628// If the operation has not completed it will return an error.
27629func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
27630	var done bool
27631	done, err = future.DoneWithContext(context.Background(), client)
27632	if err != nil {
27633		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27634		return
27635	}
27636	if !done {
27637		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
27638		return
27639	}
27640	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27641	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
27642		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
27643		if err != nil {
27644			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
27645		}
27646	}
27647	return
27648}
27649
27650// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
27651// long-running operation.
27652type VirtualNetworkPeeringsDeleteFuture struct {
27653	azure.Future
27654}
27655
27656// Result returns the result of the asynchronous operation.
27657// If the operation has not completed it will return an error.
27658func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
27659	var done bool
27660	done, err = future.DoneWithContext(context.Background(), client)
27661	if err != nil {
27662		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
27663		return
27664	}
27665	if !done {
27666		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
27667		return
27668	}
27669	ar.Response = future.Response()
27670	return
27671}
27672
27673// VirtualNetworkPropertiesFormat properties of the virtual network.
27674type VirtualNetworkPropertiesFormat struct {
27675	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
27676	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
27677	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
27678	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
27679	// Subnets - A list of subnets in a Virtual Network.
27680	Subnets *[]Subnet `json:"subnets,omitempty"`
27681	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
27682	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
27683	// ResourceGUID - The resourceGuid property of the Virtual Network resource.
27684	ResourceGUID *string `json:"resourceGuid,omitempty"`
27685	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
27686	ProvisioningState *string `json:"provisioningState,omitempty"`
27687	// 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.
27688	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
27689	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
27690	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
27691	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
27692	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
27693}
27694
27695// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27696// long-running operation.
27697type VirtualNetworksCreateOrUpdateFuture struct {
27698	azure.Future
27699}
27700
27701// Result returns the result of the asynchronous operation.
27702// If the operation has not completed it will return an error.
27703func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
27704	var done bool
27705	done, err = future.DoneWithContext(context.Background(), client)
27706	if err != nil {
27707		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27708		return
27709	}
27710	if !done {
27711		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
27712		return
27713	}
27714	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27715	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
27716		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
27717		if err != nil {
27718			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
27719		}
27720	}
27721	return
27722}
27723
27724// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27725// operation.
27726type VirtualNetworksDeleteFuture struct {
27727	azure.Future
27728}
27729
27730// Result returns the result of the asynchronous operation.
27731// If the operation has not completed it will return an error.
27732func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
27733	var done bool
27734	done, err = future.DoneWithContext(context.Background(), client)
27735	if err != nil {
27736		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
27737		return
27738	}
27739	if !done {
27740		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
27741		return
27742	}
27743	ar.Response = future.Response()
27744	return
27745}
27746
27747// VirtualNetworksUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
27748// long-running operation.
27749type VirtualNetworksUpdateTagsFuture struct {
27750	azure.Future
27751}
27752
27753// Result returns the result of the asynchronous operation.
27754// If the operation has not completed it will return an error.
27755func (future *VirtualNetworksUpdateTagsFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
27756	var done bool
27757	done, err = future.DoneWithContext(context.Background(), client)
27758	if err != nil {
27759		err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", future.Response(), "Polling failure")
27760		return
27761	}
27762	if !done {
27763		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksUpdateTagsFuture")
27764		return
27765	}
27766	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27767	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
27768		vn, err = client.UpdateTagsResponder(vn.Response.Response)
27769		if err != nil {
27770			err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", vn.Response.Response, "Failure responding to request")
27771		}
27772	}
27773	return
27774}
27775
27776// VirtualNetworkTap virtual Network Tap resource
27777type VirtualNetworkTap struct {
27778	autorest.Response `json:"-"`
27779	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
27780	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
27781	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
27782	Etag *string `json:"etag,omitempty"`
27783	// ID - Resource ID.
27784	ID *string `json:"id,omitempty"`
27785	// Name - READ-ONLY; Resource name.
27786	Name *string `json:"name,omitempty"`
27787	// Type - READ-ONLY; Resource type.
27788	Type *string `json:"type,omitempty"`
27789	// Location - Resource location.
27790	Location *string `json:"location,omitempty"`
27791	// Tags - Resource tags.
27792	Tags map[string]*string `json:"tags"`
27793}
27794
27795// MarshalJSON is the custom marshaler for VirtualNetworkTap.
27796func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
27797	objectMap := make(map[string]interface{})
27798	if vnt.VirtualNetworkTapPropertiesFormat != nil {
27799		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
27800	}
27801	if vnt.Etag != nil {
27802		objectMap["etag"] = vnt.Etag
27803	}
27804	if vnt.ID != nil {
27805		objectMap["id"] = vnt.ID
27806	}
27807	if vnt.Location != nil {
27808		objectMap["location"] = vnt.Location
27809	}
27810	if vnt.Tags != nil {
27811		objectMap["tags"] = vnt.Tags
27812	}
27813	return json.Marshal(objectMap)
27814}
27815
27816// UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
27817func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
27818	var m map[string]*json.RawMessage
27819	err := json.Unmarshal(body, &m)
27820	if err != nil {
27821		return err
27822	}
27823	for k, v := range m {
27824		switch k {
27825		case "properties":
27826			if v != nil {
27827				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
27828				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
27829				if err != nil {
27830					return err
27831				}
27832				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
27833			}
27834		case "etag":
27835			if v != nil {
27836				var etag string
27837				err = json.Unmarshal(*v, &etag)
27838				if err != nil {
27839					return err
27840				}
27841				vnt.Etag = &etag
27842			}
27843		case "id":
27844			if v != nil {
27845				var ID string
27846				err = json.Unmarshal(*v, &ID)
27847				if err != nil {
27848					return err
27849				}
27850				vnt.ID = &ID
27851			}
27852		case "name":
27853			if v != nil {
27854				var name string
27855				err = json.Unmarshal(*v, &name)
27856				if err != nil {
27857					return err
27858				}
27859				vnt.Name = &name
27860			}
27861		case "type":
27862			if v != nil {
27863				var typeVar string
27864				err = json.Unmarshal(*v, &typeVar)
27865				if err != nil {
27866					return err
27867				}
27868				vnt.Type = &typeVar
27869			}
27870		case "location":
27871			if v != nil {
27872				var location string
27873				err = json.Unmarshal(*v, &location)
27874				if err != nil {
27875					return err
27876				}
27877				vnt.Location = &location
27878			}
27879		case "tags":
27880			if v != nil {
27881				var tags map[string]*string
27882				err = json.Unmarshal(*v, &tags)
27883				if err != nil {
27884					return err
27885				}
27886				vnt.Tags = tags
27887			}
27888		}
27889	}
27890
27891	return nil
27892}
27893
27894// VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
27895type VirtualNetworkTapListResult struct {
27896	autorest.Response `json:"-"`
27897	// Value - A list of VirtualNetworkTaps in a resource group.
27898	Value *[]VirtualNetworkTap `json:"value,omitempty"`
27899	// NextLink - The URL to get the next set of results.
27900	NextLink *string `json:"nextLink,omitempty"`
27901}
27902
27903// VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
27904type VirtualNetworkTapListResultIterator struct {
27905	i    int
27906	page VirtualNetworkTapListResultPage
27907}
27908
27909// NextWithContext advances to the next value.  If there was an error making
27910// the request the iterator does not advance and the error is returned.
27911func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
27912	if tracing.IsEnabled() {
27913		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
27914		defer func() {
27915			sc := -1
27916			if iter.Response().Response.Response != nil {
27917				sc = iter.Response().Response.Response.StatusCode
27918			}
27919			tracing.EndSpan(ctx, sc, err)
27920		}()
27921	}
27922	iter.i++
27923	if iter.i < len(iter.page.Values()) {
27924		return nil
27925	}
27926	err = iter.page.NextWithContext(ctx)
27927	if err != nil {
27928		iter.i--
27929		return err
27930	}
27931	iter.i = 0
27932	return nil
27933}
27934
27935// Next advances to the next value.  If there was an error making
27936// the request the iterator does not advance and the error is returned.
27937// Deprecated: Use NextWithContext() instead.
27938func (iter *VirtualNetworkTapListResultIterator) Next() error {
27939	return iter.NextWithContext(context.Background())
27940}
27941
27942// NotDone returns true if the enumeration should be started or is not yet complete.
27943func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
27944	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27945}
27946
27947// Response returns the raw server response from the last page request.
27948func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
27949	return iter.page.Response()
27950}
27951
27952// Value returns the current value or a zero-initialized value if the
27953// iterator has advanced beyond the end of the collection.
27954func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
27955	if !iter.page.NotDone() {
27956		return VirtualNetworkTap{}
27957	}
27958	return iter.page.Values()[iter.i]
27959}
27960
27961// Creates a new instance of the VirtualNetworkTapListResultIterator type.
27962func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
27963	return VirtualNetworkTapListResultIterator{page: page}
27964}
27965
27966// IsEmpty returns true if the ListResult contains no values.
27967func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
27968	return vntlr.Value == nil || len(*vntlr.Value) == 0
27969}
27970
27971// virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
27972// It returns nil if no more results exist.
27973func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
27974	if vntlr.NextLink == nil || len(to.String(vntlr.NextLink)) < 1 {
27975		return nil, nil
27976	}
27977	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27978		autorest.AsJSON(),
27979		autorest.AsGet(),
27980		autorest.WithBaseURL(to.String(vntlr.NextLink)))
27981}
27982
27983// VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
27984type VirtualNetworkTapListResultPage struct {
27985	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
27986	vntlr VirtualNetworkTapListResult
27987}
27988
27989// NextWithContext advances to the next page of values.  If there was an error making
27990// the request the page does not advance and the error is returned.
27991func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
27992	if tracing.IsEnabled() {
27993		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
27994		defer func() {
27995			sc := -1
27996			if page.Response().Response.Response != nil {
27997				sc = page.Response().Response.Response.StatusCode
27998			}
27999			tracing.EndSpan(ctx, sc, err)
28000		}()
28001	}
28002	next, err := page.fn(ctx, page.vntlr)
28003	if err != nil {
28004		return err
28005	}
28006	page.vntlr = next
28007	return nil
28008}
28009
28010// Next advances to the next page of values.  If there was an error making
28011// the request the page does not advance and the error is returned.
28012// Deprecated: Use NextWithContext() instead.
28013func (page *VirtualNetworkTapListResultPage) Next() error {
28014	return page.NextWithContext(context.Background())
28015}
28016
28017// NotDone returns true if the page enumeration should be started or is not yet complete.
28018func (page VirtualNetworkTapListResultPage) NotDone() bool {
28019	return !page.vntlr.IsEmpty()
28020}
28021
28022// Response returns the raw server response from the last page request.
28023func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
28024	return page.vntlr
28025}
28026
28027// Values returns the slice of values for the current page or nil if there are no values.
28028func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
28029	if page.vntlr.IsEmpty() {
28030		return nil
28031	}
28032	return *page.vntlr.Value
28033}
28034
28035// Creates a new instance of the VirtualNetworkTapListResultPage type.
28036func NewVirtualNetworkTapListResultPage(getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
28037	return VirtualNetworkTapListResultPage{fn: getNextPage}
28038}
28039
28040// VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
28041type VirtualNetworkTapPropertiesFormat struct {
28042	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
28043	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
28044	// ResourceGUID - READ-ONLY; The resourceGuid property of the virtual network tap.
28045	ResourceGUID *string `json:"resourceGuid,omitempty"`
28046	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap. Possible values are: 'Updating', 'Deleting', and 'Failed'.
28047	ProvisioningState *string `json:"provisioningState,omitempty"`
28048	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap
28049	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
28050	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap
28051	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
28052	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
28053	DestinationPort *int32 `json:"destinationPort,omitempty"`
28054}
28055
28056// VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28057// long-running operation.
28058type VirtualNetworkTapsCreateOrUpdateFuture struct {
28059	azure.Future
28060}
28061
28062// Result returns the result of the asynchronous operation.
28063// If the operation has not completed it will return an error.
28064func (future *VirtualNetworkTapsCreateOrUpdateFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
28065	var done bool
28066	done, err = future.DoneWithContext(context.Background(), client)
28067	if err != nil {
28068		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28069		return
28070	}
28071	if !done {
28072		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
28073		return
28074	}
28075	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28076	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
28077		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
28078		if err != nil {
28079			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
28080		}
28081	}
28082	return
28083}
28084
28085// VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
28086// long-running operation.
28087type VirtualNetworkTapsDeleteFuture struct {
28088	azure.Future
28089}
28090
28091// Result returns the result of the asynchronous operation.
28092// If the operation has not completed it will return an error.
28093func (future *VirtualNetworkTapsDeleteFuture) Result(client VirtualNetworkTapsClient) (ar autorest.Response, err error) {
28094	var done bool
28095	done, err = future.DoneWithContext(context.Background(), client)
28096	if err != nil {
28097		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
28098		return
28099	}
28100	if !done {
28101		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
28102		return
28103	}
28104	ar.Response = future.Response()
28105	return
28106}
28107
28108// VirtualNetworkTapsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
28109// long-running operation.
28110type VirtualNetworkTapsUpdateTagsFuture struct {
28111	azure.Future
28112}
28113
28114// Result returns the result of the asynchronous operation.
28115// If the operation has not completed it will return an error.
28116func (future *VirtualNetworkTapsUpdateTagsFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
28117	var done bool
28118	done, err = future.DoneWithContext(context.Background(), client)
28119	if err != nil {
28120		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
28121		return
28122	}
28123	if !done {
28124		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsUpdateTagsFuture")
28125		return
28126	}
28127	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28128	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
28129		vnt, err = client.UpdateTagsResponder(vnt.Response.Response)
28130		if err != nil {
28131			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", vnt.Response.Response, "Failure responding to request")
28132		}
28133	}
28134	return
28135}
28136
28137// VirtualNetworkUsage usage details for subnet.
28138type VirtualNetworkUsage struct {
28139	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
28140	CurrentValue *float64 `json:"currentValue,omitempty"`
28141	// ID - READ-ONLY; Subnet identifier.
28142	ID *string `json:"id,omitempty"`
28143	// Limit - READ-ONLY; Indicates the size of the subnet.
28144	Limit *float64 `json:"limit,omitempty"`
28145	// Name - READ-ONLY; The name containing common and localized value for usage.
28146	Name *VirtualNetworkUsageName `json:"name,omitempty"`
28147	// Unit - READ-ONLY; Usage units. Returns 'Count'
28148	Unit *string `json:"unit,omitempty"`
28149}
28150
28151// VirtualNetworkUsageName usage strings container.
28152type VirtualNetworkUsageName struct {
28153	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
28154	LocalizedValue *string `json:"localizedValue,omitempty"`
28155	// Value - READ-ONLY; Subnet size and usage string.
28156	Value *string `json:"value,omitempty"`
28157}
28158
28159// VirtualWAN virtualWAN Resource.
28160type VirtualWAN struct {
28161	autorest.Response `json:"-"`
28162	// VirtualWanProperties - Properties of the virtual WAN.
28163	*VirtualWanProperties `json:"properties,omitempty"`
28164	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
28165	Etag *string `json:"etag,omitempty"`
28166	// ID - Resource ID.
28167	ID *string `json:"id,omitempty"`
28168	// Name - READ-ONLY; Resource name.
28169	Name *string `json:"name,omitempty"`
28170	// Type - READ-ONLY; Resource type.
28171	Type *string `json:"type,omitempty"`
28172	// Location - Resource location.
28173	Location *string `json:"location,omitempty"`
28174	// Tags - Resource tags.
28175	Tags map[string]*string `json:"tags"`
28176}
28177
28178// MarshalJSON is the custom marshaler for VirtualWAN.
28179func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
28180	objectMap := make(map[string]interface{})
28181	if vw.VirtualWanProperties != nil {
28182		objectMap["properties"] = vw.VirtualWanProperties
28183	}
28184	if vw.ID != nil {
28185		objectMap["id"] = vw.ID
28186	}
28187	if vw.Location != nil {
28188		objectMap["location"] = vw.Location
28189	}
28190	if vw.Tags != nil {
28191		objectMap["tags"] = vw.Tags
28192	}
28193	return json.Marshal(objectMap)
28194}
28195
28196// UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
28197func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
28198	var m map[string]*json.RawMessage
28199	err := json.Unmarshal(body, &m)
28200	if err != nil {
28201		return err
28202	}
28203	for k, v := range m {
28204		switch k {
28205		case "properties":
28206			if v != nil {
28207				var virtualWanProperties VirtualWanProperties
28208				err = json.Unmarshal(*v, &virtualWanProperties)
28209				if err != nil {
28210					return err
28211				}
28212				vw.VirtualWanProperties = &virtualWanProperties
28213			}
28214		case "etag":
28215			if v != nil {
28216				var etag string
28217				err = json.Unmarshal(*v, &etag)
28218				if err != nil {
28219					return err
28220				}
28221				vw.Etag = &etag
28222			}
28223		case "id":
28224			if v != nil {
28225				var ID string
28226				err = json.Unmarshal(*v, &ID)
28227				if err != nil {
28228					return err
28229				}
28230				vw.ID = &ID
28231			}
28232		case "name":
28233			if v != nil {
28234				var name string
28235				err = json.Unmarshal(*v, &name)
28236				if err != nil {
28237					return err
28238				}
28239				vw.Name = &name
28240			}
28241		case "type":
28242			if v != nil {
28243				var typeVar string
28244				err = json.Unmarshal(*v, &typeVar)
28245				if err != nil {
28246					return err
28247				}
28248				vw.Type = &typeVar
28249			}
28250		case "location":
28251			if v != nil {
28252				var location string
28253				err = json.Unmarshal(*v, &location)
28254				if err != nil {
28255					return err
28256				}
28257				vw.Location = &location
28258			}
28259		case "tags":
28260			if v != nil {
28261				var tags map[string]*string
28262				err = json.Unmarshal(*v, &tags)
28263				if err != nil {
28264					return err
28265				}
28266				vw.Tags = tags
28267			}
28268		}
28269	}
28270
28271	return nil
28272}
28273
28274// VirtualWanProperties parameters for VirtualWAN
28275type VirtualWanProperties struct {
28276	// DisableVpnEncryption - Vpn encryption to be disabled or not.
28277	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
28278	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
28279	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
28280	// VpnSites - READ-ONLY; List of VpnSites in the VirtualWAN.
28281	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
28282	// SecurityProviderName - The Security Provider name.
28283	SecurityProviderName *string `json:"securityProviderName,omitempty"`
28284	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
28285	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
28286	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
28287	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
28288	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
28289	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
28290	// P2SVpnServerConfigurations - List of all P2SVpnServerConfigurations associated with the virtual wan.
28291	P2SVpnServerConfigurations *[]P2SVpnServerConfiguration `json:"p2SVpnServerConfigurations,omitempty"`
28292	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28293	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28294}
28295
28296// VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28297// long-running operation.
28298type VirtualWansCreateOrUpdateFuture struct {
28299	azure.Future
28300}
28301
28302// Result returns the result of the asynchronous operation.
28303// If the operation has not completed it will return an error.
28304func (future *VirtualWansCreateOrUpdateFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
28305	var done bool
28306	done, err = future.DoneWithContext(context.Background(), client)
28307	if err != nil {
28308		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28309		return
28310	}
28311	if !done {
28312		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
28313		return
28314	}
28315	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28316	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
28317		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
28318		if err != nil {
28319			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
28320		}
28321	}
28322	return
28323}
28324
28325// VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28326// operation.
28327type VirtualWansDeleteFuture struct {
28328	azure.Future
28329}
28330
28331// Result returns the result of the asynchronous operation.
28332// If the operation has not completed it will return an error.
28333func (future *VirtualWansDeleteFuture) Result(client VirtualWansClient) (ar autorest.Response, err error) {
28334	var done bool
28335	done, err = future.DoneWithContext(context.Background(), client)
28336	if err != nil {
28337		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
28338		return
28339	}
28340	if !done {
28341		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
28342		return
28343	}
28344	ar.Response = future.Response()
28345	return
28346}
28347
28348// VirtualWanSecurityProvider collection of SecurityProviders.
28349type VirtualWanSecurityProvider struct {
28350	// Name - Name of the security provider.
28351	Name *string `json:"name,omitempty"`
28352	// URL - Url of the security provider.
28353	URL *string `json:"url,omitempty"`
28354	// Type - Name of the security provider. Possible values include: 'External', 'Native'
28355	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
28356}
28357
28358// VirtualWanSecurityProviders collection of SecurityProviders.
28359type VirtualWanSecurityProviders struct {
28360	autorest.Response `json:"-"`
28361	// SupportedProviders - List of VirtualWAN security providers.
28362	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
28363}
28364
28365// VirtualWansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
28366// operation.
28367type VirtualWansUpdateTagsFuture struct {
28368	azure.Future
28369}
28370
28371// Result returns the result of the asynchronous operation.
28372// If the operation has not completed it will return an error.
28373func (future *VirtualWansUpdateTagsFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
28374	var done bool
28375	done, err = future.DoneWithContext(context.Background(), client)
28376	if err != nil {
28377		err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
28378		return
28379	}
28380	if !done {
28381		err = azure.NewAsyncOpIncompleteError("network.VirtualWansUpdateTagsFuture")
28382		return
28383	}
28384	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28385	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
28386		vw, err = client.UpdateTagsResponder(vw.Response.Response)
28387		if err != nil {
28388			err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", vw.Response.Response, "Failure responding to request")
28389		}
28390	}
28391	return
28392}
28393
28394// VpnClientConfiguration vpnClientConfiguration for P2S client.
28395type VpnClientConfiguration struct {
28396	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
28397	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
28398	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
28399	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
28400	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
28401	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
28402	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
28403	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
28404	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
28405	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
28406	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
28407	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
28408	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
28409	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
28410}
28411
28412// VpnClientConnectionHealth vpnClientConnectionHealth properties
28413type VpnClientConnectionHealth struct {
28414	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection
28415	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
28416	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection
28417	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
28418	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
28419	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
28420	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
28421	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
28422}
28423
28424// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
28425type VpnClientIPsecParameters struct {
28426	autorest.Response `json:"-"`
28427	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
28428	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
28429	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
28430	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
28431	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
28432	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
28433	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
28434	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
28435	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
28436	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
28437	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
28438	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
28439	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
28440	DhGroup DhGroup `json:"dhGroup,omitempty"`
28441	// 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'
28442	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
28443}
28444
28445// VpnClientParameters vpn Client Parameters for package generation
28446type VpnClientParameters struct {
28447	// ProcessorArchitecture - VPN client Processor Architecture. Possible values are: 'AMD64' and 'X86'. Possible values include: 'Amd64', 'X86'
28448	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
28449	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
28450	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
28451	// 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.
28452	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
28453	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
28454	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
28455}
28456
28457// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
28458type VpnClientRevokedCertificate struct {
28459	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
28460	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
28461	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
28462	Name *string `json:"name,omitempty"`
28463	// Etag - A unique read-only string that changes whenever the resource is updated.
28464	Etag *string `json:"etag,omitempty"`
28465	// ID - Resource ID.
28466	ID *string `json:"id,omitempty"`
28467}
28468
28469// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
28470func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
28471	objectMap := make(map[string]interface{})
28472	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
28473		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
28474	}
28475	if vcrc.Name != nil {
28476		objectMap["name"] = vcrc.Name
28477	}
28478	if vcrc.Etag != nil {
28479		objectMap["etag"] = vcrc.Etag
28480	}
28481	if vcrc.ID != nil {
28482		objectMap["id"] = vcrc.ID
28483	}
28484	return json.Marshal(objectMap)
28485}
28486
28487// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
28488func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
28489	var m map[string]*json.RawMessage
28490	err := json.Unmarshal(body, &m)
28491	if err != nil {
28492		return err
28493	}
28494	for k, v := range m {
28495		switch k {
28496		case "properties":
28497			if v != nil {
28498				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
28499				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
28500				if err != nil {
28501					return err
28502				}
28503				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
28504			}
28505		case "name":
28506			if v != nil {
28507				var name string
28508				err = json.Unmarshal(*v, &name)
28509				if err != nil {
28510					return err
28511				}
28512				vcrc.Name = &name
28513			}
28514		case "etag":
28515			if v != nil {
28516				var etag string
28517				err = json.Unmarshal(*v, &etag)
28518				if err != nil {
28519					return err
28520				}
28521				vcrc.Etag = &etag
28522			}
28523		case "id":
28524			if v != nil {
28525				var ID string
28526				err = json.Unmarshal(*v, &ID)
28527				if err != nil {
28528					return err
28529				}
28530				vcrc.ID = &ID
28531			}
28532		}
28533	}
28534
28535	return nil
28536}
28537
28538// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
28539// network gateway.
28540type VpnClientRevokedCertificatePropertiesFormat struct {
28541	// Thumbprint - The revoked VPN client certificate thumbprint.
28542	Thumbprint *string `json:"thumbprint,omitempty"`
28543	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
28544	ProvisioningState *string `json:"provisioningState,omitempty"`
28545}
28546
28547// VpnClientRootCertificate VPN client root certificate of virtual network gateway
28548type VpnClientRootCertificate struct {
28549	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
28550	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
28551	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
28552	Name *string `json:"name,omitempty"`
28553	// Etag - A unique read-only string that changes whenever the resource is updated.
28554	Etag *string `json:"etag,omitempty"`
28555	// ID - Resource ID.
28556	ID *string `json:"id,omitempty"`
28557}
28558
28559// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
28560func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
28561	objectMap := make(map[string]interface{})
28562	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
28563		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
28564	}
28565	if vcrc.Name != nil {
28566		objectMap["name"] = vcrc.Name
28567	}
28568	if vcrc.Etag != nil {
28569		objectMap["etag"] = vcrc.Etag
28570	}
28571	if vcrc.ID != nil {
28572		objectMap["id"] = vcrc.ID
28573	}
28574	return json.Marshal(objectMap)
28575}
28576
28577// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
28578func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
28579	var m map[string]*json.RawMessage
28580	err := json.Unmarshal(body, &m)
28581	if err != nil {
28582		return err
28583	}
28584	for k, v := range m {
28585		switch k {
28586		case "properties":
28587			if v != nil {
28588				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
28589				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
28590				if err != nil {
28591					return err
28592				}
28593				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
28594			}
28595		case "name":
28596			if v != nil {
28597				var name string
28598				err = json.Unmarshal(*v, &name)
28599				if err != nil {
28600					return err
28601				}
28602				vcrc.Name = &name
28603			}
28604		case "etag":
28605			if v != nil {
28606				var etag string
28607				err = json.Unmarshal(*v, &etag)
28608				if err != nil {
28609					return err
28610				}
28611				vcrc.Etag = &etag
28612			}
28613		case "id":
28614			if v != nil {
28615				var ID string
28616				err = json.Unmarshal(*v, &ID)
28617				if err != nil {
28618					return err
28619				}
28620				vcrc.ID = &ID
28621			}
28622		}
28623	}
28624
28625	return nil
28626}
28627
28628// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway
28629type VpnClientRootCertificatePropertiesFormat struct {
28630	// PublicCertData - The certificate public data.
28631	PublicCertData *string `json:"publicCertData,omitempty"`
28632	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
28633	ProvisioningState *string `json:"provisioningState,omitempty"`
28634}
28635
28636// VpnConnection vpnConnection Resource.
28637type VpnConnection struct {
28638	autorest.Response `json:"-"`
28639	// VpnConnectionProperties - Properties of the VPN connection.
28640	*VpnConnectionProperties `json:"properties,omitempty"`
28641	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
28642	Name *string `json:"name,omitempty"`
28643	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
28644	Etag *string `json:"etag,omitempty"`
28645	// ID - Resource ID.
28646	ID *string `json:"id,omitempty"`
28647}
28648
28649// MarshalJSON is the custom marshaler for VpnConnection.
28650func (vc VpnConnection) MarshalJSON() ([]byte, error) {
28651	objectMap := make(map[string]interface{})
28652	if vc.VpnConnectionProperties != nil {
28653		objectMap["properties"] = vc.VpnConnectionProperties
28654	}
28655	if vc.Name != nil {
28656		objectMap["name"] = vc.Name
28657	}
28658	if vc.ID != nil {
28659		objectMap["id"] = vc.ID
28660	}
28661	return json.Marshal(objectMap)
28662}
28663
28664// UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
28665func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
28666	var m map[string]*json.RawMessage
28667	err := json.Unmarshal(body, &m)
28668	if err != nil {
28669		return err
28670	}
28671	for k, v := range m {
28672		switch k {
28673		case "properties":
28674			if v != nil {
28675				var vpnConnectionProperties VpnConnectionProperties
28676				err = json.Unmarshal(*v, &vpnConnectionProperties)
28677				if err != nil {
28678					return err
28679				}
28680				vc.VpnConnectionProperties = &vpnConnectionProperties
28681			}
28682		case "name":
28683			if v != nil {
28684				var name string
28685				err = json.Unmarshal(*v, &name)
28686				if err != nil {
28687					return err
28688				}
28689				vc.Name = &name
28690			}
28691		case "etag":
28692			if v != nil {
28693				var etag string
28694				err = json.Unmarshal(*v, &etag)
28695				if err != nil {
28696					return err
28697				}
28698				vc.Etag = &etag
28699			}
28700		case "id":
28701			if v != nil {
28702				var ID string
28703				err = json.Unmarshal(*v, &ID)
28704				if err != nil {
28705					return err
28706				}
28707				vc.ID = &ID
28708			}
28709		}
28710	}
28711
28712	return nil
28713}
28714
28715// VpnConnectionProperties parameters for VpnConnection
28716type VpnConnectionProperties struct {
28717	// RemoteVpnSite - Id of the connected vpn site.
28718	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
28719	// RoutingWeight - Routing weight for vpn connection.
28720	RoutingWeight *int32 `json:"routingWeight,omitempty"`
28721	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
28722	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
28723	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
28724	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
28725	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
28726	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
28727	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
28728	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
28729	// ConnectionBandwidth - Expected bandwidth in MBPS.
28730	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
28731	// SharedKey - SharedKey for the vpn connection.
28732	SharedKey *string `json:"sharedKey,omitempty"`
28733	// EnableBgp - EnableBgp flag
28734	EnableBgp *bool `json:"enableBgp,omitempty"`
28735	// IpsecPolicies - The IPSec Policies to be considered by this connection.
28736	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
28737	// EnableRateLimiting - EnableBgp flag
28738	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
28739	// EnableInternetSecurity - Enable internet security
28740	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
28741	// UseLocalAzureIPAddress - Use local azure ip to initiate connection
28742	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
28743	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28744	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28745}
28746
28747// VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28748// long-running operation.
28749type VpnConnectionsCreateOrUpdateFuture struct {
28750	azure.Future
28751}
28752
28753// Result returns the result of the asynchronous operation.
28754// If the operation has not completed it will return an error.
28755func (future *VpnConnectionsCreateOrUpdateFuture) Result(client VpnConnectionsClient) (vc VpnConnection, err error) {
28756	var done bool
28757	done, err = future.DoneWithContext(context.Background(), client)
28758	if err != nil {
28759		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28760		return
28761	}
28762	if !done {
28763		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
28764		return
28765	}
28766	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28767	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
28768		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
28769		if err != nil {
28770			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
28771		}
28772	}
28773	return
28774}
28775
28776// VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28777// operation.
28778type VpnConnectionsDeleteFuture struct {
28779	azure.Future
28780}
28781
28782// Result returns the result of the asynchronous operation.
28783// If the operation has not completed it will return an error.
28784func (future *VpnConnectionsDeleteFuture) Result(client VpnConnectionsClient) (ar autorest.Response, err error) {
28785	var done bool
28786	done, err = future.DoneWithContext(context.Background(), client)
28787	if err != nil {
28788		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
28789		return
28790	}
28791	if !done {
28792		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
28793		return
28794	}
28795	ar.Response = future.Response()
28796	return
28797}
28798
28799// VpnDeviceScriptParameters vpn device configuration script generation parameters
28800type VpnDeviceScriptParameters struct {
28801	// Vendor - The vendor for the vpn device.
28802	Vendor *string `json:"vendor,omitempty"`
28803	// DeviceFamily - The device family for the vpn device.
28804	DeviceFamily *string `json:"deviceFamily,omitempty"`
28805	// FirmwareVersion - The firmware version for the vpn device.
28806	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
28807}
28808
28809// VpnGateway vpnGateway Resource.
28810type VpnGateway struct {
28811	autorest.Response `json:"-"`
28812	// VpnGatewayProperties - Properties of the VPN gateway.
28813	*VpnGatewayProperties `json:"properties,omitempty"`
28814	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
28815	Etag *string `json:"etag,omitempty"`
28816	// ID - Resource ID.
28817	ID *string `json:"id,omitempty"`
28818	// Name - READ-ONLY; Resource name.
28819	Name *string `json:"name,omitempty"`
28820	// Type - READ-ONLY; Resource type.
28821	Type *string `json:"type,omitempty"`
28822	// Location - Resource location.
28823	Location *string `json:"location,omitempty"`
28824	// Tags - Resource tags.
28825	Tags map[string]*string `json:"tags"`
28826}
28827
28828// MarshalJSON is the custom marshaler for VpnGateway.
28829func (vg VpnGateway) MarshalJSON() ([]byte, error) {
28830	objectMap := make(map[string]interface{})
28831	if vg.VpnGatewayProperties != nil {
28832		objectMap["properties"] = vg.VpnGatewayProperties
28833	}
28834	if vg.ID != nil {
28835		objectMap["id"] = vg.ID
28836	}
28837	if vg.Location != nil {
28838		objectMap["location"] = vg.Location
28839	}
28840	if vg.Tags != nil {
28841		objectMap["tags"] = vg.Tags
28842	}
28843	return json.Marshal(objectMap)
28844}
28845
28846// UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
28847func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
28848	var m map[string]*json.RawMessage
28849	err := json.Unmarshal(body, &m)
28850	if err != nil {
28851		return err
28852	}
28853	for k, v := range m {
28854		switch k {
28855		case "properties":
28856			if v != nil {
28857				var vpnGatewayProperties VpnGatewayProperties
28858				err = json.Unmarshal(*v, &vpnGatewayProperties)
28859				if err != nil {
28860					return err
28861				}
28862				vg.VpnGatewayProperties = &vpnGatewayProperties
28863			}
28864		case "etag":
28865			if v != nil {
28866				var etag string
28867				err = json.Unmarshal(*v, &etag)
28868				if err != nil {
28869					return err
28870				}
28871				vg.Etag = &etag
28872			}
28873		case "id":
28874			if v != nil {
28875				var ID string
28876				err = json.Unmarshal(*v, &ID)
28877				if err != nil {
28878					return err
28879				}
28880				vg.ID = &ID
28881			}
28882		case "name":
28883			if v != nil {
28884				var name string
28885				err = json.Unmarshal(*v, &name)
28886				if err != nil {
28887					return err
28888				}
28889				vg.Name = &name
28890			}
28891		case "type":
28892			if v != nil {
28893				var typeVar string
28894				err = json.Unmarshal(*v, &typeVar)
28895				if err != nil {
28896					return err
28897				}
28898				vg.Type = &typeVar
28899			}
28900		case "location":
28901			if v != nil {
28902				var location string
28903				err = json.Unmarshal(*v, &location)
28904				if err != nil {
28905					return err
28906				}
28907				vg.Location = &location
28908			}
28909		case "tags":
28910			if v != nil {
28911				var tags map[string]*string
28912				err = json.Unmarshal(*v, &tags)
28913				if err != nil {
28914					return err
28915				}
28916				vg.Tags = tags
28917			}
28918		}
28919	}
28920
28921	return nil
28922}
28923
28924// VpnGatewayProperties parameters for VpnGateway
28925type VpnGatewayProperties struct {
28926	// VirtualHub - The VirtualHub to which the gateway belongs
28927	VirtualHub *SubResource `json:"virtualHub,omitempty"`
28928	// Connections - List of all vpn connections to the gateway.
28929	Connections *[]VpnConnection `json:"connections,omitempty"`
28930	// BgpSettings - Local network gateway's BGP speaker settings.
28931	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
28932	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28933	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28934	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
28935	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
28936}
28937
28938// VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28939// long-running operation.
28940type VpnGatewaysCreateOrUpdateFuture struct {
28941	azure.Future
28942}
28943
28944// Result returns the result of the asynchronous operation.
28945// If the operation has not completed it will return an error.
28946func (future *VpnGatewaysCreateOrUpdateFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
28947	var done bool
28948	done, err = future.DoneWithContext(context.Background(), client)
28949	if err != nil {
28950		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28951		return
28952	}
28953	if !done {
28954		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
28955		return
28956	}
28957	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28958	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
28959		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
28960		if err != nil {
28961			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
28962		}
28963	}
28964	return
28965}
28966
28967// VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28968// operation.
28969type VpnGatewaysDeleteFuture struct {
28970	azure.Future
28971}
28972
28973// Result returns the result of the asynchronous operation.
28974// If the operation has not completed it will return an error.
28975func (future *VpnGatewaysDeleteFuture) Result(client VpnGatewaysClient) (ar autorest.Response, err error) {
28976	var done bool
28977	done, err = future.DoneWithContext(context.Background(), client)
28978	if err != nil {
28979		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
28980		return
28981	}
28982	if !done {
28983		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
28984		return
28985	}
28986	ar.Response = future.Response()
28987	return
28988}
28989
28990// VpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
28991// operation.
28992type VpnGatewaysUpdateTagsFuture struct {
28993	azure.Future
28994}
28995
28996// Result returns the result of the asynchronous operation.
28997// If the operation has not completed it will return an error.
28998func (future *VpnGatewaysUpdateTagsFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
28999	var done bool
29000	done, err = future.DoneWithContext(context.Background(), client)
29001	if err != nil {
29002		err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
29003		return
29004	}
29005	if !done {
29006		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysUpdateTagsFuture")
29007		return
29008	}
29009	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29010	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
29011		vg, err = client.UpdateTagsResponder(vg.Response.Response)
29012		if err != nil {
29013			err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", vg.Response.Response, "Failure responding to request")
29014		}
29015	}
29016	return
29017}
29018
29019// VpnProfileResponse vpn Profile Response for package generation
29020type VpnProfileResponse struct {
29021	autorest.Response `json:"-"`
29022	// ProfileURL - URL to the VPN profile
29023	ProfileURL *string `json:"profileUrl,omitempty"`
29024}
29025
29026// VpnSite vpnSite Resource.
29027type VpnSite struct {
29028	autorest.Response `json:"-"`
29029	// VpnSiteProperties - Properties of the VPN site.
29030	*VpnSiteProperties `json:"properties,omitempty"`
29031	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
29032	Etag *string `json:"etag,omitempty"`
29033	// ID - Resource ID.
29034	ID *string `json:"id,omitempty"`
29035	// Name - READ-ONLY; Resource name.
29036	Name *string `json:"name,omitempty"`
29037	// Type - READ-ONLY; Resource type.
29038	Type *string `json:"type,omitempty"`
29039	// Location - Resource location.
29040	Location *string `json:"location,omitempty"`
29041	// Tags - Resource tags.
29042	Tags map[string]*string `json:"tags"`
29043}
29044
29045// MarshalJSON is the custom marshaler for VpnSite.
29046func (vs VpnSite) MarshalJSON() ([]byte, error) {
29047	objectMap := make(map[string]interface{})
29048	if vs.VpnSiteProperties != nil {
29049		objectMap["properties"] = vs.VpnSiteProperties
29050	}
29051	if vs.ID != nil {
29052		objectMap["id"] = vs.ID
29053	}
29054	if vs.Location != nil {
29055		objectMap["location"] = vs.Location
29056	}
29057	if vs.Tags != nil {
29058		objectMap["tags"] = vs.Tags
29059	}
29060	return json.Marshal(objectMap)
29061}
29062
29063// UnmarshalJSON is the custom unmarshaler for VpnSite struct.
29064func (vs *VpnSite) UnmarshalJSON(body []byte) error {
29065	var m map[string]*json.RawMessage
29066	err := json.Unmarshal(body, &m)
29067	if err != nil {
29068		return err
29069	}
29070	for k, v := range m {
29071		switch k {
29072		case "properties":
29073			if v != nil {
29074				var vpnSiteProperties VpnSiteProperties
29075				err = json.Unmarshal(*v, &vpnSiteProperties)
29076				if err != nil {
29077					return err
29078				}
29079				vs.VpnSiteProperties = &vpnSiteProperties
29080			}
29081		case "etag":
29082			if v != nil {
29083				var etag string
29084				err = json.Unmarshal(*v, &etag)
29085				if err != nil {
29086					return err
29087				}
29088				vs.Etag = &etag
29089			}
29090		case "id":
29091			if v != nil {
29092				var ID string
29093				err = json.Unmarshal(*v, &ID)
29094				if err != nil {
29095					return err
29096				}
29097				vs.ID = &ID
29098			}
29099		case "name":
29100			if v != nil {
29101				var name string
29102				err = json.Unmarshal(*v, &name)
29103				if err != nil {
29104					return err
29105				}
29106				vs.Name = &name
29107			}
29108		case "type":
29109			if v != nil {
29110				var typeVar string
29111				err = json.Unmarshal(*v, &typeVar)
29112				if err != nil {
29113					return err
29114				}
29115				vs.Type = &typeVar
29116			}
29117		case "location":
29118			if v != nil {
29119				var location string
29120				err = json.Unmarshal(*v, &location)
29121				if err != nil {
29122					return err
29123				}
29124				vs.Location = &location
29125			}
29126		case "tags":
29127			if v != nil {
29128				var tags map[string]*string
29129				err = json.Unmarshal(*v, &tags)
29130				if err != nil {
29131					return err
29132				}
29133				vs.Tags = tags
29134			}
29135		}
29136	}
29137
29138	return nil
29139}
29140
29141// VpnSiteID vpnSite Resource.
29142type VpnSiteID struct {
29143	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
29144	VpnSite *string `json:"vpnSite,omitempty"`
29145}
29146
29147// VpnSiteProperties parameters for VpnSite
29148type VpnSiteProperties struct {
29149	// VirtualWan - The VirtualWAN to which the vpnSite belongs
29150	VirtualWan *SubResource `json:"virtualWan,omitempty"`
29151	// DeviceProperties - The device properties
29152	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
29153	// IPAddress - The ip-address for the vpn-site.
29154	IPAddress *string `json:"ipAddress,omitempty"`
29155	// SiteKey - The key for vpn-site that can be used for connections.
29156	SiteKey *string `json:"siteKey,omitempty"`
29157	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
29158	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
29159	// BgpProperties - The set of bgp properties.
29160	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
29161	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29162	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29163	// IsSecuritySite - IsSecuritySite flag
29164	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
29165}
29166
29167// VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
29168// long-running operation.
29169type VpnSitesConfigurationDownloadFuture struct {
29170	azure.Future
29171}
29172
29173// Result returns the result of the asynchronous operation.
29174// If the operation has not completed it will return an error.
29175func (future *VpnSitesConfigurationDownloadFuture) Result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
29176	var done bool
29177	done, err = future.DoneWithContext(context.Background(), client)
29178	if err != nil {
29179		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
29180		return
29181	}
29182	if !done {
29183		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
29184		return
29185	}
29186	ar.Response = future.Response()
29187	return
29188}
29189
29190// VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
29191// operation.
29192type VpnSitesCreateOrUpdateFuture struct {
29193	azure.Future
29194}
29195
29196// Result returns the result of the asynchronous operation.
29197// If the operation has not completed it will return an error.
29198func (future *VpnSitesCreateOrUpdateFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
29199	var done bool
29200	done, err = future.DoneWithContext(context.Background(), client)
29201	if err != nil {
29202		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29203		return
29204	}
29205	if !done {
29206		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
29207		return
29208	}
29209	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29210	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
29211		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
29212		if err != nil {
29213			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
29214		}
29215	}
29216	return
29217}
29218
29219// VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
29220// operation.
29221type VpnSitesDeleteFuture struct {
29222	azure.Future
29223}
29224
29225// Result returns the result of the asynchronous operation.
29226// If the operation has not completed it will return an error.
29227func (future *VpnSitesDeleteFuture) Result(client VpnSitesClient) (ar autorest.Response, err error) {
29228	var done bool
29229	done, err = future.DoneWithContext(context.Background(), client)
29230	if err != nil {
29231		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
29232		return
29233	}
29234	if !done {
29235		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
29236		return
29237	}
29238	ar.Response = future.Response()
29239	return
29240}
29241
29242// VpnSitesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
29243// operation.
29244type VpnSitesUpdateTagsFuture struct {
29245	azure.Future
29246}
29247
29248// Result returns the result of the asynchronous operation.
29249// If the operation has not completed it will return an error.
29250func (future *VpnSitesUpdateTagsFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
29251	var done bool
29252	done, err = future.DoneWithContext(context.Background(), client)
29253	if err != nil {
29254		err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
29255		return
29256	}
29257	if !done {
29258		err = azure.NewAsyncOpIncompleteError("network.VpnSitesUpdateTagsFuture")
29259		return
29260	}
29261	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29262	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
29263		vs, err = client.UpdateTagsResponder(vs.Response.Response)
29264		if err != nil {
29265			err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", vs.Response.Response, "Failure responding to request")
29266		}
29267	}
29268	return
29269}
29270
29271// Watcher network watcher in a resource group.
29272type Watcher struct {
29273	autorest.Response `json:"-"`
29274	// Etag - A unique read-only string that changes whenever the resource is updated.
29275	Etag *string `json:"etag,omitempty"`
29276	// WatcherPropertiesFormat - Properties of the network watcher.
29277	*WatcherPropertiesFormat `json:"properties,omitempty"`
29278	// ID - Resource ID.
29279	ID *string `json:"id,omitempty"`
29280	// Name - READ-ONLY; Resource name.
29281	Name *string `json:"name,omitempty"`
29282	// Type - READ-ONLY; Resource type.
29283	Type *string `json:"type,omitempty"`
29284	// Location - Resource location.
29285	Location *string `json:"location,omitempty"`
29286	// Tags - Resource tags.
29287	Tags map[string]*string `json:"tags"`
29288}
29289
29290// MarshalJSON is the custom marshaler for Watcher.
29291func (w Watcher) MarshalJSON() ([]byte, error) {
29292	objectMap := make(map[string]interface{})
29293	if w.Etag != nil {
29294		objectMap["etag"] = w.Etag
29295	}
29296	if w.WatcherPropertiesFormat != nil {
29297		objectMap["properties"] = w.WatcherPropertiesFormat
29298	}
29299	if w.ID != nil {
29300		objectMap["id"] = w.ID
29301	}
29302	if w.Location != nil {
29303		objectMap["location"] = w.Location
29304	}
29305	if w.Tags != nil {
29306		objectMap["tags"] = w.Tags
29307	}
29308	return json.Marshal(objectMap)
29309}
29310
29311// UnmarshalJSON is the custom unmarshaler for Watcher struct.
29312func (w *Watcher) UnmarshalJSON(body []byte) error {
29313	var m map[string]*json.RawMessage
29314	err := json.Unmarshal(body, &m)
29315	if err != nil {
29316		return err
29317	}
29318	for k, v := range m {
29319		switch k {
29320		case "etag":
29321			if v != nil {
29322				var etag string
29323				err = json.Unmarshal(*v, &etag)
29324				if err != nil {
29325					return err
29326				}
29327				w.Etag = &etag
29328			}
29329		case "properties":
29330			if v != nil {
29331				var watcherPropertiesFormat WatcherPropertiesFormat
29332				err = json.Unmarshal(*v, &watcherPropertiesFormat)
29333				if err != nil {
29334					return err
29335				}
29336				w.WatcherPropertiesFormat = &watcherPropertiesFormat
29337			}
29338		case "id":
29339			if v != nil {
29340				var ID string
29341				err = json.Unmarshal(*v, &ID)
29342				if err != nil {
29343					return err
29344				}
29345				w.ID = &ID
29346			}
29347		case "name":
29348			if v != nil {
29349				var name string
29350				err = json.Unmarshal(*v, &name)
29351				if err != nil {
29352					return err
29353				}
29354				w.Name = &name
29355			}
29356		case "type":
29357			if v != nil {
29358				var typeVar string
29359				err = json.Unmarshal(*v, &typeVar)
29360				if err != nil {
29361					return err
29362				}
29363				w.Type = &typeVar
29364			}
29365		case "location":
29366			if v != nil {
29367				var location string
29368				err = json.Unmarshal(*v, &location)
29369				if err != nil {
29370					return err
29371				}
29372				w.Location = &location
29373			}
29374		case "tags":
29375			if v != nil {
29376				var tags map[string]*string
29377				err = json.Unmarshal(*v, &tags)
29378				if err != nil {
29379					return err
29380				}
29381				w.Tags = tags
29382			}
29383		}
29384	}
29385
29386	return nil
29387}
29388
29389// WatcherListResult response for ListNetworkWatchers API service call.
29390type WatcherListResult struct {
29391	autorest.Response `json:"-"`
29392	// Value - List of network watcher resources.
29393	Value *[]Watcher `json:"value,omitempty"`
29394}
29395
29396// WatcherPropertiesFormat the network watcher properties.
29397type WatcherPropertiesFormat struct {
29398	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29399	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29400}
29401
29402// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
29403// long-running operation.
29404type WatchersCheckConnectivityFuture struct {
29405	azure.Future
29406}
29407
29408// Result returns the result of the asynchronous operation.
29409// If the operation has not completed it will return an error.
29410func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
29411	var done bool
29412	done, err = future.DoneWithContext(context.Background(), client)
29413	if err != nil {
29414		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
29415		return
29416	}
29417	if !done {
29418		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
29419		return
29420	}
29421	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29422	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
29423		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
29424		if err != nil {
29425			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
29426		}
29427	}
29428	return
29429}
29430
29431// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
29432// operation.
29433type WatchersDeleteFuture struct {
29434	azure.Future
29435}
29436
29437// Result returns the result of the asynchronous operation.
29438// If the operation has not completed it will return an error.
29439func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
29440	var done bool
29441	done, err = future.DoneWithContext(context.Background(), client)
29442	if err != nil {
29443		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
29444		return
29445	}
29446	if !done {
29447		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
29448		return
29449	}
29450	ar.Response = future.Response()
29451	return
29452}
29453
29454// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
29455// long-running operation.
29456type WatchersGetAzureReachabilityReportFuture struct {
29457	azure.Future
29458}
29459
29460// Result returns the result of the asynchronous operation.
29461// If the operation has not completed it will return an error.
29462func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
29463	var done bool
29464	done, err = future.DoneWithContext(context.Background(), client)
29465	if err != nil {
29466		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
29467		return
29468	}
29469	if !done {
29470		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
29471		return
29472	}
29473	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29474	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
29475		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
29476		if err != nil {
29477			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
29478		}
29479	}
29480	return
29481}
29482
29483// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
29484// long-running operation.
29485type WatchersGetFlowLogStatusFuture struct {
29486	azure.Future
29487}
29488
29489// Result returns the result of the asynchronous operation.
29490// If the operation has not completed it will return an error.
29491func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
29492	var done bool
29493	done, err = future.DoneWithContext(context.Background(), client)
29494	if err != nil {
29495		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
29496		return
29497	}
29498	if !done {
29499		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
29500		return
29501	}
29502	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29503	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
29504		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
29505		if err != nil {
29506			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
29507		}
29508	}
29509	return
29510}
29511
29512// WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
29513// of a long-running operation.
29514type WatchersGetNetworkConfigurationDiagnosticFuture struct {
29515	azure.Future
29516}
29517
29518// Result returns the result of the asynchronous operation.
29519// If the operation has not completed it will return an error.
29520func (future *WatchersGetNetworkConfigurationDiagnosticFuture) Result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
29521	var done bool
29522	done, err = future.DoneWithContext(context.Background(), client)
29523	if err != nil {
29524		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
29525		return
29526	}
29527	if !done {
29528		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
29529		return
29530	}
29531	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29532	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
29533		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
29534		if err != nil {
29535			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
29536		}
29537	}
29538	return
29539}
29540
29541// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
29542// operation.
29543type WatchersGetNextHopFuture struct {
29544	azure.Future
29545}
29546
29547// Result returns the result of the asynchronous operation.
29548// If the operation has not completed it will return an error.
29549func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
29550	var done bool
29551	done, err = future.DoneWithContext(context.Background(), client)
29552	if err != nil {
29553		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
29554		return
29555	}
29556	if !done {
29557		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
29558		return
29559	}
29560	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29561	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
29562		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
29563		if err != nil {
29564			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
29565		}
29566	}
29567	return
29568}
29569
29570// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
29571// long-running operation.
29572type WatchersGetTroubleshootingFuture struct {
29573	azure.Future
29574}
29575
29576// Result returns the result of the asynchronous operation.
29577// If the operation has not completed it will return an error.
29578func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
29579	var done bool
29580	done, err = future.DoneWithContext(context.Background(), client)
29581	if err != nil {
29582		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
29583		return
29584	}
29585	if !done {
29586		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
29587		return
29588	}
29589	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29590	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
29591		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
29592		if err != nil {
29593			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
29594		}
29595	}
29596	return
29597}
29598
29599// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
29600// long-running operation.
29601type WatchersGetTroubleshootingResultFuture struct {
29602	azure.Future
29603}
29604
29605// Result returns the result of the asynchronous operation.
29606// If the operation has not completed it will return an error.
29607func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
29608	var done bool
29609	done, err = future.DoneWithContext(context.Background(), client)
29610	if err != nil {
29611		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
29612		return
29613	}
29614	if !done {
29615		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
29616		return
29617	}
29618	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29619	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
29620		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
29621		if err != nil {
29622			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
29623		}
29624	}
29625	return
29626}
29627
29628// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
29629// long-running operation.
29630type WatchersGetVMSecurityRulesFuture struct {
29631	azure.Future
29632}
29633
29634// Result returns the result of the asynchronous operation.
29635// If the operation has not completed it will return an error.
29636func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
29637	var done bool
29638	done, err = future.DoneWithContext(context.Background(), client)
29639	if err != nil {
29640		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
29641		return
29642	}
29643	if !done {
29644		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
29645		return
29646	}
29647	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29648	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
29649		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
29650		if err != nil {
29651			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
29652		}
29653	}
29654	return
29655}
29656
29657// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
29658// long-running operation.
29659type WatchersListAvailableProvidersFuture struct {
29660	azure.Future
29661}
29662
29663// Result returns the result of the asynchronous operation.
29664// If the operation has not completed it will return an error.
29665func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
29666	var done bool
29667	done, err = future.DoneWithContext(context.Background(), client)
29668	if err != nil {
29669		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
29670		return
29671	}
29672	if !done {
29673		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
29674		return
29675	}
29676	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29677	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
29678		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
29679		if err != nil {
29680			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
29681		}
29682	}
29683	return
29684}
29685
29686// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
29687// long-running operation.
29688type WatchersSetFlowLogConfigurationFuture struct {
29689	azure.Future
29690}
29691
29692// Result returns the result of the asynchronous operation.
29693// If the operation has not completed it will return an error.
29694func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
29695	var done bool
29696	done, err = future.DoneWithContext(context.Background(), client)
29697	if err != nil {
29698		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
29699		return
29700	}
29701	if !done {
29702		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
29703		return
29704	}
29705	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29706	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
29707		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
29708		if err != nil {
29709			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
29710		}
29711	}
29712	return
29713}
29714
29715// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
29716// operation.
29717type WatchersVerifyIPFlowFuture struct {
29718	azure.Future
29719}
29720
29721// Result returns the result of the asynchronous operation.
29722// If the operation has not completed it will return an error.
29723func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
29724	var done bool
29725	done, err = future.DoneWithContext(context.Background(), client)
29726	if err != nil {
29727		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
29728		return
29729	}
29730	if !done {
29731		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
29732		return
29733	}
29734	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29735	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
29736		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
29737		if err != nil {
29738			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
29739		}
29740	}
29741	return
29742}
29743
29744// WebApplicationFirewallCustomRule defines contents of a web application rule
29745type WebApplicationFirewallCustomRule struct {
29746	// Name - Gets name of the resource that is unique within a policy. This name can be used to access the resource.
29747	Name *string `json:"name,omitempty"`
29748	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
29749	Etag *string `json:"etag,omitempty"`
29750	// Priority - Describes priority of the rule. Rules with a lower value will be evaluated before rules with a higher value
29751	Priority *int32 `json:"priority,omitempty"`
29752	// RuleType - Describes type of rule. Possible values include: 'WebApplicationFirewallRuleTypeMatchRule', 'WebApplicationFirewallRuleTypeInvalid'
29753	RuleType WebApplicationFirewallRuleType `json:"ruleType,omitempty"`
29754	// MatchConditions - List of match conditions
29755	MatchConditions *[]MatchCondition `json:"matchConditions,omitempty"`
29756	// Action - Type of Actions. Possible values include: 'WebApplicationFirewallActionAllow', 'WebApplicationFirewallActionBlock', 'WebApplicationFirewallActionLog'
29757	Action WebApplicationFirewallAction `json:"action,omitempty"`
29758}
29759
29760// WebApplicationFirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
29761// long-running operation.
29762type WebApplicationFirewallPoliciesDeleteFuture struct {
29763	azure.Future
29764}
29765
29766// Result returns the result of the asynchronous operation.
29767// If the operation has not completed it will return an error.
29768func (future *WebApplicationFirewallPoliciesDeleteFuture) Result(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
29769	var done bool
29770	done, err = future.DoneWithContext(context.Background(), client)
29771	if err != nil {
29772		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
29773		return
29774	}
29775	if !done {
29776		err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
29777		return
29778	}
29779	ar.Response = future.Response()
29780	return
29781}
29782
29783// WebApplicationFirewallPolicy defines web application firewall policy.
29784type WebApplicationFirewallPolicy struct {
29785	autorest.Response `json:"-"`
29786	// WebApplicationFirewallPolicyPropertiesFormat - Properties of the web application firewall policy.
29787	*WebApplicationFirewallPolicyPropertiesFormat `json:"properties,omitempty"`
29788	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
29789	Etag *string `json:"etag,omitempty"`
29790	// ID - Resource ID.
29791	ID *string `json:"id,omitempty"`
29792	// Name - READ-ONLY; Resource name.
29793	Name *string `json:"name,omitempty"`
29794	// Type - READ-ONLY; Resource type.
29795	Type *string `json:"type,omitempty"`
29796	// Location - Resource location.
29797	Location *string `json:"location,omitempty"`
29798	// Tags - Resource tags.
29799	Tags map[string]*string `json:"tags"`
29800}
29801
29802// MarshalJSON is the custom marshaler for WebApplicationFirewallPolicy.
29803func (wafp WebApplicationFirewallPolicy) MarshalJSON() ([]byte, error) {
29804	objectMap := make(map[string]interface{})
29805	if wafp.WebApplicationFirewallPolicyPropertiesFormat != nil {
29806		objectMap["properties"] = wafp.WebApplicationFirewallPolicyPropertiesFormat
29807	}
29808	if wafp.Etag != nil {
29809		objectMap["etag"] = wafp.Etag
29810	}
29811	if wafp.ID != nil {
29812		objectMap["id"] = wafp.ID
29813	}
29814	if wafp.Location != nil {
29815		objectMap["location"] = wafp.Location
29816	}
29817	if wafp.Tags != nil {
29818		objectMap["tags"] = wafp.Tags
29819	}
29820	return json.Marshal(objectMap)
29821}
29822
29823// UnmarshalJSON is the custom unmarshaler for WebApplicationFirewallPolicy struct.
29824func (wafp *WebApplicationFirewallPolicy) UnmarshalJSON(body []byte) error {
29825	var m map[string]*json.RawMessage
29826	err := json.Unmarshal(body, &m)
29827	if err != nil {
29828		return err
29829	}
29830	for k, v := range m {
29831		switch k {
29832		case "properties":
29833			if v != nil {
29834				var webApplicationFirewallPolicyPropertiesFormat WebApplicationFirewallPolicyPropertiesFormat
29835				err = json.Unmarshal(*v, &webApplicationFirewallPolicyPropertiesFormat)
29836				if err != nil {
29837					return err
29838				}
29839				wafp.WebApplicationFirewallPolicyPropertiesFormat = &webApplicationFirewallPolicyPropertiesFormat
29840			}
29841		case "etag":
29842			if v != nil {
29843				var etag string
29844				err = json.Unmarshal(*v, &etag)
29845				if err != nil {
29846					return err
29847				}
29848				wafp.Etag = &etag
29849			}
29850		case "id":
29851			if v != nil {
29852				var ID string
29853				err = json.Unmarshal(*v, &ID)
29854				if err != nil {
29855					return err
29856				}
29857				wafp.ID = &ID
29858			}
29859		case "name":
29860			if v != nil {
29861				var name string
29862				err = json.Unmarshal(*v, &name)
29863				if err != nil {
29864					return err
29865				}
29866				wafp.Name = &name
29867			}
29868		case "type":
29869			if v != nil {
29870				var typeVar string
29871				err = json.Unmarshal(*v, &typeVar)
29872				if err != nil {
29873					return err
29874				}
29875				wafp.Type = &typeVar
29876			}
29877		case "location":
29878			if v != nil {
29879				var location string
29880				err = json.Unmarshal(*v, &location)
29881				if err != nil {
29882					return err
29883				}
29884				wafp.Location = &location
29885			}
29886		case "tags":
29887			if v != nil {
29888				var tags map[string]*string
29889				err = json.Unmarshal(*v, &tags)
29890				if err != nil {
29891					return err
29892				}
29893				wafp.Tags = tags
29894			}
29895		}
29896	}
29897
29898	return nil
29899}
29900
29901// WebApplicationFirewallPolicyListResult result of the request to list WebApplicationFirewallPolicies. It
29902// contains a list of WebApplicationFirewallPolicy objects and a URL link to get the next set of results.
29903type WebApplicationFirewallPolicyListResult struct {
29904	autorest.Response `json:"-"`
29905	// Value - READ-ONLY; List of WebApplicationFirewallPolicies within a resource group.
29906	Value *[]WebApplicationFirewallPolicy `json:"value,omitempty"`
29907	// NextLink - READ-ONLY; URL to get the next set of WebApplicationFirewallPolicy objects if there are any.
29908	NextLink *string `json:"nextLink,omitempty"`
29909}
29910
29911// WebApplicationFirewallPolicyListResultIterator provides access to a complete listing of
29912// WebApplicationFirewallPolicy values.
29913type WebApplicationFirewallPolicyListResultIterator struct {
29914	i    int
29915	page WebApplicationFirewallPolicyListResultPage
29916}
29917
29918// NextWithContext advances to the next value.  If there was an error making
29919// the request the iterator does not advance and the error is returned.
29920func (iter *WebApplicationFirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
29921	if tracing.IsEnabled() {
29922		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultIterator.NextWithContext")
29923		defer func() {
29924			sc := -1
29925			if iter.Response().Response.Response != nil {
29926				sc = iter.Response().Response.Response.StatusCode
29927			}
29928			tracing.EndSpan(ctx, sc, err)
29929		}()
29930	}
29931	iter.i++
29932	if iter.i < len(iter.page.Values()) {
29933		return nil
29934	}
29935	err = iter.page.NextWithContext(ctx)
29936	if err != nil {
29937		iter.i--
29938		return err
29939	}
29940	iter.i = 0
29941	return nil
29942}
29943
29944// Next advances to the next value.  If there was an error making
29945// the request the iterator does not advance and the error is returned.
29946// Deprecated: Use NextWithContext() instead.
29947func (iter *WebApplicationFirewallPolicyListResultIterator) Next() error {
29948	return iter.NextWithContext(context.Background())
29949}
29950
29951// NotDone returns true if the enumeration should be started or is not yet complete.
29952func (iter WebApplicationFirewallPolicyListResultIterator) NotDone() bool {
29953	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29954}
29955
29956// Response returns the raw server response from the last page request.
29957func (iter WebApplicationFirewallPolicyListResultIterator) Response() WebApplicationFirewallPolicyListResult {
29958	return iter.page.Response()
29959}
29960
29961// Value returns the current value or a zero-initialized value if the
29962// iterator has advanced beyond the end of the collection.
29963func (iter WebApplicationFirewallPolicyListResultIterator) Value() WebApplicationFirewallPolicy {
29964	if !iter.page.NotDone() {
29965		return WebApplicationFirewallPolicy{}
29966	}
29967	return iter.page.Values()[iter.i]
29968}
29969
29970// Creates a new instance of the WebApplicationFirewallPolicyListResultIterator type.
29971func NewWebApplicationFirewallPolicyListResultIterator(page WebApplicationFirewallPolicyListResultPage) WebApplicationFirewallPolicyListResultIterator {
29972	return WebApplicationFirewallPolicyListResultIterator{page: page}
29973}
29974
29975// IsEmpty returns true if the ListResult contains no values.
29976func (wafplr WebApplicationFirewallPolicyListResult) IsEmpty() bool {
29977	return wafplr.Value == nil || len(*wafplr.Value) == 0
29978}
29979
29980// webApplicationFirewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
29981// It returns nil if no more results exist.
29982func (wafplr WebApplicationFirewallPolicyListResult) webApplicationFirewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
29983	if wafplr.NextLink == nil || len(to.String(wafplr.NextLink)) < 1 {
29984		return nil, nil
29985	}
29986	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29987		autorest.AsJSON(),
29988		autorest.AsGet(),
29989		autorest.WithBaseURL(to.String(wafplr.NextLink)))
29990}
29991
29992// WebApplicationFirewallPolicyListResultPage contains a page of WebApplicationFirewallPolicy values.
29993type WebApplicationFirewallPolicyListResultPage struct {
29994	fn     func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)
29995	wafplr WebApplicationFirewallPolicyListResult
29996}
29997
29998// NextWithContext advances to the next page of values.  If there was an error making
29999// the request the page does not advance and the error is returned.
30000func (page *WebApplicationFirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
30001	if tracing.IsEnabled() {
30002		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultPage.NextWithContext")
30003		defer func() {
30004			sc := -1
30005			if page.Response().Response.Response != nil {
30006				sc = page.Response().Response.Response.StatusCode
30007			}
30008			tracing.EndSpan(ctx, sc, err)
30009		}()
30010	}
30011	next, err := page.fn(ctx, page.wafplr)
30012	if err != nil {
30013		return err
30014	}
30015	page.wafplr = next
30016	return nil
30017}
30018
30019// Next advances to the next page of values.  If there was an error making
30020// the request the page does not advance and the error is returned.
30021// Deprecated: Use NextWithContext() instead.
30022func (page *WebApplicationFirewallPolicyListResultPage) Next() error {
30023	return page.NextWithContext(context.Background())
30024}
30025
30026// NotDone returns true if the page enumeration should be started or is not yet complete.
30027func (page WebApplicationFirewallPolicyListResultPage) NotDone() bool {
30028	return !page.wafplr.IsEmpty()
30029}
30030
30031// Response returns the raw server response from the last page request.
30032func (page WebApplicationFirewallPolicyListResultPage) Response() WebApplicationFirewallPolicyListResult {
30033	return page.wafplr
30034}
30035
30036// Values returns the slice of values for the current page or nil if there are no values.
30037func (page WebApplicationFirewallPolicyListResultPage) Values() []WebApplicationFirewallPolicy {
30038	if page.wafplr.IsEmpty() {
30039		return nil
30040	}
30041	return *page.wafplr.Value
30042}
30043
30044// Creates a new instance of the WebApplicationFirewallPolicyListResultPage type.
30045func NewWebApplicationFirewallPolicyListResultPage(getNextPage func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)) WebApplicationFirewallPolicyListResultPage {
30046	return WebApplicationFirewallPolicyListResultPage{fn: getNextPage}
30047}
30048
30049// WebApplicationFirewallPolicyPropertiesFormat defines web application firewall policy properties
30050type WebApplicationFirewallPolicyPropertiesFormat struct {
30051	// PolicySettings - Describes  policySettings for policy
30052	PolicySettings *PolicySettings `json:"policySettings,omitempty"`
30053	// CustomRules - Describes custom rules inside the policy
30054	CustomRules *[]WebApplicationFirewallCustomRule `json:"customRules,omitempty"`
30055	// ApplicationGateways - READ-ONLY; A collection of references to application gateways.
30056	ApplicationGateways *[]ApplicationGateway `json:"applicationGateways,omitempty"`
30057	// ProvisioningState - READ-ONLY; Provisioning state of the WebApplicationFirewallPolicy.
30058	ProvisioningState *string `json:"provisioningState,omitempty"`
30059	// ResourceState - READ-ONLY; Resource status of the policy. Possible values include: 'WebApplicationFirewallPolicyResourceStateCreating', 'WebApplicationFirewallPolicyResourceStateEnabling', 'WebApplicationFirewallPolicyResourceStateEnabled', 'WebApplicationFirewallPolicyResourceStateDisabling', 'WebApplicationFirewallPolicyResourceStateDisabled', 'WebApplicationFirewallPolicyResourceStateDeleting'
30060	ResourceState WebApplicationFirewallPolicyResourceState `json:"resourceState,omitempty"`
30061}
30062