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-11-01/network"
33
34// Access enumerates the values for access.
35type Access string
36
37const (
38	// Allow ...
39	Allow Access = "Allow"
40	// Deny ...
41	Deny Access = "Deny"
42)
43
44// PossibleAccessValues returns an array of possible values for the Access const type.
45func PossibleAccessValues() []Access {
46	return []Access{Allow, Deny}
47}
48
49// ApplicationGatewayBackendHealthServerHealth enumerates the values for application gateway backend health
50// server health.
51type ApplicationGatewayBackendHealthServerHealth string
52
53const (
54	// Down ...
55	Down ApplicationGatewayBackendHealthServerHealth = "Down"
56	// Draining ...
57	Draining ApplicationGatewayBackendHealthServerHealth = "Draining"
58	// Partial ...
59	Partial ApplicationGatewayBackendHealthServerHealth = "Partial"
60	// Unknown ...
61	Unknown ApplicationGatewayBackendHealthServerHealth = "Unknown"
62	// Up ...
63	Up ApplicationGatewayBackendHealthServerHealth = "Up"
64)
65
66// PossibleApplicationGatewayBackendHealthServerHealthValues returns an array of possible values for the ApplicationGatewayBackendHealthServerHealth const type.
67func PossibleApplicationGatewayBackendHealthServerHealthValues() []ApplicationGatewayBackendHealthServerHealth {
68	return []ApplicationGatewayBackendHealthServerHealth{Down, Draining, Partial, Unknown, Up}
69}
70
71// ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity.
72type ApplicationGatewayCookieBasedAffinity string
73
74const (
75	// Disabled ...
76	Disabled ApplicationGatewayCookieBasedAffinity = "Disabled"
77	// Enabled ...
78	Enabled ApplicationGatewayCookieBasedAffinity = "Enabled"
79)
80
81// PossibleApplicationGatewayCookieBasedAffinityValues returns an array of possible values for the ApplicationGatewayCookieBasedAffinity const type.
82func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayCookieBasedAffinity {
83	return []ApplicationGatewayCookieBasedAffinity{Disabled, Enabled}
84}
85
86// ApplicationGatewayCustomErrorStatusCode enumerates the values for application gateway custom error status
87// code.
88type ApplicationGatewayCustomErrorStatusCode string
89
90const (
91	// HTTPStatus403 ...
92	HTTPStatus403 ApplicationGatewayCustomErrorStatusCode = "HttpStatus403"
93	// HTTPStatus502 ...
94	HTTPStatus502 ApplicationGatewayCustomErrorStatusCode = "HttpStatus502"
95)
96
97// PossibleApplicationGatewayCustomErrorStatusCodeValues returns an array of possible values for the ApplicationGatewayCustomErrorStatusCode const type.
98func PossibleApplicationGatewayCustomErrorStatusCodeValues() []ApplicationGatewayCustomErrorStatusCode {
99	return []ApplicationGatewayCustomErrorStatusCode{HTTPStatus403, HTTPStatus502}
100}
101
102// ApplicationGatewayFirewallMode enumerates the values for application gateway firewall mode.
103type ApplicationGatewayFirewallMode string
104
105const (
106	// Detection ...
107	Detection ApplicationGatewayFirewallMode = "Detection"
108	// Prevention ...
109	Prevention ApplicationGatewayFirewallMode = "Prevention"
110)
111
112// PossibleApplicationGatewayFirewallModeValues returns an array of possible values for the ApplicationGatewayFirewallMode const type.
113func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewallMode {
114	return []ApplicationGatewayFirewallMode{Detection, Prevention}
115}
116
117// ApplicationGatewayOperationalState enumerates the values for application gateway operational state.
118type ApplicationGatewayOperationalState string
119
120const (
121	// Running ...
122	Running ApplicationGatewayOperationalState = "Running"
123	// Starting ...
124	Starting ApplicationGatewayOperationalState = "Starting"
125	// Stopped ...
126	Stopped ApplicationGatewayOperationalState = "Stopped"
127	// Stopping ...
128	Stopping ApplicationGatewayOperationalState = "Stopping"
129)
130
131// PossibleApplicationGatewayOperationalStateValues returns an array of possible values for the ApplicationGatewayOperationalState const type.
132func PossibleApplicationGatewayOperationalStateValues() []ApplicationGatewayOperationalState {
133	return []ApplicationGatewayOperationalState{Running, Starting, Stopped, Stopping}
134}
135
136// ApplicationGatewayProtocol enumerates the values for application gateway protocol.
137type ApplicationGatewayProtocol string
138
139const (
140	// HTTP ...
141	HTTP ApplicationGatewayProtocol = "Http"
142	// HTTPS ...
143	HTTPS ApplicationGatewayProtocol = "Https"
144)
145
146// PossibleApplicationGatewayProtocolValues returns an array of possible values for the ApplicationGatewayProtocol const type.
147func PossibleApplicationGatewayProtocolValues() []ApplicationGatewayProtocol {
148	return []ApplicationGatewayProtocol{HTTP, HTTPS}
149}
150
151// ApplicationGatewayRedirectType enumerates the values for application gateway redirect type.
152type ApplicationGatewayRedirectType string
153
154const (
155	// Found ...
156	Found ApplicationGatewayRedirectType = "Found"
157	// Permanent ...
158	Permanent ApplicationGatewayRedirectType = "Permanent"
159	// SeeOther ...
160	SeeOther ApplicationGatewayRedirectType = "SeeOther"
161	// Temporary ...
162	Temporary ApplicationGatewayRedirectType = "Temporary"
163)
164
165// PossibleApplicationGatewayRedirectTypeValues returns an array of possible values for the ApplicationGatewayRedirectType const type.
166func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirectType {
167	return []ApplicationGatewayRedirectType{Found, Permanent, SeeOther, Temporary}
168}
169
170// ApplicationGatewayRequestRoutingRuleType enumerates the values for application gateway request routing rule
171// type.
172type ApplicationGatewayRequestRoutingRuleType string
173
174const (
175	// Basic ...
176	Basic ApplicationGatewayRequestRoutingRuleType = "Basic"
177	// PathBasedRouting ...
178	PathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting"
179)
180
181// PossibleApplicationGatewayRequestRoutingRuleTypeValues returns an array of possible values for the ApplicationGatewayRequestRoutingRuleType const type.
182func PossibleApplicationGatewayRequestRoutingRuleTypeValues() []ApplicationGatewayRequestRoutingRuleType {
183	return []ApplicationGatewayRequestRoutingRuleType{Basic, PathBasedRouting}
184}
185
186// ApplicationGatewaySkuName enumerates the values for application gateway sku name.
187type ApplicationGatewaySkuName string
188
189const (
190	// StandardLarge ...
191	StandardLarge ApplicationGatewaySkuName = "Standard_Large"
192	// StandardMedium ...
193	StandardMedium ApplicationGatewaySkuName = "Standard_Medium"
194	// StandardSmall ...
195	StandardSmall ApplicationGatewaySkuName = "Standard_Small"
196	// StandardV2 ...
197	StandardV2 ApplicationGatewaySkuName = "Standard_v2"
198	// WAFLarge ...
199	WAFLarge ApplicationGatewaySkuName = "WAF_Large"
200	// WAFMedium ...
201	WAFMedium ApplicationGatewaySkuName = "WAF_Medium"
202	// WAFV2 ...
203	WAFV2 ApplicationGatewaySkuName = "WAF_v2"
204)
205
206// PossibleApplicationGatewaySkuNameValues returns an array of possible values for the ApplicationGatewaySkuName const type.
207func PossibleApplicationGatewaySkuNameValues() []ApplicationGatewaySkuName {
208	return []ApplicationGatewaySkuName{StandardLarge, StandardMedium, StandardSmall, StandardV2, WAFLarge, WAFMedium, WAFV2}
209}
210
211// ApplicationGatewaySslCipherSuite enumerates the values for application gateway ssl cipher suite.
212type ApplicationGatewaySslCipherSuite string
213
214const (
215	// TLSDHEDSSWITH3DESEDECBCSHA ...
216	TLSDHEDSSWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
217	// TLSDHEDSSWITHAES128CBCSHA ...
218	TLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
219	// TLSDHEDSSWITHAES128CBCSHA256 ...
220	TLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
221	// TLSDHEDSSWITHAES256CBCSHA ...
222	TLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"
223	// TLSDHEDSSWITHAES256CBCSHA256 ...
224	TLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"
225	// TLSDHERSAWITHAES128CBCSHA ...
226	TLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
227	// TLSDHERSAWITHAES128GCMSHA256 ...
228	TLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
229	// TLSDHERSAWITHAES256CBCSHA ...
230	TLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
231	// TLSDHERSAWITHAES256GCMSHA384 ...
232	TLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"
233	// TLSECDHEECDSAWITHAES128CBCSHA ...
234	TLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
235	// TLSECDHEECDSAWITHAES128CBCSHA256 ...
236	TLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
237	// TLSECDHEECDSAWITHAES128GCMSHA256 ...
238	TLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
239	// TLSECDHEECDSAWITHAES256CBCSHA ...
240	TLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
241	// TLSECDHEECDSAWITHAES256CBCSHA384 ...
242	TLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
243	// TLSECDHEECDSAWITHAES256GCMSHA384 ...
244	TLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
245	// TLSECDHERSAWITHAES128CBCSHA ...
246	TLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
247	// TLSECDHERSAWITHAES128CBCSHA256 ...
248	TLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
249	// TLSECDHERSAWITHAES128GCMSHA256 ...
250	TLSECDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
251	// TLSECDHERSAWITHAES256CBCSHA ...
252	TLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
253	// TLSECDHERSAWITHAES256CBCSHA384 ...
254	TLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
255	// TLSECDHERSAWITHAES256GCMSHA384 ...
256	TLSECDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
257	// TLSRSAWITH3DESEDECBCSHA ...
258	TLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
259	// TLSRSAWITHAES128CBCSHA ...
260	TLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA"
261	// TLSRSAWITHAES128CBCSHA256 ...
262	TLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256"
263	// TLSRSAWITHAES128GCMSHA256 ...
264	TLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256"
265	// TLSRSAWITHAES256CBCSHA ...
266	TLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA"
267	// TLSRSAWITHAES256CBCSHA256 ...
268	TLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256"
269	// TLSRSAWITHAES256GCMSHA384 ...
270	TLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384"
271)
272
273// PossibleApplicationGatewaySslCipherSuiteValues returns an array of possible values for the ApplicationGatewaySslCipherSuite const type.
274func PossibleApplicationGatewaySslCipherSuiteValues() []ApplicationGatewaySslCipherSuite {
275	return []ApplicationGatewaySslCipherSuite{TLSDHEDSSWITH3DESEDECBCSHA, TLSDHEDSSWITHAES128CBCSHA, TLSDHEDSSWITHAES128CBCSHA256, TLSDHEDSSWITHAES256CBCSHA, TLSDHEDSSWITHAES256CBCSHA256, TLSDHERSAWITHAES128CBCSHA, TLSDHERSAWITHAES128GCMSHA256, TLSDHERSAWITHAES256CBCSHA, TLSDHERSAWITHAES256GCMSHA384, TLSECDHEECDSAWITHAES128CBCSHA, TLSECDHEECDSAWITHAES128CBCSHA256, TLSECDHEECDSAWITHAES128GCMSHA256, TLSECDHEECDSAWITHAES256CBCSHA, TLSECDHEECDSAWITHAES256CBCSHA384, TLSECDHEECDSAWITHAES256GCMSHA384, TLSECDHERSAWITHAES128CBCSHA, TLSECDHERSAWITHAES128CBCSHA256, TLSECDHERSAWITHAES128GCMSHA256, TLSECDHERSAWITHAES256CBCSHA, TLSECDHERSAWITHAES256CBCSHA384, TLSECDHERSAWITHAES256GCMSHA384, TLSRSAWITH3DESEDECBCSHA, TLSRSAWITHAES128CBCSHA, TLSRSAWITHAES128CBCSHA256, TLSRSAWITHAES128GCMSHA256, TLSRSAWITHAES256CBCSHA, TLSRSAWITHAES256CBCSHA256, TLSRSAWITHAES256GCMSHA384}
276}
277
278// ApplicationGatewaySslPolicyName enumerates the values for application gateway ssl policy name.
279type ApplicationGatewaySslPolicyName string
280
281const (
282	// AppGwSslPolicy20150501 ...
283	AppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501"
284	// AppGwSslPolicy20170401 ...
285	AppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401"
286	// AppGwSslPolicy20170401S ...
287	AppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S"
288)
289
290// PossibleApplicationGatewaySslPolicyNameValues returns an array of possible values for the ApplicationGatewaySslPolicyName const type.
291func PossibleApplicationGatewaySslPolicyNameValues() []ApplicationGatewaySslPolicyName {
292	return []ApplicationGatewaySslPolicyName{AppGwSslPolicy20150501, AppGwSslPolicy20170401, AppGwSslPolicy20170401S}
293}
294
295// ApplicationGatewaySslPolicyType enumerates the values for application gateway ssl policy type.
296type ApplicationGatewaySslPolicyType string
297
298const (
299	// Custom ...
300	Custom ApplicationGatewaySslPolicyType = "Custom"
301	// Predefined ...
302	Predefined ApplicationGatewaySslPolicyType = "Predefined"
303)
304
305// PossibleApplicationGatewaySslPolicyTypeValues returns an array of possible values for the ApplicationGatewaySslPolicyType const type.
306func PossibleApplicationGatewaySslPolicyTypeValues() []ApplicationGatewaySslPolicyType {
307	return []ApplicationGatewaySslPolicyType{Custom, Predefined}
308}
309
310// ApplicationGatewaySslProtocol enumerates the values for application gateway ssl protocol.
311type ApplicationGatewaySslProtocol string
312
313const (
314	// TLSv10 ...
315	TLSv10 ApplicationGatewaySslProtocol = "TLSv1_0"
316	// TLSv11 ...
317	TLSv11 ApplicationGatewaySslProtocol = "TLSv1_1"
318	// TLSv12 ...
319	TLSv12 ApplicationGatewaySslProtocol = "TLSv1_2"
320)
321
322// PossibleApplicationGatewaySslProtocolValues returns an array of possible values for the ApplicationGatewaySslProtocol const type.
323func PossibleApplicationGatewaySslProtocolValues() []ApplicationGatewaySslProtocol {
324	return []ApplicationGatewaySslProtocol{TLSv10, TLSv11, TLSv12}
325}
326
327// ApplicationGatewayTier enumerates the values for application gateway tier.
328type ApplicationGatewayTier string
329
330const (
331	// ApplicationGatewayTierStandard ...
332	ApplicationGatewayTierStandard ApplicationGatewayTier = "Standard"
333	// ApplicationGatewayTierStandardV2 ...
334	ApplicationGatewayTierStandardV2 ApplicationGatewayTier = "Standard_v2"
335	// ApplicationGatewayTierWAF ...
336	ApplicationGatewayTierWAF ApplicationGatewayTier = "WAF"
337	// ApplicationGatewayTierWAFV2 ...
338	ApplicationGatewayTierWAFV2 ApplicationGatewayTier = "WAF_v2"
339)
340
341// PossibleApplicationGatewayTierValues returns an array of possible values for the ApplicationGatewayTier const type.
342func PossibleApplicationGatewayTierValues() []ApplicationGatewayTier {
343	return []ApplicationGatewayTier{ApplicationGatewayTierStandard, ApplicationGatewayTierStandardV2, ApplicationGatewayTierWAF, ApplicationGatewayTierWAFV2}
344}
345
346// AssociationType enumerates the values for association type.
347type AssociationType string
348
349const (
350	// Associated ...
351	Associated AssociationType = "Associated"
352	// Contains ...
353	Contains AssociationType = "Contains"
354)
355
356// PossibleAssociationTypeValues returns an array of possible values for the AssociationType const type.
357func PossibleAssociationTypeValues() []AssociationType {
358	return []AssociationType{Associated, Contains}
359}
360
361// AuthenticationMethod enumerates the values for authentication method.
362type AuthenticationMethod string
363
364const (
365	// EAPMSCHAPv2 ...
366	EAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2"
367	// EAPTLS ...
368	EAPTLS AuthenticationMethod = "EAPTLS"
369)
370
371// PossibleAuthenticationMethodValues returns an array of possible values for the AuthenticationMethod const type.
372func PossibleAuthenticationMethodValues() []AuthenticationMethod {
373	return []AuthenticationMethod{EAPMSCHAPv2, EAPTLS}
374}
375
376// AuthorizationUseStatus enumerates the values for authorization use status.
377type AuthorizationUseStatus string
378
379const (
380	// Available ...
381	Available AuthorizationUseStatus = "Available"
382	// InUse ...
383	InUse AuthorizationUseStatus = "InUse"
384)
385
386// PossibleAuthorizationUseStatusValues returns an array of possible values for the AuthorizationUseStatus const type.
387func PossibleAuthorizationUseStatusValues() []AuthorizationUseStatus {
388	return []AuthorizationUseStatus{Available, InUse}
389}
390
391// AzureFirewallApplicationRuleProtocolType enumerates the values for azure firewall application rule protocol
392// type.
393type AzureFirewallApplicationRuleProtocolType string
394
395const (
396	// AzureFirewallApplicationRuleProtocolTypeHTTP ...
397	AzureFirewallApplicationRuleProtocolTypeHTTP AzureFirewallApplicationRuleProtocolType = "Http"
398	// AzureFirewallApplicationRuleProtocolTypeHTTPS ...
399	AzureFirewallApplicationRuleProtocolTypeHTTPS AzureFirewallApplicationRuleProtocolType = "Https"
400	// AzureFirewallApplicationRuleProtocolTypeMssql ...
401	AzureFirewallApplicationRuleProtocolTypeMssql AzureFirewallApplicationRuleProtocolType = "Mssql"
402)
403
404// PossibleAzureFirewallApplicationRuleProtocolTypeValues returns an array of possible values for the AzureFirewallApplicationRuleProtocolType const type.
405func PossibleAzureFirewallApplicationRuleProtocolTypeValues() []AzureFirewallApplicationRuleProtocolType {
406	return []AzureFirewallApplicationRuleProtocolType{AzureFirewallApplicationRuleProtocolTypeHTTP, AzureFirewallApplicationRuleProtocolTypeHTTPS, AzureFirewallApplicationRuleProtocolTypeMssql}
407}
408
409// AzureFirewallNatRCActionType enumerates the values for azure firewall nat rc action type.
410type AzureFirewallNatRCActionType string
411
412const (
413	// Dnat ...
414	Dnat AzureFirewallNatRCActionType = "Dnat"
415	// Snat ...
416	Snat AzureFirewallNatRCActionType = "Snat"
417)
418
419// PossibleAzureFirewallNatRCActionTypeValues returns an array of possible values for the AzureFirewallNatRCActionType const type.
420func PossibleAzureFirewallNatRCActionTypeValues() []AzureFirewallNatRCActionType {
421	return []AzureFirewallNatRCActionType{Dnat, Snat}
422}
423
424// AzureFirewallNetworkRuleProtocol enumerates the values for azure firewall network rule protocol.
425type AzureFirewallNetworkRuleProtocol string
426
427const (
428	// Any ...
429	Any AzureFirewallNetworkRuleProtocol = "Any"
430	// ICMP ...
431	ICMP AzureFirewallNetworkRuleProtocol = "ICMP"
432	// TCP ...
433	TCP AzureFirewallNetworkRuleProtocol = "TCP"
434	// UDP ...
435	UDP AzureFirewallNetworkRuleProtocol = "UDP"
436)
437
438// PossibleAzureFirewallNetworkRuleProtocolValues returns an array of possible values for the AzureFirewallNetworkRuleProtocol const type.
439func PossibleAzureFirewallNetworkRuleProtocolValues() []AzureFirewallNetworkRuleProtocol {
440	return []AzureFirewallNetworkRuleProtocol{Any, ICMP, TCP, UDP}
441}
442
443// AzureFirewallRCActionType enumerates the values for azure firewall rc action type.
444type AzureFirewallRCActionType string
445
446const (
447	// AzureFirewallRCActionTypeAllow ...
448	AzureFirewallRCActionTypeAllow AzureFirewallRCActionType = "Allow"
449	// AzureFirewallRCActionTypeDeny ...
450	AzureFirewallRCActionTypeDeny AzureFirewallRCActionType = "Deny"
451)
452
453// PossibleAzureFirewallRCActionTypeValues returns an array of possible values for the AzureFirewallRCActionType const type.
454func PossibleAzureFirewallRCActionTypeValues() []AzureFirewallRCActionType {
455	return []AzureFirewallRCActionType{AzureFirewallRCActionTypeAllow, AzureFirewallRCActionTypeDeny}
456}
457
458// AzureFirewallSkuName enumerates the values for azure firewall sku name.
459type AzureFirewallSkuName string
460
461const (
462	// AZFWHub ...
463	AZFWHub AzureFirewallSkuName = "AZFW_Hub"
464	// AZFWVNet ...
465	AZFWVNet AzureFirewallSkuName = "AZFW_VNet"
466)
467
468// PossibleAzureFirewallSkuNameValues returns an array of possible values for the AzureFirewallSkuName const type.
469func PossibleAzureFirewallSkuNameValues() []AzureFirewallSkuName {
470	return []AzureFirewallSkuName{AZFWHub, AZFWVNet}
471}
472
473// AzureFirewallSkuTier enumerates the values for azure firewall sku tier.
474type AzureFirewallSkuTier string
475
476const (
477	// Standard ...
478	Standard AzureFirewallSkuTier = "Standard"
479)
480
481// PossibleAzureFirewallSkuTierValues returns an array of possible values for the AzureFirewallSkuTier const type.
482func PossibleAzureFirewallSkuTierValues() []AzureFirewallSkuTier {
483	return []AzureFirewallSkuTier{Standard}
484}
485
486// AzureFirewallThreatIntelMode enumerates the values for azure firewall threat intel mode.
487type AzureFirewallThreatIntelMode string
488
489const (
490	// AzureFirewallThreatIntelModeAlert ...
491	AzureFirewallThreatIntelModeAlert AzureFirewallThreatIntelMode = "Alert"
492	// AzureFirewallThreatIntelModeDeny ...
493	AzureFirewallThreatIntelModeDeny AzureFirewallThreatIntelMode = "Deny"
494	// AzureFirewallThreatIntelModeOff ...
495	AzureFirewallThreatIntelModeOff AzureFirewallThreatIntelMode = "Off"
496)
497
498// PossibleAzureFirewallThreatIntelModeValues returns an array of possible values for the AzureFirewallThreatIntelMode const type.
499func PossibleAzureFirewallThreatIntelModeValues() []AzureFirewallThreatIntelMode {
500	return []AzureFirewallThreatIntelMode{AzureFirewallThreatIntelModeAlert, AzureFirewallThreatIntelModeDeny, AzureFirewallThreatIntelModeOff}
501}
502
503// BastionConnectProtocol enumerates the values for bastion connect protocol.
504type BastionConnectProtocol string
505
506const (
507	// RDP ...
508	RDP BastionConnectProtocol = "RDP"
509	// SSH ...
510	SSH BastionConnectProtocol = "SSH"
511)
512
513// PossibleBastionConnectProtocolValues returns an array of possible values for the BastionConnectProtocol const type.
514func PossibleBastionConnectProtocolValues() []BastionConnectProtocol {
515	return []BastionConnectProtocol{RDP, SSH}
516}
517
518// BgpPeerState enumerates the values for bgp peer state.
519type BgpPeerState string
520
521const (
522	// BgpPeerStateConnected ...
523	BgpPeerStateConnected BgpPeerState = "Connected"
524	// BgpPeerStateConnecting ...
525	BgpPeerStateConnecting BgpPeerState = "Connecting"
526	// BgpPeerStateIdle ...
527	BgpPeerStateIdle BgpPeerState = "Idle"
528	// BgpPeerStateStopped ...
529	BgpPeerStateStopped BgpPeerState = "Stopped"
530	// BgpPeerStateUnknown ...
531	BgpPeerStateUnknown BgpPeerState = "Unknown"
532)
533
534// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
535func PossibleBgpPeerStateValues() []BgpPeerState {
536	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
537}
538
539// CircuitConnectionStatus enumerates the values for circuit connection status.
540type CircuitConnectionStatus string
541
542const (
543	// Connected ...
544	Connected CircuitConnectionStatus = "Connected"
545	// Connecting ...
546	Connecting CircuitConnectionStatus = "Connecting"
547	// Disconnected ...
548	Disconnected CircuitConnectionStatus = "Disconnected"
549)
550
551// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
552func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
553	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
554}
555
556// ConnectionMonitorEndpointFilterItemType enumerates the values for connection monitor endpoint filter item
557// type.
558type ConnectionMonitorEndpointFilterItemType string
559
560const (
561	// AgentAddress ...
562	AgentAddress ConnectionMonitorEndpointFilterItemType = "AgentAddress"
563)
564
565// PossibleConnectionMonitorEndpointFilterItemTypeValues returns an array of possible values for the ConnectionMonitorEndpointFilterItemType const type.
566func PossibleConnectionMonitorEndpointFilterItemTypeValues() []ConnectionMonitorEndpointFilterItemType {
567	return []ConnectionMonitorEndpointFilterItemType{AgentAddress}
568}
569
570// ConnectionMonitorEndpointFilterType enumerates the values for connection monitor endpoint filter type.
571type ConnectionMonitorEndpointFilterType string
572
573const (
574	// Include ...
575	Include ConnectionMonitorEndpointFilterType = "Include"
576)
577
578// PossibleConnectionMonitorEndpointFilterTypeValues returns an array of possible values for the ConnectionMonitorEndpointFilterType const type.
579func PossibleConnectionMonitorEndpointFilterTypeValues() []ConnectionMonitorEndpointFilterType {
580	return []ConnectionMonitorEndpointFilterType{Include}
581}
582
583// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
584type ConnectionMonitorSourceStatus string
585
586const (
587	// ConnectionMonitorSourceStatusActive ...
588	ConnectionMonitorSourceStatusActive ConnectionMonitorSourceStatus = "Active"
589	// ConnectionMonitorSourceStatusInactive ...
590	ConnectionMonitorSourceStatusInactive ConnectionMonitorSourceStatus = "Inactive"
591	// ConnectionMonitorSourceStatusUnknown ...
592	ConnectionMonitorSourceStatusUnknown ConnectionMonitorSourceStatus = "Unknown"
593)
594
595// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
596func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
597	return []ConnectionMonitorSourceStatus{ConnectionMonitorSourceStatusActive, ConnectionMonitorSourceStatusInactive, ConnectionMonitorSourceStatusUnknown}
598}
599
600// ConnectionMonitorTestConfigurationProtocol enumerates the values for connection monitor test configuration
601// protocol.
602type ConnectionMonitorTestConfigurationProtocol string
603
604const (
605	// ConnectionMonitorTestConfigurationProtocolHTTP ...
606	ConnectionMonitorTestConfigurationProtocolHTTP ConnectionMonitorTestConfigurationProtocol = "Http"
607	// ConnectionMonitorTestConfigurationProtocolIcmp ...
608	ConnectionMonitorTestConfigurationProtocolIcmp ConnectionMonitorTestConfigurationProtocol = "Icmp"
609	// ConnectionMonitorTestConfigurationProtocolTCP ...
610	ConnectionMonitorTestConfigurationProtocolTCP ConnectionMonitorTestConfigurationProtocol = "Tcp"
611)
612
613// PossibleConnectionMonitorTestConfigurationProtocolValues returns an array of possible values for the ConnectionMonitorTestConfigurationProtocol const type.
614func PossibleConnectionMonitorTestConfigurationProtocolValues() []ConnectionMonitorTestConfigurationProtocol {
615	return []ConnectionMonitorTestConfigurationProtocol{ConnectionMonitorTestConfigurationProtocolHTTP, ConnectionMonitorTestConfigurationProtocolIcmp, ConnectionMonitorTestConfigurationProtocolTCP}
616}
617
618// ConnectionMonitorType enumerates the values for connection monitor type.
619type ConnectionMonitorType string
620
621const (
622	// MultiEndpoint ...
623	MultiEndpoint ConnectionMonitorType = "MultiEndpoint"
624	// SingleSourceDestination ...
625	SingleSourceDestination ConnectionMonitorType = "SingleSourceDestination"
626)
627
628// PossibleConnectionMonitorTypeValues returns an array of possible values for the ConnectionMonitorType const type.
629func PossibleConnectionMonitorTypeValues() []ConnectionMonitorType {
630	return []ConnectionMonitorType{MultiEndpoint, SingleSourceDestination}
631}
632
633// ConnectionState enumerates the values for connection state.
634type ConnectionState string
635
636const (
637	// ConnectionStateReachable ...
638	ConnectionStateReachable ConnectionState = "Reachable"
639	// ConnectionStateUnknown ...
640	ConnectionStateUnknown ConnectionState = "Unknown"
641	// ConnectionStateUnreachable ...
642	ConnectionStateUnreachable ConnectionState = "Unreachable"
643)
644
645// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
646func PossibleConnectionStateValues() []ConnectionState {
647	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
648}
649
650// ConnectionStatus enumerates the values for connection status.
651type ConnectionStatus string
652
653const (
654	// ConnectionStatusConnected ...
655	ConnectionStatusConnected ConnectionStatus = "Connected"
656	// ConnectionStatusDegraded ...
657	ConnectionStatusDegraded ConnectionStatus = "Degraded"
658	// ConnectionStatusDisconnected ...
659	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
660	// ConnectionStatusUnknown ...
661	ConnectionStatusUnknown ConnectionStatus = "Unknown"
662)
663
664// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
665func PossibleConnectionStatusValues() []ConnectionStatus {
666	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
667}
668
669// DdosCustomPolicyProtocol enumerates the values for ddos custom policy protocol.
670type DdosCustomPolicyProtocol string
671
672const (
673	// DdosCustomPolicyProtocolSyn ...
674	DdosCustomPolicyProtocolSyn DdosCustomPolicyProtocol = "Syn"
675	// DdosCustomPolicyProtocolTCP ...
676	DdosCustomPolicyProtocolTCP DdosCustomPolicyProtocol = "Tcp"
677	// DdosCustomPolicyProtocolUDP ...
678	DdosCustomPolicyProtocolUDP DdosCustomPolicyProtocol = "Udp"
679)
680
681// PossibleDdosCustomPolicyProtocolValues returns an array of possible values for the DdosCustomPolicyProtocol const type.
682func PossibleDdosCustomPolicyProtocolValues() []DdosCustomPolicyProtocol {
683	return []DdosCustomPolicyProtocol{DdosCustomPolicyProtocolSyn, DdosCustomPolicyProtocolTCP, DdosCustomPolicyProtocolUDP}
684}
685
686// DdosCustomPolicyTriggerSensitivityOverride enumerates the values for ddos custom policy trigger sensitivity
687// override.
688type DdosCustomPolicyTriggerSensitivityOverride string
689
690const (
691	// Default ...
692	Default DdosCustomPolicyTriggerSensitivityOverride = "Default"
693	// High ...
694	High DdosCustomPolicyTriggerSensitivityOverride = "High"
695	// Low ...
696	Low DdosCustomPolicyTriggerSensitivityOverride = "Low"
697	// Relaxed ...
698	Relaxed DdosCustomPolicyTriggerSensitivityOverride = "Relaxed"
699)
700
701// PossibleDdosCustomPolicyTriggerSensitivityOverrideValues returns an array of possible values for the DdosCustomPolicyTriggerSensitivityOverride const type.
702func PossibleDdosCustomPolicyTriggerSensitivityOverrideValues() []DdosCustomPolicyTriggerSensitivityOverride {
703	return []DdosCustomPolicyTriggerSensitivityOverride{Default, High, Low, Relaxed}
704}
705
706// DdosSettingsProtectionCoverage enumerates the values for ddos settings protection coverage.
707type DdosSettingsProtectionCoverage string
708
709const (
710	// DdosSettingsProtectionCoverageBasic ...
711	DdosSettingsProtectionCoverageBasic DdosSettingsProtectionCoverage = "Basic"
712	// DdosSettingsProtectionCoverageStandard ...
713	DdosSettingsProtectionCoverageStandard DdosSettingsProtectionCoverage = "Standard"
714)
715
716// PossibleDdosSettingsProtectionCoverageValues returns an array of possible values for the DdosSettingsProtectionCoverage const type.
717func PossibleDdosSettingsProtectionCoverageValues() []DdosSettingsProtectionCoverage {
718	return []DdosSettingsProtectionCoverage{DdosSettingsProtectionCoverageBasic, DdosSettingsProtectionCoverageStandard}
719}
720
721// DhGroup enumerates the values for dh group.
722type DhGroup string
723
724const (
725	// DHGroup1 ...
726	DHGroup1 DhGroup = "DHGroup1"
727	// DHGroup14 ...
728	DHGroup14 DhGroup = "DHGroup14"
729	// DHGroup2 ...
730	DHGroup2 DhGroup = "DHGroup2"
731	// DHGroup2048 ...
732	DHGroup2048 DhGroup = "DHGroup2048"
733	// DHGroup24 ...
734	DHGroup24 DhGroup = "DHGroup24"
735	// ECP256 ...
736	ECP256 DhGroup = "ECP256"
737	// ECP384 ...
738	ECP384 DhGroup = "ECP384"
739	// None ...
740	None DhGroup = "None"
741)
742
743// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
744func PossibleDhGroupValues() []DhGroup {
745	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
746}
747
748// Direction enumerates the values for direction.
749type Direction string
750
751const (
752	// Inbound ...
753	Inbound Direction = "Inbound"
754	// Outbound ...
755	Outbound Direction = "Outbound"
756)
757
758// PossibleDirectionValues returns an array of possible values for the Direction const type.
759func PossibleDirectionValues() []Direction {
760	return []Direction{Inbound, Outbound}
761}
762
763// EffectiveRouteSource enumerates the values for effective route source.
764type EffectiveRouteSource string
765
766const (
767	// EffectiveRouteSourceDefault ...
768	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
769	// EffectiveRouteSourceUnknown ...
770	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
771	// EffectiveRouteSourceUser ...
772	EffectiveRouteSourceUser EffectiveRouteSource = "User"
773	// EffectiveRouteSourceVirtualNetworkGateway ...
774	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
775)
776
777// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
778func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
779	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
780}
781
782// EffectiveRouteState enumerates the values for effective route state.
783type EffectiveRouteState string
784
785const (
786	// Active ...
787	Active EffectiveRouteState = "Active"
788	// Invalid ...
789	Invalid EffectiveRouteState = "Invalid"
790)
791
792// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
793func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
794	return []EffectiveRouteState{Active, Invalid}
795}
796
797// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
798type EffectiveSecurityRuleProtocol string
799
800const (
801	// EffectiveSecurityRuleProtocolAll ...
802	EffectiveSecurityRuleProtocolAll EffectiveSecurityRuleProtocol = "All"
803	// EffectiveSecurityRuleProtocolTCP ...
804	EffectiveSecurityRuleProtocolTCP EffectiveSecurityRuleProtocol = "Tcp"
805	// EffectiveSecurityRuleProtocolUDP ...
806	EffectiveSecurityRuleProtocolUDP EffectiveSecurityRuleProtocol = "Udp"
807)
808
809// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
810func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
811	return []EffectiveSecurityRuleProtocol{EffectiveSecurityRuleProtocolAll, EffectiveSecurityRuleProtocolTCP, EffectiveSecurityRuleProtocolUDP}
812}
813
814// EvaluationState enumerates the values for evaluation state.
815type EvaluationState string
816
817const (
818	// Completed ...
819	Completed EvaluationState = "Completed"
820	// InProgress ...
821	InProgress EvaluationState = "InProgress"
822	// NotStarted ...
823	NotStarted EvaluationState = "NotStarted"
824)
825
826// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
827func PossibleEvaluationStateValues() []EvaluationState {
828	return []EvaluationState{Completed, InProgress, NotStarted}
829}
830
831// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
832// peering advertised public prefix state.
833type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
834
835const (
836	// Configured ...
837	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
838	// Configuring ...
839	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
840	// NotConfigured ...
841	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
842	// ValidationNeeded ...
843	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
844)
845
846// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
847func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
848	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
849}
850
851// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
852type ExpressRouteCircuitPeeringState string
853
854const (
855	// ExpressRouteCircuitPeeringStateDisabled ...
856	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
857	// ExpressRouteCircuitPeeringStateEnabled ...
858	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
859)
860
861// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
862func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
863	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
864}
865
866// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
867type ExpressRouteCircuitSkuFamily string
868
869const (
870	// MeteredData ...
871	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
872	// UnlimitedData ...
873	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
874)
875
876// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
877func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
878	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
879}
880
881// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
882type ExpressRouteCircuitSkuTier string
883
884const (
885	// ExpressRouteCircuitSkuTierBasic ...
886	ExpressRouteCircuitSkuTierBasic ExpressRouteCircuitSkuTier = "Basic"
887	// ExpressRouteCircuitSkuTierLocal ...
888	ExpressRouteCircuitSkuTierLocal ExpressRouteCircuitSkuTier = "Local"
889	// ExpressRouteCircuitSkuTierPremium ...
890	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
891	// ExpressRouteCircuitSkuTierStandard ...
892	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
893)
894
895// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
896func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
897	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierBasic, ExpressRouteCircuitSkuTierLocal, ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
898}
899
900// ExpressRouteLinkAdminState enumerates the values for express route link admin state.
901type ExpressRouteLinkAdminState string
902
903const (
904	// ExpressRouteLinkAdminStateDisabled ...
905	ExpressRouteLinkAdminStateDisabled ExpressRouteLinkAdminState = "Disabled"
906	// ExpressRouteLinkAdminStateEnabled ...
907	ExpressRouteLinkAdminStateEnabled ExpressRouteLinkAdminState = "Enabled"
908)
909
910// PossibleExpressRouteLinkAdminStateValues returns an array of possible values for the ExpressRouteLinkAdminState const type.
911func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState {
912	return []ExpressRouteLinkAdminState{ExpressRouteLinkAdminStateDisabled, ExpressRouteLinkAdminStateEnabled}
913}
914
915// ExpressRouteLinkConnectorType enumerates the values for express route link connector type.
916type ExpressRouteLinkConnectorType string
917
918const (
919	// LC ...
920	LC ExpressRouteLinkConnectorType = "LC"
921	// SC ...
922	SC ExpressRouteLinkConnectorType = "SC"
923)
924
925// PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type.
926func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType {
927	return []ExpressRouteLinkConnectorType{LC, SC}
928}
929
930// ExpressRouteLinkMacSecCipher enumerates the values for express route link mac sec cipher.
931type ExpressRouteLinkMacSecCipher string
932
933const (
934	// GcmAes128 ...
935	GcmAes128 ExpressRouteLinkMacSecCipher = "gcm-aes-128"
936	// GcmAes256 ...
937	GcmAes256 ExpressRouteLinkMacSecCipher = "gcm-aes-256"
938)
939
940// PossibleExpressRouteLinkMacSecCipherValues returns an array of possible values for the ExpressRouteLinkMacSecCipher const type.
941func PossibleExpressRouteLinkMacSecCipherValues() []ExpressRouteLinkMacSecCipher {
942	return []ExpressRouteLinkMacSecCipher{GcmAes128, GcmAes256}
943}
944
945// ExpressRoutePeeringState enumerates the values for express route peering state.
946type ExpressRoutePeeringState string
947
948const (
949	// ExpressRoutePeeringStateDisabled ...
950	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
951	// ExpressRoutePeeringStateEnabled ...
952	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
953)
954
955// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
956func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
957	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
958}
959
960// ExpressRoutePeeringType enumerates the values for express route peering type.
961type ExpressRoutePeeringType string
962
963const (
964	// AzurePrivatePeering ...
965	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
966	// AzurePublicPeering ...
967	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
968	// MicrosoftPeering ...
969	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
970)
971
972// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
973func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
974	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
975}
976
977// ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation.
978type ExpressRoutePortsEncapsulation string
979
980const (
981	// Dot1Q ...
982	Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q"
983	// QinQ ...
984	QinQ ExpressRoutePortsEncapsulation = "QinQ"
985)
986
987// PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type.
988func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation {
989	return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ}
990}
991
992// FirewallPolicyFilterRuleActionType enumerates the values for firewall policy filter rule action type.
993type FirewallPolicyFilterRuleActionType string
994
995const (
996	// FirewallPolicyFilterRuleActionTypeAllow ...
997	FirewallPolicyFilterRuleActionTypeAllow FirewallPolicyFilterRuleActionType = "Allow"
998	// FirewallPolicyFilterRuleActionTypeDeny ...
999	FirewallPolicyFilterRuleActionTypeDeny FirewallPolicyFilterRuleActionType = "Deny"
1000)
1001
1002// PossibleFirewallPolicyFilterRuleActionTypeValues returns an array of possible values for the FirewallPolicyFilterRuleActionType const type.
1003func PossibleFirewallPolicyFilterRuleActionTypeValues() []FirewallPolicyFilterRuleActionType {
1004	return []FirewallPolicyFilterRuleActionType{FirewallPolicyFilterRuleActionTypeAllow, FirewallPolicyFilterRuleActionTypeDeny}
1005}
1006
1007// FirewallPolicyNatRuleActionType enumerates the values for firewall policy nat rule action type.
1008type FirewallPolicyNatRuleActionType string
1009
1010const (
1011	// DNAT ...
1012	DNAT FirewallPolicyNatRuleActionType = "DNAT"
1013)
1014
1015// PossibleFirewallPolicyNatRuleActionTypeValues returns an array of possible values for the FirewallPolicyNatRuleActionType const type.
1016func PossibleFirewallPolicyNatRuleActionTypeValues() []FirewallPolicyNatRuleActionType {
1017	return []FirewallPolicyNatRuleActionType{DNAT}
1018}
1019
1020// FirewallPolicyRuleConditionApplicationProtocolType enumerates the values for firewall policy rule condition
1021// application protocol type.
1022type FirewallPolicyRuleConditionApplicationProtocolType string
1023
1024const (
1025	// FirewallPolicyRuleConditionApplicationProtocolTypeHTTP ...
1026	FirewallPolicyRuleConditionApplicationProtocolTypeHTTP FirewallPolicyRuleConditionApplicationProtocolType = "Http"
1027	// FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS ...
1028	FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS FirewallPolicyRuleConditionApplicationProtocolType = "Https"
1029)
1030
1031// PossibleFirewallPolicyRuleConditionApplicationProtocolTypeValues returns an array of possible values for the FirewallPolicyRuleConditionApplicationProtocolType const type.
1032func PossibleFirewallPolicyRuleConditionApplicationProtocolTypeValues() []FirewallPolicyRuleConditionApplicationProtocolType {
1033	return []FirewallPolicyRuleConditionApplicationProtocolType{FirewallPolicyRuleConditionApplicationProtocolTypeHTTP, FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS}
1034}
1035
1036// FirewallPolicyRuleConditionNetworkProtocol enumerates the values for firewall policy rule condition network
1037// protocol.
1038type FirewallPolicyRuleConditionNetworkProtocol string
1039
1040const (
1041	// FirewallPolicyRuleConditionNetworkProtocolAny ...
1042	FirewallPolicyRuleConditionNetworkProtocolAny FirewallPolicyRuleConditionNetworkProtocol = "Any"
1043	// FirewallPolicyRuleConditionNetworkProtocolICMP ...
1044	FirewallPolicyRuleConditionNetworkProtocolICMP FirewallPolicyRuleConditionNetworkProtocol = "ICMP"
1045	// FirewallPolicyRuleConditionNetworkProtocolTCP ...
1046	FirewallPolicyRuleConditionNetworkProtocolTCP FirewallPolicyRuleConditionNetworkProtocol = "TCP"
1047	// FirewallPolicyRuleConditionNetworkProtocolUDP ...
1048	FirewallPolicyRuleConditionNetworkProtocolUDP FirewallPolicyRuleConditionNetworkProtocol = "UDP"
1049)
1050
1051// PossibleFirewallPolicyRuleConditionNetworkProtocolValues returns an array of possible values for the FirewallPolicyRuleConditionNetworkProtocol const type.
1052func PossibleFirewallPolicyRuleConditionNetworkProtocolValues() []FirewallPolicyRuleConditionNetworkProtocol {
1053	return []FirewallPolicyRuleConditionNetworkProtocol{FirewallPolicyRuleConditionNetworkProtocolAny, FirewallPolicyRuleConditionNetworkProtocolICMP, FirewallPolicyRuleConditionNetworkProtocolTCP, FirewallPolicyRuleConditionNetworkProtocolUDP}
1054}
1055
1056// FlowLogFormatType enumerates the values for flow log format type.
1057type FlowLogFormatType string
1058
1059const (
1060	// JSON ...
1061	JSON FlowLogFormatType = "JSON"
1062)
1063
1064// PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type.
1065func PossibleFlowLogFormatTypeValues() []FlowLogFormatType {
1066	return []FlowLogFormatType{JSON}
1067}
1068
1069// HTTPConfigurationMethod enumerates the values for http configuration method.
1070type HTTPConfigurationMethod string
1071
1072const (
1073	// Get ...
1074	Get HTTPConfigurationMethod = "Get"
1075	// Post ...
1076	Post HTTPConfigurationMethod = "Post"
1077)
1078
1079// PossibleHTTPConfigurationMethodValues returns an array of possible values for the HTTPConfigurationMethod const type.
1080func PossibleHTTPConfigurationMethodValues() []HTTPConfigurationMethod {
1081	return []HTTPConfigurationMethod{Get, Post}
1082}
1083
1084// HTTPMethod enumerates the values for http method.
1085type HTTPMethod string
1086
1087const (
1088	// HTTPMethodGet ...
1089	HTTPMethodGet HTTPMethod = "Get"
1090)
1091
1092// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
1093func PossibleHTTPMethodValues() []HTTPMethod {
1094	return []HTTPMethod{HTTPMethodGet}
1095}
1096
1097// HubVirtualNetworkConnectionStatus enumerates the values for hub virtual network connection status.
1098type HubVirtualNetworkConnectionStatus string
1099
1100const (
1101	// HubVirtualNetworkConnectionStatusConnected ...
1102	HubVirtualNetworkConnectionStatusConnected HubVirtualNetworkConnectionStatus = "Connected"
1103	// HubVirtualNetworkConnectionStatusConnecting ...
1104	HubVirtualNetworkConnectionStatusConnecting HubVirtualNetworkConnectionStatus = "Connecting"
1105	// HubVirtualNetworkConnectionStatusNotConnected ...
1106	HubVirtualNetworkConnectionStatusNotConnected HubVirtualNetworkConnectionStatus = "NotConnected"
1107	// HubVirtualNetworkConnectionStatusUnknown ...
1108	HubVirtualNetworkConnectionStatusUnknown HubVirtualNetworkConnectionStatus = "Unknown"
1109)
1110
1111// PossibleHubVirtualNetworkConnectionStatusValues returns an array of possible values for the HubVirtualNetworkConnectionStatus const type.
1112func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnectionStatus {
1113	return []HubVirtualNetworkConnectionStatus{HubVirtualNetworkConnectionStatusConnected, HubVirtualNetworkConnectionStatusConnecting, HubVirtualNetworkConnectionStatusNotConnected, HubVirtualNetworkConnectionStatusUnknown}
1114}
1115
1116// IkeEncryption enumerates the values for ike encryption.
1117type IkeEncryption string
1118
1119const (
1120	// AES128 ...
1121	AES128 IkeEncryption = "AES128"
1122	// AES192 ...
1123	AES192 IkeEncryption = "AES192"
1124	// AES256 ...
1125	AES256 IkeEncryption = "AES256"
1126	// DES ...
1127	DES IkeEncryption = "DES"
1128	// DES3 ...
1129	DES3 IkeEncryption = "DES3"
1130	// GCMAES128 ...
1131	GCMAES128 IkeEncryption = "GCMAES128"
1132	// GCMAES256 ...
1133	GCMAES256 IkeEncryption = "GCMAES256"
1134)
1135
1136// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
1137func PossibleIkeEncryptionValues() []IkeEncryption {
1138	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
1139}
1140
1141// IkeIntegrity enumerates the values for ike integrity.
1142type IkeIntegrity string
1143
1144const (
1145	// IkeIntegrityGCMAES128 ...
1146	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
1147	// IkeIntegrityGCMAES256 ...
1148	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
1149	// IkeIntegrityMD5 ...
1150	IkeIntegrityMD5 IkeIntegrity = "MD5"
1151	// IkeIntegritySHA1 ...
1152	IkeIntegritySHA1 IkeIntegrity = "SHA1"
1153	// IkeIntegritySHA256 ...
1154	IkeIntegritySHA256 IkeIntegrity = "SHA256"
1155	// IkeIntegritySHA384 ...
1156	IkeIntegritySHA384 IkeIntegrity = "SHA384"
1157)
1158
1159// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
1160func PossibleIkeIntegrityValues() []IkeIntegrity {
1161	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
1162}
1163
1164// IPAllocationMethod enumerates the values for ip allocation method.
1165type IPAllocationMethod string
1166
1167const (
1168	// Dynamic ...
1169	Dynamic IPAllocationMethod = "Dynamic"
1170	// Static ...
1171	Static IPAllocationMethod = "Static"
1172)
1173
1174// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
1175func PossibleIPAllocationMethodValues() []IPAllocationMethod {
1176	return []IPAllocationMethod{Dynamic, Static}
1177}
1178
1179// IPFlowProtocol enumerates the values for ip flow protocol.
1180type IPFlowProtocol string
1181
1182const (
1183	// IPFlowProtocolTCP ...
1184	IPFlowProtocolTCP IPFlowProtocol = "TCP"
1185	// IPFlowProtocolUDP ...
1186	IPFlowProtocolUDP IPFlowProtocol = "UDP"
1187)
1188
1189// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
1190func PossibleIPFlowProtocolValues() []IPFlowProtocol {
1191	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
1192}
1193
1194// IpsecEncryption enumerates the values for ipsec encryption.
1195type IpsecEncryption string
1196
1197const (
1198	// IpsecEncryptionAES128 ...
1199	IpsecEncryptionAES128 IpsecEncryption = "AES128"
1200	// IpsecEncryptionAES192 ...
1201	IpsecEncryptionAES192 IpsecEncryption = "AES192"
1202	// IpsecEncryptionAES256 ...
1203	IpsecEncryptionAES256 IpsecEncryption = "AES256"
1204	// IpsecEncryptionDES ...
1205	IpsecEncryptionDES IpsecEncryption = "DES"
1206	// IpsecEncryptionDES3 ...
1207	IpsecEncryptionDES3 IpsecEncryption = "DES3"
1208	// IpsecEncryptionGCMAES128 ...
1209	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
1210	// IpsecEncryptionGCMAES192 ...
1211	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
1212	// IpsecEncryptionGCMAES256 ...
1213	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
1214	// IpsecEncryptionNone ...
1215	IpsecEncryptionNone IpsecEncryption = "None"
1216)
1217
1218// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
1219func PossibleIpsecEncryptionValues() []IpsecEncryption {
1220	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
1221}
1222
1223// IpsecIntegrity enumerates the values for ipsec integrity.
1224type IpsecIntegrity string
1225
1226const (
1227	// IpsecIntegrityGCMAES128 ...
1228	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
1229	// IpsecIntegrityGCMAES192 ...
1230	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
1231	// IpsecIntegrityGCMAES256 ...
1232	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
1233	// IpsecIntegrityMD5 ...
1234	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
1235	// IpsecIntegritySHA1 ...
1236	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
1237	// IpsecIntegritySHA256 ...
1238	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
1239)
1240
1241// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
1242func PossibleIpsecIntegrityValues() []IpsecIntegrity {
1243	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
1244}
1245
1246// IPVersion enumerates the values for ip version.
1247type IPVersion string
1248
1249const (
1250	// IPv4 ...
1251	IPv4 IPVersion = "IPv4"
1252	// IPv6 ...
1253	IPv6 IPVersion = "IPv6"
1254)
1255
1256// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
1257func PossibleIPVersionValues() []IPVersion {
1258	return []IPVersion{IPv4, IPv6}
1259}
1260
1261// IssueType enumerates the values for issue type.
1262type IssueType string
1263
1264const (
1265	// IssueTypeAgentStopped ...
1266	IssueTypeAgentStopped IssueType = "AgentStopped"
1267	// IssueTypeDNSResolution ...
1268	IssueTypeDNSResolution IssueType = "DnsResolution"
1269	// IssueTypeGuestFirewall ...
1270	IssueTypeGuestFirewall IssueType = "GuestFirewall"
1271	// IssueTypeNetworkSecurityRule ...
1272	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
1273	// IssueTypePlatform ...
1274	IssueTypePlatform IssueType = "Platform"
1275	// IssueTypePortThrottled ...
1276	IssueTypePortThrottled IssueType = "PortThrottled"
1277	// IssueTypeSocketBind ...
1278	IssueTypeSocketBind IssueType = "SocketBind"
1279	// IssueTypeUnknown ...
1280	IssueTypeUnknown IssueType = "Unknown"
1281	// IssueTypeUserDefinedRoute ...
1282	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
1283)
1284
1285// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
1286func PossibleIssueTypeValues() []IssueType {
1287	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
1288}
1289
1290// LoadBalancerOutboundRuleProtocol enumerates the values for load balancer outbound rule protocol.
1291type LoadBalancerOutboundRuleProtocol string
1292
1293const (
1294	// LoadBalancerOutboundRuleProtocolAll ...
1295	LoadBalancerOutboundRuleProtocolAll LoadBalancerOutboundRuleProtocol = "All"
1296	// LoadBalancerOutboundRuleProtocolTCP ...
1297	LoadBalancerOutboundRuleProtocolTCP LoadBalancerOutboundRuleProtocol = "Tcp"
1298	// LoadBalancerOutboundRuleProtocolUDP ...
1299	LoadBalancerOutboundRuleProtocolUDP LoadBalancerOutboundRuleProtocol = "Udp"
1300)
1301
1302// PossibleLoadBalancerOutboundRuleProtocolValues returns an array of possible values for the LoadBalancerOutboundRuleProtocol const type.
1303func PossibleLoadBalancerOutboundRuleProtocolValues() []LoadBalancerOutboundRuleProtocol {
1304	return []LoadBalancerOutboundRuleProtocol{LoadBalancerOutboundRuleProtocolAll, LoadBalancerOutboundRuleProtocolTCP, LoadBalancerOutboundRuleProtocolUDP}
1305}
1306
1307// LoadBalancerSkuName enumerates the values for load balancer sku name.
1308type LoadBalancerSkuName string
1309
1310const (
1311	// LoadBalancerSkuNameBasic ...
1312	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
1313	// LoadBalancerSkuNameStandard ...
1314	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
1315)
1316
1317// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
1318func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
1319	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
1320}
1321
1322// LoadDistribution enumerates the values for load distribution.
1323type LoadDistribution string
1324
1325const (
1326	// LoadDistributionDefault ...
1327	LoadDistributionDefault LoadDistribution = "Default"
1328	// LoadDistributionSourceIP ...
1329	LoadDistributionSourceIP LoadDistribution = "SourceIP"
1330	// LoadDistributionSourceIPProtocol ...
1331	LoadDistributionSourceIPProtocol LoadDistribution = "SourceIPProtocol"
1332)
1333
1334// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
1335func PossibleLoadDistributionValues() []LoadDistribution {
1336	return []LoadDistribution{LoadDistributionDefault, LoadDistributionSourceIP, LoadDistributionSourceIPProtocol}
1337}
1338
1339// ManagedRuleEnabledState enumerates the values for managed rule enabled state.
1340type ManagedRuleEnabledState string
1341
1342const (
1343	// ManagedRuleEnabledStateDisabled ...
1344	ManagedRuleEnabledStateDisabled ManagedRuleEnabledState = "Disabled"
1345)
1346
1347// PossibleManagedRuleEnabledStateValues returns an array of possible values for the ManagedRuleEnabledState const type.
1348func PossibleManagedRuleEnabledStateValues() []ManagedRuleEnabledState {
1349	return []ManagedRuleEnabledState{ManagedRuleEnabledStateDisabled}
1350}
1351
1352// NatGatewaySkuName enumerates the values for nat gateway sku name.
1353type NatGatewaySkuName string
1354
1355const (
1356	// NatGatewaySkuNameStandard ...
1357	NatGatewaySkuNameStandard NatGatewaySkuName = "Standard"
1358)
1359
1360// PossibleNatGatewaySkuNameValues returns an array of possible values for the NatGatewaySkuName const type.
1361func PossibleNatGatewaySkuNameValues() []NatGatewaySkuName {
1362	return []NatGatewaySkuName{NatGatewaySkuNameStandard}
1363}
1364
1365// NextHopType enumerates the values for next hop type.
1366type NextHopType string
1367
1368const (
1369	// NextHopTypeHyperNetGateway ...
1370	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
1371	// NextHopTypeInternet ...
1372	NextHopTypeInternet NextHopType = "Internet"
1373	// NextHopTypeNone ...
1374	NextHopTypeNone NextHopType = "None"
1375	// NextHopTypeVirtualAppliance ...
1376	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
1377	// NextHopTypeVirtualNetworkGateway ...
1378	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
1379	// NextHopTypeVnetLocal ...
1380	NextHopTypeVnetLocal NextHopType = "VnetLocal"
1381)
1382
1383// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
1384func PossibleNextHopTypeValues() []NextHopType {
1385	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
1386}
1387
1388// OfficeTrafficCategory enumerates the values for office traffic category.
1389type OfficeTrafficCategory string
1390
1391const (
1392	// OfficeTrafficCategoryAll ...
1393	OfficeTrafficCategoryAll OfficeTrafficCategory = "All"
1394	// OfficeTrafficCategoryNone ...
1395	OfficeTrafficCategoryNone OfficeTrafficCategory = "None"
1396	// OfficeTrafficCategoryOptimize ...
1397	OfficeTrafficCategoryOptimize OfficeTrafficCategory = "Optimize"
1398	// OfficeTrafficCategoryOptimizeAndAllow ...
1399	OfficeTrafficCategoryOptimizeAndAllow OfficeTrafficCategory = "OptimizeAndAllow"
1400)
1401
1402// PossibleOfficeTrafficCategoryValues returns an array of possible values for the OfficeTrafficCategory const type.
1403func PossibleOfficeTrafficCategoryValues() []OfficeTrafficCategory {
1404	return []OfficeTrafficCategory{OfficeTrafficCategoryAll, OfficeTrafficCategoryNone, OfficeTrafficCategoryOptimize, OfficeTrafficCategoryOptimizeAndAllow}
1405}
1406
1407// OperationStatus enumerates the values for operation status.
1408type OperationStatus string
1409
1410const (
1411	// OperationStatusFailed ...
1412	OperationStatusFailed OperationStatus = "Failed"
1413	// OperationStatusInProgress ...
1414	OperationStatusInProgress OperationStatus = "InProgress"
1415	// OperationStatusSucceeded ...
1416	OperationStatusSucceeded OperationStatus = "Succeeded"
1417)
1418
1419// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
1420func PossibleOperationStatusValues() []OperationStatus {
1421	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
1422}
1423
1424// Origin enumerates the values for origin.
1425type Origin string
1426
1427const (
1428	// OriginInbound ...
1429	OriginInbound Origin = "Inbound"
1430	// OriginLocal ...
1431	OriginLocal Origin = "Local"
1432	// OriginOutbound ...
1433	OriginOutbound Origin = "Outbound"
1434)
1435
1436// PossibleOriginValues returns an array of possible values for the Origin const type.
1437func PossibleOriginValues() []Origin {
1438	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
1439}
1440
1441// OutputType enumerates the values for output type.
1442type OutputType string
1443
1444const (
1445	// Workspace ...
1446	Workspace OutputType = "Workspace"
1447)
1448
1449// PossibleOutputTypeValues returns an array of possible values for the OutputType const type.
1450func PossibleOutputTypeValues() []OutputType {
1451	return []OutputType{Workspace}
1452}
1453
1454// OwaspCrsExclusionEntryMatchVariable enumerates the values for owasp crs exclusion entry match variable.
1455type OwaspCrsExclusionEntryMatchVariable string
1456
1457const (
1458	// RequestArgNames ...
1459	RequestArgNames OwaspCrsExclusionEntryMatchVariable = "RequestArgNames"
1460	// RequestCookieNames ...
1461	RequestCookieNames OwaspCrsExclusionEntryMatchVariable = "RequestCookieNames"
1462	// RequestHeaderNames ...
1463	RequestHeaderNames OwaspCrsExclusionEntryMatchVariable = "RequestHeaderNames"
1464)
1465
1466// PossibleOwaspCrsExclusionEntryMatchVariableValues returns an array of possible values for the OwaspCrsExclusionEntryMatchVariable const type.
1467func PossibleOwaspCrsExclusionEntryMatchVariableValues() []OwaspCrsExclusionEntryMatchVariable {
1468	return []OwaspCrsExclusionEntryMatchVariable{RequestArgNames, RequestCookieNames, RequestHeaderNames}
1469}
1470
1471// OwaspCrsExclusionEntrySelectorMatchOperator enumerates the values for owasp crs exclusion entry selector
1472// match operator.
1473type OwaspCrsExclusionEntrySelectorMatchOperator string
1474
1475const (
1476	// OwaspCrsExclusionEntrySelectorMatchOperatorContains ...
1477	OwaspCrsExclusionEntrySelectorMatchOperatorContains OwaspCrsExclusionEntrySelectorMatchOperator = "Contains"
1478	// OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith ...
1479	OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith OwaspCrsExclusionEntrySelectorMatchOperator = "EndsWith"
1480	// OwaspCrsExclusionEntrySelectorMatchOperatorEquals ...
1481	OwaspCrsExclusionEntrySelectorMatchOperatorEquals OwaspCrsExclusionEntrySelectorMatchOperator = "Equals"
1482	// OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny ...
1483	OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny OwaspCrsExclusionEntrySelectorMatchOperator = "EqualsAny"
1484	// OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith ...
1485	OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith OwaspCrsExclusionEntrySelectorMatchOperator = "StartsWith"
1486)
1487
1488// PossibleOwaspCrsExclusionEntrySelectorMatchOperatorValues returns an array of possible values for the OwaspCrsExclusionEntrySelectorMatchOperator const type.
1489func PossibleOwaspCrsExclusionEntrySelectorMatchOperatorValues() []OwaspCrsExclusionEntrySelectorMatchOperator {
1490	return []OwaspCrsExclusionEntrySelectorMatchOperator{OwaspCrsExclusionEntrySelectorMatchOperatorContains, OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith, OwaspCrsExclusionEntrySelectorMatchOperatorEquals, OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny, OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith}
1491}
1492
1493// PcError enumerates the values for pc error.
1494type PcError string
1495
1496const (
1497	// AgentStopped ...
1498	AgentStopped PcError = "AgentStopped"
1499	// CaptureFailed ...
1500	CaptureFailed PcError = "CaptureFailed"
1501	// InternalError ...
1502	InternalError PcError = "InternalError"
1503	// LocalFileFailed ...
1504	LocalFileFailed PcError = "LocalFileFailed"
1505	// StorageFailed ...
1506	StorageFailed PcError = "StorageFailed"
1507)
1508
1509// PossiblePcErrorValues returns an array of possible values for the PcError const type.
1510func PossiblePcErrorValues() []PcError {
1511	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
1512}
1513
1514// PcProtocol enumerates the values for pc protocol.
1515type PcProtocol string
1516
1517const (
1518	// PcProtocolAny ...
1519	PcProtocolAny PcProtocol = "Any"
1520	// PcProtocolTCP ...
1521	PcProtocolTCP PcProtocol = "TCP"
1522	// PcProtocolUDP ...
1523	PcProtocolUDP PcProtocol = "UDP"
1524)
1525
1526// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
1527func PossiblePcProtocolValues() []PcProtocol {
1528	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
1529}
1530
1531// PcStatus enumerates the values for pc status.
1532type PcStatus string
1533
1534const (
1535	// PcStatusError ...
1536	PcStatusError PcStatus = "Error"
1537	// PcStatusNotStarted ...
1538	PcStatusNotStarted PcStatus = "NotStarted"
1539	// PcStatusRunning ...
1540	PcStatusRunning PcStatus = "Running"
1541	// PcStatusStopped ...
1542	PcStatusStopped PcStatus = "Stopped"
1543	// PcStatusUnknown ...
1544	PcStatusUnknown PcStatus = "Unknown"
1545)
1546
1547// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
1548func PossiblePcStatusValues() []PcStatus {
1549	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
1550}
1551
1552// PfsGroup enumerates the values for pfs group.
1553type PfsGroup string
1554
1555const (
1556	// PfsGroupECP256 ...
1557	PfsGroupECP256 PfsGroup = "ECP256"
1558	// PfsGroupECP384 ...
1559	PfsGroupECP384 PfsGroup = "ECP384"
1560	// PfsGroupNone ...
1561	PfsGroupNone PfsGroup = "None"
1562	// PfsGroupPFS1 ...
1563	PfsGroupPFS1 PfsGroup = "PFS1"
1564	// PfsGroupPFS14 ...
1565	PfsGroupPFS14 PfsGroup = "PFS14"
1566	// PfsGroupPFS2 ...
1567	PfsGroupPFS2 PfsGroup = "PFS2"
1568	// PfsGroupPFS2048 ...
1569	PfsGroupPFS2048 PfsGroup = "PFS2048"
1570	// PfsGroupPFS24 ...
1571	PfsGroupPFS24 PfsGroup = "PFS24"
1572	// PfsGroupPFSMM ...
1573	PfsGroupPFSMM PfsGroup = "PFSMM"
1574)
1575
1576// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1577func PossiblePfsGroupValues() []PfsGroup {
1578	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1579}
1580
1581// PreferredIPVersion enumerates the values for preferred ip version.
1582type PreferredIPVersion string
1583
1584const (
1585	// PreferredIPVersionIPv4 ...
1586	PreferredIPVersionIPv4 PreferredIPVersion = "IPv4"
1587	// PreferredIPVersionIPv6 ...
1588	PreferredIPVersionIPv6 PreferredIPVersion = "IPv6"
1589)
1590
1591// PossiblePreferredIPVersionValues returns an array of possible values for the PreferredIPVersion const type.
1592func PossiblePreferredIPVersionValues() []PreferredIPVersion {
1593	return []PreferredIPVersion{PreferredIPVersionIPv4, PreferredIPVersionIPv6}
1594}
1595
1596// ProbeProtocol enumerates the values for probe protocol.
1597type ProbeProtocol string
1598
1599const (
1600	// ProbeProtocolHTTP ...
1601	ProbeProtocolHTTP ProbeProtocol = "Http"
1602	// ProbeProtocolHTTPS ...
1603	ProbeProtocolHTTPS ProbeProtocol = "Https"
1604	// ProbeProtocolTCP ...
1605	ProbeProtocolTCP ProbeProtocol = "Tcp"
1606)
1607
1608// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1609func PossibleProbeProtocolValues() []ProbeProtocol {
1610	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1611}
1612
1613// ProcessorArchitecture enumerates the values for processor architecture.
1614type ProcessorArchitecture string
1615
1616const (
1617	// Amd64 ...
1618	Amd64 ProcessorArchitecture = "Amd64"
1619	// X86 ...
1620	X86 ProcessorArchitecture = "X86"
1621)
1622
1623// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1624func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1625	return []ProcessorArchitecture{Amd64, X86}
1626}
1627
1628// Protocol enumerates the values for protocol.
1629type Protocol string
1630
1631const (
1632	// ProtocolHTTP ...
1633	ProtocolHTTP Protocol = "Http"
1634	// ProtocolHTTPS ...
1635	ProtocolHTTPS Protocol = "Https"
1636	// ProtocolIcmp ...
1637	ProtocolIcmp Protocol = "Icmp"
1638	// ProtocolTCP ...
1639	ProtocolTCP Protocol = "Tcp"
1640)
1641
1642// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1643func PossibleProtocolValues() []Protocol {
1644	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1645}
1646
1647// ProvisioningState enumerates the values for provisioning state.
1648type ProvisioningState string
1649
1650const (
1651	// Deleting ...
1652	Deleting ProvisioningState = "Deleting"
1653	// Failed ...
1654	Failed ProvisioningState = "Failed"
1655	// Succeeded ...
1656	Succeeded ProvisioningState = "Succeeded"
1657	// Updating ...
1658	Updating ProvisioningState = "Updating"
1659)
1660
1661// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1662func PossibleProvisioningStateValues() []ProvisioningState {
1663	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1664}
1665
1666// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1667type PublicIPAddressSkuName string
1668
1669const (
1670	// PublicIPAddressSkuNameBasic ...
1671	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1672	// PublicIPAddressSkuNameStandard ...
1673	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1674)
1675
1676// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1677func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1678	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1679}
1680
1681// PublicIPPrefixSkuName enumerates the values for public ip prefix sku name.
1682type PublicIPPrefixSkuName string
1683
1684const (
1685	// PublicIPPrefixSkuNameStandard ...
1686	PublicIPPrefixSkuNameStandard PublicIPPrefixSkuName = "Standard"
1687)
1688
1689// PossiblePublicIPPrefixSkuNameValues returns an array of possible values for the PublicIPPrefixSkuName const type.
1690func PossiblePublicIPPrefixSkuNameValues() []PublicIPPrefixSkuName {
1691	return []PublicIPPrefixSkuName{PublicIPPrefixSkuNameStandard}
1692}
1693
1694// ResourceIdentityType enumerates the values for resource identity type.
1695type ResourceIdentityType string
1696
1697const (
1698	// ResourceIdentityTypeNone ...
1699	ResourceIdentityTypeNone ResourceIdentityType = "None"
1700	// ResourceIdentityTypeSystemAssigned ...
1701	ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned"
1702	// ResourceIdentityTypeSystemAssignedUserAssigned ...
1703	ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned"
1704	// ResourceIdentityTypeUserAssigned ...
1705	ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned"
1706)
1707
1708// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type.
1709func PossibleResourceIdentityTypeValues() []ResourceIdentityType {
1710	return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned}
1711}
1712
1713// RouteNextHopType enumerates the values for route next hop type.
1714type RouteNextHopType string
1715
1716const (
1717	// RouteNextHopTypeInternet ...
1718	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1719	// RouteNextHopTypeNone ...
1720	RouteNextHopTypeNone RouteNextHopType = "None"
1721	// RouteNextHopTypeVirtualAppliance ...
1722	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1723	// RouteNextHopTypeVirtualNetworkGateway ...
1724	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1725	// RouteNextHopTypeVnetLocal ...
1726	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1727)
1728
1729// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1730func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1731	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1732}
1733
1734// RuleConditionType enumerates the values for rule condition type.
1735type RuleConditionType string
1736
1737const (
1738	// RuleConditionTypeApplicationRuleCondition ...
1739	RuleConditionTypeApplicationRuleCondition RuleConditionType = "ApplicationRuleCondition"
1740	// RuleConditionTypeFirewallPolicyRuleCondition ...
1741	RuleConditionTypeFirewallPolicyRuleCondition RuleConditionType = "FirewallPolicyRuleCondition"
1742	// RuleConditionTypeNetworkRuleCondition ...
1743	RuleConditionTypeNetworkRuleCondition RuleConditionType = "NetworkRuleCondition"
1744)
1745
1746// PossibleRuleConditionTypeValues returns an array of possible values for the RuleConditionType const type.
1747func PossibleRuleConditionTypeValues() []RuleConditionType {
1748	return []RuleConditionType{RuleConditionTypeApplicationRuleCondition, RuleConditionTypeFirewallPolicyRuleCondition, RuleConditionTypeNetworkRuleCondition}
1749}
1750
1751// RuleType enumerates the values for rule type.
1752type RuleType string
1753
1754const (
1755	// RuleTypeFirewallPolicyFilterRule ...
1756	RuleTypeFirewallPolicyFilterRule RuleType = "FirewallPolicyFilterRule"
1757	// RuleTypeFirewallPolicyNatRule ...
1758	RuleTypeFirewallPolicyNatRule RuleType = "FirewallPolicyNatRule"
1759	// RuleTypeFirewallPolicyRule ...
1760	RuleTypeFirewallPolicyRule RuleType = "FirewallPolicyRule"
1761)
1762
1763// PossibleRuleTypeValues returns an array of possible values for the RuleType const type.
1764func PossibleRuleTypeValues() []RuleType {
1765	return []RuleType{RuleTypeFirewallPolicyFilterRule, RuleTypeFirewallPolicyNatRule, RuleTypeFirewallPolicyRule}
1766}
1767
1768// SecurityRuleAccess enumerates the values for security rule access.
1769type SecurityRuleAccess string
1770
1771const (
1772	// SecurityRuleAccessAllow ...
1773	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1774	// SecurityRuleAccessDeny ...
1775	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1776)
1777
1778// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1779func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1780	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1781}
1782
1783// SecurityRuleDirection enumerates the values for security rule direction.
1784type SecurityRuleDirection string
1785
1786const (
1787	// SecurityRuleDirectionInbound ...
1788	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1789	// SecurityRuleDirectionOutbound ...
1790	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1791)
1792
1793// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1794func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1795	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1796}
1797
1798// SecurityRuleProtocol enumerates the values for security rule protocol.
1799type SecurityRuleProtocol string
1800
1801const (
1802	// SecurityRuleProtocolAh ...
1803	SecurityRuleProtocolAh SecurityRuleProtocol = "Ah"
1804	// SecurityRuleProtocolAsterisk ...
1805	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1806	// SecurityRuleProtocolEsp ...
1807	SecurityRuleProtocolEsp SecurityRuleProtocol = "Esp"
1808	// SecurityRuleProtocolIcmp ...
1809	SecurityRuleProtocolIcmp SecurityRuleProtocol = "Icmp"
1810	// SecurityRuleProtocolTCP ...
1811	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1812	// SecurityRuleProtocolUDP ...
1813	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1814)
1815
1816// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1817func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1818	return []SecurityRuleProtocol{SecurityRuleProtocolAh, SecurityRuleProtocolAsterisk, SecurityRuleProtocolEsp, SecurityRuleProtocolIcmp, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1819}
1820
1821// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1822type ServiceProviderProvisioningState string
1823
1824const (
1825	// Deprovisioning ...
1826	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1827	// NotProvisioned ...
1828	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1829	// Provisioned ...
1830	Provisioned ServiceProviderProvisioningState = "Provisioned"
1831	// Provisioning ...
1832	Provisioning ServiceProviderProvisioningState = "Provisioning"
1833)
1834
1835// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1836func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1837	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1838}
1839
1840// Severity enumerates the values for severity.
1841type Severity string
1842
1843const (
1844	// SeverityError ...
1845	SeverityError Severity = "Error"
1846	// SeverityWarning ...
1847	SeverityWarning Severity = "Warning"
1848)
1849
1850// PossibleSeverityValues returns an array of possible values for the Severity const type.
1851func PossibleSeverityValues() []Severity {
1852	return []Severity{SeverityError, SeverityWarning}
1853}
1854
1855// TransportProtocol enumerates the values for transport protocol.
1856type TransportProtocol string
1857
1858const (
1859	// TransportProtocolAll ...
1860	TransportProtocolAll TransportProtocol = "All"
1861	// TransportProtocolTCP ...
1862	TransportProtocolTCP TransportProtocol = "Tcp"
1863	// TransportProtocolUDP ...
1864	TransportProtocolUDP TransportProtocol = "Udp"
1865)
1866
1867// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1868func PossibleTransportProtocolValues() []TransportProtocol {
1869	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1870}
1871
1872// TunnelConnectionStatus enumerates the values for tunnel connection status.
1873type TunnelConnectionStatus string
1874
1875const (
1876	// TunnelConnectionStatusConnected ...
1877	TunnelConnectionStatusConnected TunnelConnectionStatus = "Connected"
1878	// TunnelConnectionStatusConnecting ...
1879	TunnelConnectionStatusConnecting TunnelConnectionStatus = "Connecting"
1880	// TunnelConnectionStatusNotConnected ...
1881	TunnelConnectionStatusNotConnected TunnelConnectionStatus = "NotConnected"
1882	// TunnelConnectionStatusUnknown ...
1883	TunnelConnectionStatusUnknown TunnelConnectionStatus = "Unknown"
1884)
1885
1886// PossibleTunnelConnectionStatusValues returns an array of possible values for the TunnelConnectionStatus const type.
1887func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus {
1888	return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown}
1889}
1890
1891// VerbosityLevel enumerates the values for verbosity level.
1892type VerbosityLevel string
1893
1894const (
1895	// Full ...
1896	Full VerbosityLevel = "Full"
1897	// Minimum ...
1898	Minimum VerbosityLevel = "Minimum"
1899	// Normal ...
1900	Normal VerbosityLevel = "Normal"
1901)
1902
1903// PossibleVerbosityLevelValues returns an array of possible values for the VerbosityLevel const type.
1904func PossibleVerbosityLevelValues() []VerbosityLevel {
1905	return []VerbosityLevel{Full, Minimum, Normal}
1906}
1907
1908// VirtualNetworkGatewayConnectionProtocol enumerates the values for virtual network gateway connection
1909// protocol.
1910type VirtualNetworkGatewayConnectionProtocol string
1911
1912const (
1913	// IKEv1 ...
1914	IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1"
1915	// IKEv2 ...
1916	IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2"
1917)
1918
1919// PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type.
1920func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol {
1921	return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2}
1922}
1923
1924// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1925type VirtualNetworkGatewayConnectionStatus string
1926
1927const (
1928	// VirtualNetworkGatewayConnectionStatusConnected ...
1929	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1930	// VirtualNetworkGatewayConnectionStatusConnecting ...
1931	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1932	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1933	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1934	// VirtualNetworkGatewayConnectionStatusUnknown ...
1935	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1936)
1937
1938// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1939func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1940	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1941}
1942
1943// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1944type VirtualNetworkGatewayConnectionType string
1945
1946const (
1947	// ExpressRoute ...
1948	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1949	// IPsec ...
1950	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1951	// Vnet2Vnet ...
1952	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1953	// VPNClient ...
1954	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1955)
1956
1957// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1958func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1959	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1960}
1961
1962// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1963type VirtualNetworkGatewaySkuName string
1964
1965const (
1966	// VirtualNetworkGatewaySkuNameBasic ...
1967	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1968	// VirtualNetworkGatewaySkuNameErGw1AZ ...
1969	VirtualNetworkGatewaySkuNameErGw1AZ VirtualNetworkGatewaySkuName = "ErGw1AZ"
1970	// VirtualNetworkGatewaySkuNameErGw2AZ ...
1971	VirtualNetworkGatewaySkuNameErGw2AZ VirtualNetworkGatewaySkuName = "ErGw2AZ"
1972	// VirtualNetworkGatewaySkuNameErGw3AZ ...
1973	VirtualNetworkGatewaySkuNameErGw3AZ VirtualNetworkGatewaySkuName = "ErGw3AZ"
1974	// VirtualNetworkGatewaySkuNameHighPerformance ...
1975	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1976	// VirtualNetworkGatewaySkuNameStandard ...
1977	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1978	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1979	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1980	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1981	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1982	// VirtualNetworkGatewaySkuNameVpnGw1AZ ...
1983	VirtualNetworkGatewaySkuNameVpnGw1AZ VirtualNetworkGatewaySkuName = "VpnGw1AZ"
1984	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1985	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1986	// VirtualNetworkGatewaySkuNameVpnGw2AZ ...
1987	VirtualNetworkGatewaySkuNameVpnGw2AZ VirtualNetworkGatewaySkuName = "VpnGw2AZ"
1988	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1989	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1990	// VirtualNetworkGatewaySkuNameVpnGw3AZ ...
1991	VirtualNetworkGatewaySkuNameVpnGw3AZ VirtualNetworkGatewaySkuName = "VpnGw3AZ"
1992	// VirtualNetworkGatewaySkuNameVpnGw4 ...
1993	VirtualNetworkGatewaySkuNameVpnGw4 VirtualNetworkGatewaySkuName = "VpnGw4"
1994	// VirtualNetworkGatewaySkuNameVpnGw4AZ ...
1995	VirtualNetworkGatewaySkuNameVpnGw4AZ VirtualNetworkGatewaySkuName = "VpnGw4AZ"
1996	// VirtualNetworkGatewaySkuNameVpnGw5 ...
1997	VirtualNetworkGatewaySkuNameVpnGw5 VirtualNetworkGatewaySkuName = "VpnGw5"
1998	// VirtualNetworkGatewaySkuNameVpnGw5AZ ...
1999	VirtualNetworkGatewaySkuNameVpnGw5AZ VirtualNetworkGatewaySkuName = "VpnGw5AZ"
2000)
2001
2002// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
2003func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
2004	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameErGw1AZ, VirtualNetworkGatewaySkuNameErGw2AZ, VirtualNetworkGatewaySkuNameErGw3AZ, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw1AZ, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw2AZ, VirtualNetworkGatewaySkuNameVpnGw3, VirtualNetworkGatewaySkuNameVpnGw3AZ, VirtualNetworkGatewaySkuNameVpnGw4, VirtualNetworkGatewaySkuNameVpnGw4AZ, VirtualNetworkGatewaySkuNameVpnGw5, VirtualNetworkGatewaySkuNameVpnGw5AZ}
2005}
2006
2007// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
2008type VirtualNetworkGatewaySkuTier string
2009
2010const (
2011	// VirtualNetworkGatewaySkuTierBasic ...
2012	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
2013	// VirtualNetworkGatewaySkuTierErGw1AZ ...
2014	VirtualNetworkGatewaySkuTierErGw1AZ VirtualNetworkGatewaySkuTier = "ErGw1AZ"
2015	// VirtualNetworkGatewaySkuTierErGw2AZ ...
2016	VirtualNetworkGatewaySkuTierErGw2AZ VirtualNetworkGatewaySkuTier = "ErGw2AZ"
2017	// VirtualNetworkGatewaySkuTierErGw3AZ ...
2018	VirtualNetworkGatewaySkuTierErGw3AZ VirtualNetworkGatewaySkuTier = "ErGw3AZ"
2019	// VirtualNetworkGatewaySkuTierHighPerformance ...
2020	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
2021	// VirtualNetworkGatewaySkuTierStandard ...
2022	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
2023	// VirtualNetworkGatewaySkuTierUltraPerformance ...
2024	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
2025	// VirtualNetworkGatewaySkuTierVpnGw1 ...
2026	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
2027	// VirtualNetworkGatewaySkuTierVpnGw1AZ ...
2028	VirtualNetworkGatewaySkuTierVpnGw1AZ VirtualNetworkGatewaySkuTier = "VpnGw1AZ"
2029	// VirtualNetworkGatewaySkuTierVpnGw2 ...
2030	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
2031	// VirtualNetworkGatewaySkuTierVpnGw2AZ ...
2032	VirtualNetworkGatewaySkuTierVpnGw2AZ VirtualNetworkGatewaySkuTier = "VpnGw2AZ"
2033	// VirtualNetworkGatewaySkuTierVpnGw3 ...
2034	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
2035	// VirtualNetworkGatewaySkuTierVpnGw3AZ ...
2036	VirtualNetworkGatewaySkuTierVpnGw3AZ VirtualNetworkGatewaySkuTier = "VpnGw3AZ"
2037	// VirtualNetworkGatewaySkuTierVpnGw4 ...
2038	VirtualNetworkGatewaySkuTierVpnGw4 VirtualNetworkGatewaySkuTier = "VpnGw4"
2039	// VirtualNetworkGatewaySkuTierVpnGw4AZ ...
2040	VirtualNetworkGatewaySkuTierVpnGw4AZ VirtualNetworkGatewaySkuTier = "VpnGw4AZ"
2041	// VirtualNetworkGatewaySkuTierVpnGw5 ...
2042	VirtualNetworkGatewaySkuTierVpnGw5 VirtualNetworkGatewaySkuTier = "VpnGw5"
2043	// VirtualNetworkGatewaySkuTierVpnGw5AZ ...
2044	VirtualNetworkGatewaySkuTierVpnGw5AZ VirtualNetworkGatewaySkuTier = "VpnGw5AZ"
2045)
2046
2047// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
2048func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
2049	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierErGw1AZ, VirtualNetworkGatewaySkuTierErGw2AZ, VirtualNetworkGatewaySkuTierErGw3AZ, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw1AZ, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw2AZ, VirtualNetworkGatewaySkuTierVpnGw3, VirtualNetworkGatewaySkuTierVpnGw3AZ, VirtualNetworkGatewaySkuTierVpnGw4, VirtualNetworkGatewaySkuTierVpnGw4AZ, VirtualNetworkGatewaySkuTierVpnGw5, VirtualNetworkGatewaySkuTierVpnGw5AZ}
2050}
2051
2052// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
2053type VirtualNetworkGatewayType string
2054
2055const (
2056	// VirtualNetworkGatewayTypeExpressRoute ...
2057	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
2058	// VirtualNetworkGatewayTypeVpn ...
2059	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
2060)
2061
2062// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
2063func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
2064	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
2065}
2066
2067// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
2068type VirtualNetworkPeeringState string
2069
2070const (
2071	// VirtualNetworkPeeringStateConnected ...
2072	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
2073	// VirtualNetworkPeeringStateDisconnected ...
2074	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
2075	// VirtualNetworkPeeringStateInitiated ...
2076	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
2077)
2078
2079// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
2080func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
2081	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
2082}
2083
2084// VirtualWanSecurityProviderType enumerates the values for virtual wan security provider type.
2085type VirtualWanSecurityProviderType string
2086
2087const (
2088	// External ...
2089	External VirtualWanSecurityProviderType = "External"
2090	// Native ...
2091	Native VirtualWanSecurityProviderType = "Native"
2092)
2093
2094// PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type.
2095func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType {
2096	return []VirtualWanSecurityProviderType{External, Native}
2097}
2098
2099// VpnAuthenticationType enumerates the values for vpn authentication type.
2100type VpnAuthenticationType string
2101
2102const (
2103	// AAD ...
2104	AAD VpnAuthenticationType = "AAD"
2105	// Certificate ...
2106	Certificate VpnAuthenticationType = "Certificate"
2107	// Radius ...
2108	Radius VpnAuthenticationType = "Radius"
2109)
2110
2111// PossibleVpnAuthenticationTypeValues returns an array of possible values for the VpnAuthenticationType const type.
2112func PossibleVpnAuthenticationTypeValues() []VpnAuthenticationType {
2113	return []VpnAuthenticationType{AAD, Certificate, Radius}
2114}
2115
2116// VpnClientProtocol enumerates the values for vpn client protocol.
2117type VpnClientProtocol string
2118
2119const (
2120	// IkeV2 ...
2121	IkeV2 VpnClientProtocol = "IkeV2"
2122	// OpenVPN ...
2123	OpenVPN VpnClientProtocol = "OpenVPN"
2124	// SSTP ...
2125	SSTP VpnClientProtocol = "SSTP"
2126)
2127
2128// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
2129func PossibleVpnClientProtocolValues() []VpnClientProtocol {
2130	return []VpnClientProtocol{IkeV2, OpenVPN, SSTP}
2131}
2132
2133// VpnConnectionStatus enumerates the values for vpn connection status.
2134type VpnConnectionStatus string
2135
2136const (
2137	// VpnConnectionStatusConnected ...
2138	VpnConnectionStatusConnected VpnConnectionStatus = "Connected"
2139	// VpnConnectionStatusConnecting ...
2140	VpnConnectionStatusConnecting VpnConnectionStatus = "Connecting"
2141	// VpnConnectionStatusNotConnected ...
2142	VpnConnectionStatusNotConnected VpnConnectionStatus = "NotConnected"
2143	// VpnConnectionStatusUnknown ...
2144	VpnConnectionStatusUnknown VpnConnectionStatus = "Unknown"
2145)
2146
2147// PossibleVpnConnectionStatusValues returns an array of possible values for the VpnConnectionStatus const type.
2148func PossibleVpnConnectionStatusValues() []VpnConnectionStatus {
2149	return []VpnConnectionStatus{VpnConnectionStatusConnected, VpnConnectionStatusConnecting, VpnConnectionStatusNotConnected, VpnConnectionStatusUnknown}
2150}
2151
2152// VpnGatewayGeneration enumerates the values for vpn gateway generation.
2153type VpnGatewayGeneration string
2154
2155const (
2156	// VpnGatewayGenerationGeneration1 ...
2157	VpnGatewayGenerationGeneration1 VpnGatewayGeneration = "Generation1"
2158	// VpnGatewayGenerationGeneration2 ...
2159	VpnGatewayGenerationGeneration2 VpnGatewayGeneration = "Generation2"
2160	// VpnGatewayGenerationNone ...
2161	VpnGatewayGenerationNone VpnGatewayGeneration = "None"
2162)
2163
2164// PossibleVpnGatewayGenerationValues returns an array of possible values for the VpnGatewayGeneration const type.
2165func PossibleVpnGatewayGenerationValues() []VpnGatewayGeneration {
2166	return []VpnGatewayGeneration{VpnGatewayGenerationGeneration1, VpnGatewayGenerationGeneration2, VpnGatewayGenerationNone}
2167}
2168
2169// VpnGatewayTunnelingProtocol enumerates the values for vpn gateway tunneling protocol.
2170type VpnGatewayTunnelingProtocol string
2171
2172const (
2173	// VpnGatewayTunnelingProtocolIkeV2 ...
2174	VpnGatewayTunnelingProtocolIkeV2 VpnGatewayTunnelingProtocol = "IkeV2"
2175	// VpnGatewayTunnelingProtocolOpenVPN ...
2176	VpnGatewayTunnelingProtocolOpenVPN VpnGatewayTunnelingProtocol = "OpenVPN"
2177)
2178
2179// PossibleVpnGatewayTunnelingProtocolValues returns an array of possible values for the VpnGatewayTunnelingProtocol const type.
2180func PossibleVpnGatewayTunnelingProtocolValues() []VpnGatewayTunnelingProtocol {
2181	return []VpnGatewayTunnelingProtocol{VpnGatewayTunnelingProtocolIkeV2, VpnGatewayTunnelingProtocolOpenVPN}
2182}
2183
2184// VpnType enumerates the values for vpn type.
2185type VpnType string
2186
2187const (
2188	// PolicyBased ...
2189	PolicyBased VpnType = "PolicyBased"
2190	// RouteBased ...
2191	RouteBased VpnType = "RouteBased"
2192)
2193
2194// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
2195func PossibleVpnTypeValues() []VpnType {
2196	return []VpnType{PolicyBased, RouteBased}
2197}
2198
2199// WebApplicationFirewallAction enumerates the values for web application firewall action.
2200type WebApplicationFirewallAction string
2201
2202const (
2203	// WebApplicationFirewallActionAllow ...
2204	WebApplicationFirewallActionAllow WebApplicationFirewallAction = "Allow"
2205	// WebApplicationFirewallActionBlock ...
2206	WebApplicationFirewallActionBlock WebApplicationFirewallAction = "Block"
2207	// WebApplicationFirewallActionLog ...
2208	WebApplicationFirewallActionLog WebApplicationFirewallAction = "Log"
2209)
2210
2211// PossibleWebApplicationFirewallActionValues returns an array of possible values for the WebApplicationFirewallAction const type.
2212func PossibleWebApplicationFirewallActionValues() []WebApplicationFirewallAction {
2213	return []WebApplicationFirewallAction{WebApplicationFirewallActionAllow, WebApplicationFirewallActionBlock, WebApplicationFirewallActionLog}
2214}
2215
2216// WebApplicationFirewallEnabledState enumerates the values for web application firewall enabled state.
2217type WebApplicationFirewallEnabledState string
2218
2219const (
2220	// WebApplicationFirewallEnabledStateDisabled ...
2221	WebApplicationFirewallEnabledStateDisabled WebApplicationFirewallEnabledState = "Disabled"
2222	// WebApplicationFirewallEnabledStateEnabled ...
2223	WebApplicationFirewallEnabledStateEnabled WebApplicationFirewallEnabledState = "Enabled"
2224)
2225
2226// PossibleWebApplicationFirewallEnabledStateValues returns an array of possible values for the WebApplicationFirewallEnabledState const type.
2227func PossibleWebApplicationFirewallEnabledStateValues() []WebApplicationFirewallEnabledState {
2228	return []WebApplicationFirewallEnabledState{WebApplicationFirewallEnabledStateDisabled, WebApplicationFirewallEnabledStateEnabled}
2229}
2230
2231// WebApplicationFirewallMatchVariable enumerates the values for web application firewall match variable.
2232type WebApplicationFirewallMatchVariable string
2233
2234const (
2235	// PostArgs ...
2236	PostArgs WebApplicationFirewallMatchVariable = "PostArgs"
2237	// QueryString ...
2238	QueryString WebApplicationFirewallMatchVariable = "QueryString"
2239	// RemoteAddr ...
2240	RemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr"
2241	// RequestBody ...
2242	RequestBody WebApplicationFirewallMatchVariable = "RequestBody"
2243	// RequestCookies ...
2244	RequestCookies WebApplicationFirewallMatchVariable = "RequestCookies"
2245	// RequestHeaders ...
2246	RequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders"
2247	// RequestMethod ...
2248	RequestMethod WebApplicationFirewallMatchVariable = "RequestMethod"
2249	// RequestURI ...
2250	RequestURI WebApplicationFirewallMatchVariable = "RequestUri"
2251)
2252
2253// PossibleWebApplicationFirewallMatchVariableValues returns an array of possible values for the WebApplicationFirewallMatchVariable const type.
2254func PossibleWebApplicationFirewallMatchVariableValues() []WebApplicationFirewallMatchVariable {
2255	return []WebApplicationFirewallMatchVariable{PostArgs, QueryString, RemoteAddr, RequestBody, RequestCookies, RequestHeaders, RequestMethod, RequestURI}
2256}
2257
2258// WebApplicationFirewallMode enumerates the values for web application firewall mode.
2259type WebApplicationFirewallMode string
2260
2261const (
2262	// WebApplicationFirewallModeDetection ...
2263	WebApplicationFirewallModeDetection WebApplicationFirewallMode = "Detection"
2264	// WebApplicationFirewallModePrevention ...
2265	WebApplicationFirewallModePrevention WebApplicationFirewallMode = "Prevention"
2266)
2267
2268// PossibleWebApplicationFirewallModeValues returns an array of possible values for the WebApplicationFirewallMode const type.
2269func PossibleWebApplicationFirewallModeValues() []WebApplicationFirewallMode {
2270	return []WebApplicationFirewallMode{WebApplicationFirewallModeDetection, WebApplicationFirewallModePrevention}
2271}
2272
2273// WebApplicationFirewallOperator enumerates the values for web application firewall operator.
2274type WebApplicationFirewallOperator string
2275
2276const (
2277	// WebApplicationFirewallOperatorBeginsWith ...
2278	WebApplicationFirewallOperatorBeginsWith WebApplicationFirewallOperator = "BeginsWith"
2279	// WebApplicationFirewallOperatorContains ...
2280	WebApplicationFirewallOperatorContains WebApplicationFirewallOperator = "Contains"
2281	// WebApplicationFirewallOperatorEndsWith ...
2282	WebApplicationFirewallOperatorEndsWith WebApplicationFirewallOperator = "EndsWith"
2283	// WebApplicationFirewallOperatorEqual ...
2284	WebApplicationFirewallOperatorEqual WebApplicationFirewallOperator = "Equal"
2285	// WebApplicationFirewallOperatorGeoMatch ...
2286	WebApplicationFirewallOperatorGeoMatch WebApplicationFirewallOperator = "GeoMatch"
2287	// WebApplicationFirewallOperatorGreaterThan ...
2288	WebApplicationFirewallOperatorGreaterThan WebApplicationFirewallOperator = "GreaterThan"
2289	// WebApplicationFirewallOperatorGreaterThanOrEqual ...
2290	WebApplicationFirewallOperatorGreaterThanOrEqual WebApplicationFirewallOperator = "GreaterThanOrEqual"
2291	// WebApplicationFirewallOperatorIPMatch ...
2292	WebApplicationFirewallOperatorIPMatch WebApplicationFirewallOperator = "IPMatch"
2293	// WebApplicationFirewallOperatorLessThan ...
2294	WebApplicationFirewallOperatorLessThan WebApplicationFirewallOperator = "LessThan"
2295	// WebApplicationFirewallOperatorLessThanOrEqual ...
2296	WebApplicationFirewallOperatorLessThanOrEqual WebApplicationFirewallOperator = "LessThanOrEqual"
2297	// WebApplicationFirewallOperatorRegex ...
2298	WebApplicationFirewallOperatorRegex WebApplicationFirewallOperator = "Regex"
2299)
2300
2301// PossibleWebApplicationFirewallOperatorValues returns an array of possible values for the WebApplicationFirewallOperator const type.
2302func PossibleWebApplicationFirewallOperatorValues() []WebApplicationFirewallOperator {
2303	return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGeoMatch, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex}
2304}
2305
2306// WebApplicationFirewallPolicyResourceState enumerates the values for web application firewall policy resource
2307// state.
2308type WebApplicationFirewallPolicyResourceState string
2309
2310const (
2311	// WebApplicationFirewallPolicyResourceStateCreating ...
2312	WebApplicationFirewallPolicyResourceStateCreating WebApplicationFirewallPolicyResourceState = "Creating"
2313	// WebApplicationFirewallPolicyResourceStateDeleting ...
2314	WebApplicationFirewallPolicyResourceStateDeleting WebApplicationFirewallPolicyResourceState = "Deleting"
2315	// WebApplicationFirewallPolicyResourceStateDisabled ...
2316	WebApplicationFirewallPolicyResourceStateDisabled WebApplicationFirewallPolicyResourceState = "Disabled"
2317	// WebApplicationFirewallPolicyResourceStateDisabling ...
2318	WebApplicationFirewallPolicyResourceStateDisabling WebApplicationFirewallPolicyResourceState = "Disabling"
2319	// WebApplicationFirewallPolicyResourceStateEnabled ...
2320	WebApplicationFirewallPolicyResourceStateEnabled WebApplicationFirewallPolicyResourceState = "Enabled"
2321	// WebApplicationFirewallPolicyResourceStateEnabling ...
2322	WebApplicationFirewallPolicyResourceStateEnabling WebApplicationFirewallPolicyResourceState = "Enabling"
2323)
2324
2325// PossibleWebApplicationFirewallPolicyResourceStateValues returns an array of possible values for the WebApplicationFirewallPolicyResourceState const type.
2326func PossibleWebApplicationFirewallPolicyResourceStateValues() []WebApplicationFirewallPolicyResourceState {
2327	return []WebApplicationFirewallPolicyResourceState{WebApplicationFirewallPolicyResourceStateCreating, WebApplicationFirewallPolicyResourceStateDeleting, WebApplicationFirewallPolicyResourceStateDisabled, WebApplicationFirewallPolicyResourceStateDisabling, WebApplicationFirewallPolicyResourceStateEnabled, WebApplicationFirewallPolicyResourceStateEnabling}
2328}
2329
2330// WebApplicationFirewallRuleType enumerates the values for web application firewall rule type.
2331type WebApplicationFirewallRuleType string
2332
2333const (
2334	// WebApplicationFirewallRuleTypeInvalid ...
2335	WebApplicationFirewallRuleTypeInvalid WebApplicationFirewallRuleType = "Invalid"
2336	// WebApplicationFirewallRuleTypeMatchRule ...
2337	WebApplicationFirewallRuleTypeMatchRule WebApplicationFirewallRuleType = "MatchRule"
2338)
2339
2340// PossibleWebApplicationFirewallRuleTypeValues returns an array of possible values for the WebApplicationFirewallRuleType const type.
2341func PossibleWebApplicationFirewallRuleTypeValues() []WebApplicationFirewallRuleType {
2342	return []WebApplicationFirewallRuleType{WebApplicationFirewallRuleTypeInvalid, WebApplicationFirewallRuleTypeMatchRule}
2343}
2344
2345// WebApplicationFirewallTransform enumerates the values for web application firewall transform.
2346type WebApplicationFirewallTransform string
2347
2348const (
2349	// HTMLEntityDecode ...
2350	HTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode"
2351	// Lowercase ...
2352	Lowercase WebApplicationFirewallTransform = "Lowercase"
2353	// RemoveNulls ...
2354	RemoveNulls WebApplicationFirewallTransform = "RemoveNulls"
2355	// Trim ...
2356	Trim WebApplicationFirewallTransform = "Trim"
2357	// URLDecode ...
2358	URLDecode WebApplicationFirewallTransform = "UrlDecode"
2359	// URLEncode ...
2360	URLEncode WebApplicationFirewallTransform = "UrlEncode"
2361)
2362
2363// PossibleWebApplicationFirewallTransformValues returns an array of possible values for the WebApplicationFirewallTransform const type.
2364func PossibleWebApplicationFirewallTransformValues() []WebApplicationFirewallTransform {
2365	return []WebApplicationFirewallTransform{HTMLEntityDecode, Lowercase, RemoveNulls, Trim, URLDecode, URLEncode}
2366}
2367
2368// AadAuthenticationParameters AAD Vpn authentication type related parameters.
2369type AadAuthenticationParameters struct {
2370	// AadTenant - AAD Vpn authentication parameter AAD tenant.
2371	AadTenant *string `json:"aadTenant,omitempty"`
2372	// AadAudience - AAD Vpn authentication parameter AAD audience.
2373	AadAudience *string `json:"aadAudience,omitempty"`
2374	// AadIssuer - AAD Vpn authentication parameter AAD issuer.
2375	AadIssuer *string `json:"aadIssuer,omitempty"`
2376}
2377
2378// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
2379// virtual network.
2380type AddressSpace struct {
2381	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
2382	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
2383}
2384
2385// ApplicationGateway application gateway resource.
2386type ApplicationGateway struct {
2387	autorest.Response `json:"-"`
2388	// ApplicationGatewayPropertiesFormat - Properties of the application gateway.
2389	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
2390	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
2391	Etag *string `json:"etag,omitempty"`
2392	// Zones - A list of availability zones denoting where the resource needs to come from.
2393	Zones *[]string `json:"zones,omitempty"`
2394	// Identity - The identity of the application gateway, if configured.
2395	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
2396	// ID - Resource ID.
2397	ID *string `json:"id,omitempty"`
2398	// Name - READ-ONLY; Resource name.
2399	Name *string `json:"name,omitempty"`
2400	// Type - READ-ONLY; Resource type.
2401	Type *string `json:"type,omitempty"`
2402	// Location - Resource location.
2403	Location *string `json:"location,omitempty"`
2404	// Tags - Resource tags.
2405	Tags map[string]*string `json:"tags"`
2406}
2407
2408// MarshalJSON is the custom marshaler for ApplicationGateway.
2409func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
2410	objectMap := make(map[string]interface{})
2411	if ag.ApplicationGatewayPropertiesFormat != nil {
2412		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
2413	}
2414	if ag.Zones != nil {
2415		objectMap["zones"] = ag.Zones
2416	}
2417	if ag.Identity != nil {
2418		objectMap["identity"] = ag.Identity
2419	}
2420	if ag.ID != nil {
2421		objectMap["id"] = ag.ID
2422	}
2423	if ag.Location != nil {
2424		objectMap["location"] = ag.Location
2425	}
2426	if ag.Tags != nil {
2427		objectMap["tags"] = ag.Tags
2428	}
2429	return json.Marshal(objectMap)
2430}
2431
2432// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
2433func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
2434	var m map[string]*json.RawMessage
2435	err := json.Unmarshal(body, &m)
2436	if err != nil {
2437		return err
2438	}
2439	for k, v := range m {
2440		switch k {
2441		case "properties":
2442			if v != nil {
2443				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
2444				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
2445				if err != nil {
2446					return err
2447				}
2448				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
2449			}
2450		case "etag":
2451			if v != nil {
2452				var etag string
2453				err = json.Unmarshal(*v, &etag)
2454				if err != nil {
2455					return err
2456				}
2457				ag.Etag = &etag
2458			}
2459		case "zones":
2460			if v != nil {
2461				var zones []string
2462				err = json.Unmarshal(*v, &zones)
2463				if err != nil {
2464					return err
2465				}
2466				ag.Zones = &zones
2467			}
2468		case "identity":
2469			if v != nil {
2470				var identity ManagedServiceIdentity
2471				err = json.Unmarshal(*v, &identity)
2472				if err != nil {
2473					return err
2474				}
2475				ag.Identity = &identity
2476			}
2477		case "id":
2478			if v != nil {
2479				var ID string
2480				err = json.Unmarshal(*v, &ID)
2481				if err != nil {
2482					return err
2483				}
2484				ag.ID = &ID
2485			}
2486		case "name":
2487			if v != nil {
2488				var name string
2489				err = json.Unmarshal(*v, &name)
2490				if err != nil {
2491					return err
2492				}
2493				ag.Name = &name
2494			}
2495		case "type":
2496			if v != nil {
2497				var typeVar string
2498				err = json.Unmarshal(*v, &typeVar)
2499				if err != nil {
2500					return err
2501				}
2502				ag.Type = &typeVar
2503			}
2504		case "location":
2505			if v != nil {
2506				var location string
2507				err = json.Unmarshal(*v, &location)
2508				if err != nil {
2509					return err
2510				}
2511				ag.Location = &location
2512			}
2513		case "tags":
2514			if v != nil {
2515				var tags map[string]*string
2516				err = json.Unmarshal(*v, &tags)
2517				if err != nil {
2518					return err
2519				}
2520				ag.Tags = tags
2521			}
2522		}
2523	}
2524
2525	return nil
2526}
2527
2528// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
2529type ApplicationGatewayAuthenticationCertificate struct {
2530	// ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate.
2531	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
2532	// Name - Name of the authentication certificate that is unique within an Application Gateway.
2533	Name *string `json:"name,omitempty"`
2534	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
2535	Etag *string `json:"etag,omitempty"`
2536	// Type - READ-ONLY; Type of the resource.
2537	Type *string `json:"type,omitempty"`
2538	// ID - Resource ID.
2539	ID *string `json:"id,omitempty"`
2540}
2541
2542// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
2543func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
2544	objectMap := make(map[string]interface{})
2545	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
2546		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
2547	}
2548	if agac.Name != nil {
2549		objectMap["name"] = agac.Name
2550	}
2551	if agac.ID != nil {
2552		objectMap["id"] = agac.ID
2553	}
2554	return json.Marshal(objectMap)
2555}
2556
2557// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
2558func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
2559	var m map[string]*json.RawMessage
2560	err := json.Unmarshal(body, &m)
2561	if err != nil {
2562		return err
2563	}
2564	for k, v := range m {
2565		switch k {
2566		case "properties":
2567			if v != nil {
2568				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
2569				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
2570				if err != nil {
2571					return err
2572				}
2573				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
2574			}
2575		case "name":
2576			if v != nil {
2577				var name string
2578				err = json.Unmarshal(*v, &name)
2579				if err != nil {
2580					return err
2581				}
2582				agac.Name = &name
2583			}
2584		case "etag":
2585			if v != nil {
2586				var etag string
2587				err = json.Unmarshal(*v, &etag)
2588				if err != nil {
2589					return err
2590				}
2591				agac.Etag = &etag
2592			}
2593		case "type":
2594			if v != nil {
2595				var typeVar string
2596				err = json.Unmarshal(*v, &typeVar)
2597				if err != nil {
2598					return err
2599				}
2600				agac.Type = &typeVar
2601			}
2602		case "id":
2603			if v != nil {
2604				var ID string
2605				err = json.Unmarshal(*v, &ID)
2606				if err != nil {
2607					return err
2608				}
2609				agac.ID = &ID
2610			}
2611		}
2612	}
2613
2614	return nil
2615}
2616
2617// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
2618// application gateway.
2619type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
2620	// Data - Certificate public data.
2621	Data *string `json:"data,omitempty"`
2622	// ProvisioningState - READ-ONLY; The provisioning state of the authentication certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
2623	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
2624}
2625
2626// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
2627type ApplicationGatewayAutoscaleConfiguration struct {
2628	// MinCapacity - Lower bound on number of Application Gateway capacity.
2629	MinCapacity *int32 `json:"minCapacity,omitempty"`
2630	// MaxCapacity - Upper bound on number of Application Gateway capacity.
2631	MaxCapacity *int32 `json:"maxCapacity,omitempty"`
2632}
2633
2634// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
2635// call.
2636type ApplicationGatewayAvailableSslOptions struct {
2637	autorest.Response `json:"-"`
2638	// ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options.
2639	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
2640	// ID - Resource ID.
2641	ID *string `json:"id,omitempty"`
2642	// Name - READ-ONLY; Resource name.
2643	Name *string `json:"name,omitempty"`
2644	// Type - READ-ONLY; Resource type.
2645	Type *string `json:"type,omitempty"`
2646	// Location - Resource location.
2647	Location *string `json:"location,omitempty"`
2648	// Tags - Resource tags.
2649	Tags map[string]*string `json:"tags"`
2650}
2651
2652// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
2653func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
2654	objectMap := make(map[string]interface{})
2655	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
2656		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
2657	}
2658	if agaso.ID != nil {
2659		objectMap["id"] = agaso.ID
2660	}
2661	if agaso.Location != nil {
2662		objectMap["location"] = agaso.Location
2663	}
2664	if agaso.Tags != nil {
2665		objectMap["tags"] = agaso.Tags
2666	}
2667	return json.Marshal(objectMap)
2668}
2669
2670// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
2671func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
2672	var m map[string]*json.RawMessage
2673	err := json.Unmarshal(body, &m)
2674	if err != nil {
2675		return err
2676	}
2677	for k, v := range m {
2678		switch k {
2679		case "properties":
2680			if v != nil {
2681				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
2682				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
2683				if err != nil {
2684					return err
2685				}
2686				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
2687			}
2688		case "id":
2689			if v != nil {
2690				var ID string
2691				err = json.Unmarshal(*v, &ID)
2692				if err != nil {
2693					return err
2694				}
2695				agaso.ID = &ID
2696			}
2697		case "name":
2698			if v != nil {
2699				var name string
2700				err = json.Unmarshal(*v, &name)
2701				if err != nil {
2702					return err
2703				}
2704				agaso.Name = &name
2705			}
2706		case "type":
2707			if v != nil {
2708				var typeVar string
2709				err = json.Unmarshal(*v, &typeVar)
2710				if err != nil {
2711					return err
2712				}
2713				agaso.Type = &typeVar
2714			}
2715		case "location":
2716			if v != nil {
2717				var location string
2718				err = json.Unmarshal(*v, &location)
2719				if err != nil {
2720					return err
2721				}
2722				agaso.Location = &location
2723			}
2724		case "tags":
2725			if v != nil {
2726				var tags map[string]*string
2727				err = json.Unmarshal(*v, &tags)
2728				if err != nil {
2729					return err
2730				}
2731				agaso.Tags = tags
2732			}
2733		}
2734	}
2735
2736	return nil
2737}
2738
2739// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
2740// ApplicationGatewayAvailableSslOptions.
2741type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
2742	// PredefinedPolicies - List of available Ssl predefined policy.
2743	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
2744	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
2745	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
2746	// AvailableCipherSuites - List of available Ssl cipher suites.
2747	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
2748	// AvailableProtocols - List of available Ssl protocols.
2749	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
2750}
2751
2752// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
2753// service call.
2754type ApplicationGatewayAvailableSslPredefinedPolicies struct {
2755	autorest.Response `json:"-"`
2756	// Value - List of available Ssl predefined policy.
2757	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
2758	// NextLink - URL to get the next set of results.
2759	NextLink *string `json:"nextLink,omitempty"`
2760}
2761
2762// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
2763// ApplicationGatewaySslPredefinedPolicy values.
2764type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
2765	i    int
2766	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
2767}
2768
2769// NextWithContext advances to the next value.  If there was an error making
2770// the request the iterator does not advance and the error is returned.
2771func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
2772	if tracing.IsEnabled() {
2773		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
2774		defer func() {
2775			sc := -1
2776			if iter.Response().Response.Response != nil {
2777				sc = iter.Response().Response.Response.StatusCode
2778			}
2779			tracing.EndSpan(ctx, sc, err)
2780		}()
2781	}
2782	iter.i++
2783	if iter.i < len(iter.page.Values()) {
2784		return nil
2785	}
2786	err = iter.page.NextWithContext(ctx)
2787	if err != nil {
2788		iter.i--
2789		return err
2790	}
2791	iter.i = 0
2792	return nil
2793}
2794
2795// Next advances to the next value.  If there was an error making
2796// the request the iterator does not advance and the error is returned.
2797// Deprecated: Use NextWithContext() instead.
2798func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
2799	return iter.NextWithContext(context.Background())
2800}
2801
2802// NotDone returns true if the enumeration should be started or is not yet complete.
2803func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
2804	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2805}
2806
2807// Response returns the raw server response from the last page request.
2808func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2809	return iter.page.Response()
2810}
2811
2812// Value returns the current value or a zero-initialized value if the
2813// iterator has advanced beyond the end of the collection.
2814func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
2815	if !iter.page.NotDone() {
2816		return ApplicationGatewaySslPredefinedPolicy{}
2817	}
2818	return iter.page.Values()[iter.i]
2819}
2820
2821// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
2822func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
2823	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
2824}
2825
2826// IsEmpty returns true if the ListResult contains no values.
2827func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
2828	return agaspp.Value == nil || len(*agaspp.Value) == 0
2829}
2830
2831// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
2832// It returns nil if no more results exist.
2833func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
2834	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
2835		return nil, nil
2836	}
2837	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2838		autorest.AsJSON(),
2839		autorest.AsGet(),
2840		autorest.WithBaseURL(to.String(agaspp.NextLink)))
2841}
2842
2843// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
2844// ApplicationGatewaySslPredefinedPolicy values.
2845type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
2846	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
2847	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
2848}
2849
2850// NextWithContext advances to the next page of values.  If there was an error making
2851// the request the page does not advance and the error is returned.
2852func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
2853	if tracing.IsEnabled() {
2854		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
2855		defer func() {
2856			sc := -1
2857			if page.Response().Response.Response != nil {
2858				sc = page.Response().Response.Response.StatusCode
2859			}
2860			tracing.EndSpan(ctx, sc, err)
2861		}()
2862	}
2863	next, err := page.fn(ctx, page.agaspp)
2864	if err != nil {
2865		return err
2866	}
2867	page.agaspp = next
2868	return nil
2869}
2870
2871// Next advances to the next page of values.  If there was an error making
2872// the request the page does not advance and the error is returned.
2873// Deprecated: Use NextWithContext() instead.
2874func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
2875	return page.NextWithContext(context.Background())
2876}
2877
2878// NotDone returns true if the page enumeration should be started or is not yet complete.
2879func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
2880	return !page.agaspp.IsEmpty()
2881}
2882
2883// Response returns the raw server response from the last page request.
2884func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2885	return page.agaspp
2886}
2887
2888// Values returns the slice of values for the current page or nil if there are no values.
2889func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
2890	if page.agaspp.IsEmpty() {
2891		return nil
2892	}
2893	return *page.agaspp.Value
2894}
2895
2896// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
2897func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
2898	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
2899}
2900
2901// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
2902// service call.
2903type ApplicationGatewayAvailableWafRuleSetsResult struct {
2904	autorest.Response `json:"-"`
2905	// Value - The list of application gateway rule sets.
2906	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
2907}
2908
2909// ApplicationGatewayBackendAddress backend address of an application gateway.
2910type ApplicationGatewayBackendAddress struct {
2911	// Fqdn - Fully qualified domain name (FQDN).
2912	Fqdn *string `json:"fqdn,omitempty"`
2913	// IPAddress - IP address.
2914	IPAddress *string `json:"ipAddress,omitempty"`
2915}
2916
2917// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
2918type ApplicationGatewayBackendAddressPool struct {
2919	// ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool.
2920	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
2921	// Name - Name of the backend address pool that is unique within an Application Gateway.
2922	Name *string `json:"name,omitempty"`
2923	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
2924	Etag *string `json:"etag,omitempty"`
2925	// Type - READ-ONLY; Type of the resource.
2926	Type *string `json:"type,omitempty"`
2927	// ID - Resource ID.
2928	ID *string `json:"id,omitempty"`
2929}
2930
2931// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
2932func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
2933	objectMap := make(map[string]interface{})
2934	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
2935		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
2936	}
2937	if agbap.Name != nil {
2938		objectMap["name"] = agbap.Name
2939	}
2940	if agbap.ID != nil {
2941		objectMap["id"] = agbap.ID
2942	}
2943	return json.Marshal(objectMap)
2944}
2945
2946// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
2947func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
2948	var m map[string]*json.RawMessage
2949	err := json.Unmarshal(body, &m)
2950	if err != nil {
2951		return err
2952	}
2953	for k, v := range m {
2954		switch k {
2955		case "properties":
2956			if v != nil {
2957				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
2958				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
2959				if err != nil {
2960					return err
2961				}
2962				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
2963			}
2964		case "name":
2965			if v != nil {
2966				var name string
2967				err = json.Unmarshal(*v, &name)
2968				if err != nil {
2969					return err
2970				}
2971				agbap.Name = &name
2972			}
2973		case "etag":
2974			if v != nil {
2975				var etag string
2976				err = json.Unmarshal(*v, &etag)
2977				if err != nil {
2978					return err
2979				}
2980				agbap.Etag = &etag
2981			}
2982		case "type":
2983			if v != nil {
2984				var typeVar string
2985				err = json.Unmarshal(*v, &typeVar)
2986				if err != nil {
2987					return err
2988				}
2989				agbap.Type = &typeVar
2990			}
2991		case "id":
2992			if v != nil {
2993				var ID string
2994				err = json.Unmarshal(*v, &ID)
2995				if err != nil {
2996					return err
2997				}
2998				agbap.ID = &ID
2999			}
3000		}
3001	}
3002
3003	return nil
3004}
3005
3006// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
3007// application gateway.
3008type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
3009	// BackendIPConfigurations - READ-ONLY; Collection of references to IPs defined in network interfaces.
3010	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
3011	// BackendAddresses - Backend addresses.
3012	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
3013	// ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3014	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3015}
3016
3017// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call.
3018type ApplicationGatewayBackendHealth struct {
3019	autorest.Response `json:"-"`
3020	// BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources.
3021	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
3022}
3023
3024// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
3025type ApplicationGatewayBackendHealthHTTPSettings struct {
3026	// BackendHTTPSettings - Reference to an ApplicationGatewayBackendHttpSettings resource.
3027	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
3028	// Servers - List of ApplicationGatewayBackendHealthServer resources.
3029	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
3030}
3031
3032// ApplicationGatewayBackendHealthOnDemand result of on demand test probe.
3033type ApplicationGatewayBackendHealthOnDemand struct {
3034	autorest.Response `json:"-"`
3035	// BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource.
3036	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
3037	// BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings.
3038	BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"`
3039}
3040
3041// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
3042type ApplicationGatewayBackendHealthPool struct {
3043	// BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource.
3044	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
3045	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
3046	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
3047}
3048
3049// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
3050type ApplicationGatewayBackendHealthServer struct {
3051	// Address - IP address or FQDN of backend server.
3052	Address *string `json:"address,omitempty"`
3053	// IPConfiguration - Reference to IP configuration of backend server.
3054	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
3055	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
3056	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
3057	// HealthProbeLog - Health Probe Log.
3058	HealthProbeLog *string `json:"healthProbeLog,omitempty"`
3059}
3060
3061// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
3062type ApplicationGatewayBackendHTTPSettings struct {
3063	// ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings.
3064	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
3065	// Name - Name of the backend http settings that is unique within an Application Gateway.
3066	Name *string `json:"name,omitempty"`
3067	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3068	Etag *string `json:"etag,omitempty"`
3069	// Type - READ-ONLY; Type of the resource.
3070	Type *string `json:"type,omitempty"`
3071	// ID - Resource ID.
3072	ID *string `json:"id,omitempty"`
3073}
3074
3075// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
3076func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
3077	objectMap := make(map[string]interface{})
3078	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
3079		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
3080	}
3081	if agbhs.Name != nil {
3082		objectMap["name"] = agbhs.Name
3083	}
3084	if agbhs.ID != nil {
3085		objectMap["id"] = agbhs.ID
3086	}
3087	return json.Marshal(objectMap)
3088}
3089
3090// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
3091func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
3092	var m map[string]*json.RawMessage
3093	err := json.Unmarshal(body, &m)
3094	if err != nil {
3095		return err
3096	}
3097	for k, v := range m {
3098		switch k {
3099		case "properties":
3100			if v != nil {
3101				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
3102				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
3103				if err != nil {
3104					return err
3105				}
3106				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
3107			}
3108		case "name":
3109			if v != nil {
3110				var name string
3111				err = json.Unmarshal(*v, &name)
3112				if err != nil {
3113					return err
3114				}
3115				agbhs.Name = &name
3116			}
3117		case "etag":
3118			if v != nil {
3119				var etag string
3120				err = json.Unmarshal(*v, &etag)
3121				if err != nil {
3122					return err
3123				}
3124				agbhs.Etag = &etag
3125			}
3126		case "type":
3127			if v != nil {
3128				var typeVar string
3129				err = json.Unmarshal(*v, &typeVar)
3130				if err != nil {
3131					return err
3132				}
3133				agbhs.Type = &typeVar
3134			}
3135		case "id":
3136			if v != nil {
3137				var ID string
3138				err = json.Unmarshal(*v, &ID)
3139				if err != nil {
3140					return err
3141				}
3142				agbhs.ID = &ID
3143			}
3144		}
3145	}
3146
3147	return nil
3148}
3149
3150// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
3151// application gateway.
3152type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
3153	// Port - The destination port on the backend.
3154	Port *int32 `json:"port,omitempty"`
3155	// Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS'
3156	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3157	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
3158	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
3159	// 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.
3160	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
3161	// Probe - Probe resource of an application gateway.
3162	Probe *SubResource `json:"probe,omitempty"`
3163	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
3164	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
3165	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
3166	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
3167	// ConnectionDraining - Connection draining of the backend http settings resource.
3168	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
3169	// HostName - Host header to be sent to the backend servers.
3170	HostName *string `json:"hostName,omitempty"`
3171	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
3172	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
3173	// AffinityCookieName - Cookie name to use for the affinity cookie.
3174	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
3175	// ProbeEnabled - Whether the probe is enabled. Default value is false.
3176	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
3177	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
3178	Path *string `json:"path,omitempty"`
3179	// ProvisioningState - READ-ONLY; The provisioning state of the backend HTTP settings resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3180	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3181}
3182
3183// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
3184// be active for a specified time after the backend server got removed from the configuration.
3185type ApplicationGatewayConnectionDraining struct {
3186	// Enabled - Whether connection draining is enabled or not.
3187	Enabled *bool `json:"enabled,omitempty"`
3188	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
3189	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
3190}
3191
3192// ApplicationGatewayCustomError customer error of an application gateway.
3193type ApplicationGatewayCustomError struct {
3194	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
3195	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
3196	// CustomErrorPageURL - Error page URL of the application gateway customer error.
3197	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
3198}
3199
3200// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
3201// rule group.
3202type ApplicationGatewayFirewallDisabledRuleGroup struct {
3203	// RuleGroupName - The name of the rule group that will be disabled.
3204	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3205	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
3206	Rules *[]int32 `json:"rules,omitempty"`
3207}
3208
3209// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
3210// check.
3211type ApplicationGatewayFirewallExclusion struct {
3212	// MatchVariable - The variable to be excluded.
3213	MatchVariable *string `json:"matchVariable,omitempty"`
3214	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
3215	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
3216	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
3217	Selector *string `json:"selector,omitempty"`
3218}
3219
3220// ApplicationGatewayFirewallRule a web application firewall rule.
3221type ApplicationGatewayFirewallRule struct {
3222	// RuleID - The identifier of the web application firewall rule.
3223	RuleID *int32 `json:"ruleId,omitempty"`
3224	// Description - The description of the web application firewall rule.
3225	Description *string `json:"description,omitempty"`
3226}
3227
3228// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
3229type ApplicationGatewayFirewallRuleGroup struct {
3230	// RuleGroupName - The name of the web application firewall rule group.
3231	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3232	// Description - The description of the web application firewall rule group.
3233	Description *string `json:"description,omitempty"`
3234	// Rules - The rules of the web application firewall rule group.
3235	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
3236}
3237
3238// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
3239type ApplicationGatewayFirewallRuleSet struct {
3240	// ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set.
3241	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
3242	// ID - Resource ID.
3243	ID *string `json:"id,omitempty"`
3244	// Name - READ-ONLY; Resource name.
3245	Name *string `json:"name,omitempty"`
3246	// Type - READ-ONLY; Resource type.
3247	Type *string `json:"type,omitempty"`
3248	// Location - Resource location.
3249	Location *string `json:"location,omitempty"`
3250	// Tags - Resource tags.
3251	Tags map[string]*string `json:"tags"`
3252}
3253
3254// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
3255func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
3256	objectMap := make(map[string]interface{})
3257	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
3258		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
3259	}
3260	if agfrs.ID != nil {
3261		objectMap["id"] = agfrs.ID
3262	}
3263	if agfrs.Location != nil {
3264		objectMap["location"] = agfrs.Location
3265	}
3266	if agfrs.Tags != nil {
3267		objectMap["tags"] = agfrs.Tags
3268	}
3269	return json.Marshal(objectMap)
3270}
3271
3272// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
3273func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
3274	var m map[string]*json.RawMessage
3275	err := json.Unmarshal(body, &m)
3276	if err != nil {
3277		return err
3278	}
3279	for k, v := range m {
3280		switch k {
3281		case "properties":
3282			if v != nil {
3283				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
3284				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
3285				if err != nil {
3286					return err
3287				}
3288				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
3289			}
3290		case "id":
3291			if v != nil {
3292				var ID string
3293				err = json.Unmarshal(*v, &ID)
3294				if err != nil {
3295					return err
3296				}
3297				agfrs.ID = &ID
3298			}
3299		case "name":
3300			if v != nil {
3301				var name string
3302				err = json.Unmarshal(*v, &name)
3303				if err != nil {
3304					return err
3305				}
3306				agfrs.Name = &name
3307			}
3308		case "type":
3309			if v != nil {
3310				var typeVar string
3311				err = json.Unmarshal(*v, &typeVar)
3312				if err != nil {
3313					return err
3314				}
3315				agfrs.Type = &typeVar
3316			}
3317		case "location":
3318			if v != nil {
3319				var location string
3320				err = json.Unmarshal(*v, &location)
3321				if err != nil {
3322					return err
3323				}
3324				agfrs.Location = &location
3325			}
3326		case "tags":
3327			if v != nil {
3328				var tags map[string]*string
3329				err = json.Unmarshal(*v, &tags)
3330				if err != nil {
3331					return err
3332				}
3333				agfrs.Tags = tags
3334			}
3335		}
3336	}
3337
3338	return nil
3339}
3340
3341// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
3342type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
3343	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall rule set. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3344	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3345	// RuleSetType - The type of the web application firewall rule set.
3346	RuleSetType *string `json:"ruleSetType,omitempty"`
3347	// RuleSetVersion - The version of the web application firewall rule set type.
3348	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
3349	// RuleGroups - The rule groups of the web application firewall rule set.
3350	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
3351}
3352
3353// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
3354type ApplicationGatewayFrontendIPConfiguration struct {
3355	// ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration.
3356	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3357	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
3358	Name *string `json:"name,omitempty"`
3359	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3360	Etag *string `json:"etag,omitempty"`
3361	// Type - READ-ONLY; Type of the resource.
3362	Type *string `json:"type,omitempty"`
3363	// ID - Resource ID.
3364	ID *string `json:"id,omitempty"`
3365}
3366
3367// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
3368func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
3369	objectMap := make(map[string]interface{})
3370	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
3371		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3372	}
3373	if agfic.Name != nil {
3374		objectMap["name"] = agfic.Name
3375	}
3376	if agfic.ID != nil {
3377		objectMap["id"] = agfic.ID
3378	}
3379	return json.Marshal(objectMap)
3380}
3381
3382// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
3383func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
3384	var m map[string]*json.RawMessage
3385	err := json.Unmarshal(body, &m)
3386	if err != nil {
3387		return err
3388	}
3389	for k, v := range m {
3390		switch k {
3391		case "properties":
3392			if v != nil {
3393				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3394				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
3395				if err != nil {
3396					return err
3397				}
3398				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
3399			}
3400		case "name":
3401			if v != nil {
3402				var name string
3403				err = json.Unmarshal(*v, &name)
3404				if err != nil {
3405					return err
3406				}
3407				agfic.Name = &name
3408			}
3409		case "etag":
3410			if v != nil {
3411				var etag string
3412				err = json.Unmarshal(*v, &etag)
3413				if err != nil {
3414					return err
3415				}
3416				agfic.Etag = &etag
3417			}
3418		case "type":
3419			if v != nil {
3420				var typeVar string
3421				err = json.Unmarshal(*v, &typeVar)
3422				if err != nil {
3423					return err
3424				}
3425				agfic.Type = &typeVar
3426			}
3427		case "id":
3428			if v != nil {
3429				var ID string
3430				err = json.Unmarshal(*v, &ID)
3431				if err != nil {
3432					return err
3433				}
3434				agfic.ID = &ID
3435			}
3436		}
3437	}
3438
3439	return nil
3440}
3441
3442// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
3443// application gateway.
3444type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
3445	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
3446	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
3447	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
3448	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
3449	// Subnet - Reference to the subnet resource.
3450	Subnet *SubResource `json:"subnet,omitempty"`
3451	// PublicIPAddress - Reference to the PublicIP resource.
3452	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
3453	// ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3454	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3455}
3456
3457// ApplicationGatewayFrontendPort frontend port of an application gateway.
3458type ApplicationGatewayFrontendPort struct {
3459	// ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port.
3460	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
3461	// Name - Name of the frontend port that is unique within an Application Gateway.
3462	Name *string `json:"name,omitempty"`
3463	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3464	Etag *string `json:"etag,omitempty"`
3465	// Type - READ-ONLY; Type of the resource.
3466	Type *string `json:"type,omitempty"`
3467	// ID - Resource ID.
3468	ID *string `json:"id,omitempty"`
3469}
3470
3471// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
3472func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
3473	objectMap := make(map[string]interface{})
3474	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
3475		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
3476	}
3477	if agfp.Name != nil {
3478		objectMap["name"] = agfp.Name
3479	}
3480	if agfp.ID != nil {
3481		objectMap["id"] = agfp.ID
3482	}
3483	return json.Marshal(objectMap)
3484}
3485
3486// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
3487func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
3488	var m map[string]*json.RawMessage
3489	err := json.Unmarshal(body, &m)
3490	if err != nil {
3491		return err
3492	}
3493	for k, v := range m {
3494		switch k {
3495		case "properties":
3496			if v != nil {
3497				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
3498				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
3499				if err != nil {
3500					return err
3501				}
3502				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
3503			}
3504		case "name":
3505			if v != nil {
3506				var name string
3507				err = json.Unmarshal(*v, &name)
3508				if err != nil {
3509					return err
3510				}
3511				agfp.Name = &name
3512			}
3513		case "etag":
3514			if v != nil {
3515				var etag string
3516				err = json.Unmarshal(*v, &etag)
3517				if err != nil {
3518					return err
3519				}
3520				agfp.Etag = &etag
3521			}
3522		case "type":
3523			if v != nil {
3524				var typeVar string
3525				err = json.Unmarshal(*v, &typeVar)
3526				if err != nil {
3527					return err
3528				}
3529				agfp.Type = &typeVar
3530			}
3531		case "id":
3532			if v != nil {
3533				var ID string
3534				err = json.Unmarshal(*v, &ID)
3535				if err != nil {
3536					return err
3537				}
3538				agfp.ID = &ID
3539			}
3540		}
3541	}
3542
3543	return nil
3544}
3545
3546// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
3547type ApplicationGatewayFrontendPortPropertiesFormat struct {
3548	// Port - Frontend port.
3549	Port *int32 `json:"port,omitempty"`
3550	// ProvisioningState - READ-ONLY; The provisioning state of the frontend port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3551	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3552}
3553
3554// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
3555type ApplicationGatewayHeaderConfiguration struct {
3556	// HeaderName - Header name of the header configuration.
3557	HeaderName *string `json:"headerName,omitempty"`
3558	// HeaderValue - Header value of the header configuration.
3559	HeaderValue *string `json:"headerValue,omitempty"`
3560}
3561
3562// ApplicationGatewayHTTPListener http listener of an application gateway.
3563type ApplicationGatewayHTTPListener struct {
3564	// ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener.
3565	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
3566	// Name - Name of the HTTP listener that is unique within an Application Gateway.
3567	Name *string `json:"name,omitempty"`
3568	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3569	Etag *string `json:"etag,omitempty"`
3570	// Type - READ-ONLY; Type of the resource.
3571	Type *string `json:"type,omitempty"`
3572	// ID - Resource ID.
3573	ID *string `json:"id,omitempty"`
3574}
3575
3576// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
3577func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
3578	objectMap := make(map[string]interface{})
3579	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
3580		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
3581	}
3582	if aghl.Name != nil {
3583		objectMap["name"] = aghl.Name
3584	}
3585	if aghl.ID != nil {
3586		objectMap["id"] = aghl.ID
3587	}
3588	return json.Marshal(objectMap)
3589}
3590
3591// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
3592func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
3593	var m map[string]*json.RawMessage
3594	err := json.Unmarshal(body, &m)
3595	if err != nil {
3596		return err
3597	}
3598	for k, v := range m {
3599		switch k {
3600		case "properties":
3601			if v != nil {
3602				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
3603				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
3604				if err != nil {
3605					return err
3606				}
3607				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
3608			}
3609		case "name":
3610			if v != nil {
3611				var name string
3612				err = json.Unmarshal(*v, &name)
3613				if err != nil {
3614					return err
3615				}
3616				aghl.Name = &name
3617			}
3618		case "etag":
3619			if v != nil {
3620				var etag string
3621				err = json.Unmarshal(*v, &etag)
3622				if err != nil {
3623					return err
3624				}
3625				aghl.Etag = &etag
3626			}
3627		case "type":
3628			if v != nil {
3629				var typeVar string
3630				err = json.Unmarshal(*v, &typeVar)
3631				if err != nil {
3632					return err
3633				}
3634				aghl.Type = &typeVar
3635			}
3636		case "id":
3637			if v != nil {
3638				var ID string
3639				err = json.Unmarshal(*v, &ID)
3640				if err != nil {
3641					return err
3642				}
3643				aghl.ID = &ID
3644			}
3645		}
3646	}
3647
3648	return nil
3649}
3650
3651// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
3652type ApplicationGatewayHTTPListenerPropertiesFormat struct {
3653	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
3654	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
3655	// FrontendPort - Frontend port resource of an application gateway.
3656	FrontendPort *SubResource `json:"frontendPort,omitempty"`
3657	// Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS'
3658	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3659	// HostName - Host name of HTTP listener.
3660	HostName *string `json:"hostName,omitempty"`
3661	// SslCertificate - SSL certificate resource of an application gateway.
3662	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
3663	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
3664	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
3665	// ProvisioningState - READ-ONLY; The provisioning state of the HTTP listener resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3666	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3667	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
3668	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3669	// FirewallPolicy - Reference to the FirewallPolicy resource.
3670	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
3671	// HostNames - List of Host names for HTTP Listener that allows special wildcard characters as well.
3672	HostNames *[]string `json:"hostNames,omitempty"`
3673}
3674
3675// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
3676// private IP configuration is allowed.
3677type ApplicationGatewayIPConfiguration struct {
3678	// ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration.
3679	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3680	// Name - Name of the IP configuration that is unique within an Application Gateway.
3681	Name *string `json:"name,omitempty"`
3682	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3683	Etag *string `json:"etag,omitempty"`
3684	// Type - READ-ONLY; Type of the resource.
3685	Type *string `json:"type,omitempty"`
3686	// ID - Resource ID.
3687	ID *string `json:"id,omitempty"`
3688}
3689
3690// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
3691func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
3692	objectMap := make(map[string]interface{})
3693	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
3694		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
3695	}
3696	if agic.Name != nil {
3697		objectMap["name"] = agic.Name
3698	}
3699	if agic.ID != nil {
3700		objectMap["id"] = agic.ID
3701	}
3702	return json.Marshal(objectMap)
3703}
3704
3705// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
3706func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
3707	var m map[string]*json.RawMessage
3708	err := json.Unmarshal(body, &m)
3709	if err != nil {
3710		return err
3711	}
3712	for k, v := range m {
3713		switch k {
3714		case "properties":
3715			if v != nil {
3716				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
3717				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
3718				if err != nil {
3719					return err
3720				}
3721				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
3722			}
3723		case "name":
3724			if v != nil {
3725				var name string
3726				err = json.Unmarshal(*v, &name)
3727				if err != nil {
3728					return err
3729				}
3730				agic.Name = &name
3731			}
3732		case "etag":
3733			if v != nil {
3734				var etag string
3735				err = json.Unmarshal(*v, &etag)
3736				if err != nil {
3737					return err
3738				}
3739				agic.Etag = &etag
3740			}
3741		case "type":
3742			if v != nil {
3743				var typeVar string
3744				err = json.Unmarshal(*v, &typeVar)
3745				if err != nil {
3746					return err
3747				}
3748				agic.Type = &typeVar
3749			}
3750		case "id":
3751			if v != nil {
3752				var ID string
3753				err = json.Unmarshal(*v, &ID)
3754				if err != nil {
3755					return err
3756				}
3757				agic.ID = &ID
3758			}
3759		}
3760	}
3761
3762	return nil
3763}
3764
3765// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
3766// gateway.
3767type ApplicationGatewayIPConfigurationPropertiesFormat struct {
3768	// Subnet - Reference to the subnet resource. A subnet from where application gateway gets its private address.
3769	Subnet *SubResource `json:"subnet,omitempty"`
3770	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3771	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3772}
3773
3774// ApplicationGatewayListResult response for ListApplicationGateways API service call.
3775type ApplicationGatewayListResult struct {
3776	autorest.Response `json:"-"`
3777	// Value - List of an application gateways in a resource group.
3778	Value *[]ApplicationGateway `json:"value,omitempty"`
3779	// NextLink - URL to get the next set of results.
3780	NextLink *string `json:"nextLink,omitempty"`
3781}
3782
3783// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
3784type ApplicationGatewayListResultIterator struct {
3785	i    int
3786	page ApplicationGatewayListResultPage
3787}
3788
3789// NextWithContext advances to the next value.  If there was an error making
3790// the request the iterator does not advance and the error is returned.
3791func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
3792	if tracing.IsEnabled() {
3793		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
3794		defer func() {
3795			sc := -1
3796			if iter.Response().Response.Response != nil {
3797				sc = iter.Response().Response.Response.StatusCode
3798			}
3799			tracing.EndSpan(ctx, sc, err)
3800		}()
3801	}
3802	iter.i++
3803	if iter.i < len(iter.page.Values()) {
3804		return nil
3805	}
3806	err = iter.page.NextWithContext(ctx)
3807	if err != nil {
3808		iter.i--
3809		return err
3810	}
3811	iter.i = 0
3812	return nil
3813}
3814
3815// Next advances to the next value.  If there was an error making
3816// the request the iterator does not advance and the error is returned.
3817// Deprecated: Use NextWithContext() instead.
3818func (iter *ApplicationGatewayListResultIterator) Next() error {
3819	return iter.NextWithContext(context.Background())
3820}
3821
3822// NotDone returns true if the enumeration should be started or is not yet complete.
3823func (iter ApplicationGatewayListResultIterator) NotDone() bool {
3824	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3825}
3826
3827// Response returns the raw server response from the last page request.
3828func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
3829	return iter.page.Response()
3830}
3831
3832// Value returns the current value or a zero-initialized value if the
3833// iterator has advanced beyond the end of the collection.
3834func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
3835	if !iter.page.NotDone() {
3836		return ApplicationGateway{}
3837	}
3838	return iter.page.Values()[iter.i]
3839}
3840
3841// Creates a new instance of the ApplicationGatewayListResultIterator type.
3842func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
3843	return ApplicationGatewayListResultIterator{page: page}
3844}
3845
3846// IsEmpty returns true if the ListResult contains no values.
3847func (aglr ApplicationGatewayListResult) IsEmpty() bool {
3848	return aglr.Value == nil || len(*aglr.Value) == 0
3849}
3850
3851// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
3852// It returns nil if no more results exist.
3853func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
3854	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
3855		return nil, nil
3856	}
3857	return autorest.Prepare((&http.Request{}).WithContext(ctx),
3858		autorest.AsJSON(),
3859		autorest.AsGet(),
3860		autorest.WithBaseURL(to.String(aglr.NextLink)))
3861}
3862
3863// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
3864type ApplicationGatewayListResultPage struct {
3865	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
3866	aglr ApplicationGatewayListResult
3867}
3868
3869// NextWithContext advances to the next page of values.  If there was an error making
3870// the request the page does not advance and the error is returned.
3871func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
3872	if tracing.IsEnabled() {
3873		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
3874		defer func() {
3875			sc := -1
3876			if page.Response().Response.Response != nil {
3877				sc = page.Response().Response.Response.StatusCode
3878			}
3879			tracing.EndSpan(ctx, sc, err)
3880		}()
3881	}
3882	next, err := page.fn(ctx, page.aglr)
3883	if err != nil {
3884		return err
3885	}
3886	page.aglr = next
3887	return nil
3888}
3889
3890// Next advances to the next page of values.  If there was an error making
3891// the request the page does not advance and the error is returned.
3892// Deprecated: Use NextWithContext() instead.
3893func (page *ApplicationGatewayListResultPage) Next() error {
3894	return page.NextWithContext(context.Background())
3895}
3896
3897// NotDone returns true if the page enumeration should be started or is not yet complete.
3898func (page ApplicationGatewayListResultPage) NotDone() bool {
3899	return !page.aglr.IsEmpty()
3900}
3901
3902// Response returns the raw server response from the last page request.
3903func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
3904	return page.aglr
3905}
3906
3907// Values returns the slice of values for the current page or nil if there are no values.
3908func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
3909	if page.aglr.IsEmpty() {
3910		return nil
3911	}
3912	return *page.aglr.Value
3913}
3914
3915// Creates a new instance of the ApplicationGatewayListResultPage type.
3916func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
3917	return ApplicationGatewayListResultPage{fn: getNextPage}
3918}
3919
3920// ApplicationGatewayOnDemandProbe details of on demand test probe request.
3921type ApplicationGatewayOnDemandProbe struct {
3922	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3923	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3924	// Host - Host name to send the probe to.
3925	Host *string `json:"host,omitempty"`
3926	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
3927	Path *string `json:"path,omitempty"`
3928	// 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.
3929	Timeout *int32 `json:"timeout,omitempty"`
3930	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3931	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3932	// Match - Criterion for classifying a healthy probe response.
3933	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3934	// BackendAddressPool - Reference to backend pool of application gateway to which probe request will be sent.
3935	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3936	// BackendHTTPSettings - Reference to backend http setting of application gateway to be used for test probe.
3937	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3938}
3939
3940// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
3941type ApplicationGatewayPathRule struct {
3942	// ApplicationGatewayPathRulePropertiesFormat - Properties of the application gateway path rule.
3943	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
3944	// Name - Name of the path rule that is unique within an Application Gateway.
3945	Name *string `json:"name,omitempty"`
3946	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3947	Etag *string `json:"etag,omitempty"`
3948	// Type - READ-ONLY; Type of the resource.
3949	Type *string `json:"type,omitempty"`
3950	// ID - Resource ID.
3951	ID *string `json:"id,omitempty"`
3952}
3953
3954// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
3955func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
3956	objectMap := make(map[string]interface{})
3957	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
3958		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
3959	}
3960	if agpr.Name != nil {
3961		objectMap["name"] = agpr.Name
3962	}
3963	if agpr.ID != nil {
3964		objectMap["id"] = agpr.ID
3965	}
3966	return json.Marshal(objectMap)
3967}
3968
3969// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
3970func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
3971	var m map[string]*json.RawMessage
3972	err := json.Unmarshal(body, &m)
3973	if err != nil {
3974		return err
3975	}
3976	for k, v := range m {
3977		switch k {
3978		case "properties":
3979			if v != nil {
3980				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
3981				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
3982				if err != nil {
3983					return err
3984				}
3985				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
3986			}
3987		case "name":
3988			if v != nil {
3989				var name string
3990				err = json.Unmarshal(*v, &name)
3991				if err != nil {
3992					return err
3993				}
3994				agpr.Name = &name
3995			}
3996		case "etag":
3997			if v != nil {
3998				var etag string
3999				err = json.Unmarshal(*v, &etag)
4000				if err != nil {
4001					return err
4002				}
4003				agpr.Etag = &etag
4004			}
4005		case "type":
4006			if v != nil {
4007				var typeVar string
4008				err = json.Unmarshal(*v, &typeVar)
4009				if err != nil {
4010					return err
4011				}
4012				agpr.Type = &typeVar
4013			}
4014		case "id":
4015			if v != nil {
4016				var ID string
4017				err = json.Unmarshal(*v, &ID)
4018				if err != nil {
4019					return err
4020				}
4021				agpr.ID = &ID
4022			}
4023		}
4024	}
4025
4026	return nil
4027}
4028
4029// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
4030type ApplicationGatewayPathRulePropertiesFormat struct {
4031	// Paths - Path rules of URL path map.
4032	Paths *[]string `json:"paths,omitempty"`
4033	// BackendAddressPool - Backend address pool resource of URL path map path rule.
4034	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4035	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
4036	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4037	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
4038	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
4039	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
4040	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
4041	// ProvisioningState - READ-ONLY; The provisioning state of the path rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4042	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4043	// FirewallPolicy - Reference to the FirewallPolicy resource.
4044	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
4045}
4046
4047// ApplicationGatewayProbe probe of the application gateway.
4048type ApplicationGatewayProbe struct {
4049	// ApplicationGatewayProbePropertiesFormat - Properties of the application gateway probe.
4050	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
4051	// Name - Name of the probe that is unique within an Application Gateway.
4052	Name *string `json:"name,omitempty"`
4053	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4054	Etag *string `json:"etag,omitempty"`
4055	// Type - READ-ONLY; Type of the resource.
4056	Type *string `json:"type,omitempty"`
4057	// ID - Resource ID.
4058	ID *string `json:"id,omitempty"`
4059}
4060
4061// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
4062func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
4063	objectMap := make(map[string]interface{})
4064	if agp.ApplicationGatewayProbePropertiesFormat != nil {
4065		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
4066	}
4067	if agp.Name != nil {
4068		objectMap["name"] = agp.Name
4069	}
4070	if agp.ID != nil {
4071		objectMap["id"] = agp.ID
4072	}
4073	return json.Marshal(objectMap)
4074}
4075
4076// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
4077func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
4078	var m map[string]*json.RawMessage
4079	err := json.Unmarshal(body, &m)
4080	if err != nil {
4081		return err
4082	}
4083	for k, v := range m {
4084		switch k {
4085		case "properties":
4086			if v != nil {
4087				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
4088				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
4089				if err != nil {
4090					return err
4091				}
4092				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
4093			}
4094		case "name":
4095			if v != nil {
4096				var name string
4097				err = json.Unmarshal(*v, &name)
4098				if err != nil {
4099					return err
4100				}
4101				agp.Name = &name
4102			}
4103		case "etag":
4104			if v != nil {
4105				var etag string
4106				err = json.Unmarshal(*v, &etag)
4107				if err != nil {
4108					return err
4109				}
4110				agp.Etag = &etag
4111			}
4112		case "type":
4113			if v != nil {
4114				var typeVar string
4115				err = json.Unmarshal(*v, &typeVar)
4116				if err != nil {
4117					return err
4118				}
4119				agp.Type = &typeVar
4120			}
4121		case "id":
4122			if v != nil {
4123				var ID string
4124				err = json.Unmarshal(*v, &ID)
4125				if err != nil {
4126					return err
4127				}
4128				agp.ID = &ID
4129			}
4130		}
4131	}
4132
4133	return nil
4134}
4135
4136// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match.
4137type ApplicationGatewayProbeHealthResponseMatch struct {
4138	// Body - Body that must be contained in the health response. Default value is empty.
4139	Body *string `json:"body,omitempty"`
4140	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
4141	StatusCodes *[]string `json:"statusCodes,omitempty"`
4142}
4143
4144// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
4145type ApplicationGatewayProbePropertiesFormat struct {
4146	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
4147	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
4148	// Host - Host name to send the probe to.
4149	Host *string `json:"host,omitempty"`
4150	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
4151	Path *string `json:"path,omitempty"`
4152	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
4153	Interval *int32 `json:"interval,omitempty"`
4154	// 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.
4155	Timeout *int32 `json:"timeout,omitempty"`
4156	// 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.
4157	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
4158	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
4159	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
4160	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
4161	MinServers *int32 `json:"minServers,omitempty"`
4162	// Match - Criterion for classifying a healthy probe response.
4163	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
4164	// ProvisioningState - READ-ONLY; The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4165	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4166	// Port - Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case not set, port from http settings will be used. This property is valid for Standard_v2 and WAF_v2 only.
4167	Port *int32 `json:"port,omitempty"`
4168}
4169
4170// ApplicationGatewayPropertiesFormat properties of the application gateway.
4171type ApplicationGatewayPropertiesFormat struct {
4172	// Sku - SKU of the application gateway resource.
4173	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
4174	// SslPolicy - SSL policy of the application gateway resource.
4175	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
4176	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
4177	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
4178	// 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).
4179	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
4180	// 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).
4181	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
4182	// 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).
4183	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
4184	// 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).
4185	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
4186	// 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).
4187	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
4188	// 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).
4189	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
4190	// Probes - Probes of the application gateway resource.
4191	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
4192	// 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).
4193	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
4194	// 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).
4195	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
4196	// 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).
4197	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
4198	// 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).
4199	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
4200	// RequestRoutingRules - Request routing rules of the application gateway resource.
4201	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
4202	// RewriteRuleSets - Rewrite rules for the application gateway resource.
4203	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
4204	// 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).
4205	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
4206	// WebApplicationFirewallConfiguration - Web application firewall configuration.
4207	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
4208	// FirewallPolicy - Reference to the FirewallPolicy resource.
4209	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
4210	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
4211	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
4212	// EnableFips - Whether FIPS is enabled on the application gateway resource.
4213	EnableFips *bool `json:"enableFips,omitempty"`
4214	// AutoscaleConfiguration - Autoscale Configuration.
4215	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
4216	// ResourceGUID - READ-ONLY; The resource GUID property of the application gateway resource.
4217	ResourceGUID *string `json:"resourceGuid,omitempty"`
4218	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4219	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4220	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
4221	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
4222}
4223
4224// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
4225type ApplicationGatewayRedirectConfiguration struct {
4226	// ApplicationGatewayRedirectConfigurationPropertiesFormat - Properties of the application gateway redirect configuration.
4227	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
4228	// Name - Name of the redirect configuration that is unique within an Application Gateway.
4229	Name *string `json:"name,omitempty"`
4230	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4231	Etag *string `json:"etag,omitempty"`
4232	// Type - READ-ONLY; Type of the resource.
4233	Type *string `json:"type,omitempty"`
4234	// ID - Resource ID.
4235	ID *string `json:"id,omitempty"`
4236}
4237
4238// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
4239func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
4240	objectMap := make(map[string]interface{})
4241	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
4242		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
4243	}
4244	if agrc.Name != nil {
4245		objectMap["name"] = agrc.Name
4246	}
4247	if agrc.ID != nil {
4248		objectMap["id"] = agrc.ID
4249	}
4250	return json.Marshal(objectMap)
4251}
4252
4253// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
4254func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
4255	var m map[string]*json.RawMessage
4256	err := json.Unmarshal(body, &m)
4257	if err != nil {
4258		return err
4259	}
4260	for k, v := range m {
4261		switch k {
4262		case "properties":
4263			if v != nil {
4264				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
4265				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
4266				if err != nil {
4267					return err
4268				}
4269				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
4270			}
4271		case "name":
4272			if v != nil {
4273				var name string
4274				err = json.Unmarshal(*v, &name)
4275				if err != nil {
4276					return err
4277				}
4278				agrc.Name = &name
4279			}
4280		case "etag":
4281			if v != nil {
4282				var etag string
4283				err = json.Unmarshal(*v, &etag)
4284				if err != nil {
4285					return err
4286				}
4287				agrc.Etag = &etag
4288			}
4289		case "type":
4290			if v != nil {
4291				var typeVar string
4292				err = json.Unmarshal(*v, &typeVar)
4293				if err != nil {
4294					return err
4295				}
4296				agrc.Type = &typeVar
4297			}
4298		case "id":
4299			if v != nil {
4300				var ID string
4301				err = json.Unmarshal(*v, &ID)
4302				if err != nil {
4303					return err
4304				}
4305				agrc.ID = &ID
4306			}
4307		}
4308	}
4309
4310	return nil
4311}
4312
4313// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
4314// application gateway.
4315type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
4316	// RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
4317	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
4318	// TargetListener - Reference to a listener to redirect the request to.
4319	TargetListener *SubResource `json:"targetListener,omitempty"`
4320	// TargetURL - Url to redirect the request to.
4321	TargetURL *string `json:"targetUrl,omitempty"`
4322	// IncludePath - Include path in the redirected url.
4323	IncludePath *bool `json:"includePath,omitempty"`
4324	// IncludeQueryString - Include query string in the redirected url.
4325	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
4326	// RequestRoutingRules - Request routing specifying redirect configuration.
4327	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
4328	// URLPathMaps - Url path maps specifying default redirect configuration.
4329	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
4330	// PathRules - Path rules specifying redirect configuration.
4331	PathRules *[]SubResource `json:"pathRules,omitempty"`
4332}
4333
4334// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
4335type ApplicationGatewayRequestRoutingRule struct {
4336	// ApplicationGatewayRequestRoutingRulePropertiesFormat - Properties of the application gateway request routing rule.
4337	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
4338	// Name - Name of the request routing rule that is unique within an Application Gateway.
4339	Name *string `json:"name,omitempty"`
4340	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4341	Etag *string `json:"etag,omitempty"`
4342	// Type - READ-ONLY; Type of the resource.
4343	Type *string `json:"type,omitempty"`
4344	// ID - Resource ID.
4345	ID *string `json:"id,omitempty"`
4346}
4347
4348// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
4349func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
4350	objectMap := make(map[string]interface{})
4351	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
4352		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
4353	}
4354	if agrrr.Name != nil {
4355		objectMap["name"] = agrrr.Name
4356	}
4357	if agrrr.ID != nil {
4358		objectMap["id"] = agrrr.ID
4359	}
4360	return json.Marshal(objectMap)
4361}
4362
4363// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
4364func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
4365	var m map[string]*json.RawMessage
4366	err := json.Unmarshal(body, &m)
4367	if err != nil {
4368		return err
4369	}
4370	for k, v := range m {
4371		switch k {
4372		case "properties":
4373			if v != nil {
4374				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
4375				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
4376				if err != nil {
4377					return err
4378				}
4379				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
4380			}
4381		case "name":
4382			if v != nil {
4383				var name string
4384				err = json.Unmarshal(*v, &name)
4385				if err != nil {
4386					return err
4387				}
4388				agrrr.Name = &name
4389			}
4390		case "etag":
4391			if v != nil {
4392				var etag string
4393				err = json.Unmarshal(*v, &etag)
4394				if err != nil {
4395					return err
4396				}
4397				agrrr.Etag = &etag
4398			}
4399		case "type":
4400			if v != nil {
4401				var typeVar string
4402				err = json.Unmarshal(*v, &typeVar)
4403				if err != nil {
4404					return err
4405				}
4406				agrrr.Type = &typeVar
4407			}
4408		case "id":
4409			if v != nil {
4410				var ID string
4411				err = json.Unmarshal(*v, &ID)
4412				if err != nil {
4413					return err
4414				}
4415				agrrr.ID = &ID
4416			}
4417		}
4418	}
4419
4420	return nil
4421}
4422
4423// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
4424// application gateway.
4425type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
4426	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
4427	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
4428	// Priority - Priority of the request routing rule.
4429	Priority *int32 `json:"priority,omitempty"`
4430	// BackendAddressPool - Backend address pool resource of the application gateway.
4431	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4432	// BackendHTTPSettings - Backend http settings resource of the application gateway.
4433	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4434	// HTTPListener - Http listener resource of the application gateway.
4435	HTTPListener *SubResource `json:"httpListener,omitempty"`
4436	// URLPathMap - URL path map resource of the application gateway.
4437	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
4438	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
4439	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
4440	// RedirectConfiguration - Redirect configuration resource of the application gateway.
4441	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
4442	// ProvisioningState - READ-ONLY; The provisioning state of the request routing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4443	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4444}
4445
4446// ApplicationGatewayRewriteRule rewrite rule of an application gateway.
4447type ApplicationGatewayRewriteRule struct {
4448	// Name - Name of the rewrite rule that is unique within an Application Gateway.
4449	Name *string `json:"name,omitempty"`
4450	// RuleSequence - Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a RewriteRuleSet.
4451	RuleSequence *int32 `json:"ruleSequence,omitempty"`
4452	// Conditions - Conditions based on which the action set execution will be evaluated.
4453	Conditions *[]ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`
4454	// ActionSet - Set of actions to be done as part of the rewrite Rule.
4455	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
4456}
4457
4458// ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
4459type ApplicationGatewayRewriteRuleActionSet struct {
4460	// RequestHeaderConfigurations - Request Header Actions in the Action Set.
4461	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
4462	// ResponseHeaderConfigurations - Response Header Actions in the Action Set.
4463	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
4464	// URLConfiguration - Url Configuration Action in the Action Set.
4465	URLConfiguration *ApplicationGatewayURLConfiguration `json:"urlConfiguration,omitempty"`
4466}
4467
4468// ApplicationGatewayRewriteRuleCondition set of conditions in the Rewrite Rule in Application Gateway.
4469type ApplicationGatewayRewriteRuleCondition struct {
4470	// Variable - The condition parameter of the RewriteRuleCondition.
4471	Variable *string `json:"variable,omitempty"`
4472	// Pattern - The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
4473	Pattern *string `json:"pattern,omitempty"`
4474	// IgnoreCase - Setting this paramter to truth value with force the pattern to do a case in-sensitive comparison.
4475	IgnoreCase *bool `json:"ignoreCase,omitempty"`
4476	// Negate - Setting this value as truth will force to check the negation of the condition given by the user.
4477	Negate *bool `json:"negate,omitempty"`
4478}
4479
4480// ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
4481type ApplicationGatewayRewriteRuleSet struct {
4482	// ApplicationGatewayRewriteRuleSetPropertiesFormat - Properties of the application gateway rewrite rule set.
4483	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
4484	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
4485	Name *string `json:"name,omitempty"`
4486	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4487	Etag *string `json:"etag,omitempty"`
4488	// ID - Resource ID.
4489	ID *string `json:"id,omitempty"`
4490}
4491
4492// MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
4493func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
4494	objectMap := make(map[string]interface{})
4495	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
4496		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
4497	}
4498	if agrrs.Name != nil {
4499		objectMap["name"] = agrrs.Name
4500	}
4501	if agrrs.ID != nil {
4502		objectMap["id"] = agrrs.ID
4503	}
4504	return json.Marshal(objectMap)
4505}
4506
4507// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
4508func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
4509	var m map[string]*json.RawMessage
4510	err := json.Unmarshal(body, &m)
4511	if err != nil {
4512		return err
4513	}
4514	for k, v := range m {
4515		switch k {
4516		case "properties":
4517			if v != nil {
4518				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
4519				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
4520				if err != nil {
4521					return err
4522				}
4523				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
4524			}
4525		case "name":
4526			if v != nil {
4527				var name string
4528				err = json.Unmarshal(*v, &name)
4529				if err != nil {
4530					return err
4531				}
4532				agrrs.Name = &name
4533			}
4534		case "etag":
4535			if v != nil {
4536				var etag string
4537				err = json.Unmarshal(*v, &etag)
4538				if err != nil {
4539					return err
4540				}
4541				agrrs.Etag = &etag
4542			}
4543		case "id":
4544			if v != nil {
4545				var ID string
4546				err = json.Unmarshal(*v, &ID)
4547				if err != nil {
4548					return err
4549				}
4550				agrrs.ID = &ID
4551			}
4552		}
4553	}
4554
4555	return nil
4556}
4557
4558// ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
4559// gateway.
4560type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
4561	// RewriteRules - Rewrite rules in the rewrite rule set.
4562	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
4563	// ProvisioningState - READ-ONLY; The provisioning state of the rewrite rule set resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4564	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4565}
4566
4567// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
4568// long-running operation.
4569type ApplicationGatewaysBackendHealthFuture struct {
4570	azure.Future
4571}
4572
4573// Result returns the result of the asynchronous operation.
4574// If the operation has not completed it will return an error.
4575func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
4576	var done bool
4577	done, err = future.DoneWithContext(context.Background(), client)
4578	if err != nil {
4579		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
4580		return
4581	}
4582	if !done {
4583		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
4584		return
4585	}
4586	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4587	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
4588		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
4589		if err != nil {
4590			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
4591		}
4592	}
4593	return
4594}
4595
4596// ApplicationGatewaysBackendHealthOnDemandFuture an abstraction for monitoring and retrieving the results
4597// of a long-running operation.
4598type ApplicationGatewaysBackendHealthOnDemandFuture struct {
4599	azure.Future
4600}
4601
4602// Result returns the result of the asynchronous operation.
4603// If the operation has not completed it will return an error.
4604func (future *ApplicationGatewaysBackendHealthOnDemandFuture) Result(client ApplicationGatewaysClient) (agbhod ApplicationGatewayBackendHealthOnDemand, err error) {
4605	var done bool
4606	done, err = future.DoneWithContext(context.Background(), client)
4607	if err != nil {
4608		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", future.Response(), "Polling failure")
4609		return
4610	}
4611	if !done {
4612		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthOnDemandFuture")
4613		return
4614	}
4615	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4616	if agbhod.Response.Response, err = future.GetResult(sender); err == nil && agbhod.Response.Response.StatusCode != http.StatusNoContent {
4617		agbhod, err = client.BackendHealthOnDemandResponder(agbhod.Response.Response)
4618		if err != nil {
4619			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", agbhod.Response.Response, "Failure responding to request")
4620		}
4621	}
4622	return
4623}
4624
4625// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
4626// long-running operation.
4627type ApplicationGatewaysCreateOrUpdateFuture struct {
4628	azure.Future
4629}
4630
4631// Result returns the result of the asynchronous operation.
4632// If the operation has not completed it will return an error.
4633func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4634	var done bool
4635	done, err = future.DoneWithContext(context.Background(), client)
4636	if err != nil {
4637		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4638		return
4639	}
4640	if !done {
4641		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
4642		return
4643	}
4644	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4645	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4646		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
4647		if err != nil {
4648			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
4649		}
4650	}
4651	return
4652}
4653
4654// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
4655// long-running operation.
4656type ApplicationGatewaysDeleteFuture struct {
4657	azure.Future
4658}
4659
4660// Result returns the result of the asynchronous operation.
4661// If the operation has not completed it will return an error.
4662func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4663	var done bool
4664	done, err = future.DoneWithContext(context.Background(), client)
4665	if err != nil {
4666		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
4667		return
4668	}
4669	if !done {
4670		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
4671		return
4672	}
4673	ar.Response = future.Response()
4674	return
4675}
4676
4677// ApplicationGatewaySku SKU of an application gateway.
4678type ApplicationGatewaySku struct {
4679	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
4680	Name ApplicationGatewaySkuName `json:"name,omitempty"`
4681	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
4682	Tier ApplicationGatewayTier `json:"tier,omitempty"`
4683	// Capacity - Capacity (instance count) of an application gateway.
4684	Capacity *int32 `json:"capacity,omitempty"`
4685}
4686
4687// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
4688type ApplicationGatewaySslCertificate struct {
4689	// ApplicationGatewaySslCertificatePropertiesFormat - Properties of the application gateway SSL certificate.
4690	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
4691	// Name - Name of the SSL certificate that is unique within an Application Gateway.
4692	Name *string `json:"name,omitempty"`
4693	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4694	Etag *string `json:"etag,omitempty"`
4695	// Type - READ-ONLY; Type of the resource.
4696	Type *string `json:"type,omitempty"`
4697	// ID - Resource ID.
4698	ID *string `json:"id,omitempty"`
4699}
4700
4701// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
4702func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
4703	objectMap := make(map[string]interface{})
4704	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
4705		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
4706	}
4707	if agsc.Name != nil {
4708		objectMap["name"] = agsc.Name
4709	}
4710	if agsc.ID != nil {
4711		objectMap["id"] = agsc.ID
4712	}
4713	return json.Marshal(objectMap)
4714}
4715
4716// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
4717func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
4718	var m map[string]*json.RawMessage
4719	err := json.Unmarshal(body, &m)
4720	if err != nil {
4721		return err
4722	}
4723	for k, v := range m {
4724		switch k {
4725		case "properties":
4726			if v != nil {
4727				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
4728				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
4729				if err != nil {
4730					return err
4731				}
4732				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
4733			}
4734		case "name":
4735			if v != nil {
4736				var name string
4737				err = json.Unmarshal(*v, &name)
4738				if err != nil {
4739					return err
4740				}
4741				agsc.Name = &name
4742			}
4743		case "etag":
4744			if v != nil {
4745				var etag string
4746				err = json.Unmarshal(*v, &etag)
4747				if err != nil {
4748					return err
4749				}
4750				agsc.Etag = &etag
4751			}
4752		case "type":
4753			if v != nil {
4754				var typeVar string
4755				err = json.Unmarshal(*v, &typeVar)
4756				if err != nil {
4757					return err
4758				}
4759				agsc.Type = &typeVar
4760			}
4761		case "id":
4762			if v != nil {
4763				var ID string
4764				err = json.Unmarshal(*v, &ID)
4765				if err != nil {
4766					return err
4767				}
4768				agsc.ID = &ID
4769			}
4770		}
4771	}
4772
4773	return nil
4774}
4775
4776// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
4777// gateway.
4778type ApplicationGatewaySslCertificatePropertiesFormat struct {
4779	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
4780	Data *string `json:"data,omitempty"`
4781	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
4782	Password *string `json:"password,omitempty"`
4783	// PublicCertData - READ-ONLY; Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
4784	PublicCertData *string `json:"publicCertData,omitempty"`
4785	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4786	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4787	// ProvisioningState - READ-ONLY; The provisioning state of the SSL certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4788	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4789}
4790
4791// ApplicationGatewaySslPolicy application Gateway Ssl policy.
4792type ApplicationGatewaySslPolicy struct {
4793	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
4794	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
4795	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
4796	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
4797	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
4798	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
4799	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
4800	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4801	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4802	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4803}
4804
4805// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy.
4806type ApplicationGatewaySslPredefinedPolicy struct {
4807	autorest.Response `json:"-"`
4808	// Name - Name of the Ssl predefined policy.
4809	Name *string `json:"name,omitempty"`
4810	// ApplicationGatewaySslPredefinedPolicyPropertiesFormat - Properties of the application gateway SSL predefined policy.
4811	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
4812	// ID - Resource ID.
4813	ID *string `json:"id,omitempty"`
4814}
4815
4816// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
4817func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
4818	objectMap := make(map[string]interface{})
4819	if agspp.Name != nil {
4820		objectMap["name"] = agspp.Name
4821	}
4822	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
4823		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4824	}
4825	if agspp.ID != nil {
4826		objectMap["id"] = agspp.ID
4827	}
4828	return json.Marshal(objectMap)
4829}
4830
4831// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
4832func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
4833	var m map[string]*json.RawMessage
4834	err := json.Unmarshal(body, &m)
4835	if err != nil {
4836		return err
4837	}
4838	for k, v := range m {
4839		switch k {
4840		case "name":
4841			if v != nil {
4842				var name string
4843				err = json.Unmarshal(*v, &name)
4844				if err != nil {
4845					return err
4846				}
4847				agspp.Name = &name
4848			}
4849		case "properties":
4850			if v != nil {
4851				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4852				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
4853				if err != nil {
4854					return err
4855				}
4856				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
4857			}
4858		case "id":
4859			if v != nil {
4860				var ID string
4861				err = json.Unmarshal(*v, &ID)
4862				if err != nil {
4863					return err
4864				}
4865				agspp.ID = &ID
4866			}
4867		}
4868	}
4869
4870	return nil
4871}
4872
4873// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
4874// ApplicationGatewaySslPredefinedPolicy.
4875type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
4876	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
4877	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4878	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4879	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4880}
4881
4882// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
4883// long-running operation.
4884type ApplicationGatewaysStartFuture struct {
4885	azure.Future
4886}
4887
4888// Result returns the result of the asynchronous operation.
4889// If the operation has not completed it will return an error.
4890func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4891	var done bool
4892	done, err = future.DoneWithContext(context.Background(), client)
4893	if err != nil {
4894		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
4895		return
4896	}
4897	if !done {
4898		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
4899		return
4900	}
4901	ar.Response = future.Response()
4902	return
4903}
4904
4905// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
4906// operation.
4907type ApplicationGatewaysStopFuture struct {
4908	azure.Future
4909}
4910
4911// Result returns the result of the asynchronous operation.
4912// If the operation has not completed it will return an error.
4913func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4914	var done bool
4915	done, err = future.DoneWithContext(context.Background(), client)
4916	if err != nil {
4917		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
4918		return
4919	}
4920	if !done {
4921		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
4922		return
4923	}
4924	ar.Response = future.Response()
4925	return
4926}
4927
4928// ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
4929type ApplicationGatewayTrustedRootCertificate struct {
4930	// ApplicationGatewayTrustedRootCertificatePropertiesFormat - Properties of the application gateway trusted root certificate.
4931	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
4932	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
4933	Name *string `json:"name,omitempty"`
4934	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4935	Etag *string `json:"etag,omitempty"`
4936	// Type - READ-ONLY; Type of the resource.
4937	Type *string `json:"type,omitempty"`
4938	// ID - Resource ID.
4939	ID *string `json:"id,omitempty"`
4940}
4941
4942// MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
4943func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
4944	objectMap := make(map[string]interface{})
4945	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
4946		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
4947	}
4948	if agtrc.Name != nil {
4949		objectMap["name"] = agtrc.Name
4950	}
4951	if agtrc.ID != nil {
4952		objectMap["id"] = agtrc.ID
4953	}
4954	return json.Marshal(objectMap)
4955}
4956
4957// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
4958func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
4959	var m map[string]*json.RawMessage
4960	err := json.Unmarshal(body, &m)
4961	if err != nil {
4962		return err
4963	}
4964	for k, v := range m {
4965		switch k {
4966		case "properties":
4967			if v != nil {
4968				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
4969				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
4970				if err != nil {
4971					return err
4972				}
4973				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
4974			}
4975		case "name":
4976			if v != nil {
4977				var name string
4978				err = json.Unmarshal(*v, &name)
4979				if err != nil {
4980					return err
4981				}
4982				agtrc.Name = &name
4983			}
4984		case "etag":
4985			if v != nil {
4986				var etag string
4987				err = json.Unmarshal(*v, &etag)
4988				if err != nil {
4989					return err
4990				}
4991				agtrc.Etag = &etag
4992			}
4993		case "type":
4994			if v != nil {
4995				var typeVar string
4996				err = json.Unmarshal(*v, &typeVar)
4997				if err != nil {
4998					return err
4999				}
5000				agtrc.Type = &typeVar
5001			}
5002		case "id":
5003			if v != nil {
5004				var ID string
5005				err = json.Unmarshal(*v, &ID)
5006				if err != nil {
5007					return err
5008				}
5009				agtrc.ID = &ID
5010			}
5011		}
5012	}
5013
5014	return nil
5015}
5016
5017// ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
5018// application gateway.
5019type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
5020	// Data - Certificate public data.
5021	Data *string `json:"data,omitempty"`
5022	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
5023	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
5024	// ProvisioningState - READ-ONLY; The provisioning state of the trusted root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5025	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5026}
5027
5028// ApplicationGatewayURLConfiguration url configuration of the Actions set in Application Gateway.
5029type ApplicationGatewayURLConfiguration struct {
5030	// ModifiedPath - Url path which user has provided for url rewrite. Null means no path will be updated. Default value is null.
5031	ModifiedPath *string `json:"modifiedPath,omitempty"`
5032	// ModifiedQueryString - Query string which user has provided for url rewrite. Null means no query string will be updated. Default value is null.
5033	ModifiedQueryString *string `json:"modifiedQueryString,omitempty"`
5034	// Reroute - If set as true, it will re-evaluate the url path map provided in path based request routing rules using modified path. Default value is false.
5035	Reroute *bool `json:"reroute,omitempty"`
5036}
5037
5038// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
5039// PathBasedRouting.
5040type ApplicationGatewayURLPathMap struct {
5041	// ApplicationGatewayURLPathMapPropertiesFormat - Properties of the application gateway URL path map.
5042	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
5043	// Name - Name of the URL path map that is unique within an Application Gateway.
5044	Name *string `json:"name,omitempty"`
5045	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5046	Etag *string `json:"etag,omitempty"`
5047	// Type - READ-ONLY; Type of the resource.
5048	Type *string `json:"type,omitempty"`
5049	// ID - Resource ID.
5050	ID *string `json:"id,omitempty"`
5051}
5052
5053// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
5054func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
5055	objectMap := make(map[string]interface{})
5056	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
5057		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
5058	}
5059	if agupm.Name != nil {
5060		objectMap["name"] = agupm.Name
5061	}
5062	if agupm.ID != nil {
5063		objectMap["id"] = agupm.ID
5064	}
5065	return json.Marshal(objectMap)
5066}
5067
5068// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
5069func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
5070	var m map[string]*json.RawMessage
5071	err := json.Unmarshal(body, &m)
5072	if err != nil {
5073		return err
5074	}
5075	for k, v := range m {
5076		switch k {
5077		case "properties":
5078			if v != nil {
5079				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
5080				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
5081				if err != nil {
5082					return err
5083				}
5084				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
5085			}
5086		case "name":
5087			if v != nil {
5088				var name string
5089				err = json.Unmarshal(*v, &name)
5090				if err != nil {
5091					return err
5092				}
5093				agupm.Name = &name
5094			}
5095		case "etag":
5096			if v != nil {
5097				var etag string
5098				err = json.Unmarshal(*v, &etag)
5099				if err != nil {
5100					return err
5101				}
5102				agupm.Etag = &etag
5103			}
5104		case "type":
5105			if v != nil {
5106				var typeVar string
5107				err = json.Unmarshal(*v, &typeVar)
5108				if err != nil {
5109					return err
5110				}
5111				agupm.Type = &typeVar
5112			}
5113		case "id":
5114			if v != nil {
5115				var ID string
5116				err = json.Unmarshal(*v, &ID)
5117				if err != nil {
5118					return err
5119				}
5120				agupm.ID = &ID
5121			}
5122		}
5123	}
5124
5125	return nil
5126}
5127
5128// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
5129type ApplicationGatewayURLPathMapPropertiesFormat struct {
5130	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
5131	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
5132	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
5133	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
5134	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
5135	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
5136	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
5137	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
5138	// PathRules - Path rule of URL path map resource.
5139	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
5140	// ProvisioningState - READ-ONLY; The provisioning state of the URL path map resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5141	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5142}
5143
5144// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
5145// configuration.
5146type ApplicationGatewayWebApplicationFirewallConfiguration struct {
5147	// Enabled - Whether the web application firewall is enabled or not.
5148	Enabled *bool `json:"enabled,omitempty"`
5149	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
5150	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
5151	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
5152	RuleSetType *string `json:"ruleSetType,omitempty"`
5153	// RuleSetVersion - The version of the rule set type.
5154	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
5155	// DisabledRuleGroups - The disabled rule groups.
5156	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
5157	// RequestBodyCheck - Whether allow WAF to check request Body.
5158	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
5159	// MaxRequestBodySize - Maximum request body size for WAF.
5160	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
5161	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
5162	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
5163	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
5164	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
5165	// Exclusions - The exclusion list.
5166	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
5167}
5168
5169// ApplicationRuleCondition rule condition of type application.
5170type ApplicationRuleCondition struct {
5171	// SourceAddresses - List of source IP addresses for this rule.
5172	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
5173	// DestinationAddresses - List of destination IP addresses or Service Tags.
5174	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
5175	// Protocols - Array of Application Protocols.
5176	Protocols *[]FirewallPolicyRuleConditionApplicationProtocol `json:"protocols,omitempty"`
5177	// TargetFqdns - List of FQDNs for this rule condition.
5178	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
5179	// FqdnTags - List of FQDN Tags for this rule condition.
5180	FqdnTags *[]string `json:"fqdnTags,omitempty"`
5181	// Name - Name of the rule condition.
5182	Name *string `json:"name,omitempty"`
5183	// Description - Description of the rule condition.
5184	Description *string `json:"description,omitempty"`
5185	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
5186	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
5187}
5188
5189// MarshalJSON is the custom marshaler for ApplicationRuleCondition.
5190func (arc ApplicationRuleCondition) MarshalJSON() ([]byte, error) {
5191	arc.RuleConditionType = RuleConditionTypeApplicationRuleCondition
5192	objectMap := make(map[string]interface{})
5193	if arc.SourceAddresses != nil {
5194		objectMap["sourceAddresses"] = arc.SourceAddresses
5195	}
5196	if arc.DestinationAddresses != nil {
5197		objectMap["destinationAddresses"] = arc.DestinationAddresses
5198	}
5199	if arc.Protocols != nil {
5200		objectMap["protocols"] = arc.Protocols
5201	}
5202	if arc.TargetFqdns != nil {
5203		objectMap["targetFqdns"] = arc.TargetFqdns
5204	}
5205	if arc.FqdnTags != nil {
5206		objectMap["fqdnTags"] = arc.FqdnTags
5207	}
5208	if arc.Name != nil {
5209		objectMap["name"] = arc.Name
5210	}
5211	if arc.Description != nil {
5212		objectMap["description"] = arc.Description
5213	}
5214	if arc.RuleConditionType != "" {
5215		objectMap["ruleConditionType"] = arc.RuleConditionType
5216	}
5217	return json.Marshal(objectMap)
5218}
5219
5220// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5221func (arc ApplicationRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
5222	return &arc, true
5223}
5224
5225// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5226func (arc ApplicationRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
5227	return nil, false
5228}
5229
5230// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5231func (arc ApplicationRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
5232	return nil, false
5233}
5234
5235// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5236func (arc ApplicationRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
5237	return &arc, true
5238}
5239
5240// ApplicationSecurityGroup an application security group in a resource group.
5241type ApplicationSecurityGroup struct {
5242	autorest.Response `json:"-"`
5243	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
5244	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
5245	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5246	Etag *string `json:"etag,omitempty"`
5247	// ID - Resource ID.
5248	ID *string `json:"id,omitempty"`
5249	// Name - READ-ONLY; Resource name.
5250	Name *string `json:"name,omitempty"`
5251	// Type - READ-ONLY; Resource type.
5252	Type *string `json:"type,omitempty"`
5253	// Location - Resource location.
5254	Location *string `json:"location,omitempty"`
5255	// Tags - Resource tags.
5256	Tags map[string]*string `json:"tags"`
5257}
5258
5259// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
5260func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
5261	objectMap := make(map[string]interface{})
5262	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
5263		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
5264	}
5265	if asg.ID != nil {
5266		objectMap["id"] = asg.ID
5267	}
5268	if asg.Location != nil {
5269		objectMap["location"] = asg.Location
5270	}
5271	if asg.Tags != nil {
5272		objectMap["tags"] = asg.Tags
5273	}
5274	return json.Marshal(objectMap)
5275}
5276
5277// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
5278func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
5279	var m map[string]*json.RawMessage
5280	err := json.Unmarshal(body, &m)
5281	if err != nil {
5282		return err
5283	}
5284	for k, v := range m {
5285		switch k {
5286		case "properties":
5287			if v != nil {
5288				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
5289				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
5290				if err != nil {
5291					return err
5292				}
5293				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
5294			}
5295		case "etag":
5296			if v != nil {
5297				var etag string
5298				err = json.Unmarshal(*v, &etag)
5299				if err != nil {
5300					return err
5301				}
5302				asg.Etag = &etag
5303			}
5304		case "id":
5305			if v != nil {
5306				var ID string
5307				err = json.Unmarshal(*v, &ID)
5308				if err != nil {
5309					return err
5310				}
5311				asg.ID = &ID
5312			}
5313		case "name":
5314			if v != nil {
5315				var name string
5316				err = json.Unmarshal(*v, &name)
5317				if err != nil {
5318					return err
5319				}
5320				asg.Name = &name
5321			}
5322		case "type":
5323			if v != nil {
5324				var typeVar string
5325				err = json.Unmarshal(*v, &typeVar)
5326				if err != nil {
5327					return err
5328				}
5329				asg.Type = &typeVar
5330			}
5331		case "location":
5332			if v != nil {
5333				var location string
5334				err = json.Unmarshal(*v, &location)
5335				if err != nil {
5336					return err
5337				}
5338				asg.Location = &location
5339			}
5340		case "tags":
5341			if v != nil {
5342				var tags map[string]*string
5343				err = json.Unmarshal(*v, &tags)
5344				if err != nil {
5345					return err
5346				}
5347				asg.Tags = tags
5348			}
5349		}
5350	}
5351
5352	return nil
5353}
5354
5355// ApplicationSecurityGroupListResult a list of application security groups.
5356type ApplicationSecurityGroupListResult struct {
5357	autorest.Response `json:"-"`
5358	// Value - A list of application security groups.
5359	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
5360	// NextLink - READ-ONLY; The URL to get the next set of results.
5361	NextLink *string `json:"nextLink,omitempty"`
5362}
5363
5364// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
5365// ApplicationSecurityGroup values.
5366type ApplicationSecurityGroupListResultIterator struct {
5367	i    int
5368	page ApplicationSecurityGroupListResultPage
5369}
5370
5371// NextWithContext advances to the next value.  If there was an error making
5372// the request the iterator does not advance and the error is returned.
5373func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
5374	if tracing.IsEnabled() {
5375		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
5376		defer func() {
5377			sc := -1
5378			if iter.Response().Response.Response != nil {
5379				sc = iter.Response().Response.Response.StatusCode
5380			}
5381			tracing.EndSpan(ctx, sc, err)
5382		}()
5383	}
5384	iter.i++
5385	if iter.i < len(iter.page.Values()) {
5386		return nil
5387	}
5388	err = iter.page.NextWithContext(ctx)
5389	if err != nil {
5390		iter.i--
5391		return err
5392	}
5393	iter.i = 0
5394	return nil
5395}
5396
5397// Next advances to the next value.  If there was an error making
5398// the request the iterator does not advance and the error is returned.
5399// Deprecated: Use NextWithContext() instead.
5400func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
5401	return iter.NextWithContext(context.Background())
5402}
5403
5404// NotDone returns true if the enumeration should be started or is not yet complete.
5405func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
5406	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5407}
5408
5409// Response returns the raw server response from the last page request.
5410func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
5411	return iter.page.Response()
5412}
5413
5414// Value returns the current value or a zero-initialized value if the
5415// iterator has advanced beyond the end of the collection.
5416func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
5417	if !iter.page.NotDone() {
5418		return ApplicationSecurityGroup{}
5419	}
5420	return iter.page.Values()[iter.i]
5421}
5422
5423// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
5424func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
5425	return ApplicationSecurityGroupListResultIterator{page: page}
5426}
5427
5428// IsEmpty returns true if the ListResult contains no values.
5429func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
5430	return asglr.Value == nil || len(*asglr.Value) == 0
5431}
5432
5433// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
5434// It returns nil if no more results exist.
5435func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
5436	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
5437		return nil, nil
5438	}
5439	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5440		autorest.AsJSON(),
5441		autorest.AsGet(),
5442		autorest.WithBaseURL(to.String(asglr.NextLink)))
5443}
5444
5445// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
5446type ApplicationSecurityGroupListResultPage struct {
5447	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
5448	asglr ApplicationSecurityGroupListResult
5449}
5450
5451// NextWithContext advances to the next page of values.  If there was an error making
5452// the request the page does not advance and the error is returned.
5453func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
5454	if tracing.IsEnabled() {
5455		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
5456		defer func() {
5457			sc := -1
5458			if page.Response().Response.Response != nil {
5459				sc = page.Response().Response.Response.StatusCode
5460			}
5461			tracing.EndSpan(ctx, sc, err)
5462		}()
5463	}
5464	next, err := page.fn(ctx, page.asglr)
5465	if err != nil {
5466		return err
5467	}
5468	page.asglr = next
5469	return nil
5470}
5471
5472// Next advances to the next page of values.  If there was an error making
5473// the request the page does not advance and the error is returned.
5474// Deprecated: Use NextWithContext() instead.
5475func (page *ApplicationSecurityGroupListResultPage) Next() error {
5476	return page.NextWithContext(context.Background())
5477}
5478
5479// NotDone returns true if the page enumeration should be started or is not yet complete.
5480func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
5481	return !page.asglr.IsEmpty()
5482}
5483
5484// Response returns the raw server response from the last page request.
5485func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
5486	return page.asglr
5487}
5488
5489// Values returns the slice of values for the current page or nil if there are no values.
5490func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
5491	if page.asglr.IsEmpty() {
5492		return nil
5493	}
5494	return *page.asglr.Value
5495}
5496
5497// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
5498func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
5499	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
5500}
5501
5502// ApplicationSecurityGroupPropertiesFormat application security group properties.
5503type ApplicationSecurityGroupPropertiesFormat struct {
5504	// 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.
5505	ResourceGUID *string `json:"resourceGuid,omitempty"`
5506	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5507	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5508}
5509
5510// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
5511// of a long-running operation.
5512type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
5513	azure.Future
5514}
5515
5516// Result returns the result of the asynchronous operation.
5517// If the operation has not completed it will return an error.
5518func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5519	var done bool
5520	done, err = future.DoneWithContext(context.Background(), client)
5521	if err != nil {
5522		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5523		return
5524	}
5525	if !done {
5526		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
5527		return
5528	}
5529	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5530	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5531		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
5532		if err != nil {
5533			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
5534		}
5535	}
5536	return
5537}
5538
5539// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
5540// long-running operation.
5541type ApplicationSecurityGroupsDeleteFuture struct {
5542	azure.Future
5543}
5544
5545// Result returns the result of the asynchronous operation.
5546// If the operation has not completed it will return an error.
5547func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
5548	var done bool
5549	done, err = future.DoneWithContext(context.Background(), client)
5550	if err != nil {
5551		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
5552		return
5553	}
5554	if !done {
5555		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
5556		return
5557	}
5558	ar.Response = future.Response()
5559	return
5560}
5561
5562// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
5563// that belongs to an ExpressRouteCircuit.
5564type AuthorizationListResult struct {
5565	autorest.Response `json:"-"`
5566	// Value - The authorizations in an ExpressRoute Circuit.
5567	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
5568	// NextLink - The URL to get the next set of results.
5569	NextLink *string `json:"nextLink,omitempty"`
5570}
5571
5572// AuthorizationListResultIterator provides access to a complete listing of
5573// ExpressRouteCircuitAuthorization values.
5574type AuthorizationListResultIterator struct {
5575	i    int
5576	page AuthorizationListResultPage
5577}
5578
5579// NextWithContext advances to the next value.  If there was an error making
5580// the request the iterator does not advance and the error is returned.
5581func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
5582	if tracing.IsEnabled() {
5583		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
5584		defer func() {
5585			sc := -1
5586			if iter.Response().Response.Response != nil {
5587				sc = iter.Response().Response.Response.StatusCode
5588			}
5589			tracing.EndSpan(ctx, sc, err)
5590		}()
5591	}
5592	iter.i++
5593	if iter.i < len(iter.page.Values()) {
5594		return nil
5595	}
5596	err = iter.page.NextWithContext(ctx)
5597	if err != nil {
5598		iter.i--
5599		return err
5600	}
5601	iter.i = 0
5602	return nil
5603}
5604
5605// Next advances to the next value.  If there was an error making
5606// the request the iterator does not advance and the error is returned.
5607// Deprecated: Use NextWithContext() instead.
5608func (iter *AuthorizationListResultIterator) Next() error {
5609	return iter.NextWithContext(context.Background())
5610}
5611
5612// NotDone returns true if the enumeration should be started or is not yet complete.
5613func (iter AuthorizationListResultIterator) NotDone() bool {
5614	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5615}
5616
5617// Response returns the raw server response from the last page request.
5618func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
5619	return iter.page.Response()
5620}
5621
5622// Value returns the current value or a zero-initialized value if the
5623// iterator has advanced beyond the end of the collection.
5624func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
5625	if !iter.page.NotDone() {
5626		return ExpressRouteCircuitAuthorization{}
5627	}
5628	return iter.page.Values()[iter.i]
5629}
5630
5631// Creates a new instance of the AuthorizationListResultIterator type.
5632func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
5633	return AuthorizationListResultIterator{page: page}
5634}
5635
5636// IsEmpty returns true if the ListResult contains no values.
5637func (alr AuthorizationListResult) IsEmpty() bool {
5638	return alr.Value == nil || len(*alr.Value) == 0
5639}
5640
5641// authorizationListResultPreparer prepares a request to retrieve the next set of results.
5642// It returns nil if no more results exist.
5643func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
5644	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
5645		return nil, nil
5646	}
5647	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5648		autorest.AsJSON(),
5649		autorest.AsGet(),
5650		autorest.WithBaseURL(to.String(alr.NextLink)))
5651}
5652
5653// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
5654type AuthorizationListResultPage struct {
5655	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
5656	alr AuthorizationListResult
5657}
5658
5659// NextWithContext advances to the next page of values.  If there was an error making
5660// the request the page does not advance and the error is returned.
5661func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
5662	if tracing.IsEnabled() {
5663		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
5664		defer func() {
5665			sc := -1
5666			if page.Response().Response.Response != nil {
5667				sc = page.Response().Response.Response.StatusCode
5668			}
5669			tracing.EndSpan(ctx, sc, err)
5670		}()
5671	}
5672	next, err := page.fn(ctx, page.alr)
5673	if err != nil {
5674		return err
5675	}
5676	page.alr = next
5677	return nil
5678}
5679
5680// Next advances to the next page of values.  If there was an error making
5681// the request the page does not advance and the error is returned.
5682// Deprecated: Use NextWithContext() instead.
5683func (page *AuthorizationListResultPage) Next() error {
5684	return page.NextWithContext(context.Background())
5685}
5686
5687// NotDone returns true if the page enumeration should be started or is not yet complete.
5688func (page AuthorizationListResultPage) NotDone() bool {
5689	return !page.alr.IsEmpty()
5690}
5691
5692// Response returns the raw server response from the last page request.
5693func (page AuthorizationListResultPage) Response() AuthorizationListResult {
5694	return page.alr
5695}
5696
5697// Values returns the slice of values for the current page or nil if there are no values.
5698func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
5699	if page.alr.IsEmpty() {
5700		return nil
5701	}
5702	return *page.alr.Value
5703}
5704
5705// Creates a new instance of the AuthorizationListResultPage type.
5706func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
5707	return AuthorizationListResultPage{fn: getNextPage}
5708}
5709
5710// AuthorizationPropertiesFormat properties of ExpressRouteCircuitAuthorization.
5711type AuthorizationPropertiesFormat struct {
5712	// AuthorizationKey - The authorization key.
5713	AuthorizationKey *string `json:"authorizationKey,omitempty"`
5714	// AuthorizationUseStatus - The authorization use status. Possible values include: 'Available', 'InUse'
5715	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
5716	// ProvisioningState - READ-ONLY; The provisioning state of the authorization resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5717	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5718}
5719
5720// AutoApprovedPrivateLinkService the information of an AutoApprovedPrivateLinkService.
5721type AutoApprovedPrivateLinkService struct {
5722	// PrivateLinkService - The id of the private link service resource.
5723	PrivateLinkService *string `json:"privateLinkService,omitempty"`
5724}
5725
5726// AutoApprovedPrivateLinkServicesResult an array of private link service id that can be linked to a
5727// private end point with auto approved.
5728type AutoApprovedPrivateLinkServicesResult struct {
5729	autorest.Response `json:"-"`
5730	// Value - An array of auto approved private link service.
5731	Value *[]AutoApprovedPrivateLinkService `json:"value,omitempty"`
5732	// NextLink - READ-ONLY; The URL to get the next set of results.
5733	NextLink *string `json:"nextLink,omitempty"`
5734}
5735
5736// AutoApprovedPrivateLinkServicesResultIterator provides access to a complete listing of
5737// AutoApprovedPrivateLinkService values.
5738type AutoApprovedPrivateLinkServicesResultIterator struct {
5739	i    int
5740	page AutoApprovedPrivateLinkServicesResultPage
5741}
5742
5743// NextWithContext advances to the next value.  If there was an error making
5744// the request the iterator does not advance and the error is returned.
5745func (iter *AutoApprovedPrivateLinkServicesResultIterator) NextWithContext(ctx context.Context) (err error) {
5746	if tracing.IsEnabled() {
5747		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultIterator.NextWithContext")
5748		defer func() {
5749			sc := -1
5750			if iter.Response().Response.Response != nil {
5751				sc = iter.Response().Response.Response.StatusCode
5752			}
5753			tracing.EndSpan(ctx, sc, err)
5754		}()
5755	}
5756	iter.i++
5757	if iter.i < len(iter.page.Values()) {
5758		return nil
5759	}
5760	err = iter.page.NextWithContext(ctx)
5761	if err != nil {
5762		iter.i--
5763		return err
5764	}
5765	iter.i = 0
5766	return nil
5767}
5768
5769// Next advances to the next value.  If there was an error making
5770// the request the iterator does not advance and the error is returned.
5771// Deprecated: Use NextWithContext() instead.
5772func (iter *AutoApprovedPrivateLinkServicesResultIterator) Next() error {
5773	return iter.NextWithContext(context.Background())
5774}
5775
5776// NotDone returns true if the enumeration should be started or is not yet complete.
5777func (iter AutoApprovedPrivateLinkServicesResultIterator) NotDone() bool {
5778	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5779}
5780
5781// Response returns the raw server response from the last page request.
5782func (iter AutoApprovedPrivateLinkServicesResultIterator) Response() AutoApprovedPrivateLinkServicesResult {
5783	return iter.page.Response()
5784}
5785
5786// Value returns the current value or a zero-initialized value if the
5787// iterator has advanced beyond the end of the collection.
5788func (iter AutoApprovedPrivateLinkServicesResultIterator) Value() AutoApprovedPrivateLinkService {
5789	if !iter.page.NotDone() {
5790		return AutoApprovedPrivateLinkService{}
5791	}
5792	return iter.page.Values()[iter.i]
5793}
5794
5795// Creates a new instance of the AutoApprovedPrivateLinkServicesResultIterator type.
5796func NewAutoApprovedPrivateLinkServicesResultIterator(page AutoApprovedPrivateLinkServicesResultPage) AutoApprovedPrivateLinkServicesResultIterator {
5797	return AutoApprovedPrivateLinkServicesResultIterator{page: page}
5798}
5799
5800// IsEmpty returns true if the ListResult contains no values.
5801func (aaplsr AutoApprovedPrivateLinkServicesResult) IsEmpty() bool {
5802	return aaplsr.Value == nil || len(*aaplsr.Value) == 0
5803}
5804
5805// autoApprovedPrivateLinkServicesResultPreparer prepares a request to retrieve the next set of results.
5806// It returns nil if no more results exist.
5807func (aaplsr AutoApprovedPrivateLinkServicesResult) autoApprovedPrivateLinkServicesResultPreparer(ctx context.Context) (*http.Request, error) {
5808	if aaplsr.NextLink == nil || len(to.String(aaplsr.NextLink)) < 1 {
5809		return nil, nil
5810	}
5811	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5812		autorest.AsJSON(),
5813		autorest.AsGet(),
5814		autorest.WithBaseURL(to.String(aaplsr.NextLink)))
5815}
5816
5817// AutoApprovedPrivateLinkServicesResultPage contains a page of AutoApprovedPrivateLinkService values.
5818type AutoApprovedPrivateLinkServicesResultPage struct {
5819	fn     func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)
5820	aaplsr AutoApprovedPrivateLinkServicesResult
5821}
5822
5823// NextWithContext advances to the next page of values.  If there was an error making
5824// the request the page does not advance and the error is returned.
5825func (page *AutoApprovedPrivateLinkServicesResultPage) NextWithContext(ctx context.Context) (err error) {
5826	if tracing.IsEnabled() {
5827		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultPage.NextWithContext")
5828		defer func() {
5829			sc := -1
5830			if page.Response().Response.Response != nil {
5831				sc = page.Response().Response.Response.StatusCode
5832			}
5833			tracing.EndSpan(ctx, sc, err)
5834		}()
5835	}
5836	next, err := page.fn(ctx, page.aaplsr)
5837	if err != nil {
5838		return err
5839	}
5840	page.aaplsr = next
5841	return nil
5842}
5843
5844// Next advances to the next page of values.  If there was an error making
5845// the request the page does not advance and the error is returned.
5846// Deprecated: Use NextWithContext() instead.
5847func (page *AutoApprovedPrivateLinkServicesResultPage) Next() error {
5848	return page.NextWithContext(context.Background())
5849}
5850
5851// NotDone returns true if the page enumeration should be started or is not yet complete.
5852func (page AutoApprovedPrivateLinkServicesResultPage) NotDone() bool {
5853	return !page.aaplsr.IsEmpty()
5854}
5855
5856// Response returns the raw server response from the last page request.
5857func (page AutoApprovedPrivateLinkServicesResultPage) Response() AutoApprovedPrivateLinkServicesResult {
5858	return page.aaplsr
5859}
5860
5861// Values returns the slice of values for the current page or nil if there are no values.
5862func (page AutoApprovedPrivateLinkServicesResultPage) Values() []AutoApprovedPrivateLinkService {
5863	if page.aaplsr.IsEmpty() {
5864		return nil
5865	}
5866	return *page.aaplsr.Value
5867}
5868
5869// Creates a new instance of the AutoApprovedPrivateLinkServicesResultPage type.
5870func NewAutoApprovedPrivateLinkServicesResultPage(getNextPage func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)) AutoApprovedPrivateLinkServicesResultPage {
5871	return AutoApprovedPrivateLinkServicesResultPage{fn: getNextPage}
5872}
5873
5874// Availability availability of the metric.
5875type Availability struct {
5876	// TimeGrain - The time grain of the availability.
5877	TimeGrain *string `json:"timeGrain,omitempty"`
5878	// Retention - The retention of the availability.
5879	Retention *string `json:"retention,omitempty"`
5880	// BlobDuration - Duration of the availability blob.
5881	BlobDuration *string `json:"blobDuration,omitempty"`
5882}
5883
5884// AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
5885// subnet.
5886type AvailableDelegation struct {
5887	// Name - The name of the AvailableDelegation resource.
5888	Name *string `json:"name,omitempty"`
5889	// ID - A unique identifier of the AvailableDelegation resource.
5890	ID *string `json:"id,omitempty"`
5891	// Type - Resource type.
5892	Type *string `json:"type,omitempty"`
5893	// ServiceName - The name of the service and resource.
5894	ServiceName *string `json:"serviceName,omitempty"`
5895	// Actions - The actions permitted to the service upon delegation.
5896	Actions *[]string `json:"actions,omitempty"`
5897}
5898
5899// AvailableDelegationsResult an array of available delegations.
5900type AvailableDelegationsResult struct {
5901	autorest.Response `json:"-"`
5902	// Value - An array of available delegations.
5903	Value *[]AvailableDelegation `json:"value,omitempty"`
5904	// NextLink - READ-ONLY; The URL to get the next set of results.
5905	NextLink *string `json:"nextLink,omitempty"`
5906}
5907
5908// AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
5909type AvailableDelegationsResultIterator struct {
5910	i    int
5911	page AvailableDelegationsResultPage
5912}
5913
5914// NextWithContext advances to the next value.  If there was an error making
5915// the request the iterator does not advance and the error is returned.
5916func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
5917	if tracing.IsEnabled() {
5918		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
5919		defer func() {
5920			sc := -1
5921			if iter.Response().Response.Response != nil {
5922				sc = iter.Response().Response.Response.StatusCode
5923			}
5924			tracing.EndSpan(ctx, sc, err)
5925		}()
5926	}
5927	iter.i++
5928	if iter.i < len(iter.page.Values()) {
5929		return nil
5930	}
5931	err = iter.page.NextWithContext(ctx)
5932	if err != nil {
5933		iter.i--
5934		return err
5935	}
5936	iter.i = 0
5937	return nil
5938}
5939
5940// Next advances to the next value.  If there was an error making
5941// the request the iterator does not advance and the error is returned.
5942// Deprecated: Use NextWithContext() instead.
5943func (iter *AvailableDelegationsResultIterator) Next() error {
5944	return iter.NextWithContext(context.Background())
5945}
5946
5947// NotDone returns true if the enumeration should be started or is not yet complete.
5948func (iter AvailableDelegationsResultIterator) NotDone() bool {
5949	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5950}
5951
5952// Response returns the raw server response from the last page request.
5953func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
5954	return iter.page.Response()
5955}
5956
5957// Value returns the current value or a zero-initialized value if the
5958// iterator has advanced beyond the end of the collection.
5959func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
5960	if !iter.page.NotDone() {
5961		return AvailableDelegation{}
5962	}
5963	return iter.page.Values()[iter.i]
5964}
5965
5966// Creates a new instance of the AvailableDelegationsResultIterator type.
5967func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
5968	return AvailableDelegationsResultIterator{page: page}
5969}
5970
5971// IsEmpty returns true if the ListResult contains no values.
5972func (adr AvailableDelegationsResult) IsEmpty() bool {
5973	return adr.Value == nil || len(*adr.Value) == 0
5974}
5975
5976// availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
5977// It returns nil if no more results exist.
5978func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
5979	if adr.NextLink == nil || len(to.String(adr.NextLink)) < 1 {
5980		return nil, nil
5981	}
5982	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5983		autorest.AsJSON(),
5984		autorest.AsGet(),
5985		autorest.WithBaseURL(to.String(adr.NextLink)))
5986}
5987
5988// AvailableDelegationsResultPage contains a page of AvailableDelegation values.
5989type AvailableDelegationsResultPage struct {
5990	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
5991	adr AvailableDelegationsResult
5992}
5993
5994// NextWithContext advances to the next page of values.  If there was an error making
5995// the request the page does not advance and the error is returned.
5996func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
5997	if tracing.IsEnabled() {
5998		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
5999		defer func() {
6000			sc := -1
6001			if page.Response().Response.Response != nil {
6002				sc = page.Response().Response.Response.StatusCode
6003			}
6004			tracing.EndSpan(ctx, sc, err)
6005		}()
6006	}
6007	next, err := page.fn(ctx, page.adr)
6008	if err != nil {
6009		return err
6010	}
6011	page.adr = next
6012	return nil
6013}
6014
6015// Next advances to the next page of values.  If there was an error making
6016// the request the page does not advance and the error is returned.
6017// Deprecated: Use NextWithContext() instead.
6018func (page *AvailableDelegationsResultPage) Next() error {
6019	return page.NextWithContext(context.Background())
6020}
6021
6022// NotDone returns true if the page enumeration should be started or is not yet complete.
6023func (page AvailableDelegationsResultPage) NotDone() bool {
6024	return !page.adr.IsEmpty()
6025}
6026
6027// Response returns the raw server response from the last page request.
6028func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
6029	return page.adr
6030}
6031
6032// Values returns the slice of values for the current page or nil if there are no values.
6033func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
6034	if page.adr.IsEmpty() {
6035		return nil
6036	}
6037	return *page.adr.Value
6038}
6039
6040// Creates a new instance of the AvailableDelegationsResultPage type.
6041func NewAvailableDelegationsResultPage(getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
6042	return AvailableDelegationsResultPage{fn: getNextPage}
6043}
6044
6045// AvailablePrivateEndpointType the information of an AvailablePrivateEndpointType.
6046type AvailablePrivateEndpointType struct {
6047	// Name - The name of the service and resource.
6048	Name *string `json:"name,omitempty"`
6049	// ID - A unique identifier of the AvailablePrivateEndpoint Type resource.
6050	ID *string `json:"id,omitempty"`
6051	// Type - Resource type.
6052	Type *string `json:"type,omitempty"`
6053	// ResourceName - The name of the service and resource.
6054	ResourceName *string `json:"resourceName,omitempty"`
6055}
6056
6057// AvailablePrivateEndpointTypesResult an array of available PrivateEndpoint types.
6058type AvailablePrivateEndpointTypesResult struct {
6059	autorest.Response `json:"-"`
6060	// Value - An array of available privateEndpoint type.
6061	Value *[]AvailablePrivateEndpointType `json:"value,omitempty"`
6062	// NextLink - READ-ONLY; The URL to get the next set of results.
6063	NextLink *string `json:"nextLink,omitempty"`
6064}
6065
6066// AvailablePrivateEndpointTypesResultIterator provides access to a complete listing of
6067// AvailablePrivateEndpointType values.
6068type AvailablePrivateEndpointTypesResultIterator struct {
6069	i    int
6070	page AvailablePrivateEndpointTypesResultPage
6071}
6072
6073// NextWithContext advances to the next value.  If there was an error making
6074// the request the iterator does not advance and the error is returned.
6075func (iter *AvailablePrivateEndpointTypesResultIterator) NextWithContext(ctx context.Context) (err error) {
6076	if tracing.IsEnabled() {
6077		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultIterator.NextWithContext")
6078		defer func() {
6079			sc := -1
6080			if iter.Response().Response.Response != nil {
6081				sc = iter.Response().Response.Response.StatusCode
6082			}
6083			tracing.EndSpan(ctx, sc, err)
6084		}()
6085	}
6086	iter.i++
6087	if iter.i < len(iter.page.Values()) {
6088		return nil
6089	}
6090	err = iter.page.NextWithContext(ctx)
6091	if err != nil {
6092		iter.i--
6093		return err
6094	}
6095	iter.i = 0
6096	return nil
6097}
6098
6099// Next advances to the next value.  If there was an error making
6100// the request the iterator does not advance and the error is returned.
6101// Deprecated: Use NextWithContext() instead.
6102func (iter *AvailablePrivateEndpointTypesResultIterator) Next() error {
6103	return iter.NextWithContext(context.Background())
6104}
6105
6106// NotDone returns true if the enumeration should be started or is not yet complete.
6107func (iter AvailablePrivateEndpointTypesResultIterator) NotDone() bool {
6108	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6109}
6110
6111// Response returns the raw server response from the last page request.
6112func (iter AvailablePrivateEndpointTypesResultIterator) Response() AvailablePrivateEndpointTypesResult {
6113	return iter.page.Response()
6114}
6115
6116// Value returns the current value or a zero-initialized value if the
6117// iterator has advanced beyond the end of the collection.
6118func (iter AvailablePrivateEndpointTypesResultIterator) Value() AvailablePrivateEndpointType {
6119	if !iter.page.NotDone() {
6120		return AvailablePrivateEndpointType{}
6121	}
6122	return iter.page.Values()[iter.i]
6123}
6124
6125// Creates a new instance of the AvailablePrivateEndpointTypesResultIterator type.
6126func NewAvailablePrivateEndpointTypesResultIterator(page AvailablePrivateEndpointTypesResultPage) AvailablePrivateEndpointTypesResultIterator {
6127	return AvailablePrivateEndpointTypesResultIterator{page: page}
6128}
6129
6130// IsEmpty returns true if the ListResult contains no values.
6131func (apetr AvailablePrivateEndpointTypesResult) IsEmpty() bool {
6132	return apetr.Value == nil || len(*apetr.Value) == 0
6133}
6134
6135// availablePrivateEndpointTypesResultPreparer prepares a request to retrieve the next set of results.
6136// It returns nil if no more results exist.
6137func (apetr AvailablePrivateEndpointTypesResult) availablePrivateEndpointTypesResultPreparer(ctx context.Context) (*http.Request, error) {
6138	if apetr.NextLink == nil || len(to.String(apetr.NextLink)) < 1 {
6139		return nil, nil
6140	}
6141	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6142		autorest.AsJSON(),
6143		autorest.AsGet(),
6144		autorest.WithBaseURL(to.String(apetr.NextLink)))
6145}
6146
6147// AvailablePrivateEndpointTypesResultPage contains a page of AvailablePrivateEndpointType values.
6148type AvailablePrivateEndpointTypesResultPage struct {
6149	fn    func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)
6150	apetr AvailablePrivateEndpointTypesResult
6151}
6152
6153// NextWithContext advances to the next page of values.  If there was an error making
6154// the request the page does not advance and the error is returned.
6155func (page *AvailablePrivateEndpointTypesResultPage) NextWithContext(ctx context.Context) (err error) {
6156	if tracing.IsEnabled() {
6157		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultPage.NextWithContext")
6158		defer func() {
6159			sc := -1
6160			if page.Response().Response.Response != nil {
6161				sc = page.Response().Response.Response.StatusCode
6162			}
6163			tracing.EndSpan(ctx, sc, err)
6164		}()
6165	}
6166	next, err := page.fn(ctx, page.apetr)
6167	if err != nil {
6168		return err
6169	}
6170	page.apetr = next
6171	return nil
6172}
6173
6174// Next advances to the next page of values.  If there was an error making
6175// the request the page does not advance and the error is returned.
6176// Deprecated: Use NextWithContext() instead.
6177func (page *AvailablePrivateEndpointTypesResultPage) Next() error {
6178	return page.NextWithContext(context.Background())
6179}
6180
6181// NotDone returns true if the page enumeration should be started or is not yet complete.
6182func (page AvailablePrivateEndpointTypesResultPage) NotDone() bool {
6183	return !page.apetr.IsEmpty()
6184}
6185
6186// Response returns the raw server response from the last page request.
6187func (page AvailablePrivateEndpointTypesResultPage) Response() AvailablePrivateEndpointTypesResult {
6188	return page.apetr
6189}
6190
6191// Values returns the slice of values for the current page or nil if there are no values.
6192func (page AvailablePrivateEndpointTypesResultPage) Values() []AvailablePrivateEndpointType {
6193	if page.apetr.IsEmpty() {
6194		return nil
6195	}
6196	return *page.apetr.Value
6197}
6198
6199// Creates a new instance of the AvailablePrivateEndpointTypesResultPage type.
6200func NewAvailablePrivateEndpointTypesResultPage(getNextPage func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)) AvailablePrivateEndpointTypesResultPage {
6201	return AvailablePrivateEndpointTypesResultPage{fn: getNextPage}
6202}
6203
6204// AvailableProvidersList list of available countries with details.
6205type AvailableProvidersList struct {
6206	autorest.Response `json:"-"`
6207	// Countries - List of available countries.
6208	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
6209}
6210
6211// AvailableProvidersListCity city or town details.
6212type AvailableProvidersListCity struct {
6213	// CityName - The city or town name.
6214	CityName *string `json:"cityName,omitempty"`
6215	// Providers - A list of Internet service providers.
6216	Providers *[]string `json:"providers,omitempty"`
6217}
6218
6219// AvailableProvidersListCountry country details.
6220type AvailableProvidersListCountry struct {
6221	// CountryName - The country name.
6222	CountryName *string `json:"countryName,omitempty"`
6223	// Providers - A list of Internet service providers.
6224	Providers *[]string `json:"providers,omitempty"`
6225	// States - List of available states in the country.
6226	States *[]AvailableProvidersListState `json:"states,omitempty"`
6227}
6228
6229// AvailableProvidersListParameters constraints that determine the list of available Internet service
6230// providers.
6231type AvailableProvidersListParameters struct {
6232	// AzureLocations - A list of Azure regions.
6233	AzureLocations *[]string `json:"azureLocations,omitempty"`
6234	// Country - The country for available providers list.
6235	Country *string `json:"country,omitempty"`
6236	// State - The state for available providers list.
6237	State *string `json:"state,omitempty"`
6238	// City - The city or town for available providers list.
6239	City *string `json:"city,omitempty"`
6240}
6241
6242// AvailableProvidersListState state details.
6243type AvailableProvidersListState struct {
6244	// StateName - The state name.
6245	StateName *string `json:"stateName,omitempty"`
6246	// Providers - A list of Internet service providers.
6247	Providers *[]string `json:"providers,omitempty"`
6248	// Cities - List of available cities or towns in the state.
6249	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
6250}
6251
6252// AvailableServiceAlias the available service alias.
6253type AvailableServiceAlias struct {
6254	// Name - The name of the service alias.
6255	Name *string `json:"name,omitempty"`
6256	// ID - The ID of the service alias.
6257	ID *string `json:"id,omitempty"`
6258	// Type - The type of the resource.
6259	Type *string `json:"type,omitempty"`
6260	// ResourceName - The resource name of the service alias.
6261	ResourceName *string `json:"resourceName,omitempty"`
6262}
6263
6264// AvailableServiceAliasesResult an array of available service aliases.
6265type AvailableServiceAliasesResult struct {
6266	autorest.Response `json:"-"`
6267	// Value - An array of available service aliases.
6268	Value *[]AvailableServiceAlias `json:"value,omitempty"`
6269	// NextLink - READ-ONLY; The URL to get the next set of results.
6270	NextLink *string `json:"nextLink,omitempty"`
6271}
6272
6273// AvailableServiceAliasesResultIterator provides access to a complete listing of AvailableServiceAlias
6274// values.
6275type AvailableServiceAliasesResultIterator struct {
6276	i    int
6277	page AvailableServiceAliasesResultPage
6278}
6279
6280// NextWithContext advances to the next value.  If there was an error making
6281// the request the iterator does not advance and the error is returned.
6282func (iter *AvailableServiceAliasesResultIterator) NextWithContext(ctx context.Context) (err error) {
6283	if tracing.IsEnabled() {
6284		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultIterator.NextWithContext")
6285		defer func() {
6286			sc := -1
6287			if iter.Response().Response.Response != nil {
6288				sc = iter.Response().Response.Response.StatusCode
6289			}
6290			tracing.EndSpan(ctx, sc, err)
6291		}()
6292	}
6293	iter.i++
6294	if iter.i < len(iter.page.Values()) {
6295		return nil
6296	}
6297	err = iter.page.NextWithContext(ctx)
6298	if err != nil {
6299		iter.i--
6300		return err
6301	}
6302	iter.i = 0
6303	return nil
6304}
6305
6306// Next advances to the next value.  If there was an error making
6307// the request the iterator does not advance and the error is returned.
6308// Deprecated: Use NextWithContext() instead.
6309func (iter *AvailableServiceAliasesResultIterator) Next() error {
6310	return iter.NextWithContext(context.Background())
6311}
6312
6313// NotDone returns true if the enumeration should be started or is not yet complete.
6314func (iter AvailableServiceAliasesResultIterator) NotDone() bool {
6315	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6316}
6317
6318// Response returns the raw server response from the last page request.
6319func (iter AvailableServiceAliasesResultIterator) Response() AvailableServiceAliasesResult {
6320	return iter.page.Response()
6321}
6322
6323// Value returns the current value or a zero-initialized value if the
6324// iterator has advanced beyond the end of the collection.
6325func (iter AvailableServiceAliasesResultIterator) Value() AvailableServiceAlias {
6326	if !iter.page.NotDone() {
6327		return AvailableServiceAlias{}
6328	}
6329	return iter.page.Values()[iter.i]
6330}
6331
6332// Creates a new instance of the AvailableServiceAliasesResultIterator type.
6333func NewAvailableServiceAliasesResultIterator(page AvailableServiceAliasesResultPage) AvailableServiceAliasesResultIterator {
6334	return AvailableServiceAliasesResultIterator{page: page}
6335}
6336
6337// IsEmpty returns true if the ListResult contains no values.
6338func (asar AvailableServiceAliasesResult) IsEmpty() bool {
6339	return asar.Value == nil || len(*asar.Value) == 0
6340}
6341
6342// availableServiceAliasesResultPreparer prepares a request to retrieve the next set of results.
6343// It returns nil if no more results exist.
6344func (asar AvailableServiceAliasesResult) availableServiceAliasesResultPreparer(ctx context.Context) (*http.Request, error) {
6345	if asar.NextLink == nil || len(to.String(asar.NextLink)) < 1 {
6346		return nil, nil
6347	}
6348	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6349		autorest.AsJSON(),
6350		autorest.AsGet(),
6351		autorest.WithBaseURL(to.String(asar.NextLink)))
6352}
6353
6354// AvailableServiceAliasesResultPage contains a page of AvailableServiceAlias values.
6355type AvailableServiceAliasesResultPage struct {
6356	fn   func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)
6357	asar AvailableServiceAliasesResult
6358}
6359
6360// NextWithContext advances to the next page of values.  If there was an error making
6361// the request the page does not advance and the error is returned.
6362func (page *AvailableServiceAliasesResultPage) NextWithContext(ctx context.Context) (err error) {
6363	if tracing.IsEnabled() {
6364		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultPage.NextWithContext")
6365		defer func() {
6366			sc := -1
6367			if page.Response().Response.Response != nil {
6368				sc = page.Response().Response.Response.StatusCode
6369			}
6370			tracing.EndSpan(ctx, sc, err)
6371		}()
6372	}
6373	next, err := page.fn(ctx, page.asar)
6374	if err != nil {
6375		return err
6376	}
6377	page.asar = next
6378	return nil
6379}
6380
6381// Next advances to the next page of values.  If there was an error making
6382// the request the page does not advance and the error is returned.
6383// Deprecated: Use NextWithContext() instead.
6384func (page *AvailableServiceAliasesResultPage) Next() error {
6385	return page.NextWithContext(context.Background())
6386}
6387
6388// NotDone returns true if the page enumeration should be started or is not yet complete.
6389func (page AvailableServiceAliasesResultPage) NotDone() bool {
6390	return !page.asar.IsEmpty()
6391}
6392
6393// Response returns the raw server response from the last page request.
6394func (page AvailableServiceAliasesResultPage) Response() AvailableServiceAliasesResult {
6395	return page.asar
6396}
6397
6398// Values returns the slice of values for the current page or nil if there are no values.
6399func (page AvailableServiceAliasesResultPage) Values() []AvailableServiceAlias {
6400	if page.asar.IsEmpty() {
6401		return nil
6402	}
6403	return *page.asar.Value
6404}
6405
6406// Creates a new instance of the AvailableServiceAliasesResultPage type.
6407func NewAvailableServiceAliasesResultPage(getNextPage func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)) AvailableServiceAliasesResultPage {
6408	return AvailableServiceAliasesResultPage{fn: getNextPage}
6409}
6410
6411// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
6412// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
6413// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
6414// operation succeeded, the response body includes the HTTP status code for the successful request. If the
6415// asynchronous operation failed, the response body includes the HTTP status code for the failed request
6416// and error information regarding the failure.
6417type AzureAsyncOperationResult struct {
6418	// Status - Status of the Azure async operation. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
6419	Status OperationStatus `json:"status,omitempty"`
6420	// Error - Details of the error occurred during specified asynchronous operation.
6421	Error *Error `json:"error,omitempty"`
6422}
6423
6424// AzureFirewall azure Firewall resource.
6425type AzureFirewall struct {
6426	autorest.Response `json:"-"`
6427	// AzureFirewallPropertiesFormat - Properties of the azure firewall.
6428	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
6429	// Zones - A list of availability zones denoting where the resource needs to come from.
6430	Zones *[]string `json:"zones,omitempty"`
6431	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6432	Etag *string `json:"etag,omitempty"`
6433	// ID - Resource ID.
6434	ID *string `json:"id,omitempty"`
6435	// Name - READ-ONLY; Resource name.
6436	Name *string `json:"name,omitempty"`
6437	// Type - READ-ONLY; Resource type.
6438	Type *string `json:"type,omitempty"`
6439	// Location - Resource location.
6440	Location *string `json:"location,omitempty"`
6441	// Tags - Resource tags.
6442	Tags map[string]*string `json:"tags"`
6443}
6444
6445// MarshalJSON is the custom marshaler for AzureFirewall.
6446func (af AzureFirewall) MarshalJSON() ([]byte, error) {
6447	objectMap := make(map[string]interface{})
6448	if af.AzureFirewallPropertiesFormat != nil {
6449		objectMap["properties"] = af.AzureFirewallPropertiesFormat
6450	}
6451	if af.Zones != nil {
6452		objectMap["zones"] = af.Zones
6453	}
6454	if af.ID != nil {
6455		objectMap["id"] = af.ID
6456	}
6457	if af.Location != nil {
6458		objectMap["location"] = af.Location
6459	}
6460	if af.Tags != nil {
6461		objectMap["tags"] = af.Tags
6462	}
6463	return json.Marshal(objectMap)
6464}
6465
6466// UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
6467func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
6468	var m map[string]*json.RawMessage
6469	err := json.Unmarshal(body, &m)
6470	if err != nil {
6471		return err
6472	}
6473	for k, v := range m {
6474		switch k {
6475		case "properties":
6476			if v != nil {
6477				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
6478				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
6479				if err != nil {
6480					return err
6481				}
6482				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
6483			}
6484		case "zones":
6485			if v != nil {
6486				var zones []string
6487				err = json.Unmarshal(*v, &zones)
6488				if err != nil {
6489					return err
6490				}
6491				af.Zones = &zones
6492			}
6493		case "etag":
6494			if v != nil {
6495				var etag string
6496				err = json.Unmarshal(*v, &etag)
6497				if err != nil {
6498					return err
6499				}
6500				af.Etag = &etag
6501			}
6502		case "id":
6503			if v != nil {
6504				var ID string
6505				err = json.Unmarshal(*v, &ID)
6506				if err != nil {
6507					return err
6508				}
6509				af.ID = &ID
6510			}
6511		case "name":
6512			if v != nil {
6513				var name string
6514				err = json.Unmarshal(*v, &name)
6515				if err != nil {
6516					return err
6517				}
6518				af.Name = &name
6519			}
6520		case "type":
6521			if v != nil {
6522				var typeVar string
6523				err = json.Unmarshal(*v, &typeVar)
6524				if err != nil {
6525					return err
6526				}
6527				af.Type = &typeVar
6528			}
6529		case "location":
6530			if v != nil {
6531				var location string
6532				err = json.Unmarshal(*v, &location)
6533				if err != nil {
6534					return err
6535				}
6536				af.Location = &location
6537			}
6538		case "tags":
6539			if v != nil {
6540				var tags map[string]*string
6541				err = json.Unmarshal(*v, &tags)
6542				if err != nil {
6543					return err
6544				}
6545				af.Tags = tags
6546			}
6547		}
6548	}
6549
6550	return nil
6551}
6552
6553// AzureFirewallApplicationRule properties of an application rule.
6554type AzureFirewallApplicationRule struct {
6555	// Name - Name of the application rule.
6556	Name *string `json:"name,omitempty"`
6557	// Description - Description of the rule.
6558	Description *string `json:"description,omitempty"`
6559	// SourceAddresses - List of source IP addresses for this rule.
6560	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6561	// Protocols - Array of ApplicationRuleProtocols.
6562	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
6563	// TargetFqdns - List of FQDNs for this rule.
6564	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
6565	// FqdnTags - List of FQDN Tags for this rule.
6566	FqdnTags *[]string `json:"fqdnTags,omitempty"`
6567	// SourceIPGroups - List of source IpGroups for this rule.
6568	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
6569}
6570
6571// AzureFirewallApplicationRuleCollection application rule collection resource.
6572type AzureFirewallApplicationRuleCollection struct {
6573	// AzureFirewallApplicationRuleCollectionPropertiesFormat - Properties of the azure firewall application rule collection.
6574	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
6575	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
6576	Name *string `json:"name,omitempty"`
6577	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6578	Etag *string `json:"etag,omitempty"`
6579	// ID - Resource ID.
6580	ID *string `json:"id,omitempty"`
6581}
6582
6583// MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
6584func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
6585	objectMap := make(map[string]interface{})
6586	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
6587		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
6588	}
6589	if afarc.Name != nil {
6590		objectMap["name"] = afarc.Name
6591	}
6592	if afarc.ID != nil {
6593		objectMap["id"] = afarc.ID
6594	}
6595	return json.Marshal(objectMap)
6596}
6597
6598// UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
6599func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
6600	var m map[string]*json.RawMessage
6601	err := json.Unmarshal(body, &m)
6602	if err != nil {
6603		return err
6604	}
6605	for k, v := range m {
6606		switch k {
6607		case "properties":
6608			if v != nil {
6609				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
6610				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
6611				if err != nil {
6612					return err
6613				}
6614				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
6615			}
6616		case "name":
6617			if v != nil {
6618				var name string
6619				err = json.Unmarshal(*v, &name)
6620				if err != nil {
6621					return err
6622				}
6623				afarc.Name = &name
6624			}
6625		case "etag":
6626			if v != nil {
6627				var etag string
6628				err = json.Unmarshal(*v, &etag)
6629				if err != nil {
6630					return err
6631				}
6632				afarc.Etag = &etag
6633			}
6634		case "id":
6635			if v != nil {
6636				var ID string
6637				err = json.Unmarshal(*v, &ID)
6638				if err != nil {
6639					return err
6640				}
6641				afarc.ID = &ID
6642			}
6643		}
6644	}
6645
6646	return nil
6647}
6648
6649// AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
6650type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
6651	// Priority - Priority of the application rule collection resource.
6652	Priority *int32 `json:"priority,omitempty"`
6653	// Action - The action type of a rule collection.
6654	Action *AzureFirewallRCAction `json:"action,omitempty"`
6655	// Rules - Collection of rules used by a application rule collection.
6656	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
6657	// ProvisioningState - READ-ONLY; The provisioning state of the application rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6658	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6659}
6660
6661// AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
6662type AzureFirewallApplicationRuleProtocol struct {
6663	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS', 'AzureFirewallApplicationRuleProtocolTypeMssql'
6664	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
6665	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
6666	Port *int32 `json:"port,omitempty"`
6667}
6668
6669// AzureFirewallFqdnTag azure Firewall FQDN Tag Resource.
6670type AzureFirewallFqdnTag struct {
6671	// AzureFirewallFqdnTagPropertiesFormat - Properties of the azure firewall FQDN tag.
6672	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
6673	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6674	Etag *string `json:"etag,omitempty"`
6675	// ID - Resource ID.
6676	ID *string `json:"id,omitempty"`
6677	// Name - READ-ONLY; Resource name.
6678	Name *string `json:"name,omitempty"`
6679	// Type - READ-ONLY; Resource type.
6680	Type *string `json:"type,omitempty"`
6681	// Location - Resource location.
6682	Location *string `json:"location,omitempty"`
6683	// Tags - Resource tags.
6684	Tags map[string]*string `json:"tags"`
6685}
6686
6687// MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
6688func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
6689	objectMap := make(map[string]interface{})
6690	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
6691		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
6692	}
6693	if afft.ID != nil {
6694		objectMap["id"] = afft.ID
6695	}
6696	if afft.Location != nil {
6697		objectMap["location"] = afft.Location
6698	}
6699	if afft.Tags != nil {
6700		objectMap["tags"] = afft.Tags
6701	}
6702	return json.Marshal(objectMap)
6703}
6704
6705// UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
6706func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
6707	var m map[string]*json.RawMessage
6708	err := json.Unmarshal(body, &m)
6709	if err != nil {
6710		return err
6711	}
6712	for k, v := range m {
6713		switch k {
6714		case "properties":
6715			if v != nil {
6716				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
6717				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
6718				if err != nil {
6719					return err
6720				}
6721				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
6722			}
6723		case "etag":
6724			if v != nil {
6725				var etag string
6726				err = json.Unmarshal(*v, &etag)
6727				if err != nil {
6728					return err
6729				}
6730				afft.Etag = &etag
6731			}
6732		case "id":
6733			if v != nil {
6734				var ID string
6735				err = json.Unmarshal(*v, &ID)
6736				if err != nil {
6737					return err
6738				}
6739				afft.ID = &ID
6740			}
6741		case "name":
6742			if v != nil {
6743				var name string
6744				err = json.Unmarshal(*v, &name)
6745				if err != nil {
6746					return err
6747				}
6748				afft.Name = &name
6749			}
6750		case "type":
6751			if v != nil {
6752				var typeVar string
6753				err = json.Unmarshal(*v, &typeVar)
6754				if err != nil {
6755					return err
6756				}
6757				afft.Type = &typeVar
6758			}
6759		case "location":
6760			if v != nil {
6761				var location string
6762				err = json.Unmarshal(*v, &location)
6763				if err != nil {
6764					return err
6765				}
6766				afft.Location = &location
6767			}
6768		case "tags":
6769			if v != nil {
6770				var tags map[string]*string
6771				err = json.Unmarshal(*v, &tags)
6772				if err != nil {
6773					return err
6774				}
6775				afft.Tags = tags
6776			}
6777		}
6778	}
6779
6780	return nil
6781}
6782
6783// AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
6784type AzureFirewallFqdnTagListResult struct {
6785	autorest.Response `json:"-"`
6786	// Value - List of Azure Firewall FQDN Tags in a resource group.
6787	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
6788	// NextLink - URL to get the next set of results.
6789	NextLink *string `json:"nextLink,omitempty"`
6790}
6791
6792// AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
6793// values.
6794type AzureFirewallFqdnTagListResultIterator struct {
6795	i    int
6796	page AzureFirewallFqdnTagListResultPage
6797}
6798
6799// NextWithContext advances to the next value.  If there was an error making
6800// the request the iterator does not advance and the error is returned.
6801func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
6802	if tracing.IsEnabled() {
6803		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
6804		defer func() {
6805			sc := -1
6806			if iter.Response().Response.Response != nil {
6807				sc = iter.Response().Response.Response.StatusCode
6808			}
6809			tracing.EndSpan(ctx, sc, err)
6810		}()
6811	}
6812	iter.i++
6813	if iter.i < len(iter.page.Values()) {
6814		return nil
6815	}
6816	err = iter.page.NextWithContext(ctx)
6817	if err != nil {
6818		iter.i--
6819		return err
6820	}
6821	iter.i = 0
6822	return nil
6823}
6824
6825// Next advances to the next value.  If there was an error making
6826// the request the iterator does not advance and the error is returned.
6827// Deprecated: Use NextWithContext() instead.
6828func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
6829	return iter.NextWithContext(context.Background())
6830}
6831
6832// NotDone returns true if the enumeration should be started or is not yet complete.
6833func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
6834	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6835}
6836
6837// Response returns the raw server response from the last page request.
6838func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
6839	return iter.page.Response()
6840}
6841
6842// Value returns the current value or a zero-initialized value if the
6843// iterator has advanced beyond the end of the collection.
6844func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
6845	if !iter.page.NotDone() {
6846		return AzureFirewallFqdnTag{}
6847	}
6848	return iter.page.Values()[iter.i]
6849}
6850
6851// Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
6852func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
6853	return AzureFirewallFqdnTagListResultIterator{page: page}
6854}
6855
6856// IsEmpty returns true if the ListResult contains no values.
6857func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
6858	return afftlr.Value == nil || len(*afftlr.Value) == 0
6859}
6860
6861// azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
6862// It returns nil if no more results exist.
6863func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
6864	if afftlr.NextLink == nil || len(to.String(afftlr.NextLink)) < 1 {
6865		return nil, nil
6866	}
6867	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6868		autorest.AsJSON(),
6869		autorest.AsGet(),
6870		autorest.WithBaseURL(to.String(afftlr.NextLink)))
6871}
6872
6873// AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
6874type AzureFirewallFqdnTagListResultPage struct {
6875	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
6876	afftlr AzureFirewallFqdnTagListResult
6877}
6878
6879// NextWithContext advances to the next page of values.  If there was an error making
6880// the request the page does not advance and the error is returned.
6881func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
6882	if tracing.IsEnabled() {
6883		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
6884		defer func() {
6885			sc := -1
6886			if page.Response().Response.Response != nil {
6887				sc = page.Response().Response.Response.StatusCode
6888			}
6889			tracing.EndSpan(ctx, sc, err)
6890		}()
6891	}
6892	next, err := page.fn(ctx, page.afftlr)
6893	if err != nil {
6894		return err
6895	}
6896	page.afftlr = next
6897	return nil
6898}
6899
6900// Next advances to the next page of values.  If there was an error making
6901// the request the page does not advance and the error is returned.
6902// Deprecated: Use NextWithContext() instead.
6903func (page *AzureFirewallFqdnTagListResultPage) Next() error {
6904	return page.NextWithContext(context.Background())
6905}
6906
6907// NotDone returns true if the page enumeration should be started or is not yet complete.
6908func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
6909	return !page.afftlr.IsEmpty()
6910}
6911
6912// Response returns the raw server response from the last page request.
6913func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
6914	return page.afftlr
6915}
6916
6917// Values returns the slice of values for the current page or nil if there are no values.
6918func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
6919	if page.afftlr.IsEmpty() {
6920		return nil
6921	}
6922	return *page.afftlr.Value
6923}
6924
6925// Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
6926func NewAzureFirewallFqdnTagListResultPage(getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
6927	return AzureFirewallFqdnTagListResultPage{fn: getNextPage}
6928}
6929
6930// AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties.
6931type AzureFirewallFqdnTagPropertiesFormat struct {
6932	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall FQDN tag resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6933	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6934	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
6935	FqdnTagName *string `json:"fqdnTagName,omitempty"`
6936}
6937
6938// AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
6939type AzureFirewallIPConfiguration struct {
6940	// AzureFirewallIPConfigurationPropertiesFormat - Properties of the azure firewall IP configuration.
6941	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
6942	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
6943	Name *string `json:"name,omitempty"`
6944	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6945	Etag *string `json:"etag,omitempty"`
6946	// Type - READ-ONLY; Type of the resource.
6947	Type *string `json:"type,omitempty"`
6948	// ID - Resource ID.
6949	ID *string `json:"id,omitempty"`
6950}
6951
6952// MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
6953func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
6954	objectMap := make(map[string]interface{})
6955	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
6956		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
6957	}
6958	if afic.Name != nil {
6959		objectMap["name"] = afic.Name
6960	}
6961	if afic.ID != nil {
6962		objectMap["id"] = afic.ID
6963	}
6964	return json.Marshal(objectMap)
6965}
6966
6967// UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
6968func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
6969	var m map[string]*json.RawMessage
6970	err := json.Unmarshal(body, &m)
6971	if err != nil {
6972		return err
6973	}
6974	for k, v := range m {
6975		switch k {
6976		case "properties":
6977			if v != nil {
6978				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
6979				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
6980				if err != nil {
6981					return err
6982				}
6983				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
6984			}
6985		case "name":
6986			if v != nil {
6987				var name string
6988				err = json.Unmarshal(*v, &name)
6989				if err != nil {
6990					return err
6991				}
6992				afic.Name = &name
6993			}
6994		case "etag":
6995			if v != nil {
6996				var etag string
6997				err = json.Unmarshal(*v, &etag)
6998				if err != nil {
6999					return err
7000				}
7001				afic.Etag = &etag
7002			}
7003		case "type":
7004			if v != nil {
7005				var typeVar string
7006				err = json.Unmarshal(*v, &typeVar)
7007				if err != nil {
7008					return err
7009				}
7010				afic.Type = &typeVar
7011			}
7012		case "id":
7013			if v != nil {
7014				var ID string
7015				err = json.Unmarshal(*v, &ID)
7016				if err != nil {
7017					return err
7018				}
7019				afic.ID = &ID
7020			}
7021		}
7022	}
7023
7024	return nil
7025}
7026
7027// AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
7028type AzureFirewallIPConfigurationPropertiesFormat struct {
7029	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
7030	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
7031	// Subnet - Reference to the subnet resource. This resource must be named 'AzureFirewallSubnet' or 'AzureFirewallManagementSubnet'.
7032	Subnet *SubResource `json:"subnet,omitempty"`
7033	// PublicIPAddress - Reference to the PublicIP resource. This field is a mandatory input if subnet is not null.
7034	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
7035	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7036	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7037}
7038
7039// AzureFirewallIPGroups ipGroups associated with azure firewall.
7040type AzureFirewallIPGroups struct {
7041	// ID - READ-ONLY; Resource ID.
7042	ID *string `json:"id,omitempty"`
7043	// ChangeNumber - READ-ONLY; The iteration number.
7044	ChangeNumber *string `json:"changeNumber,omitempty"`
7045}
7046
7047// AzureFirewallListResult response for ListAzureFirewalls API service call.
7048type AzureFirewallListResult struct {
7049	autorest.Response `json:"-"`
7050	// Value - List of Azure Firewalls in a resource group.
7051	Value *[]AzureFirewall `json:"value,omitempty"`
7052	// NextLink - URL to get the next set of results.
7053	NextLink *string `json:"nextLink,omitempty"`
7054}
7055
7056// AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
7057type AzureFirewallListResultIterator struct {
7058	i    int
7059	page AzureFirewallListResultPage
7060}
7061
7062// NextWithContext advances to the next value.  If there was an error making
7063// the request the iterator does not advance and the error is returned.
7064func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
7065	if tracing.IsEnabled() {
7066		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
7067		defer func() {
7068			sc := -1
7069			if iter.Response().Response.Response != nil {
7070				sc = iter.Response().Response.Response.StatusCode
7071			}
7072			tracing.EndSpan(ctx, sc, err)
7073		}()
7074	}
7075	iter.i++
7076	if iter.i < len(iter.page.Values()) {
7077		return nil
7078	}
7079	err = iter.page.NextWithContext(ctx)
7080	if err != nil {
7081		iter.i--
7082		return err
7083	}
7084	iter.i = 0
7085	return nil
7086}
7087
7088// Next advances to the next value.  If there was an error making
7089// the request the iterator does not advance and the error is returned.
7090// Deprecated: Use NextWithContext() instead.
7091func (iter *AzureFirewallListResultIterator) Next() error {
7092	return iter.NextWithContext(context.Background())
7093}
7094
7095// NotDone returns true if the enumeration should be started or is not yet complete.
7096func (iter AzureFirewallListResultIterator) NotDone() bool {
7097	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7098}
7099
7100// Response returns the raw server response from the last page request.
7101func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
7102	return iter.page.Response()
7103}
7104
7105// Value returns the current value or a zero-initialized value if the
7106// iterator has advanced beyond the end of the collection.
7107func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
7108	if !iter.page.NotDone() {
7109		return AzureFirewall{}
7110	}
7111	return iter.page.Values()[iter.i]
7112}
7113
7114// Creates a new instance of the AzureFirewallListResultIterator type.
7115func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
7116	return AzureFirewallListResultIterator{page: page}
7117}
7118
7119// IsEmpty returns true if the ListResult contains no values.
7120func (aflr AzureFirewallListResult) IsEmpty() bool {
7121	return aflr.Value == nil || len(*aflr.Value) == 0
7122}
7123
7124// azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
7125// It returns nil if no more results exist.
7126func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
7127	if aflr.NextLink == nil || len(to.String(aflr.NextLink)) < 1 {
7128		return nil, nil
7129	}
7130	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7131		autorest.AsJSON(),
7132		autorest.AsGet(),
7133		autorest.WithBaseURL(to.String(aflr.NextLink)))
7134}
7135
7136// AzureFirewallListResultPage contains a page of AzureFirewall values.
7137type AzureFirewallListResultPage struct {
7138	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
7139	aflr AzureFirewallListResult
7140}
7141
7142// NextWithContext advances to the next page of values.  If there was an error making
7143// the request the page does not advance and the error is returned.
7144func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
7145	if tracing.IsEnabled() {
7146		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
7147		defer func() {
7148			sc := -1
7149			if page.Response().Response.Response != nil {
7150				sc = page.Response().Response.Response.StatusCode
7151			}
7152			tracing.EndSpan(ctx, sc, err)
7153		}()
7154	}
7155	next, err := page.fn(ctx, page.aflr)
7156	if err != nil {
7157		return err
7158	}
7159	page.aflr = next
7160	return nil
7161}
7162
7163// Next advances to the next page of values.  If there was an error making
7164// the request the page does not advance and the error is returned.
7165// Deprecated: Use NextWithContext() instead.
7166func (page *AzureFirewallListResultPage) Next() error {
7167	return page.NextWithContext(context.Background())
7168}
7169
7170// NotDone returns true if the page enumeration should be started or is not yet complete.
7171func (page AzureFirewallListResultPage) NotDone() bool {
7172	return !page.aflr.IsEmpty()
7173}
7174
7175// Response returns the raw server response from the last page request.
7176func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
7177	return page.aflr
7178}
7179
7180// Values returns the slice of values for the current page or nil if there are no values.
7181func (page AzureFirewallListResultPage) Values() []AzureFirewall {
7182	if page.aflr.IsEmpty() {
7183		return nil
7184	}
7185	return *page.aflr.Value
7186}
7187
7188// Creates a new instance of the AzureFirewallListResultPage type.
7189func NewAzureFirewallListResultPage(getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
7190	return AzureFirewallListResultPage{fn: getNextPage}
7191}
7192
7193// AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
7194type AzureFirewallNatRCAction struct {
7195	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
7196	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
7197}
7198
7199// AzureFirewallNatRule properties of a NAT rule.
7200type AzureFirewallNatRule struct {
7201	// Name - Name of the NAT rule.
7202	Name *string `json:"name,omitempty"`
7203	// Description - Description of the rule.
7204	Description *string `json:"description,omitempty"`
7205	// SourceAddresses - List of source IP addresses for this rule.
7206	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
7207	// DestinationAddresses - List of destination IP addresses for this rule. Supports IP ranges, prefixes, and service tags.
7208	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
7209	// DestinationPorts - List of destination ports.
7210	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
7211	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
7212	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
7213	// TranslatedAddress - The translated address for this NAT rule.
7214	TranslatedAddress *string `json:"translatedAddress,omitempty"`
7215	// TranslatedPort - The translated port for this NAT rule.
7216	TranslatedPort *string `json:"translatedPort,omitempty"`
7217	// TranslatedFqdn - The translated FQDN for this NAT rule.
7218	TranslatedFqdn *string `json:"translatedFqdn,omitempty"`
7219	// SourceIPGroups - List of source IpGroups for this rule.
7220	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
7221}
7222
7223// AzureFirewallNatRuleCollection NAT rule collection resource.
7224type AzureFirewallNatRuleCollection struct {
7225	// AzureFirewallNatRuleCollectionProperties - Properties of the azure firewall NAT rule collection.
7226	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
7227	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
7228	Name *string `json:"name,omitempty"`
7229	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7230	Etag *string `json:"etag,omitempty"`
7231	// ID - Resource ID.
7232	ID *string `json:"id,omitempty"`
7233}
7234
7235// MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
7236func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
7237	objectMap := make(map[string]interface{})
7238	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
7239		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
7240	}
7241	if afnrc.Name != nil {
7242		objectMap["name"] = afnrc.Name
7243	}
7244	if afnrc.ID != nil {
7245		objectMap["id"] = afnrc.ID
7246	}
7247	return json.Marshal(objectMap)
7248}
7249
7250// UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
7251func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
7252	var m map[string]*json.RawMessage
7253	err := json.Unmarshal(body, &m)
7254	if err != nil {
7255		return err
7256	}
7257	for k, v := range m {
7258		switch k {
7259		case "properties":
7260			if v != nil {
7261				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
7262				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
7263				if err != nil {
7264					return err
7265				}
7266				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
7267			}
7268		case "name":
7269			if v != nil {
7270				var name string
7271				err = json.Unmarshal(*v, &name)
7272				if err != nil {
7273					return err
7274				}
7275				afnrc.Name = &name
7276			}
7277		case "etag":
7278			if v != nil {
7279				var etag string
7280				err = json.Unmarshal(*v, &etag)
7281				if err != nil {
7282					return err
7283				}
7284				afnrc.Etag = &etag
7285			}
7286		case "id":
7287			if v != nil {
7288				var ID string
7289				err = json.Unmarshal(*v, &ID)
7290				if err != nil {
7291					return err
7292				}
7293				afnrc.ID = &ID
7294			}
7295		}
7296	}
7297
7298	return nil
7299}
7300
7301// AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
7302type AzureFirewallNatRuleCollectionProperties struct {
7303	// Priority - Priority of the NAT rule collection resource.
7304	Priority *int32 `json:"priority,omitempty"`
7305	// Action - The action type of a NAT rule collection.
7306	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
7307	// Rules - Collection of rules used by a NAT rule collection.
7308	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
7309	// ProvisioningState - READ-ONLY; The provisioning state of the NAT rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7310	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7311}
7312
7313// AzureFirewallNetworkRule properties of the network rule.
7314type AzureFirewallNetworkRule struct {
7315	// Name - Name of the network rule.
7316	Name *string `json:"name,omitempty"`
7317	// Description - Description of the rule.
7318	Description *string `json:"description,omitempty"`
7319	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
7320	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
7321	// SourceAddresses - List of source IP addresses for this rule.
7322	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
7323	// DestinationAddresses - List of destination IP addresses.
7324	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
7325	// DestinationPorts - List of destination ports.
7326	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
7327	// DestinationFqdns - List of destination FQDNs.
7328	DestinationFqdns *[]string `json:"destinationFqdns,omitempty"`
7329	// SourceIPGroups - List of source IpGroups for this rule.
7330	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
7331	// DestinationIPGroups - List of destination IpGroups for this rule.
7332	DestinationIPGroups *[]string `json:"destinationIpGroups,omitempty"`
7333}
7334
7335// AzureFirewallNetworkRuleCollection network rule collection resource.
7336type AzureFirewallNetworkRuleCollection struct {
7337	// AzureFirewallNetworkRuleCollectionPropertiesFormat - Properties of the azure firewall network rule collection.
7338	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
7339	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
7340	Name *string `json:"name,omitempty"`
7341	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7342	Etag *string `json:"etag,omitempty"`
7343	// ID - Resource ID.
7344	ID *string `json:"id,omitempty"`
7345}
7346
7347// MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
7348func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
7349	objectMap := make(map[string]interface{})
7350	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
7351		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
7352	}
7353	if afnrc.Name != nil {
7354		objectMap["name"] = afnrc.Name
7355	}
7356	if afnrc.ID != nil {
7357		objectMap["id"] = afnrc.ID
7358	}
7359	return json.Marshal(objectMap)
7360}
7361
7362// UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
7363func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
7364	var m map[string]*json.RawMessage
7365	err := json.Unmarshal(body, &m)
7366	if err != nil {
7367		return err
7368	}
7369	for k, v := range m {
7370		switch k {
7371		case "properties":
7372			if v != nil {
7373				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
7374				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
7375				if err != nil {
7376					return err
7377				}
7378				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
7379			}
7380		case "name":
7381			if v != nil {
7382				var name string
7383				err = json.Unmarshal(*v, &name)
7384				if err != nil {
7385					return err
7386				}
7387				afnrc.Name = &name
7388			}
7389		case "etag":
7390			if v != nil {
7391				var etag string
7392				err = json.Unmarshal(*v, &etag)
7393				if err != nil {
7394					return err
7395				}
7396				afnrc.Etag = &etag
7397			}
7398		case "id":
7399			if v != nil {
7400				var ID string
7401				err = json.Unmarshal(*v, &ID)
7402				if err != nil {
7403					return err
7404				}
7405				afnrc.ID = &ID
7406			}
7407		}
7408	}
7409
7410	return nil
7411}
7412
7413// AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
7414type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
7415	// Priority - Priority of the network rule collection resource.
7416	Priority *int32 `json:"priority,omitempty"`
7417	// Action - The action type of a rule collection.
7418	Action *AzureFirewallRCAction `json:"action,omitempty"`
7419	// Rules - Collection of rules used by a network rule collection.
7420	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
7421	// ProvisioningState - READ-ONLY; The provisioning state of the network rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7422	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7423}
7424
7425// AzureFirewallPropertiesFormat properties of the Azure Firewall.
7426type AzureFirewallPropertiesFormat struct {
7427	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
7428	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
7429	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
7430	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
7431	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
7432	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
7433	// IPConfigurations - IP configuration of the Azure Firewall resource.
7434	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
7435	// ManagementIPConfiguration - IP configuration of the Azure Firewall used for management traffic.
7436	ManagementIPConfiguration *AzureFirewallIPConfiguration `json:"managementIpConfiguration,omitempty"`
7437	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7438	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7439	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
7440	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
7441	// VirtualHub - The virtualHub to which the firewall belongs.
7442	VirtualHub *SubResource `json:"virtualHub,omitempty"`
7443	// FirewallPolicy - The firewallPolicy associated with this azure firewall.
7444	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
7445	// HubIPAddresses - READ-ONLY; IP addresses associated with AzureFirewall.
7446	HubIPAddresses *HubIPAddresses `json:"hubIpAddresses,omitempty"`
7447	// IPGroups - READ-ONLY; IpGroups associated with AzureFirewall.
7448	IPGroups *[]AzureFirewallIPGroups `json:"ipGroups,omitempty"`
7449	// Sku - The Azure Firewall Resource SKU.
7450	Sku *AzureFirewallSku `json:"sku,omitempty"`
7451	// AdditionalProperties - The additional properties used to further config this azure firewall.
7452	AdditionalProperties map[string]*string `json:"additionalProperties"`
7453}
7454
7455// MarshalJSON is the custom marshaler for AzureFirewallPropertiesFormat.
7456func (afpf AzureFirewallPropertiesFormat) MarshalJSON() ([]byte, error) {
7457	objectMap := make(map[string]interface{})
7458	if afpf.ApplicationRuleCollections != nil {
7459		objectMap["applicationRuleCollections"] = afpf.ApplicationRuleCollections
7460	}
7461	if afpf.NatRuleCollections != nil {
7462		objectMap["natRuleCollections"] = afpf.NatRuleCollections
7463	}
7464	if afpf.NetworkRuleCollections != nil {
7465		objectMap["networkRuleCollections"] = afpf.NetworkRuleCollections
7466	}
7467	if afpf.IPConfigurations != nil {
7468		objectMap["ipConfigurations"] = afpf.IPConfigurations
7469	}
7470	if afpf.ManagementIPConfiguration != nil {
7471		objectMap["managementIpConfiguration"] = afpf.ManagementIPConfiguration
7472	}
7473	if afpf.ThreatIntelMode != "" {
7474		objectMap["threatIntelMode"] = afpf.ThreatIntelMode
7475	}
7476	if afpf.VirtualHub != nil {
7477		objectMap["virtualHub"] = afpf.VirtualHub
7478	}
7479	if afpf.FirewallPolicy != nil {
7480		objectMap["firewallPolicy"] = afpf.FirewallPolicy
7481	}
7482	if afpf.Sku != nil {
7483		objectMap["sku"] = afpf.Sku
7484	}
7485	if afpf.AdditionalProperties != nil {
7486		objectMap["additionalProperties"] = afpf.AdditionalProperties
7487	}
7488	return json.Marshal(objectMap)
7489}
7490
7491// AzureFirewallPublicIPAddress public IP Address associated with azure firewall.
7492type AzureFirewallPublicIPAddress struct {
7493	// Address - Public IP Address value.
7494	Address *string `json:"address,omitempty"`
7495}
7496
7497// AzureFirewallRCAction properties of the AzureFirewallRCAction.
7498type AzureFirewallRCAction struct {
7499	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
7500	Type AzureFirewallRCActionType `json:"type,omitempty"`
7501}
7502
7503// AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7504// long-running operation.
7505type AzureFirewallsCreateOrUpdateFuture struct {
7506	azure.Future
7507}
7508
7509// Result returns the result of the asynchronous operation.
7510// If the operation has not completed it will return an error.
7511func (future *AzureFirewallsCreateOrUpdateFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
7512	var done bool
7513	done, err = future.DoneWithContext(context.Background(), client)
7514	if err != nil {
7515		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7516		return
7517	}
7518	if !done {
7519		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
7520		return
7521	}
7522	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7523	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
7524		af, err = client.CreateOrUpdateResponder(af.Response.Response)
7525		if err != nil {
7526			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
7527		}
7528	}
7529	return
7530}
7531
7532// AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
7533// operation.
7534type AzureFirewallsDeleteFuture struct {
7535	azure.Future
7536}
7537
7538// Result returns the result of the asynchronous operation.
7539// If the operation has not completed it will return an error.
7540func (future *AzureFirewallsDeleteFuture) Result(client AzureFirewallsClient) (ar autorest.Response, err error) {
7541	var done bool
7542	done, err = future.DoneWithContext(context.Background(), client)
7543	if err != nil {
7544		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
7545		return
7546	}
7547	if !done {
7548		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
7549		return
7550	}
7551	ar.Response = future.Response()
7552	return
7553}
7554
7555// AzureFirewallSku SKU of an Azure Firewall.
7556type AzureFirewallSku struct {
7557	// Name - Name of an Azure Firewall SKU. Possible values include: 'AZFWVNet', 'AZFWHub'
7558	Name AzureFirewallSkuName `json:"name,omitempty"`
7559	// Tier - Tier of an Azure Firewall. Possible values include: 'Standard'
7560	Tier AzureFirewallSkuTier `json:"tier,omitempty"`
7561}
7562
7563// AzureReachabilityReport azure reachability report details.
7564type AzureReachabilityReport struct {
7565	autorest.Response `json:"-"`
7566	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
7567	AggregationLevel *string `json:"aggregationLevel,omitempty"`
7568	// ProviderLocation - Parameters that define a geographic location.
7569	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
7570	// ReachabilityReport - List of Azure reachability report items.
7571	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
7572}
7573
7574// AzureReachabilityReportItem azure reachability report details for a given provider location.
7575type AzureReachabilityReportItem struct {
7576	// Provider - The Internet service provider.
7577	Provider *string `json:"provider,omitempty"`
7578	// AzureLocation - The Azure region.
7579	AzureLocation *string `json:"azureLocation,omitempty"`
7580	// Latencies - List of latency details for each of the time series.
7581	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
7582}
7583
7584// AzureReachabilityReportLatencyInfo details on latency for a time series.
7585type AzureReachabilityReportLatencyInfo struct {
7586	// TimeStamp - The time stamp.
7587	TimeStamp *date.Time `json:"timeStamp,omitempty"`
7588	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
7589	Score *int32 `json:"score,omitempty"`
7590}
7591
7592// AzureReachabilityReportLocation parameters that define a geographic location.
7593type AzureReachabilityReportLocation struct {
7594	// Country - The name of the country.
7595	Country *string `json:"country,omitempty"`
7596	// State - The name of the state.
7597	State *string `json:"state,omitempty"`
7598	// City - The name of the city or town.
7599	City *string `json:"city,omitempty"`
7600}
7601
7602// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
7603type AzureReachabilityReportParameters struct {
7604	// ProviderLocation - Parameters that define a geographic location.
7605	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
7606	// Providers - List of Internet service providers.
7607	Providers *[]string `json:"providers,omitempty"`
7608	// AzureLocations - Optional Azure regions to scope the query to.
7609	AzureLocations *[]string `json:"azureLocations,omitempty"`
7610	// StartTime - The start time for the Azure reachability report.
7611	StartTime *date.Time `json:"startTime,omitempty"`
7612	// EndTime - The end time for the Azure reachability report.
7613	EndTime *date.Time `json:"endTime,omitempty"`
7614}
7615
7616// BackendAddressPool pool of backend IP addresses.
7617type BackendAddressPool struct {
7618	autorest.Response `json:"-"`
7619	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
7620	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
7621	// Name - The name of the resource that is unique within the set of backend address pools used by the load balancer. This name can be used to access the resource.
7622	Name *string `json:"name,omitempty"`
7623	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7624	Etag *string `json:"etag,omitempty"`
7625	// Type - READ-ONLY; Type of the resource.
7626	Type *string `json:"type,omitempty"`
7627	// ID - Resource ID.
7628	ID *string `json:"id,omitempty"`
7629}
7630
7631// MarshalJSON is the custom marshaler for BackendAddressPool.
7632func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
7633	objectMap := make(map[string]interface{})
7634	if bap.BackendAddressPoolPropertiesFormat != nil {
7635		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
7636	}
7637	if bap.Name != nil {
7638		objectMap["name"] = bap.Name
7639	}
7640	if bap.ID != nil {
7641		objectMap["id"] = bap.ID
7642	}
7643	return json.Marshal(objectMap)
7644}
7645
7646// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
7647func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
7648	var m map[string]*json.RawMessage
7649	err := json.Unmarshal(body, &m)
7650	if err != nil {
7651		return err
7652	}
7653	for k, v := range m {
7654		switch k {
7655		case "properties":
7656			if v != nil {
7657				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
7658				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
7659				if err != nil {
7660					return err
7661				}
7662				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
7663			}
7664		case "name":
7665			if v != nil {
7666				var name string
7667				err = json.Unmarshal(*v, &name)
7668				if err != nil {
7669					return err
7670				}
7671				bap.Name = &name
7672			}
7673		case "etag":
7674			if v != nil {
7675				var etag string
7676				err = json.Unmarshal(*v, &etag)
7677				if err != nil {
7678					return err
7679				}
7680				bap.Etag = &etag
7681			}
7682		case "type":
7683			if v != nil {
7684				var typeVar string
7685				err = json.Unmarshal(*v, &typeVar)
7686				if err != nil {
7687					return err
7688				}
7689				bap.Type = &typeVar
7690			}
7691		case "id":
7692			if v != nil {
7693				var ID string
7694				err = json.Unmarshal(*v, &ID)
7695				if err != nil {
7696					return err
7697				}
7698				bap.ID = &ID
7699			}
7700		}
7701	}
7702
7703	return nil
7704}
7705
7706// BackendAddressPoolPropertiesFormat properties of the backend address pool.
7707type BackendAddressPoolPropertiesFormat struct {
7708	// BackendIPConfigurations - READ-ONLY; An array of references to IP addresses defined in network interfaces.
7709	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
7710	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this backend address pool.
7711	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
7712	// OutboundRule - READ-ONLY; A reference to an outbound rule that uses this backend address pool.
7713	OutboundRule *SubResource `json:"outboundRule,omitempty"`
7714	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this backend address pool.
7715	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
7716	// ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7717	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7718}
7719
7720// BastionActiveSession the session detail for a target.
7721type BastionActiveSession struct {
7722	// SessionID - READ-ONLY; A unique id for the session.
7723	SessionID *string `json:"sessionId,omitempty"`
7724	// StartTime - READ-ONLY; The time when the session started.
7725	StartTime interface{} `json:"startTime,omitempty"`
7726	// TargetSubscriptionID - READ-ONLY; The subscription id for the target virtual machine.
7727	TargetSubscriptionID *string `json:"targetSubscriptionId,omitempty"`
7728	// ResourceType - READ-ONLY; The type of the resource.
7729	ResourceType *string `json:"resourceType,omitempty"`
7730	// TargetHostName - READ-ONLY; The host name of the target.
7731	TargetHostName *string `json:"targetHostName,omitempty"`
7732	// TargetResourceGroup - READ-ONLY; The resource group of the target.
7733	TargetResourceGroup *string `json:"targetResourceGroup,omitempty"`
7734	// UserName - READ-ONLY; The user name who is active on this session.
7735	UserName *string `json:"userName,omitempty"`
7736	// TargetIPAddress - READ-ONLY; The IP Address of the target.
7737	TargetIPAddress *string `json:"targetIpAddress,omitempty"`
7738	// Protocol - READ-ONLY; The protocol used to connect to the target. Possible values include: 'SSH', 'RDP'
7739	Protocol BastionConnectProtocol `json:"protocol,omitempty"`
7740	// TargetResourceID - READ-ONLY; The resource id of the target.
7741	TargetResourceID *string `json:"targetResourceId,omitempty"`
7742	// SessionDurationInMins - READ-ONLY; Duration in mins the session has been active.
7743	SessionDurationInMins *float64 `json:"sessionDurationInMins,omitempty"`
7744}
7745
7746// BastionActiveSessionListResult response for GetActiveSessions.
7747type BastionActiveSessionListResult struct {
7748	autorest.Response `json:"-"`
7749	// Value - List of active sessions on the bastion.
7750	Value *[]BastionActiveSession `json:"value,omitempty"`
7751	// NextLink - The URL to get the next set of results.
7752	NextLink *string `json:"nextLink,omitempty"`
7753}
7754
7755// BastionActiveSessionListResultIterator provides access to a complete listing of BastionActiveSession
7756// values.
7757type BastionActiveSessionListResultIterator struct {
7758	i    int
7759	page BastionActiveSessionListResultPage
7760}
7761
7762// NextWithContext advances to the next value.  If there was an error making
7763// the request the iterator does not advance and the error is returned.
7764func (iter *BastionActiveSessionListResultIterator) NextWithContext(ctx context.Context) (err error) {
7765	if tracing.IsEnabled() {
7766		ctx = tracing.StartSpan(ctx, fqdn+"/BastionActiveSessionListResultIterator.NextWithContext")
7767		defer func() {
7768			sc := -1
7769			if iter.Response().Response.Response != nil {
7770				sc = iter.Response().Response.Response.StatusCode
7771			}
7772			tracing.EndSpan(ctx, sc, err)
7773		}()
7774	}
7775	iter.i++
7776	if iter.i < len(iter.page.Values()) {
7777		return nil
7778	}
7779	err = iter.page.NextWithContext(ctx)
7780	if err != nil {
7781		iter.i--
7782		return err
7783	}
7784	iter.i = 0
7785	return nil
7786}
7787
7788// Next advances to the next value.  If there was an error making
7789// the request the iterator does not advance and the error is returned.
7790// Deprecated: Use NextWithContext() instead.
7791func (iter *BastionActiveSessionListResultIterator) Next() error {
7792	return iter.NextWithContext(context.Background())
7793}
7794
7795// NotDone returns true if the enumeration should be started or is not yet complete.
7796func (iter BastionActiveSessionListResultIterator) NotDone() bool {
7797	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7798}
7799
7800// Response returns the raw server response from the last page request.
7801func (iter BastionActiveSessionListResultIterator) Response() BastionActiveSessionListResult {
7802	return iter.page.Response()
7803}
7804
7805// Value returns the current value or a zero-initialized value if the
7806// iterator has advanced beyond the end of the collection.
7807func (iter BastionActiveSessionListResultIterator) Value() BastionActiveSession {
7808	if !iter.page.NotDone() {
7809		return BastionActiveSession{}
7810	}
7811	return iter.page.Values()[iter.i]
7812}
7813
7814// Creates a new instance of the BastionActiveSessionListResultIterator type.
7815func NewBastionActiveSessionListResultIterator(page BastionActiveSessionListResultPage) BastionActiveSessionListResultIterator {
7816	return BastionActiveSessionListResultIterator{page: page}
7817}
7818
7819// IsEmpty returns true if the ListResult contains no values.
7820func (baslr BastionActiveSessionListResult) IsEmpty() bool {
7821	return baslr.Value == nil || len(*baslr.Value) == 0
7822}
7823
7824// bastionActiveSessionListResultPreparer prepares a request to retrieve the next set of results.
7825// It returns nil if no more results exist.
7826func (baslr BastionActiveSessionListResult) bastionActiveSessionListResultPreparer(ctx context.Context) (*http.Request, error) {
7827	if baslr.NextLink == nil || len(to.String(baslr.NextLink)) < 1 {
7828		return nil, nil
7829	}
7830	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7831		autorest.AsJSON(),
7832		autorest.AsGet(),
7833		autorest.WithBaseURL(to.String(baslr.NextLink)))
7834}
7835
7836// BastionActiveSessionListResultPage contains a page of BastionActiveSession values.
7837type BastionActiveSessionListResultPage struct {
7838	fn    func(context.Context, BastionActiveSessionListResult) (BastionActiveSessionListResult, error)
7839	baslr BastionActiveSessionListResult
7840}
7841
7842// NextWithContext advances to the next page of values.  If there was an error making
7843// the request the page does not advance and the error is returned.
7844func (page *BastionActiveSessionListResultPage) NextWithContext(ctx context.Context) (err error) {
7845	if tracing.IsEnabled() {
7846		ctx = tracing.StartSpan(ctx, fqdn+"/BastionActiveSessionListResultPage.NextWithContext")
7847		defer func() {
7848			sc := -1
7849			if page.Response().Response.Response != nil {
7850				sc = page.Response().Response.Response.StatusCode
7851			}
7852			tracing.EndSpan(ctx, sc, err)
7853		}()
7854	}
7855	next, err := page.fn(ctx, page.baslr)
7856	if err != nil {
7857		return err
7858	}
7859	page.baslr = next
7860	return nil
7861}
7862
7863// Next advances to the next page of values.  If there was an error making
7864// the request the page does not advance and the error is returned.
7865// Deprecated: Use NextWithContext() instead.
7866func (page *BastionActiveSessionListResultPage) Next() error {
7867	return page.NextWithContext(context.Background())
7868}
7869
7870// NotDone returns true if the page enumeration should be started or is not yet complete.
7871func (page BastionActiveSessionListResultPage) NotDone() bool {
7872	return !page.baslr.IsEmpty()
7873}
7874
7875// Response returns the raw server response from the last page request.
7876func (page BastionActiveSessionListResultPage) Response() BastionActiveSessionListResult {
7877	return page.baslr
7878}
7879
7880// Values returns the slice of values for the current page or nil if there are no values.
7881func (page BastionActiveSessionListResultPage) Values() []BastionActiveSession {
7882	if page.baslr.IsEmpty() {
7883		return nil
7884	}
7885	return *page.baslr.Value
7886}
7887
7888// Creates a new instance of the BastionActiveSessionListResultPage type.
7889func NewBastionActiveSessionListResultPage(getNextPage func(context.Context, BastionActiveSessionListResult) (BastionActiveSessionListResult, error)) BastionActiveSessionListResultPage {
7890	return BastionActiveSessionListResultPage{fn: getNextPage}
7891}
7892
7893// BastionHost bastion Host resource.
7894type BastionHost struct {
7895	autorest.Response `json:"-"`
7896	// BastionHostPropertiesFormat - Represents the bastion host resource.
7897	*BastionHostPropertiesFormat `json:"properties,omitempty"`
7898	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7899	Etag *string `json:"etag,omitempty"`
7900	// ID - Resource ID.
7901	ID *string `json:"id,omitempty"`
7902	// Name - READ-ONLY; Resource name.
7903	Name *string `json:"name,omitempty"`
7904	// Type - READ-ONLY; Resource type.
7905	Type *string `json:"type,omitempty"`
7906	// Location - Resource location.
7907	Location *string `json:"location,omitempty"`
7908	// Tags - Resource tags.
7909	Tags map[string]*string `json:"tags"`
7910}
7911
7912// MarshalJSON is the custom marshaler for BastionHost.
7913func (bh BastionHost) MarshalJSON() ([]byte, error) {
7914	objectMap := make(map[string]interface{})
7915	if bh.BastionHostPropertiesFormat != nil {
7916		objectMap["properties"] = bh.BastionHostPropertiesFormat
7917	}
7918	if bh.ID != nil {
7919		objectMap["id"] = bh.ID
7920	}
7921	if bh.Location != nil {
7922		objectMap["location"] = bh.Location
7923	}
7924	if bh.Tags != nil {
7925		objectMap["tags"] = bh.Tags
7926	}
7927	return json.Marshal(objectMap)
7928}
7929
7930// UnmarshalJSON is the custom unmarshaler for BastionHost struct.
7931func (bh *BastionHost) UnmarshalJSON(body []byte) error {
7932	var m map[string]*json.RawMessage
7933	err := json.Unmarshal(body, &m)
7934	if err != nil {
7935		return err
7936	}
7937	for k, v := range m {
7938		switch k {
7939		case "properties":
7940			if v != nil {
7941				var bastionHostPropertiesFormat BastionHostPropertiesFormat
7942				err = json.Unmarshal(*v, &bastionHostPropertiesFormat)
7943				if err != nil {
7944					return err
7945				}
7946				bh.BastionHostPropertiesFormat = &bastionHostPropertiesFormat
7947			}
7948		case "etag":
7949			if v != nil {
7950				var etag string
7951				err = json.Unmarshal(*v, &etag)
7952				if err != nil {
7953					return err
7954				}
7955				bh.Etag = &etag
7956			}
7957		case "id":
7958			if v != nil {
7959				var ID string
7960				err = json.Unmarshal(*v, &ID)
7961				if err != nil {
7962					return err
7963				}
7964				bh.ID = &ID
7965			}
7966		case "name":
7967			if v != nil {
7968				var name string
7969				err = json.Unmarshal(*v, &name)
7970				if err != nil {
7971					return err
7972				}
7973				bh.Name = &name
7974			}
7975		case "type":
7976			if v != nil {
7977				var typeVar string
7978				err = json.Unmarshal(*v, &typeVar)
7979				if err != nil {
7980					return err
7981				}
7982				bh.Type = &typeVar
7983			}
7984		case "location":
7985			if v != nil {
7986				var location string
7987				err = json.Unmarshal(*v, &location)
7988				if err != nil {
7989					return err
7990				}
7991				bh.Location = &location
7992			}
7993		case "tags":
7994			if v != nil {
7995				var tags map[string]*string
7996				err = json.Unmarshal(*v, &tags)
7997				if err != nil {
7998					return err
7999				}
8000				bh.Tags = tags
8001			}
8002		}
8003	}
8004
8005	return nil
8006}
8007
8008// BastionHostIPConfiguration IP configuration of an Bastion Host.
8009type BastionHostIPConfiguration struct {
8010	// BastionHostIPConfigurationPropertiesFormat - Represents the ip configuration associated with the resource.
8011	*BastionHostIPConfigurationPropertiesFormat `json:"properties,omitempty"`
8012	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
8013	Name *string `json:"name,omitempty"`
8014	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8015	Etag *string `json:"etag,omitempty"`
8016	// Type - READ-ONLY; Ip configuration type.
8017	Type *string `json:"type,omitempty"`
8018	// ID - Resource ID.
8019	ID *string `json:"id,omitempty"`
8020}
8021
8022// MarshalJSON is the custom marshaler for BastionHostIPConfiguration.
8023func (bhic BastionHostIPConfiguration) MarshalJSON() ([]byte, error) {
8024	objectMap := make(map[string]interface{})
8025	if bhic.BastionHostIPConfigurationPropertiesFormat != nil {
8026		objectMap["properties"] = bhic.BastionHostIPConfigurationPropertiesFormat
8027	}
8028	if bhic.Name != nil {
8029		objectMap["name"] = bhic.Name
8030	}
8031	if bhic.ID != nil {
8032		objectMap["id"] = bhic.ID
8033	}
8034	return json.Marshal(objectMap)
8035}
8036
8037// UnmarshalJSON is the custom unmarshaler for BastionHostIPConfiguration struct.
8038func (bhic *BastionHostIPConfiguration) UnmarshalJSON(body []byte) error {
8039	var m map[string]*json.RawMessage
8040	err := json.Unmarshal(body, &m)
8041	if err != nil {
8042		return err
8043	}
8044	for k, v := range m {
8045		switch k {
8046		case "properties":
8047			if v != nil {
8048				var bastionHostIPConfigurationPropertiesFormat BastionHostIPConfigurationPropertiesFormat
8049				err = json.Unmarshal(*v, &bastionHostIPConfigurationPropertiesFormat)
8050				if err != nil {
8051					return err
8052				}
8053				bhic.BastionHostIPConfigurationPropertiesFormat = &bastionHostIPConfigurationPropertiesFormat
8054			}
8055		case "name":
8056			if v != nil {
8057				var name string
8058				err = json.Unmarshal(*v, &name)
8059				if err != nil {
8060					return err
8061				}
8062				bhic.Name = &name
8063			}
8064		case "etag":
8065			if v != nil {
8066				var etag string
8067				err = json.Unmarshal(*v, &etag)
8068				if err != nil {
8069					return err
8070				}
8071				bhic.Etag = &etag
8072			}
8073		case "type":
8074			if v != nil {
8075				var typeVar string
8076				err = json.Unmarshal(*v, &typeVar)
8077				if err != nil {
8078					return err
8079				}
8080				bhic.Type = &typeVar
8081			}
8082		case "id":
8083			if v != nil {
8084				var ID string
8085				err = json.Unmarshal(*v, &ID)
8086				if err != nil {
8087					return err
8088				}
8089				bhic.ID = &ID
8090			}
8091		}
8092	}
8093
8094	return nil
8095}
8096
8097// BastionHostIPConfigurationPropertiesFormat properties of IP configuration of an Bastion Host.
8098type BastionHostIPConfigurationPropertiesFormat struct {
8099	// Subnet - Reference of the subnet resource.
8100	Subnet *SubResource `json:"subnet,omitempty"`
8101	// PublicIPAddress - Reference of the PublicIP resource.
8102	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
8103	// ProvisioningState - READ-ONLY; The provisioning state of the bastion host IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8104	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8105	// PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'Static', 'Dynamic'
8106	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
8107}
8108
8109// BastionHostListResult response for ListBastionHosts API service call.
8110type BastionHostListResult struct {
8111	autorest.Response `json:"-"`
8112	// Value - List of Bastion Hosts in a resource group.
8113	Value *[]BastionHost `json:"value,omitempty"`
8114	// NextLink - URL to get the next set of results.
8115	NextLink *string `json:"nextLink,omitempty"`
8116}
8117
8118// BastionHostListResultIterator provides access to a complete listing of BastionHost values.
8119type BastionHostListResultIterator struct {
8120	i    int
8121	page BastionHostListResultPage
8122}
8123
8124// NextWithContext advances to the next value.  If there was an error making
8125// the request the iterator does not advance and the error is returned.
8126func (iter *BastionHostListResultIterator) NextWithContext(ctx context.Context) (err error) {
8127	if tracing.IsEnabled() {
8128		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultIterator.NextWithContext")
8129		defer func() {
8130			sc := -1
8131			if iter.Response().Response.Response != nil {
8132				sc = iter.Response().Response.Response.StatusCode
8133			}
8134			tracing.EndSpan(ctx, sc, err)
8135		}()
8136	}
8137	iter.i++
8138	if iter.i < len(iter.page.Values()) {
8139		return nil
8140	}
8141	err = iter.page.NextWithContext(ctx)
8142	if err != nil {
8143		iter.i--
8144		return err
8145	}
8146	iter.i = 0
8147	return nil
8148}
8149
8150// Next advances to the next value.  If there was an error making
8151// the request the iterator does not advance and the error is returned.
8152// Deprecated: Use NextWithContext() instead.
8153func (iter *BastionHostListResultIterator) Next() error {
8154	return iter.NextWithContext(context.Background())
8155}
8156
8157// NotDone returns true if the enumeration should be started or is not yet complete.
8158func (iter BastionHostListResultIterator) NotDone() bool {
8159	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8160}
8161
8162// Response returns the raw server response from the last page request.
8163func (iter BastionHostListResultIterator) Response() BastionHostListResult {
8164	return iter.page.Response()
8165}
8166
8167// Value returns the current value or a zero-initialized value if the
8168// iterator has advanced beyond the end of the collection.
8169func (iter BastionHostListResultIterator) Value() BastionHost {
8170	if !iter.page.NotDone() {
8171		return BastionHost{}
8172	}
8173	return iter.page.Values()[iter.i]
8174}
8175
8176// Creates a new instance of the BastionHostListResultIterator type.
8177func NewBastionHostListResultIterator(page BastionHostListResultPage) BastionHostListResultIterator {
8178	return BastionHostListResultIterator{page: page}
8179}
8180
8181// IsEmpty returns true if the ListResult contains no values.
8182func (bhlr BastionHostListResult) IsEmpty() bool {
8183	return bhlr.Value == nil || len(*bhlr.Value) == 0
8184}
8185
8186// bastionHostListResultPreparer prepares a request to retrieve the next set of results.
8187// It returns nil if no more results exist.
8188func (bhlr BastionHostListResult) bastionHostListResultPreparer(ctx context.Context) (*http.Request, error) {
8189	if bhlr.NextLink == nil || len(to.String(bhlr.NextLink)) < 1 {
8190		return nil, nil
8191	}
8192	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8193		autorest.AsJSON(),
8194		autorest.AsGet(),
8195		autorest.WithBaseURL(to.String(bhlr.NextLink)))
8196}
8197
8198// BastionHostListResultPage contains a page of BastionHost values.
8199type BastionHostListResultPage struct {
8200	fn   func(context.Context, BastionHostListResult) (BastionHostListResult, error)
8201	bhlr BastionHostListResult
8202}
8203
8204// NextWithContext advances to the next page of values.  If there was an error making
8205// the request the page does not advance and the error is returned.
8206func (page *BastionHostListResultPage) NextWithContext(ctx context.Context) (err error) {
8207	if tracing.IsEnabled() {
8208		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultPage.NextWithContext")
8209		defer func() {
8210			sc := -1
8211			if page.Response().Response.Response != nil {
8212				sc = page.Response().Response.Response.StatusCode
8213			}
8214			tracing.EndSpan(ctx, sc, err)
8215		}()
8216	}
8217	next, err := page.fn(ctx, page.bhlr)
8218	if err != nil {
8219		return err
8220	}
8221	page.bhlr = next
8222	return nil
8223}
8224
8225// Next advances to the next page of values.  If there was an error making
8226// the request the page does not advance and the error is returned.
8227// Deprecated: Use NextWithContext() instead.
8228func (page *BastionHostListResultPage) Next() error {
8229	return page.NextWithContext(context.Background())
8230}
8231
8232// NotDone returns true if the page enumeration should be started or is not yet complete.
8233func (page BastionHostListResultPage) NotDone() bool {
8234	return !page.bhlr.IsEmpty()
8235}
8236
8237// Response returns the raw server response from the last page request.
8238func (page BastionHostListResultPage) Response() BastionHostListResult {
8239	return page.bhlr
8240}
8241
8242// Values returns the slice of values for the current page or nil if there are no values.
8243func (page BastionHostListResultPage) Values() []BastionHost {
8244	if page.bhlr.IsEmpty() {
8245		return nil
8246	}
8247	return *page.bhlr.Value
8248}
8249
8250// Creates a new instance of the BastionHostListResultPage type.
8251func NewBastionHostListResultPage(getNextPage func(context.Context, BastionHostListResult) (BastionHostListResult, error)) BastionHostListResultPage {
8252	return BastionHostListResultPage{fn: getNextPage}
8253}
8254
8255// BastionHostPropertiesFormat properties of the Bastion Host.
8256type BastionHostPropertiesFormat struct {
8257	// IPConfigurations - IP configuration of the Bastion Host resource.
8258	IPConfigurations *[]BastionHostIPConfiguration `json:"ipConfigurations,omitempty"`
8259	// DNSName - FQDN for the endpoint on which bastion host is accessible.
8260	DNSName *string `json:"dnsName,omitempty"`
8261	// ProvisioningState - READ-ONLY; The provisioning state of the bastion host resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8262	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8263}
8264
8265// BastionHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8266// long-running operation.
8267type BastionHostsCreateOrUpdateFuture struct {
8268	azure.Future
8269}
8270
8271// Result returns the result of the asynchronous operation.
8272// If the operation has not completed it will return an error.
8273func (future *BastionHostsCreateOrUpdateFuture) Result(client BastionHostsClient) (bh BastionHost, err error) {
8274	var done bool
8275	done, err = future.DoneWithContext(context.Background(), client)
8276	if err != nil {
8277		err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8278		return
8279	}
8280	if !done {
8281		err = azure.NewAsyncOpIncompleteError("network.BastionHostsCreateOrUpdateFuture")
8282		return
8283	}
8284	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8285	if bh.Response.Response, err = future.GetResult(sender); err == nil && bh.Response.Response.StatusCode != http.StatusNoContent {
8286		bh, err = client.CreateOrUpdateResponder(bh.Response.Response)
8287		if err != nil {
8288			err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", bh.Response.Response, "Failure responding to request")
8289		}
8290	}
8291	return
8292}
8293
8294// BastionHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
8295// operation.
8296type BastionHostsDeleteFuture struct {
8297	azure.Future
8298}
8299
8300// Result returns the result of the asynchronous operation.
8301// If the operation has not completed it will return an error.
8302func (future *BastionHostsDeleteFuture) Result(client BastionHostsClient) (ar autorest.Response, err error) {
8303	var done bool
8304	done, err = future.DoneWithContext(context.Background(), client)
8305	if err != nil {
8306		err = autorest.NewErrorWithError(err, "network.BastionHostsDeleteFuture", "Result", future.Response(), "Polling failure")
8307		return
8308	}
8309	if !done {
8310		err = azure.NewAsyncOpIncompleteError("network.BastionHostsDeleteFuture")
8311		return
8312	}
8313	ar.Response = future.Response()
8314	return
8315}
8316
8317// BastionSessionDeleteResult response for DisconnectActiveSessions.
8318type BastionSessionDeleteResult struct {
8319	autorest.Response `json:"-"`
8320	// Value - List of sessions with their corresponding state.
8321	Value *[]BastionSessionState `json:"value,omitempty"`
8322	// NextLink - The URL to get the next set of results.
8323	NextLink *string `json:"nextLink,omitempty"`
8324}
8325
8326// BastionSessionDeleteResultIterator provides access to a complete listing of BastionSessionState values.
8327type BastionSessionDeleteResultIterator struct {
8328	i    int
8329	page BastionSessionDeleteResultPage
8330}
8331
8332// NextWithContext advances to the next value.  If there was an error making
8333// the request the iterator does not advance and the error is returned.
8334func (iter *BastionSessionDeleteResultIterator) NextWithContext(ctx context.Context) (err error) {
8335	if tracing.IsEnabled() {
8336		ctx = tracing.StartSpan(ctx, fqdn+"/BastionSessionDeleteResultIterator.NextWithContext")
8337		defer func() {
8338			sc := -1
8339			if iter.Response().Response.Response != nil {
8340				sc = iter.Response().Response.Response.StatusCode
8341			}
8342			tracing.EndSpan(ctx, sc, err)
8343		}()
8344	}
8345	iter.i++
8346	if iter.i < len(iter.page.Values()) {
8347		return nil
8348	}
8349	err = iter.page.NextWithContext(ctx)
8350	if err != nil {
8351		iter.i--
8352		return err
8353	}
8354	iter.i = 0
8355	return nil
8356}
8357
8358// Next advances to the next value.  If there was an error making
8359// the request the iterator does not advance and the error is returned.
8360// Deprecated: Use NextWithContext() instead.
8361func (iter *BastionSessionDeleteResultIterator) Next() error {
8362	return iter.NextWithContext(context.Background())
8363}
8364
8365// NotDone returns true if the enumeration should be started or is not yet complete.
8366func (iter BastionSessionDeleteResultIterator) NotDone() bool {
8367	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8368}
8369
8370// Response returns the raw server response from the last page request.
8371func (iter BastionSessionDeleteResultIterator) Response() BastionSessionDeleteResult {
8372	return iter.page.Response()
8373}
8374
8375// Value returns the current value or a zero-initialized value if the
8376// iterator has advanced beyond the end of the collection.
8377func (iter BastionSessionDeleteResultIterator) Value() BastionSessionState {
8378	if !iter.page.NotDone() {
8379		return BastionSessionState{}
8380	}
8381	return iter.page.Values()[iter.i]
8382}
8383
8384// Creates a new instance of the BastionSessionDeleteResultIterator type.
8385func NewBastionSessionDeleteResultIterator(page BastionSessionDeleteResultPage) BastionSessionDeleteResultIterator {
8386	return BastionSessionDeleteResultIterator{page: page}
8387}
8388
8389// IsEmpty returns true if the ListResult contains no values.
8390func (bsdr BastionSessionDeleteResult) IsEmpty() bool {
8391	return bsdr.Value == nil || len(*bsdr.Value) == 0
8392}
8393
8394// bastionSessionDeleteResultPreparer prepares a request to retrieve the next set of results.
8395// It returns nil if no more results exist.
8396func (bsdr BastionSessionDeleteResult) bastionSessionDeleteResultPreparer(ctx context.Context) (*http.Request, error) {
8397	if bsdr.NextLink == nil || len(to.String(bsdr.NextLink)) < 1 {
8398		return nil, nil
8399	}
8400	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8401		autorest.AsJSON(),
8402		autorest.AsGet(),
8403		autorest.WithBaseURL(to.String(bsdr.NextLink)))
8404}
8405
8406// BastionSessionDeleteResultPage contains a page of BastionSessionState values.
8407type BastionSessionDeleteResultPage struct {
8408	fn   func(context.Context, BastionSessionDeleteResult) (BastionSessionDeleteResult, error)
8409	bsdr BastionSessionDeleteResult
8410}
8411
8412// NextWithContext advances to the next page of values.  If there was an error making
8413// the request the page does not advance and the error is returned.
8414func (page *BastionSessionDeleteResultPage) NextWithContext(ctx context.Context) (err error) {
8415	if tracing.IsEnabled() {
8416		ctx = tracing.StartSpan(ctx, fqdn+"/BastionSessionDeleteResultPage.NextWithContext")
8417		defer func() {
8418			sc := -1
8419			if page.Response().Response.Response != nil {
8420				sc = page.Response().Response.Response.StatusCode
8421			}
8422			tracing.EndSpan(ctx, sc, err)
8423		}()
8424	}
8425	next, err := page.fn(ctx, page.bsdr)
8426	if err != nil {
8427		return err
8428	}
8429	page.bsdr = next
8430	return nil
8431}
8432
8433// Next advances to the next page of values.  If there was an error making
8434// the request the page does not advance and the error is returned.
8435// Deprecated: Use NextWithContext() instead.
8436func (page *BastionSessionDeleteResultPage) Next() error {
8437	return page.NextWithContext(context.Background())
8438}
8439
8440// NotDone returns true if the page enumeration should be started or is not yet complete.
8441func (page BastionSessionDeleteResultPage) NotDone() bool {
8442	return !page.bsdr.IsEmpty()
8443}
8444
8445// Response returns the raw server response from the last page request.
8446func (page BastionSessionDeleteResultPage) Response() BastionSessionDeleteResult {
8447	return page.bsdr
8448}
8449
8450// Values returns the slice of values for the current page or nil if there are no values.
8451func (page BastionSessionDeleteResultPage) Values() []BastionSessionState {
8452	if page.bsdr.IsEmpty() {
8453		return nil
8454	}
8455	return *page.bsdr.Value
8456}
8457
8458// Creates a new instance of the BastionSessionDeleteResultPage type.
8459func NewBastionSessionDeleteResultPage(getNextPage func(context.Context, BastionSessionDeleteResult) (BastionSessionDeleteResult, error)) BastionSessionDeleteResultPage {
8460	return BastionSessionDeleteResultPage{fn: getNextPage}
8461}
8462
8463// BastionSessionState the session state detail for a target.
8464type BastionSessionState struct {
8465	// SessionID - READ-ONLY; A unique id for the session.
8466	SessionID *string `json:"sessionId,omitempty"`
8467	// Message - READ-ONLY; Used for extra information.
8468	Message *string `json:"message,omitempty"`
8469	// State - READ-ONLY; The state of the session. Disconnected/Failed/NotFound.
8470	State *string `json:"state,omitempty"`
8471}
8472
8473// BastionShareableLink bastion Shareable Link.
8474type BastionShareableLink struct {
8475	// VM - Reference of the virtual machine resource.
8476	VM *VM `json:"vm,omitempty"`
8477	// Bsl - READ-ONLY; The unique Bastion Shareable Link to the virtual machine.
8478	Bsl *string `json:"bsl,omitempty"`
8479	// CreatedAt - READ-ONLY; The time when the link was created.
8480	CreatedAt *string `json:"createdAt,omitempty"`
8481	// Message - READ-ONLY; Optional field indicating the warning or error message related to the vm in case of partial failure.
8482	Message *string `json:"message,omitempty"`
8483}
8484
8485// BastionShareableLinkListRequest post request for all the Bastion Shareable Link endpoints.
8486type BastionShareableLinkListRequest struct {
8487	// Vms - List of VM references.
8488	Vms *[]BastionShareableLink `json:"vms,omitempty"`
8489}
8490
8491// BastionShareableLinkListResult response for all the Bastion Shareable Link endpoints.
8492type BastionShareableLinkListResult struct {
8493	autorest.Response `json:"-"`
8494	// Value - List of Bastion Shareable Links for the request.
8495	Value *[]BastionShareableLink `json:"value,omitempty"`
8496	// NextLink - The URL to get the next set of results.
8497	NextLink *string `json:"nextLink,omitempty"`
8498}
8499
8500// BastionShareableLinkListResultIterator provides access to a complete listing of BastionShareableLink
8501// values.
8502type BastionShareableLinkListResultIterator struct {
8503	i    int
8504	page BastionShareableLinkListResultPage
8505}
8506
8507// NextWithContext advances to the next value.  If there was an error making
8508// the request the iterator does not advance and the error is returned.
8509func (iter *BastionShareableLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
8510	if tracing.IsEnabled() {
8511		ctx = tracing.StartSpan(ctx, fqdn+"/BastionShareableLinkListResultIterator.NextWithContext")
8512		defer func() {
8513			sc := -1
8514			if iter.Response().Response.Response != nil {
8515				sc = iter.Response().Response.Response.StatusCode
8516			}
8517			tracing.EndSpan(ctx, sc, err)
8518		}()
8519	}
8520	iter.i++
8521	if iter.i < len(iter.page.Values()) {
8522		return nil
8523	}
8524	err = iter.page.NextWithContext(ctx)
8525	if err != nil {
8526		iter.i--
8527		return err
8528	}
8529	iter.i = 0
8530	return nil
8531}
8532
8533// Next advances to the next value.  If there was an error making
8534// the request the iterator does not advance and the error is returned.
8535// Deprecated: Use NextWithContext() instead.
8536func (iter *BastionShareableLinkListResultIterator) Next() error {
8537	return iter.NextWithContext(context.Background())
8538}
8539
8540// NotDone returns true if the enumeration should be started or is not yet complete.
8541func (iter BastionShareableLinkListResultIterator) NotDone() bool {
8542	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8543}
8544
8545// Response returns the raw server response from the last page request.
8546func (iter BastionShareableLinkListResultIterator) Response() BastionShareableLinkListResult {
8547	return iter.page.Response()
8548}
8549
8550// Value returns the current value or a zero-initialized value if the
8551// iterator has advanced beyond the end of the collection.
8552func (iter BastionShareableLinkListResultIterator) Value() BastionShareableLink {
8553	if !iter.page.NotDone() {
8554		return BastionShareableLink{}
8555	}
8556	return iter.page.Values()[iter.i]
8557}
8558
8559// Creates a new instance of the BastionShareableLinkListResultIterator type.
8560func NewBastionShareableLinkListResultIterator(page BastionShareableLinkListResultPage) BastionShareableLinkListResultIterator {
8561	return BastionShareableLinkListResultIterator{page: page}
8562}
8563
8564// IsEmpty returns true if the ListResult contains no values.
8565func (bsllr BastionShareableLinkListResult) IsEmpty() bool {
8566	return bsllr.Value == nil || len(*bsllr.Value) == 0
8567}
8568
8569// bastionShareableLinkListResultPreparer prepares a request to retrieve the next set of results.
8570// It returns nil if no more results exist.
8571func (bsllr BastionShareableLinkListResult) bastionShareableLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
8572	if bsllr.NextLink == nil || len(to.String(bsllr.NextLink)) < 1 {
8573		return nil, nil
8574	}
8575	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8576		autorest.AsJSON(),
8577		autorest.AsGet(),
8578		autorest.WithBaseURL(to.String(bsllr.NextLink)))
8579}
8580
8581// BastionShareableLinkListResultPage contains a page of BastionShareableLink values.
8582type BastionShareableLinkListResultPage struct {
8583	fn    func(context.Context, BastionShareableLinkListResult) (BastionShareableLinkListResult, error)
8584	bsllr BastionShareableLinkListResult
8585}
8586
8587// NextWithContext advances to the next page of values.  If there was an error making
8588// the request the page does not advance and the error is returned.
8589func (page *BastionShareableLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
8590	if tracing.IsEnabled() {
8591		ctx = tracing.StartSpan(ctx, fqdn+"/BastionShareableLinkListResultPage.NextWithContext")
8592		defer func() {
8593			sc := -1
8594			if page.Response().Response.Response != nil {
8595				sc = page.Response().Response.Response.StatusCode
8596			}
8597			tracing.EndSpan(ctx, sc, err)
8598		}()
8599	}
8600	next, err := page.fn(ctx, page.bsllr)
8601	if err != nil {
8602		return err
8603	}
8604	page.bsllr = next
8605	return nil
8606}
8607
8608// Next advances to the next page of values.  If there was an error making
8609// the request the page does not advance and the error is returned.
8610// Deprecated: Use NextWithContext() instead.
8611func (page *BastionShareableLinkListResultPage) Next() error {
8612	return page.NextWithContext(context.Background())
8613}
8614
8615// NotDone returns true if the page enumeration should be started or is not yet complete.
8616func (page BastionShareableLinkListResultPage) NotDone() bool {
8617	return !page.bsllr.IsEmpty()
8618}
8619
8620// Response returns the raw server response from the last page request.
8621func (page BastionShareableLinkListResultPage) Response() BastionShareableLinkListResult {
8622	return page.bsllr
8623}
8624
8625// Values returns the slice of values for the current page or nil if there are no values.
8626func (page BastionShareableLinkListResultPage) Values() []BastionShareableLink {
8627	if page.bsllr.IsEmpty() {
8628		return nil
8629	}
8630	return *page.bsllr.Value
8631}
8632
8633// Creates a new instance of the BastionShareableLinkListResultPage type.
8634func NewBastionShareableLinkListResultPage(getNextPage func(context.Context, BastionShareableLinkListResult) (BastionShareableLinkListResult, error)) BastionShareableLinkListResultPage {
8635	return BastionShareableLinkListResultPage{fn: getNextPage}
8636}
8637
8638// BGPCommunity contains bgp community information offered in Service Community resources.
8639type BGPCommunity struct {
8640	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
8641	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
8642	// CommunityName - The name of the bgp community. e.g. Skype.
8643	CommunityName *string `json:"communityName,omitempty"`
8644	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
8645	CommunityValue *string `json:"communityValue,omitempty"`
8646	// CommunityPrefixes - The prefixes that the bgp community contains.
8647	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
8648	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
8649	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
8650	// ServiceGroup - The service group of the bgp community contains.
8651	ServiceGroup *string `json:"serviceGroup,omitempty"`
8652}
8653
8654// BgpPeerStatus BGP peer status details.
8655type BgpPeerStatus struct {
8656	// LocalAddress - READ-ONLY; The virtual network gateway's local address.
8657	LocalAddress *string `json:"localAddress,omitempty"`
8658	// Neighbor - READ-ONLY; The remote BGP peer.
8659	Neighbor *string `json:"neighbor,omitempty"`
8660	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer.
8661	Asn *int32 `json:"asn,omitempty"`
8662	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
8663	State BgpPeerState `json:"state,omitempty"`
8664	// ConnectedDuration - READ-ONLY; For how long the peering has been up.
8665	ConnectedDuration *string `json:"connectedDuration,omitempty"`
8666	// RoutesReceived - READ-ONLY; The number of routes learned from this peer.
8667	RoutesReceived *int64 `json:"routesReceived,omitempty"`
8668	// MessagesSent - READ-ONLY; The number of BGP messages sent.
8669	MessagesSent *int64 `json:"messagesSent,omitempty"`
8670	// MessagesReceived - READ-ONLY; The number of BGP messages received.
8671	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
8672}
8673
8674// BgpPeerStatusListResult response for list BGP peer status API service call.
8675type BgpPeerStatusListResult struct {
8676	autorest.Response `json:"-"`
8677	// Value - List of BGP peers.
8678	Value *[]BgpPeerStatus `json:"value,omitempty"`
8679}
8680
8681// BgpServiceCommunity service Community Properties.
8682type BgpServiceCommunity struct {
8683	// BgpServiceCommunityPropertiesFormat - Properties of the BGP service community.
8684	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
8685	// ID - Resource ID.
8686	ID *string `json:"id,omitempty"`
8687	// Name - READ-ONLY; Resource name.
8688	Name *string `json:"name,omitempty"`
8689	// Type - READ-ONLY; Resource type.
8690	Type *string `json:"type,omitempty"`
8691	// Location - Resource location.
8692	Location *string `json:"location,omitempty"`
8693	// Tags - Resource tags.
8694	Tags map[string]*string `json:"tags"`
8695}
8696
8697// MarshalJSON is the custom marshaler for BgpServiceCommunity.
8698func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
8699	objectMap := make(map[string]interface{})
8700	if bsc.BgpServiceCommunityPropertiesFormat != nil {
8701		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
8702	}
8703	if bsc.ID != nil {
8704		objectMap["id"] = bsc.ID
8705	}
8706	if bsc.Location != nil {
8707		objectMap["location"] = bsc.Location
8708	}
8709	if bsc.Tags != nil {
8710		objectMap["tags"] = bsc.Tags
8711	}
8712	return json.Marshal(objectMap)
8713}
8714
8715// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
8716func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
8717	var m map[string]*json.RawMessage
8718	err := json.Unmarshal(body, &m)
8719	if err != nil {
8720		return err
8721	}
8722	for k, v := range m {
8723		switch k {
8724		case "properties":
8725			if v != nil {
8726				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
8727				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
8728				if err != nil {
8729					return err
8730				}
8731				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
8732			}
8733		case "id":
8734			if v != nil {
8735				var ID string
8736				err = json.Unmarshal(*v, &ID)
8737				if err != nil {
8738					return err
8739				}
8740				bsc.ID = &ID
8741			}
8742		case "name":
8743			if v != nil {
8744				var name string
8745				err = json.Unmarshal(*v, &name)
8746				if err != nil {
8747					return err
8748				}
8749				bsc.Name = &name
8750			}
8751		case "type":
8752			if v != nil {
8753				var typeVar string
8754				err = json.Unmarshal(*v, &typeVar)
8755				if err != nil {
8756					return err
8757				}
8758				bsc.Type = &typeVar
8759			}
8760		case "location":
8761			if v != nil {
8762				var location string
8763				err = json.Unmarshal(*v, &location)
8764				if err != nil {
8765					return err
8766				}
8767				bsc.Location = &location
8768			}
8769		case "tags":
8770			if v != nil {
8771				var tags map[string]*string
8772				err = json.Unmarshal(*v, &tags)
8773				if err != nil {
8774					return err
8775				}
8776				bsc.Tags = tags
8777			}
8778		}
8779	}
8780
8781	return nil
8782}
8783
8784// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
8785type BgpServiceCommunityListResult struct {
8786	autorest.Response `json:"-"`
8787	// Value - A list of service community resources.
8788	Value *[]BgpServiceCommunity `json:"value,omitempty"`
8789	// NextLink - The URL to get the next set of results.
8790	NextLink *string `json:"nextLink,omitempty"`
8791}
8792
8793// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
8794// values.
8795type BgpServiceCommunityListResultIterator struct {
8796	i    int
8797	page BgpServiceCommunityListResultPage
8798}
8799
8800// NextWithContext advances to the next value.  If there was an error making
8801// the request the iterator does not advance and the error is returned.
8802func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
8803	if tracing.IsEnabled() {
8804		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
8805		defer func() {
8806			sc := -1
8807			if iter.Response().Response.Response != nil {
8808				sc = iter.Response().Response.Response.StatusCode
8809			}
8810			tracing.EndSpan(ctx, sc, err)
8811		}()
8812	}
8813	iter.i++
8814	if iter.i < len(iter.page.Values()) {
8815		return nil
8816	}
8817	err = iter.page.NextWithContext(ctx)
8818	if err != nil {
8819		iter.i--
8820		return err
8821	}
8822	iter.i = 0
8823	return nil
8824}
8825
8826// Next advances to the next value.  If there was an error making
8827// the request the iterator does not advance and the error is returned.
8828// Deprecated: Use NextWithContext() instead.
8829func (iter *BgpServiceCommunityListResultIterator) Next() error {
8830	return iter.NextWithContext(context.Background())
8831}
8832
8833// NotDone returns true if the enumeration should be started or is not yet complete.
8834func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
8835	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8836}
8837
8838// Response returns the raw server response from the last page request.
8839func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
8840	return iter.page.Response()
8841}
8842
8843// Value returns the current value or a zero-initialized value if the
8844// iterator has advanced beyond the end of the collection.
8845func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
8846	if !iter.page.NotDone() {
8847		return BgpServiceCommunity{}
8848	}
8849	return iter.page.Values()[iter.i]
8850}
8851
8852// Creates a new instance of the BgpServiceCommunityListResultIterator type.
8853func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
8854	return BgpServiceCommunityListResultIterator{page: page}
8855}
8856
8857// IsEmpty returns true if the ListResult contains no values.
8858func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
8859	return bsclr.Value == nil || len(*bsclr.Value) == 0
8860}
8861
8862// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
8863// It returns nil if no more results exist.
8864func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
8865	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
8866		return nil, nil
8867	}
8868	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8869		autorest.AsJSON(),
8870		autorest.AsGet(),
8871		autorest.WithBaseURL(to.String(bsclr.NextLink)))
8872}
8873
8874// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
8875type BgpServiceCommunityListResultPage struct {
8876	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
8877	bsclr BgpServiceCommunityListResult
8878}
8879
8880// NextWithContext advances to the next page of values.  If there was an error making
8881// the request the page does not advance and the error is returned.
8882func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
8883	if tracing.IsEnabled() {
8884		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
8885		defer func() {
8886			sc := -1
8887			if page.Response().Response.Response != nil {
8888				sc = page.Response().Response.Response.StatusCode
8889			}
8890			tracing.EndSpan(ctx, sc, err)
8891		}()
8892	}
8893	next, err := page.fn(ctx, page.bsclr)
8894	if err != nil {
8895		return err
8896	}
8897	page.bsclr = next
8898	return nil
8899}
8900
8901// Next advances to the next page of values.  If there was an error making
8902// the request the page does not advance and the error is returned.
8903// Deprecated: Use NextWithContext() instead.
8904func (page *BgpServiceCommunityListResultPage) Next() error {
8905	return page.NextWithContext(context.Background())
8906}
8907
8908// NotDone returns true if the page enumeration should be started or is not yet complete.
8909func (page BgpServiceCommunityListResultPage) NotDone() bool {
8910	return !page.bsclr.IsEmpty()
8911}
8912
8913// Response returns the raw server response from the last page request.
8914func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
8915	return page.bsclr
8916}
8917
8918// Values returns the slice of values for the current page or nil if there are no values.
8919func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
8920	if page.bsclr.IsEmpty() {
8921		return nil
8922	}
8923	return *page.bsclr.Value
8924}
8925
8926// Creates a new instance of the BgpServiceCommunityListResultPage type.
8927func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
8928	return BgpServiceCommunityListResultPage{fn: getNextPage}
8929}
8930
8931// BgpServiceCommunityPropertiesFormat properties of Service Community.
8932type BgpServiceCommunityPropertiesFormat struct {
8933	// ServiceName - The name of the bgp community. e.g. Skype.
8934	ServiceName *string `json:"serviceName,omitempty"`
8935	// BgpCommunities - A list of bgp communities.
8936	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
8937}
8938
8939// BgpSettings BGP settings details.
8940type BgpSettings struct {
8941	// Asn - The BGP speaker's ASN.
8942	Asn *int64 `json:"asn,omitempty"`
8943	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
8944	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
8945	// PeerWeight - The weight added to routes learned from this BGP speaker.
8946	PeerWeight *int32 `json:"peerWeight,omitempty"`
8947}
8948
8949// CheckPrivateLinkServiceVisibilityRequest request body of the CheckPrivateLinkServiceVisibility API
8950// service call.
8951type CheckPrivateLinkServiceVisibilityRequest struct {
8952	// PrivateLinkServiceAlias - The alias of the private link service.
8953	PrivateLinkServiceAlias *string `json:"privateLinkServiceAlias,omitempty"`
8954}
8955
8956// CloudError an error response from the service.
8957type CloudError struct {
8958	// Error - Cloud error body.
8959	Error *CloudErrorBody `json:"error,omitempty"`
8960}
8961
8962// CloudErrorBody an error response from the service.
8963type CloudErrorBody struct {
8964	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
8965	Code *string `json:"code,omitempty"`
8966	// Message - A message describing the error, intended to be suitable for display in a user interface.
8967	Message *string `json:"message,omitempty"`
8968	// Target - The target of the particular error. For example, the name of the property in error.
8969	Target *string `json:"target,omitempty"`
8970	// Details - A list of additional details about the error.
8971	Details *[]CloudErrorBody `json:"details,omitempty"`
8972}
8973
8974// ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
8975type ConfigurationDiagnosticParameters struct {
8976	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
8977	TargetResourceID *string `json:"targetResourceId,omitempty"`
8978	// VerbosityLevel - Verbosity level. Possible values include: 'Normal', 'Minimum', 'Full'
8979	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
8980	// Profiles - List of network configuration diagnostic profiles.
8981	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
8982}
8983
8984// ConfigurationDiagnosticProfile parameters to compare with network configuration.
8985type ConfigurationDiagnosticProfile struct {
8986	// Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound'
8987	Direction Direction `json:"direction,omitempty"`
8988	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
8989	Protocol *string `json:"protocol,omitempty"`
8990	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
8991	Source *string `json:"source,omitempty"`
8992	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
8993	Destination *string `json:"destination,omitempty"`
8994	// DestinationPort - Traffic destination port. Accepted values are '*' and a single port in the range (0 - 65535).
8995	DestinationPort *string `json:"destinationPort,omitempty"`
8996}
8997
8998// ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
8999type ConfigurationDiagnosticResponse struct {
9000	autorest.Response `json:"-"`
9001	// Results - READ-ONLY; List of network configuration diagnostic results.
9002	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
9003}
9004
9005// ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
9006// query.
9007type ConfigurationDiagnosticResult struct {
9008	// Profile - Network configuration diagnostic profile.
9009	Profile *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
9010	// NetworkSecurityGroupResult - Network security group result.
9011	NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"`
9012}
9013
9014// ConnectionMonitor parameters that define the operation to create a connection monitor.
9015type ConnectionMonitor struct {
9016	// Location - Connection monitor location.
9017	Location *string `json:"location,omitempty"`
9018	// Tags - Connection monitor tags.
9019	Tags map[string]*string `json:"tags"`
9020	// ConnectionMonitorParameters - Properties of the connection monitor.
9021	*ConnectionMonitorParameters `json:"properties,omitempty"`
9022}
9023
9024// MarshalJSON is the custom marshaler for ConnectionMonitor.
9025func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
9026	objectMap := make(map[string]interface{})
9027	if cm.Location != nil {
9028		objectMap["location"] = cm.Location
9029	}
9030	if cm.Tags != nil {
9031		objectMap["tags"] = cm.Tags
9032	}
9033	if cm.ConnectionMonitorParameters != nil {
9034		objectMap["properties"] = cm.ConnectionMonitorParameters
9035	}
9036	return json.Marshal(objectMap)
9037}
9038
9039// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
9040func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
9041	var m map[string]*json.RawMessage
9042	err := json.Unmarshal(body, &m)
9043	if err != nil {
9044		return err
9045	}
9046	for k, v := range m {
9047		switch k {
9048		case "location":
9049			if v != nil {
9050				var location string
9051				err = json.Unmarshal(*v, &location)
9052				if err != nil {
9053					return err
9054				}
9055				cm.Location = &location
9056			}
9057		case "tags":
9058			if v != nil {
9059				var tags map[string]*string
9060				err = json.Unmarshal(*v, &tags)
9061				if err != nil {
9062					return err
9063				}
9064				cm.Tags = tags
9065			}
9066		case "properties":
9067			if v != nil {
9068				var connectionMonitorParameters ConnectionMonitorParameters
9069				err = json.Unmarshal(*v, &connectionMonitorParameters)
9070				if err != nil {
9071					return err
9072				}
9073				cm.ConnectionMonitorParameters = &connectionMonitorParameters
9074			}
9075		}
9076	}
9077
9078	return nil
9079}
9080
9081// ConnectionMonitorDestination describes the destination of connection monitor.
9082type ConnectionMonitorDestination struct {
9083	// ResourceID - The ID of the resource used as the destination by connection monitor.
9084	ResourceID *string `json:"resourceId,omitempty"`
9085	// Address - Address of the connection monitor destination (IP or domain name).
9086	Address *string `json:"address,omitempty"`
9087	// Port - The destination port used by connection monitor.
9088	Port *int32 `json:"port,omitempty"`
9089}
9090
9091// ConnectionMonitorEndpoint describes the connection monitor endpoint.
9092type ConnectionMonitorEndpoint struct {
9093	// Name - The name of the connection monitor endpoint.
9094	Name *string `json:"name,omitempty"`
9095	// ResourceID - Resource ID of the connection monitor endpoint.
9096	ResourceID *string `json:"resourceId,omitempty"`
9097	// Address - Address of the connection monitor endpoint (IP or domain name).
9098	Address *string `json:"address,omitempty"`
9099	// Filter - Filter for sub-items within the endpoint.
9100	Filter *ConnectionMonitorEndpointFilter `json:"filter,omitempty"`
9101}
9102
9103// ConnectionMonitorEndpointFilter describes the connection monitor endpoint filter.
9104type ConnectionMonitorEndpointFilter struct {
9105	// Type - The behavior of the endpoint filter. Currently only 'Include' is supported. Possible values include: 'Include'
9106	Type ConnectionMonitorEndpointFilterType `json:"type,omitempty"`
9107	// Items - List of items in the filter.
9108	Items *[]ConnectionMonitorEndpointFilterItem `json:"items,omitempty"`
9109}
9110
9111// ConnectionMonitorEndpointFilterItem describes the connection monitor endpoint filter item.
9112type ConnectionMonitorEndpointFilterItem struct {
9113	// Type - The type of item included in the filter. Currently only 'AgentAddress' is supported. Possible values include: 'AgentAddress'
9114	Type ConnectionMonitorEndpointFilterItemType `json:"type,omitempty"`
9115	// Address - The address of the filter item.
9116	Address *string `json:"address,omitempty"`
9117}
9118
9119// ConnectionMonitorHTTPConfiguration describes the HTTP configuration.
9120type ConnectionMonitorHTTPConfiguration struct {
9121	// Port - The port to connect to.
9122	Port *int32 `json:"port,omitempty"`
9123	// Method - The HTTP method to use. Possible values include: 'Get', 'Post'
9124	Method HTTPConfigurationMethod `json:"method,omitempty"`
9125	// Path - The path component of the URI. For instance, "/dir1/dir2".
9126	Path *string `json:"path,omitempty"`
9127	// RequestHeaders - The HTTP headers to transmit with the request.
9128	RequestHeaders *[]HTTPHeader `json:"requestHeaders,omitempty"`
9129	// ValidStatusCodeRanges - HTTP status codes to consider successful. For instance, "2xx,301-304,418".
9130	ValidStatusCodeRanges *[]string `json:"validStatusCodeRanges,omitempty"`
9131	// PreferHTTPS - Value indicating whether HTTPS is preferred over HTTP in cases where the choice is not explicit.
9132	PreferHTTPS *bool `json:"preferHTTPS,omitempty"`
9133}
9134
9135// ConnectionMonitorIcmpConfiguration describes the ICMP configuration.
9136type ConnectionMonitorIcmpConfiguration struct {
9137	// DisableTraceRoute - Value indicating whether path evaluation with trace route should be disabled.
9138	DisableTraceRoute *bool `json:"disableTraceRoute,omitempty"`
9139}
9140
9141// ConnectionMonitorListResult list of connection monitors.
9142type ConnectionMonitorListResult struct {
9143	autorest.Response `json:"-"`
9144	// Value - Information about connection monitors.
9145	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
9146}
9147
9148// ConnectionMonitorOutput describes a connection monitor output destination.
9149type ConnectionMonitorOutput struct {
9150	// Type - Connection monitor output destination type. Currently, only "Workspace" is supported. Possible values include: 'Workspace'
9151	Type OutputType `json:"type,omitempty"`
9152	// WorkspaceSettings - Describes the settings for producing output into a log analytics workspace.
9153	WorkspaceSettings *ConnectionMonitorWorkspaceSettings `json:"workspaceSettings,omitempty"`
9154}
9155
9156// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
9157type ConnectionMonitorParameters struct {
9158	// Source - Describes the source of connection monitor.
9159	Source *ConnectionMonitorSource `json:"source,omitempty"`
9160	// Destination - Describes the destination of connection monitor.
9161	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
9162	// AutoStart - Determines if the connection monitor will start automatically once created.
9163	AutoStart *bool `json:"autoStart,omitempty"`
9164	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
9165	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
9166	// Endpoints - List of connection monitor endpoints.
9167	Endpoints *[]ConnectionMonitorEndpoint `json:"endpoints,omitempty"`
9168	// TestConfigurations - List of connection monitor test configurations.
9169	TestConfigurations *[]ConnectionMonitorTestConfiguration `json:"testConfigurations,omitempty"`
9170	// TestGroups - List of connection monitor test groups.
9171	TestGroups *[]ConnectionMonitorTestGroup `json:"testGroups,omitempty"`
9172	// Outputs - List of connection monitor outputs.
9173	Outputs *[]ConnectionMonitorOutput `json:"outputs,omitempty"`
9174	// Notes - Optional notes to be associated with the connection monitor.
9175	Notes *string `json:"notes,omitempty"`
9176}
9177
9178// ConnectionMonitorQueryResult list of connection states snapshots.
9179type ConnectionMonitorQueryResult struct {
9180	autorest.Response `json:"-"`
9181	// SourceStatus - Status of connection monitor source. Possible values include: 'ConnectionMonitorSourceStatusUnknown', 'ConnectionMonitorSourceStatusActive', 'ConnectionMonitorSourceStatusInactive'
9182	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
9183	// States - Information about connection states.
9184	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
9185}
9186
9187// ConnectionMonitorResult information about the connection monitor.
9188type ConnectionMonitorResult struct {
9189	autorest.Response `json:"-"`
9190	// Name - READ-ONLY; Name of the connection monitor.
9191	Name *string `json:"name,omitempty"`
9192	// ID - READ-ONLY; ID of the connection monitor.
9193	ID *string `json:"id,omitempty"`
9194	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9195	Etag *string `json:"etag,omitempty"`
9196	// Type - READ-ONLY; Connection monitor type.
9197	Type *string `json:"type,omitempty"`
9198	// Location - Connection monitor location.
9199	Location *string `json:"location,omitempty"`
9200	// Tags - Connection monitor tags.
9201	Tags map[string]*string `json:"tags"`
9202	// ConnectionMonitorResultProperties - Properties of the connection monitor result.
9203	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
9204}
9205
9206// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
9207func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
9208	objectMap := make(map[string]interface{})
9209	if cmr.Location != nil {
9210		objectMap["location"] = cmr.Location
9211	}
9212	if cmr.Tags != nil {
9213		objectMap["tags"] = cmr.Tags
9214	}
9215	if cmr.ConnectionMonitorResultProperties != nil {
9216		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
9217	}
9218	return json.Marshal(objectMap)
9219}
9220
9221// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
9222func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
9223	var m map[string]*json.RawMessage
9224	err := json.Unmarshal(body, &m)
9225	if err != nil {
9226		return err
9227	}
9228	for k, v := range m {
9229		switch k {
9230		case "name":
9231			if v != nil {
9232				var name string
9233				err = json.Unmarshal(*v, &name)
9234				if err != nil {
9235					return err
9236				}
9237				cmr.Name = &name
9238			}
9239		case "id":
9240			if v != nil {
9241				var ID string
9242				err = json.Unmarshal(*v, &ID)
9243				if err != nil {
9244					return err
9245				}
9246				cmr.ID = &ID
9247			}
9248		case "etag":
9249			if v != nil {
9250				var etag string
9251				err = json.Unmarshal(*v, &etag)
9252				if err != nil {
9253					return err
9254				}
9255				cmr.Etag = &etag
9256			}
9257		case "type":
9258			if v != nil {
9259				var typeVar string
9260				err = json.Unmarshal(*v, &typeVar)
9261				if err != nil {
9262					return err
9263				}
9264				cmr.Type = &typeVar
9265			}
9266		case "location":
9267			if v != nil {
9268				var location string
9269				err = json.Unmarshal(*v, &location)
9270				if err != nil {
9271					return err
9272				}
9273				cmr.Location = &location
9274			}
9275		case "tags":
9276			if v != nil {
9277				var tags map[string]*string
9278				err = json.Unmarshal(*v, &tags)
9279				if err != nil {
9280					return err
9281				}
9282				cmr.Tags = tags
9283			}
9284		case "properties":
9285			if v != nil {
9286				var connectionMonitorResultProperties ConnectionMonitorResultProperties
9287				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
9288				if err != nil {
9289					return err
9290				}
9291				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
9292			}
9293		}
9294	}
9295
9296	return nil
9297}
9298
9299// ConnectionMonitorResultProperties describes the properties of a connection monitor.
9300type ConnectionMonitorResultProperties struct {
9301	// ProvisioningState - READ-ONLY; The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9302	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9303	// StartTime - READ-ONLY; The date and time when the connection monitor was started.
9304	StartTime *date.Time `json:"startTime,omitempty"`
9305	// MonitoringStatus - READ-ONLY; The monitoring status of the connection monitor.
9306	MonitoringStatus *string `json:"monitoringStatus,omitempty"`
9307	// ConnectionMonitorType - READ-ONLY; Type of connection monitor. Possible values include: 'MultiEndpoint', 'SingleSourceDestination'
9308	ConnectionMonitorType ConnectionMonitorType `json:"connectionMonitorType,omitempty"`
9309	// Source - Describes the source of connection monitor.
9310	Source *ConnectionMonitorSource `json:"source,omitempty"`
9311	// Destination - Describes the destination of connection monitor.
9312	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
9313	// AutoStart - Determines if the connection monitor will start automatically once created.
9314	AutoStart *bool `json:"autoStart,omitempty"`
9315	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
9316	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
9317	// Endpoints - List of connection monitor endpoints.
9318	Endpoints *[]ConnectionMonitorEndpoint `json:"endpoints,omitempty"`
9319	// TestConfigurations - List of connection monitor test configurations.
9320	TestConfigurations *[]ConnectionMonitorTestConfiguration `json:"testConfigurations,omitempty"`
9321	// TestGroups - List of connection monitor test groups.
9322	TestGroups *[]ConnectionMonitorTestGroup `json:"testGroups,omitempty"`
9323	// Outputs - List of connection monitor outputs.
9324	Outputs *[]ConnectionMonitorOutput `json:"outputs,omitempty"`
9325	// Notes - Optional notes to be associated with the connection monitor.
9326	Notes *string `json:"notes,omitempty"`
9327}
9328
9329// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9330// long-running operation.
9331type ConnectionMonitorsCreateOrUpdateFuture struct {
9332	azure.Future
9333}
9334
9335// Result returns the result of the asynchronous operation.
9336// If the operation has not completed it will return an error.
9337func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
9338	var done bool
9339	done, err = future.DoneWithContext(context.Background(), client)
9340	if err != nil {
9341		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9342		return
9343	}
9344	if !done {
9345		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
9346		return
9347	}
9348	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9349	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
9350		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
9351		if err != nil {
9352			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
9353		}
9354	}
9355	return
9356}
9357
9358// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
9359// long-running operation.
9360type ConnectionMonitorsDeleteFuture struct {
9361	azure.Future
9362}
9363
9364// Result returns the result of the asynchronous operation.
9365// If the operation has not completed it will return an error.
9366func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
9367	var done bool
9368	done, err = future.DoneWithContext(context.Background(), client)
9369	if err != nil {
9370		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
9371		return
9372	}
9373	if !done {
9374		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
9375		return
9376	}
9377	ar.Response = future.Response()
9378	return
9379}
9380
9381// ConnectionMonitorSource describes the source of connection monitor.
9382type ConnectionMonitorSource struct {
9383	// ResourceID - The ID of the resource used as the source by connection monitor.
9384	ResourceID *string `json:"resourceId,omitempty"`
9385	// Port - The source port used by connection monitor.
9386	Port *int32 `json:"port,omitempty"`
9387}
9388
9389// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
9390// operation.
9391type ConnectionMonitorsQueryFuture struct {
9392	azure.Future
9393}
9394
9395// Result returns the result of the asynchronous operation.
9396// If the operation has not completed it will return an error.
9397func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
9398	var done bool
9399	done, err = future.DoneWithContext(context.Background(), client)
9400	if err != nil {
9401		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
9402		return
9403	}
9404	if !done {
9405		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
9406		return
9407	}
9408	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9409	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
9410		cmqr, err = client.QueryResponder(cmqr.Response.Response)
9411		if err != nil {
9412			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
9413		}
9414	}
9415	return
9416}
9417
9418// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
9419// operation.
9420type ConnectionMonitorsStartFuture struct {
9421	azure.Future
9422}
9423
9424// Result returns the result of the asynchronous operation.
9425// If the operation has not completed it will return an error.
9426func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
9427	var done bool
9428	done, err = future.DoneWithContext(context.Background(), client)
9429	if err != nil {
9430		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
9431		return
9432	}
9433	if !done {
9434		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
9435		return
9436	}
9437	ar.Response = future.Response()
9438	return
9439}
9440
9441// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
9442// operation.
9443type ConnectionMonitorsStopFuture struct {
9444	azure.Future
9445}
9446
9447// Result returns the result of the asynchronous operation.
9448// If the operation has not completed it will return an error.
9449func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
9450	var done bool
9451	done, err = future.DoneWithContext(context.Background(), client)
9452	if err != nil {
9453		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
9454		return
9455	}
9456	if !done {
9457		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
9458		return
9459	}
9460	ar.Response = future.Response()
9461	return
9462}
9463
9464// ConnectionMonitorSuccessThreshold describes the threshold for declaring a test successful.
9465type ConnectionMonitorSuccessThreshold struct {
9466	// ChecksFailedPercent - The maximum percentage of failed checks permitted for a test to evaluate as successful.
9467	ChecksFailedPercent *int32 `json:"checksFailedPercent,omitempty"`
9468	// RoundTripTimeMs - The maximum round-trip time in milliseconds permitted for a test to evaluate as successful.
9469	RoundTripTimeMs *int32 `json:"roundTripTimeMs,omitempty"`
9470}
9471
9472// ConnectionMonitorTCPConfiguration describes the TCP configuration.
9473type ConnectionMonitorTCPConfiguration struct {
9474	// Port - The port to connect to.
9475	Port *int32 `json:"port,omitempty"`
9476	// DisableTraceRoute - Value indicating whether path evaluation with trace route should be disabled.
9477	DisableTraceRoute *bool `json:"disableTraceRoute,omitempty"`
9478}
9479
9480// ConnectionMonitorTestConfiguration describes a connection monitor test configuration.
9481type ConnectionMonitorTestConfiguration struct {
9482	// Name - The name of the connection monitor test configuration.
9483	Name *string `json:"name,omitempty"`
9484	// TestFrequencySec - The frequency of test evaluation, in seconds.
9485	TestFrequencySec *int32 `json:"testFrequencySec,omitempty"`
9486	// Protocol - The protocol to use in test evaluation. Possible values include: 'ConnectionMonitorTestConfigurationProtocolTCP', 'ConnectionMonitorTestConfigurationProtocolHTTP', 'ConnectionMonitorTestConfigurationProtocolIcmp'
9487	Protocol ConnectionMonitorTestConfigurationProtocol `json:"protocol,omitempty"`
9488	// PreferredIPVersion - The preferred IP version to use in test evaluation. The connection monitor may choose to use a different version depending on other parameters. Possible values include: 'PreferredIPVersionIPv4', 'PreferredIPVersionIPv6'
9489	PreferredIPVersion PreferredIPVersion `json:"preferredIPVersion,omitempty"`
9490	// HTTPConfiguration - The parameters used to perform test evaluation over HTTP.
9491	HTTPConfiguration *ConnectionMonitorHTTPConfiguration `json:"httpConfiguration,omitempty"`
9492	// TCPConfiguration - The parameters used to perform test evaluation over TCP.
9493	TCPConfiguration *ConnectionMonitorTCPConfiguration `json:"tcpConfiguration,omitempty"`
9494	// IcmpConfiguration - The parameters used to perform test evaluation over ICMP.
9495	IcmpConfiguration *ConnectionMonitorIcmpConfiguration `json:"icmpConfiguration,omitempty"`
9496	// SuccessThreshold - The threshold for declaring a test successful.
9497	SuccessThreshold *ConnectionMonitorSuccessThreshold `json:"successThreshold,omitempty"`
9498}
9499
9500// ConnectionMonitorTestGroup describes the connection monitor test group.
9501type ConnectionMonitorTestGroup struct {
9502	// Name - The name of the connection monitor test group.
9503	Name *string `json:"name,omitempty"`
9504	// Disable - Value indicating whether test group is disabled.
9505	Disable *bool `json:"disable,omitempty"`
9506	// TestConfigurations - List of test configuration names.
9507	TestConfigurations *[]string `json:"testConfigurations,omitempty"`
9508	// Sources - List of source endpoint names.
9509	Sources *[]string `json:"sources,omitempty"`
9510	// Destinations - List of destination endpoint names.
9511	Destinations *[]string `json:"destinations,omitempty"`
9512}
9513
9514// ConnectionMonitorWorkspaceSettings describes the settings for producing output into a log analytics
9515// workspace.
9516type ConnectionMonitorWorkspaceSettings struct {
9517	// WorkspaceResourceID - Log analytics workspace resource ID.
9518	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
9519}
9520
9521// ConnectionResetSharedKey the virtual network connection reset shared key.
9522type ConnectionResetSharedKey struct {
9523	autorest.Response `json:"-"`
9524	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
9525	KeyLength *int32 `json:"keyLength,omitempty"`
9526}
9527
9528// ConnectionSharedKey response for GetConnectionSharedKey API service call.
9529type ConnectionSharedKey struct {
9530	autorest.Response `json:"-"`
9531	// Value - The virtual network connection shared key value.
9532	Value *string `json:"value,omitempty"`
9533	// ID - Resource ID.
9534	ID *string `json:"id,omitempty"`
9535}
9536
9537// ConnectionStateSnapshot connection state snapshot.
9538type ConnectionStateSnapshot struct {
9539	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
9540	ConnectionState ConnectionState `json:"connectionState,omitempty"`
9541	// StartTime - The start time of the connection snapshot.
9542	StartTime *date.Time `json:"startTime,omitempty"`
9543	// EndTime - The end time of the connection snapshot.
9544	EndTime *date.Time `json:"endTime,omitempty"`
9545	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
9546	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
9547	// AvgLatencyInMs - Average latency in ms.
9548	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
9549	// MinLatencyInMs - Minimum latency in ms.
9550	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
9551	// MaxLatencyInMs - Maximum latency in ms.
9552	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
9553	// ProbesSent - The number of sent probes.
9554	ProbesSent *int32 `json:"probesSent,omitempty"`
9555	// ProbesFailed - The number of failed probes.
9556	ProbesFailed *int32 `json:"probesFailed,omitempty"`
9557	// Hops - READ-ONLY; List of hops between the source and the destination.
9558	Hops *[]ConnectivityHop `json:"hops,omitempty"`
9559}
9560
9561// ConnectivityDestination parameters that define destination of connection.
9562type ConnectivityDestination struct {
9563	// ResourceID - The ID of the resource to which a connection attempt will be made.
9564	ResourceID *string `json:"resourceId,omitempty"`
9565	// Address - The IP address or URI the resource to which a connection attempt will be made.
9566	Address *string `json:"address,omitempty"`
9567	// Port - Port on which check connectivity will be performed.
9568	Port *int32 `json:"port,omitempty"`
9569}
9570
9571// ConnectivityHop information about a hop between the source and the destination.
9572type ConnectivityHop struct {
9573	// Type - READ-ONLY; The type of the hop.
9574	Type *string `json:"type,omitempty"`
9575	// ID - READ-ONLY; The ID of the hop.
9576	ID *string `json:"id,omitempty"`
9577	// Address - READ-ONLY; The IP address of the hop.
9578	Address *string `json:"address,omitempty"`
9579	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
9580	ResourceID *string `json:"resourceId,omitempty"`
9581	// NextHopIds - READ-ONLY; List of next hop identifiers.
9582	NextHopIds *[]string `json:"nextHopIds,omitempty"`
9583	// Issues - READ-ONLY; List of issues.
9584	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
9585}
9586
9587// ConnectivityInformation information on the connectivity status.
9588type ConnectivityInformation struct {
9589	autorest.Response `json:"-"`
9590	// Hops - READ-ONLY; List of hops between the source and the destination.
9591	Hops *[]ConnectivityHop `json:"hops,omitempty"`
9592	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
9593	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
9594	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
9595	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
9596	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
9597	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
9598	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
9599	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
9600	// ProbesSent - READ-ONLY; Total number of probes sent.
9601	ProbesSent *int32 `json:"probesSent,omitempty"`
9602	// ProbesFailed - READ-ONLY; Number of failed probes.
9603	ProbesFailed *int32 `json:"probesFailed,omitempty"`
9604}
9605
9606// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
9607type ConnectivityIssue struct {
9608	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
9609	Origin Origin `json:"origin,omitempty"`
9610	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
9611	Severity Severity `json:"severity,omitempty"`
9612	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
9613	Type IssueType `json:"type,omitempty"`
9614	// Context - READ-ONLY; Provides additional context on the issue.
9615	Context *[]map[string]*string `json:"context,omitempty"`
9616}
9617
9618// ConnectivityParameters parameters that determine how the connectivity check will be performed.
9619type ConnectivityParameters struct {
9620	// Source - The source of the connection.
9621	Source *ConnectivitySource `json:"source,omitempty"`
9622	// Destination - The destination of connection.
9623	Destination *ConnectivityDestination `json:"destination,omitempty"`
9624	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
9625	Protocol Protocol `json:"protocol,omitempty"`
9626	// ProtocolConfiguration - Configuration of the protocol.
9627	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
9628	// PreferredIPVersion - Preferred IP version of the connection. Possible values include: 'IPv4', 'IPv6'
9629	PreferredIPVersion IPVersion `json:"preferredIPVersion,omitempty"`
9630}
9631
9632// ConnectivitySource parameters that define the source of the connection.
9633type ConnectivitySource struct {
9634	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
9635	ResourceID *string `json:"resourceId,omitempty"`
9636	// Port - The source port from which a connectivity check will be performed.
9637	Port *int32 `json:"port,omitempty"`
9638}
9639
9640// Container reference to container resource in remote resource provider.
9641type Container struct {
9642	// ID - Resource ID.
9643	ID *string `json:"id,omitempty"`
9644}
9645
9646// ContainerNetworkInterface container network interface child resource.
9647type ContainerNetworkInterface struct {
9648	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
9649	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
9650	// Name - The name of the resource. This name can be used to access the resource.
9651	Name *string `json:"name,omitempty"`
9652	// Type - READ-ONLY; Sub Resource type.
9653	Type *string `json:"type,omitempty"`
9654	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9655	Etag *string `json:"etag,omitempty"`
9656	// ID - Resource ID.
9657	ID *string `json:"id,omitempty"`
9658}
9659
9660// MarshalJSON is the custom marshaler for ContainerNetworkInterface.
9661func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
9662	objectMap := make(map[string]interface{})
9663	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
9664		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
9665	}
9666	if cni.Name != nil {
9667		objectMap["name"] = cni.Name
9668	}
9669	if cni.ID != nil {
9670		objectMap["id"] = cni.ID
9671	}
9672	return json.Marshal(objectMap)
9673}
9674
9675// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
9676func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
9677	var m map[string]*json.RawMessage
9678	err := json.Unmarshal(body, &m)
9679	if err != nil {
9680		return err
9681	}
9682	for k, v := range m {
9683		switch k {
9684		case "properties":
9685			if v != nil {
9686				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
9687				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
9688				if err != nil {
9689					return err
9690				}
9691				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
9692			}
9693		case "name":
9694			if v != nil {
9695				var name string
9696				err = json.Unmarshal(*v, &name)
9697				if err != nil {
9698					return err
9699				}
9700				cni.Name = &name
9701			}
9702		case "type":
9703			if v != nil {
9704				var typeVar string
9705				err = json.Unmarshal(*v, &typeVar)
9706				if err != nil {
9707					return err
9708				}
9709				cni.Type = &typeVar
9710			}
9711		case "etag":
9712			if v != nil {
9713				var etag string
9714				err = json.Unmarshal(*v, &etag)
9715				if err != nil {
9716					return err
9717				}
9718				cni.Etag = &etag
9719			}
9720		case "id":
9721			if v != nil {
9722				var ID string
9723				err = json.Unmarshal(*v, &ID)
9724				if err != nil {
9725					return err
9726				}
9727				cni.ID = &ID
9728			}
9729		}
9730	}
9731
9732	return nil
9733}
9734
9735// ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
9736type ContainerNetworkInterfaceConfiguration struct {
9737	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
9738	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
9739	// Name - The name of the resource. This name can be used to access the resource.
9740	Name *string `json:"name,omitempty"`
9741	// Type - READ-ONLY; Sub Resource type.
9742	Type *string `json:"type,omitempty"`
9743	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9744	Etag *string `json:"etag,omitempty"`
9745	// ID - Resource ID.
9746	ID *string `json:"id,omitempty"`
9747}
9748
9749// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
9750func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
9751	objectMap := make(map[string]interface{})
9752	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
9753		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
9754	}
9755	if cnic.Name != nil {
9756		objectMap["name"] = cnic.Name
9757	}
9758	if cnic.ID != nil {
9759		objectMap["id"] = cnic.ID
9760	}
9761	return json.Marshal(objectMap)
9762}
9763
9764// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
9765func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
9766	var m map[string]*json.RawMessage
9767	err := json.Unmarshal(body, &m)
9768	if err != nil {
9769		return err
9770	}
9771	for k, v := range m {
9772		switch k {
9773		case "properties":
9774			if v != nil {
9775				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
9776				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
9777				if err != nil {
9778					return err
9779				}
9780				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
9781			}
9782		case "name":
9783			if v != nil {
9784				var name string
9785				err = json.Unmarshal(*v, &name)
9786				if err != nil {
9787					return err
9788				}
9789				cnic.Name = &name
9790			}
9791		case "type":
9792			if v != nil {
9793				var typeVar string
9794				err = json.Unmarshal(*v, &typeVar)
9795				if err != nil {
9796					return err
9797				}
9798				cnic.Type = &typeVar
9799			}
9800		case "etag":
9801			if v != nil {
9802				var etag string
9803				err = json.Unmarshal(*v, &etag)
9804				if err != nil {
9805					return err
9806				}
9807				cnic.Etag = &etag
9808			}
9809		case "id":
9810			if v != nil {
9811				var ID string
9812				err = json.Unmarshal(*v, &ID)
9813				if err != nil {
9814					return err
9815				}
9816				cnic.ID = &ID
9817			}
9818		}
9819	}
9820
9821	return nil
9822}
9823
9824// ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
9825// properties.
9826type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
9827	// IPConfigurations - A list of ip configurations of the container network interface configuration.
9828	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
9829	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
9830	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
9831	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9832	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9833}
9834
9835// ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
9836type ContainerNetworkInterfaceIPConfiguration struct {
9837	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
9838	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
9839	// Name - The name of the resource. This name can be used to access the resource.
9840	Name *string `json:"name,omitempty"`
9841	// Type - READ-ONLY; Sub Resource type.
9842	Type *string `json:"type,omitempty"`
9843	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9844	Etag *string `json:"etag,omitempty"`
9845}
9846
9847// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
9848func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
9849	objectMap := make(map[string]interface{})
9850	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
9851		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
9852	}
9853	if cniic.Name != nil {
9854		objectMap["name"] = cniic.Name
9855	}
9856	return json.Marshal(objectMap)
9857}
9858
9859// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
9860func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
9861	var m map[string]*json.RawMessage
9862	err := json.Unmarshal(body, &m)
9863	if err != nil {
9864		return err
9865	}
9866	for k, v := range m {
9867		switch k {
9868		case "properties":
9869			if v != nil {
9870				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
9871				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
9872				if err != nil {
9873					return err
9874				}
9875				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
9876			}
9877		case "name":
9878			if v != nil {
9879				var name string
9880				err = json.Unmarshal(*v, &name)
9881				if err != nil {
9882					return err
9883				}
9884				cniic.Name = &name
9885			}
9886		case "type":
9887			if v != nil {
9888				var typeVar string
9889				err = json.Unmarshal(*v, &typeVar)
9890				if err != nil {
9891					return err
9892				}
9893				cniic.Type = &typeVar
9894			}
9895		case "etag":
9896			if v != nil {
9897				var etag string
9898				err = json.Unmarshal(*v, &etag)
9899				if err != nil {
9900					return err
9901				}
9902				cniic.Etag = &etag
9903			}
9904		}
9905	}
9906
9907	return nil
9908}
9909
9910// ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
9911// IP configuration.
9912type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
9913	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9914	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9915}
9916
9917// ContainerNetworkInterfacePropertiesFormat properties of container network interface.
9918type ContainerNetworkInterfacePropertiesFormat struct {
9919	// ContainerNetworkInterfaceConfiguration - READ-ONLY; Container network interface configuration from which this container network interface is created.
9920	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
9921	// Container - Reference to the container to which this container network interface is attached.
9922	Container *Container `json:"container,omitempty"`
9923	// IPConfigurations - READ-ONLY; Reference to the ip configuration on this container nic.
9924	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
9925	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9926	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9927}
9928
9929// DdosCustomPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9930// long-running operation.
9931type DdosCustomPoliciesCreateOrUpdateFuture struct {
9932	azure.Future
9933}
9934
9935// Result returns the result of the asynchronous operation.
9936// If the operation has not completed it will return an error.
9937func (future *DdosCustomPoliciesCreateOrUpdateFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
9938	var done bool
9939	done, err = future.DoneWithContext(context.Background(), client)
9940	if err != nil {
9941		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9942		return
9943	}
9944	if !done {
9945		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesCreateOrUpdateFuture")
9946		return
9947	}
9948	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9949	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
9950		dcp, err = client.CreateOrUpdateResponder(dcp.Response.Response)
9951		if err != nil {
9952			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", dcp.Response.Response, "Failure responding to request")
9953		}
9954	}
9955	return
9956}
9957
9958// DdosCustomPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
9959// long-running operation.
9960type DdosCustomPoliciesDeleteFuture struct {
9961	azure.Future
9962}
9963
9964// Result returns the result of the asynchronous operation.
9965// If the operation has not completed it will return an error.
9966func (future *DdosCustomPoliciesDeleteFuture) Result(client DdosCustomPoliciesClient) (ar autorest.Response, err error) {
9967	var done bool
9968	done, err = future.DoneWithContext(context.Background(), client)
9969	if err != nil {
9970		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
9971		return
9972	}
9973	if !done {
9974		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesDeleteFuture")
9975		return
9976	}
9977	ar.Response = future.Response()
9978	return
9979}
9980
9981// DdosCustomPolicy a DDoS custom policy in a resource group.
9982type DdosCustomPolicy struct {
9983	autorest.Response `json:"-"`
9984	// DdosCustomPolicyPropertiesFormat - Properties of the DDoS custom policy.
9985	*DdosCustomPolicyPropertiesFormat `json:"properties,omitempty"`
9986	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9987	Etag *string `json:"etag,omitempty"`
9988	// ID - Resource ID.
9989	ID *string `json:"id,omitempty"`
9990	// Name - READ-ONLY; Resource name.
9991	Name *string `json:"name,omitempty"`
9992	// Type - READ-ONLY; Resource type.
9993	Type *string `json:"type,omitempty"`
9994	// Location - Resource location.
9995	Location *string `json:"location,omitempty"`
9996	// Tags - Resource tags.
9997	Tags map[string]*string `json:"tags"`
9998}
9999
10000// MarshalJSON is the custom marshaler for DdosCustomPolicy.
10001func (dcp DdosCustomPolicy) MarshalJSON() ([]byte, error) {
10002	objectMap := make(map[string]interface{})
10003	if dcp.DdosCustomPolicyPropertiesFormat != nil {
10004		objectMap["properties"] = dcp.DdosCustomPolicyPropertiesFormat
10005	}
10006	if dcp.ID != nil {
10007		objectMap["id"] = dcp.ID
10008	}
10009	if dcp.Location != nil {
10010		objectMap["location"] = dcp.Location
10011	}
10012	if dcp.Tags != nil {
10013		objectMap["tags"] = dcp.Tags
10014	}
10015	return json.Marshal(objectMap)
10016}
10017
10018// UnmarshalJSON is the custom unmarshaler for DdosCustomPolicy struct.
10019func (dcp *DdosCustomPolicy) UnmarshalJSON(body []byte) error {
10020	var m map[string]*json.RawMessage
10021	err := json.Unmarshal(body, &m)
10022	if err != nil {
10023		return err
10024	}
10025	for k, v := range m {
10026		switch k {
10027		case "properties":
10028			if v != nil {
10029				var ddosCustomPolicyPropertiesFormat DdosCustomPolicyPropertiesFormat
10030				err = json.Unmarshal(*v, &ddosCustomPolicyPropertiesFormat)
10031				if err != nil {
10032					return err
10033				}
10034				dcp.DdosCustomPolicyPropertiesFormat = &ddosCustomPolicyPropertiesFormat
10035			}
10036		case "etag":
10037			if v != nil {
10038				var etag string
10039				err = json.Unmarshal(*v, &etag)
10040				if err != nil {
10041					return err
10042				}
10043				dcp.Etag = &etag
10044			}
10045		case "id":
10046			if v != nil {
10047				var ID string
10048				err = json.Unmarshal(*v, &ID)
10049				if err != nil {
10050					return err
10051				}
10052				dcp.ID = &ID
10053			}
10054		case "name":
10055			if v != nil {
10056				var name string
10057				err = json.Unmarshal(*v, &name)
10058				if err != nil {
10059					return err
10060				}
10061				dcp.Name = &name
10062			}
10063		case "type":
10064			if v != nil {
10065				var typeVar string
10066				err = json.Unmarshal(*v, &typeVar)
10067				if err != nil {
10068					return err
10069				}
10070				dcp.Type = &typeVar
10071			}
10072		case "location":
10073			if v != nil {
10074				var location string
10075				err = json.Unmarshal(*v, &location)
10076				if err != nil {
10077					return err
10078				}
10079				dcp.Location = &location
10080			}
10081		case "tags":
10082			if v != nil {
10083				var tags map[string]*string
10084				err = json.Unmarshal(*v, &tags)
10085				if err != nil {
10086					return err
10087				}
10088				dcp.Tags = tags
10089			}
10090		}
10091	}
10092
10093	return nil
10094}
10095
10096// DdosCustomPolicyPropertiesFormat dDoS custom policy properties.
10097type DdosCustomPolicyPropertiesFormat struct {
10098	// 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.
10099	ResourceGUID *string `json:"resourceGuid,omitempty"`
10100	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10101	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10102	// PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only.
10103	PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"`
10104	// ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters.
10105	ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"`
10106}
10107
10108// DdosProtectionPlan a DDoS protection plan in a resource group.
10109type DdosProtectionPlan struct {
10110	autorest.Response `json:"-"`
10111	// ID - READ-ONLY; Resource ID.
10112	ID *string `json:"id,omitempty"`
10113	// Name - READ-ONLY; Resource name.
10114	Name *string `json:"name,omitempty"`
10115	// Type - READ-ONLY; Resource type.
10116	Type *string `json:"type,omitempty"`
10117	// Location - Resource location.
10118	Location *string `json:"location,omitempty"`
10119	// Tags - Resource tags.
10120	Tags map[string]*string `json:"tags"`
10121	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
10122	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
10123	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10124	Etag *string `json:"etag,omitempty"`
10125}
10126
10127// MarshalJSON is the custom marshaler for DdosProtectionPlan.
10128func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
10129	objectMap := make(map[string]interface{})
10130	if dpp.Location != nil {
10131		objectMap["location"] = dpp.Location
10132	}
10133	if dpp.Tags != nil {
10134		objectMap["tags"] = dpp.Tags
10135	}
10136	if dpp.DdosProtectionPlanPropertiesFormat != nil {
10137		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
10138	}
10139	return json.Marshal(objectMap)
10140}
10141
10142// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
10143func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
10144	var m map[string]*json.RawMessage
10145	err := json.Unmarshal(body, &m)
10146	if err != nil {
10147		return err
10148	}
10149	for k, v := range m {
10150		switch k {
10151		case "id":
10152			if v != nil {
10153				var ID string
10154				err = json.Unmarshal(*v, &ID)
10155				if err != nil {
10156					return err
10157				}
10158				dpp.ID = &ID
10159			}
10160		case "name":
10161			if v != nil {
10162				var name string
10163				err = json.Unmarshal(*v, &name)
10164				if err != nil {
10165					return err
10166				}
10167				dpp.Name = &name
10168			}
10169		case "type":
10170			if v != nil {
10171				var typeVar string
10172				err = json.Unmarshal(*v, &typeVar)
10173				if err != nil {
10174					return err
10175				}
10176				dpp.Type = &typeVar
10177			}
10178		case "location":
10179			if v != nil {
10180				var location string
10181				err = json.Unmarshal(*v, &location)
10182				if err != nil {
10183					return err
10184				}
10185				dpp.Location = &location
10186			}
10187		case "tags":
10188			if v != nil {
10189				var tags map[string]*string
10190				err = json.Unmarshal(*v, &tags)
10191				if err != nil {
10192					return err
10193				}
10194				dpp.Tags = tags
10195			}
10196		case "properties":
10197			if v != nil {
10198				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
10199				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
10200				if err != nil {
10201					return err
10202				}
10203				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
10204			}
10205		case "etag":
10206			if v != nil {
10207				var etag string
10208				err = json.Unmarshal(*v, &etag)
10209				if err != nil {
10210					return err
10211				}
10212				dpp.Etag = &etag
10213			}
10214		}
10215	}
10216
10217	return nil
10218}
10219
10220// DdosProtectionPlanListResult a list of DDoS protection plans.
10221type DdosProtectionPlanListResult struct {
10222	autorest.Response `json:"-"`
10223	// Value - A list of DDoS protection plans.
10224	Value *[]DdosProtectionPlan `json:"value,omitempty"`
10225	// NextLink - READ-ONLY; The URL to get the next set of results.
10226	NextLink *string `json:"nextLink,omitempty"`
10227}
10228
10229// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
10230type DdosProtectionPlanListResultIterator struct {
10231	i    int
10232	page DdosProtectionPlanListResultPage
10233}
10234
10235// NextWithContext advances to the next value.  If there was an error making
10236// the request the iterator does not advance and the error is returned.
10237func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
10238	if tracing.IsEnabled() {
10239		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
10240		defer func() {
10241			sc := -1
10242			if iter.Response().Response.Response != nil {
10243				sc = iter.Response().Response.Response.StatusCode
10244			}
10245			tracing.EndSpan(ctx, sc, err)
10246		}()
10247	}
10248	iter.i++
10249	if iter.i < len(iter.page.Values()) {
10250		return nil
10251	}
10252	err = iter.page.NextWithContext(ctx)
10253	if err != nil {
10254		iter.i--
10255		return err
10256	}
10257	iter.i = 0
10258	return nil
10259}
10260
10261// Next advances to the next value.  If there was an error making
10262// the request the iterator does not advance and the error is returned.
10263// Deprecated: Use NextWithContext() instead.
10264func (iter *DdosProtectionPlanListResultIterator) Next() error {
10265	return iter.NextWithContext(context.Background())
10266}
10267
10268// NotDone returns true if the enumeration should be started or is not yet complete.
10269func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
10270	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10271}
10272
10273// Response returns the raw server response from the last page request.
10274func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
10275	return iter.page.Response()
10276}
10277
10278// Value returns the current value or a zero-initialized value if the
10279// iterator has advanced beyond the end of the collection.
10280func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
10281	if !iter.page.NotDone() {
10282		return DdosProtectionPlan{}
10283	}
10284	return iter.page.Values()[iter.i]
10285}
10286
10287// Creates a new instance of the DdosProtectionPlanListResultIterator type.
10288func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
10289	return DdosProtectionPlanListResultIterator{page: page}
10290}
10291
10292// IsEmpty returns true if the ListResult contains no values.
10293func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
10294	return dpplr.Value == nil || len(*dpplr.Value) == 0
10295}
10296
10297// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
10298// It returns nil if no more results exist.
10299func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
10300	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
10301		return nil, nil
10302	}
10303	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10304		autorest.AsJSON(),
10305		autorest.AsGet(),
10306		autorest.WithBaseURL(to.String(dpplr.NextLink)))
10307}
10308
10309// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
10310type DdosProtectionPlanListResultPage struct {
10311	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
10312	dpplr DdosProtectionPlanListResult
10313}
10314
10315// NextWithContext advances to the next page of values.  If there was an error making
10316// the request the page does not advance and the error is returned.
10317func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
10318	if tracing.IsEnabled() {
10319		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
10320		defer func() {
10321			sc := -1
10322			if page.Response().Response.Response != nil {
10323				sc = page.Response().Response.Response.StatusCode
10324			}
10325			tracing.EndSpan(ctx, sc, err)
10326		}()
10327	}
10328	next, err := page.fn(ctx, page.dpplr)
10329	if err != nil {
10330		return err
10331	}
10332	page.dpplr = next
10333	return nil
10334}
10335
10336// Next advances to the next page of values.  If there was an error making
10337// the request the page does not advance and the error is returned.
10338// Deprecated: Use NextWithContext() instead.
10339func (page *DdosProtectionPlanListResultPage) Next() error {
10340	return page.NextWithContext(context.Background())
10341}
10342
10343// NotDone returns true if the page enumeration should be started or is not yet complete.
10344func (page DdosProtectionPlanListResultPage) NotDone() bool {
10345	return !page.dpplr.IsEmpty()
10346}
10347
10348// Response returns the raw server response from the last page request.
10349func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
10350	return page.dpplr
10351}
10352
10353// Values returns the slice of values for the current page or nil if there are no values.
10354func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
10355	if page.dpplr.IsEmpty() {
10356		return nil
10357	}
10358	return *page.dpplr.Value
10359}
10360
10361// Creates a new instance of the DdosProtectionPlanListResultPage type.
10362func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
10363	return DdosProtectionPlanListResultPage{fn: getNextPage}
10364}
10365
10366// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
10367type DdosProtectionPlanPropertiesFormat struct {
10368	// 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.
10369	ResourceGUID *string `json:"resourceGuid,omitempty"`
10370	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10371	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10372	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
10373	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
10374}
10375
10376// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
10377// long-running operation.
10378type DdosProtectionPlansCreateOrUpdateFuture struct {
10379	azure.Future
10380}
10381
10382// Result returns the result of the asynchronous operation.
10383// If the operation has not completed it will return an error.
10384func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
10385	var done bool
10386	done, err = future.DoneWithContext(context.Background(), client)
10387	if err != nil {
10388		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10389		return
10390	}
10391	if !done {
10392		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
10393		return
10394	}
10395	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10396	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
10397		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
10398		if err != nil {
10399			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
10400		}
10401	}
10402	return
10403}
10404
10405// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
10406// long-running operation.
10407type DdosProtectionPlansDeleteFuture struct {
10408	azure.Future
10409}
10410
10411// Result returns the result of the asynchronous operation.
10412// If the operation has not completed it will return an error.
10413func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
10414	var done bool
10415	done, err = future.DoneWithContext(context.Background(), client)
10416	if err != nil {
10417		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
10418		return
10419	}
10420	if !done {
10421		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
10422		return
10423	}
10424	ar.Response = future.Response()
10425	return
10426}
10427
10428// DdosSettings contains the DDoS protection settings of the public IP.
10429type DdosSettings struct {
10430	// DdosCustomPolicy - The DDoS custom policy associated with the public IP.
10431	DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"`
10432	// 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'
10433	ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"`
10434	// ProtectedIP - Enables DDoS protection on the public IP.
10435	ProtectedIP *bool `json:"protectedIP,omitempty"`
10436}
10437
10438// Delegation details the service to which the subnet is delegated.
10439type Delegation struct {
10440	// ServiceDelegationPropertiesFormat - Properties of the subnet.
10441	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
10442	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
10443	Name *string `json:"name,omitempty"`
10444	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10445	Etag *string `json:"etag,omitempty"`
10446	// ID - Resource ID.
10447	ID *string `json:"id,omitempty"`
10448}
10449
10450// MarshalJSON is the custom marshaler for Delegation.
10451func (d Delegation) MarshalJSON() ([]byte, error) {
10452	objectMap := make(map[string]interface{})
10453	if d.ServiceDelegationPropertiesFormat != nil {
10454		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
10455	}
10456	if d.Name != nil {
10457		objectMap["name"] = d.Name
10458	}
10459	if d.ID != nil {
10460		objectMap["id"] = d.ID
10461	}
10462	return json.Marshal(objectMap)
10463}
10464
10465// UnmarshalJSON is the custom unmarshaler for Delegation struct.
10466func (d *Delegation) UnmarshalJSON(body []byte) error {
10467	var m map[string]*json.RawMessage
10468	err := json.Unmarshal(body, &m)
10469	if err != nil {
10470		return err
10471	}
10472	for k, v := range m {
10473		switch k {
10474		case "properties":
10475			if v != nil {
10476				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
10477				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
10478				if err != nil {
10479					return err
10480				}
10481				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
10482			}
10483		case "name":
10484			if v != nil {
10485				var name string
10486				err = json.Unmarshal(*v, &name)
10487				if err != nil {
10488					return err
10489				}
10490				d.Name = &name
10491			}
10492		case "etag":
10493			if v != nil {
10494				var etag string
10495				err = json.Unmarshal(*v, &etag)
10496				if err != nil {
10497					return err
10498				}
10499				d.Etag = &etag
10500			}
10501		case "id":
10502			if v != nil {
10503				var ID string
10504				err = json.Unmarshal(*v, &ID)
10505				if err != nil {
10506					return err
10507				}
10508				d.ID = &ID
10509			}
10510		}
10511	}
10512
10513	return nil
10514}
10515
10516// DeleteBastionShareableLinkFuture an abstraction for monitoring and retrieving the results of a
10517// long-running operation.
10518type DeleteBastionShareableLinkFuture struct {
10519	azure.Future
10520}
10521
10522// Result returns the result of the asynchronous operation.
10523// If the operation has not completed it will return an error.
10524func (future *DeleteBastionShareableLinkFuture) Result(client BaseClient) (ar autorest.Response, err error) {
10525	var done bool
10526	done, err = future.DoneWithContext(context.Background(), client)
10527	if err != nil {
10528		err = autorest.NewErrorWithError(err, "network.DeleteBastionShareableLinkFuture", "Result", future.Response(), "Polling failure")
10529		return
10530	}
10531	if !done {
10532		err = azure.NewAsyncOpIncompleteError("network.DeleteBastionShareableLinkFuture")
10533		return
10534	}
10535	ar.Response = future.Response()
10536	return
10537}
10538
10539// DeviceProperties list of properties of the device.
10540type DeviceProperties struct {
10541	// DeviceVendor - Name of the device Vendor.
10542	DeviceVendor *string `json:"deviceVendor,omitempty"`
10543	// DeviceModel - Model of the device.
10544	DeviceModel *string `json:"deviceModel,omitempty"`
10545	// LinkSpeedInMbps - Link speed.
10546	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
10547}
10548
10549// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
10550// network. Standard DHCP option for a subnet overrides VNET DHCP options.
10551type DhcpOptions struct {
10552	// DNSServers - The list of DNS servers IP addresses.
10553	DNSServers *[]string `json:"dnsServers,omitempty"`
10554}
10555
10556// Dimension dimension of the metric.
10557type Dimension struct {
10558	// Name - The name of the dimension.
10559	Name *string `json:"name,omitempty"`
10560	// DisplayName - The display name of the dimension.
10561	DisplayName *string `json:"displayName,omitempty"`
10562	// InternalName - The internal name of the dimension.
10563	InternalName *string `json:"internalName,omitempty"`
10564}
10565
10566// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
10567type DNSNameAvailabilityResult struct {
10568	autorest.Response `json:"-"`
10569	// Available - Domain availability (True/False).
10570	Available *bool `json:"available,omitempty"`
10571}
10572
10573// EffectiveNetworkSecurityGroup effective network security group.
10574type EffectiveNetworkSecurityGroup struct {
10575	// NetworkSecurityGroup - The ID of network security group that is applied.
10576	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
10577	// Association - Associated resources.
10578	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
10579	// EffectiveSecurityRules - A collection of effective security rules.
10580	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
10581	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
10582	TagMap map[string][]string `json:"tagMap"`
10583}
10584
10585// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
10586func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
10587	objectMap := make(map[string]interface{})
10588	if ensg.NetworkSecurityGroup != nil {
10589		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
10590	}
10591	if ensg.Association != nil {
10592		objectMap["association"] = ensg.Association
10593	}
10594	if ensg.EffectiveSecurityRules != nil {
10595		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
10596	}
10597	if ensg.TagMap != nil {
10598		objectMap["tagMap"] = ensg.TagMap
10599	}
10600	return json.Marshal(objectMap)
10601}
10602
10603// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
10604type EffectiveNetworkSecurityGroupAssociation struct {
10605	// Subnet - The ID of the subnet if assigned.
10606	Subnet *SubResource `json:"subnet,omitempty"`
10607	// NetworkInterface - The ID of the network interface if assigned.
10608	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
10609}
10610
10611// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
10612// call.
10613type EffectiveNetworkSecurityGroupListResult struct {
10614	autorest.Response `json:"-"`
10615	// Value - A list of effective network security groups.
10616	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
10617	// NextLink - READ-ONLY; The URL to get the next set of results.
10618	NextLink *string `json:"nextLink,omitempty"`
10619}
10620
10621// EffectiveNetworkSecurityRule effective network security rules.
10622type EffectiveNetworkSecurityRule struct {
10623	// Name - The name of the security rule specified by the user (if created by the user).
10624	Name *string `json:"name,omitempty"`
10625	// Protocol - The network protocol this rule applies to. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
10626	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
10627	// SourcePortRange - The source port or range.
10628	SourcePortRange *string `json:"sourcePortRange,omitempty"`
10629	// DestinationPortRange - The destination port or range.
10630	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
10631	// 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 (*).
10632	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
10633	// 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 (*).
10634	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
10635	// SourceAddressPrefix - The source address prefix.
10636	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
10637	// DestinationAddressPrefix - The destination address prefix.
10638	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
10639	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
10640	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
10641	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
10642	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
10643	// ExpandedSourceAddressPrefix - The expanded source address prefix.
10644	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
10645	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
10646	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
10647	// Access - Whether network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
10648	Access SecurityRuleAccess `json:"access,omitempty"`
10649	// Priority - The priority of the rule.
10650	Priority *int32 `json:"priority,omitempty"`
10651	// Direction - The direction of the rule. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
10652	Direction SecurityRuleDirection `json:"direction,omitempty"`
10653}
10654
10655// EffectiveRoute effective Route.
10656type EffectiveRoute struct {
10657	// Name - The name of the user defined route. This is optional.
10658	Name *string `json:"name,omitempty"`
10659	// DisableBgpRoutePropagation - If true, on-premises routes are not propagated to the network interfaces in the subnet.
10660	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
10661	// Source - Who created the route. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
10662	Source EffectiveRouteSource `json:"source,omitempty"`
10663	// State - The value of effective route. Possible values include: 'Active', 'Invalid'
10664	State EffectiveRouteState `json:"state,omitempty"`
10665	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
10666	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
10667	// NextHopIPAddress - The IP address of the next hop of the effective route.
10668	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
10669	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
10670	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
10671}
10672
10673// EffectiveRouteListResult response for list effective route API service call.
10674type EffectiveRouteListResult struct {
10675	autorest.Response `json:"-"`
10676	// Value - A list of effective routes.
10677	Value *[]EffectiveRoute `json:"value,omitempty"`
10678	// NextLink - READ-ONLY; The URL to get the next set of results.
10679	NextLink *string `json:"nextLink,omitempty"`
10680}
10681
10682// EndpointServiceResult endpoint service.
10683type EndpointServiceResult struct {
10684	// Name - READ-ONLY; Name of the endpoint service.
10685	Name *string `json:"name,omitempty"`
10686	// Type - READ-ONLY; Type of the endpoint service.
10687	Type *string `json:"type,omitempty"`
10688	// ID - Resource ID.
10689	ID *string `json:"id,omitempty"`
10690}
10691
10692// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
10693type EndpointServicesListResult struct {
10694	autorest.Response `json:"-"`
10695	// Value - List of available endpoint services in a region.
10696	Value *[]EndpointServiceResult `json:"value,omitempty"`
10697	// NextLink - The URL to get the next set of results.
10698	NextLink *string `json:"nextLink,omitempty"`
10699}
10700
10701// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
10702// values.
10703type EndpointServicesListResultIterator struct {
10704	i    int
10705	page EndpointServicesListResultPage
10706}
10707
10708// NextWithContext advances to the next value.  If there was an error making
10709// the request the iterator does not advance and the error is returned.
10710func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
10711	if tracing.IsEnabled() {
10712		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
10713		defer func() {
10714			sc := -1
10715			if iter.Response().Response.Response != nil {
10716				sc = iter.Response().Response.Response.StatusCode
10717			}
10718			tracing.EndSpan(ctx, sc, err)
10719		}()
10720	}
10721	iter.i++
10722	if iter.i < len(iter.page.Values()) {
10723		return nil
10724	}
10725	err = iter.page.NextWithContext(ctx)
10726	if err != nil {
10727		iter.i--
10728		return err
10729	}
10730	iter.i = 0
10731	return nil
10732}
10733
10734// Next advances to the next value.  If there was an error making
10735// the request the iterator does not advance and the error is returned.
10736// Deprecated: Use NextWithContext() instead.
10737func (iter *EndpointServicesListResultIterator) Next() error {
10738	return iter.NextWithContext(context.Background())
10739}
10740
10741// NotDone returns true if the enumeration should be started or is not yet complete.
10742func (iter EndpointServicesListResultIterator) NotDone() bool {
10743	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10744}
10745
10746// Response returns the raw server response from the last page request.
10747func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
10748	return iter.page.Response()
10749}
10750
10751// Value returns the current value or a zero-initialized value if the
10752// iterator has advanced beyond the end of the collection.
10753func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
10754	if !iter.page.NotDone() {
10755		return EndpointServiceResult{}
10756	}
10757	return iter.page.Values()[iter.i]
10758}
10759
10760// Creates a new instance of the EndpointServicesListResultIterator type.
10761func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
10762	return EndpointServicesListResultIterator{page: page}
10763}
10764
10765// IsEmpty returns true if the ListResult contains no values.
10766func (eslr EndpointServicesListResult) IsEmpty() bool {
10767	return eslr.Value == nil || len(*eslr.Value) == 0
10768}
10769
10770// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
10771// It returns nil if no more results exist.
10772func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
10773	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
10774		return nil, nil
10775	}
10776	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10777		autorest.AsJSON(),
10778		autorest.AsGet(),
10779		autorest.WithBaseURL(to.String(eslr.NextLink)))
10780}
10781
10782// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
10783type EndpointServicesListResultPage struct {
10784	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
10785	eslr EndpointServicesListResult
10786}
10787
10788// NextWithContext advances to the next page of values.  If there was an error making
10789// the request the page does not advance and the error is returned.
10790func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
10791	if tracing.IsEnabled() {
10792		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
10793		defer func() {
10794			sc := -1
10795			if page.Response().Response.Response != nil {
10796				sc = page.Response().Response.Response.StatusCode
10797			}
10798			tracing.EndSpan(ctx, sc, err)
10799		}()
10800	}
10801	next, err := page.fn(ctx, page.eslr)
10802	if err != nil {
10803		return err
10804	}
10805	page.eslr = next
10806	return nil
10807}
10808
10809// Next advances to the next page of values.  If there was an error making
10810// the request the page does not advance and the error is returned.
10811// Deprecated: Use NextWithContext() instead.
10812func (page *EndpointServicesListResultPage) Next() error {
10813	return page.NextWithContext(context.Background())
10814}
10815
10816// NotDone returns true if the page enumeration should be started or is not yet complete.
10817func (page EndpointServicesListResultPage) NotDone() bool {
10818	return !page.eslr.IsEmpty()
10819}
10820
10821// Response returns the raw server response from the last page request.
10822func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
10823	return page.eslr
10824}
10825
10826// Values returns the slice of values for the current page or nil if there are no values.
10827func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
10828	if page.eslr.IsEmpty() {
10829		return nil
10830	}
10831	return *page.eslr.Value
10832}
10833
10834// Creates a new instance of the EndpointServicesListResultPage type.
10835func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
10836	return EndpointServicesListResultPage{fn: getNextPage}
10837}
10838
10839// Error common error representation.
10840type Error struct {
10841	// Code - Error code.
10842	Code *string `json:"code,omitempty"`
10843	// Message - Error message.
10844	Message *string `json:"message,omitempty"`
10845	// Target - Error target.
10846	Target *string `json:"target,omitempty"`
10847	// Details - Error details.
10848	Details *[]ErrorDetails `json:"details,omitempty"`
10849	// InnerError - Inner error message.
10850	InnerError *string `json:"innerError,omitempty"`
10851}
10852
10853// ErrorDetails common error details representation.
10854type ErrorDetails struct {
10855	// Code - Error code.
10856	Code *string `json:"code,omitempty"`
10857	// Target - Error target.
10858	Target *string `json:"target,omitempty"`
10859	// Message - Error message.
10860	Message *string `json:"message,omitempty"`
10861}
10862
10863// ErrorResponse the error object.
10864type ErrorResponse struct {
10865	// Error - The error details object.
10866	Error *ErrorDetails `json:"error,omitempty"`
10867}
10868
10869// EvaluatedNetworkSecurityGroup results of network security group evaluation.
10870type EvaluatedNetworkSecurityGroup struct {
10871	// NetworkSecurityGroupID - Network security group ID.
10872	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
10873	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
10874	AppliedTo *string `json:"appliedTo,omitempty"`
10875	// MatchedRule - Matched network security rule.
10876	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
10877	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
10878	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
10879}
10880
10881// ExpressRouteCircuit expressRouteCircuit resource.
10882type ExpressRouteCircuit struct {
10883	autorest.Response `json:"-"`
10884	// Sku - The SKU.
10885	Sku *ExpressRouteCircuitSku `json:"sku,omitempty"`
10886	// ExpressRouteCircuitPropertiesFormat - Properties of the express route circuit.
10887	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
10888	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10889	Etag *string `json:"etag,omitempty"`
10890	// ID - Resource ID.
10891	ID *string `json:"id,omitempty"`
10892	// Name - READ-ONLY; Resource name.
10893	Name *string `json:"name,omitempty"`
10894	// Type - READ-ONLY; Resource type.
10895	Type *string `json:"type,omitempty"`
10896	// Location - Resource location.
10897	Location *string `json:"location,omitempty"`
10898	// Tags - Resource tags.
10899	Tags map[string]*string `json:"tags"`
10900}
10901
10902// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
10903func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
10904	objectMap := make(map[string]interface{})
10905	if erc.Sku != nil {
10906		objectMap["sku"] = erc.Sku
10907	}
10908	if erc.ExpressRouteCircuitPropertiesFormat != nil {
10909		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
10910	}
10911	if erc.ID != nil {
10912		objectMap["id"] = erc.ID
10913	}
10914	if erc.Location != nil {
10915		objectMap["location"] = erc.Location
10916	}
10917	if erc.Tags != nil {
10918		objectMap["tags"] = erc.Tags
10919	}
10920	return json.Marshal(objectMap)
10921}
10922
10923// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
10924func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
10925	var m map[string]*json.RawMessage
10926	err := json.Unmarshal(body, &m)
10927	if err != nil {
10928		return err
10929	}
10930	for k, v := range m {
10931		switch k {
10932		case "sku":
10933			if v != nil {
10934				var sku ExpressRouteCircuitSku
10935				err = json.Unmarshal(*v, &sku)
10936				if err != nil {
10937					return err
10938				}
10939				erc.Sku = &sku
10940			}
10941		case "properties":
10942			if v != nil {
10943				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
10944				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
10945				if err != nil {
10946					return err
10947				}
10948				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
10949			}
10950		case "etag":
10951			if v != nil {
10952				var etag string
10953				err = json.Unmarshal(*v, &etag)
10954				if err != nil {
10955					return err
10956				}
10957				erc.Etag = &etag
10958			}
10959		case "id":
10960			if v != nil {
10961				var ID string
10962				err = json.Unmarshal(*v, &ID)
10963				if err != nil {
10964					return err
10965				}
10966				erc.ID = &ID
10967			}
10968		case "name":
10969			if v != nil {
10970				var name string
10971				err = json.Unmarshal(*v, &name)
10972				if err != nil {
10973					return err
10974				}
10975				erc.Name = &name
10976			}
10977		case "type":
10978			if v != nil {
10979				var typeVar string
10980				err = json.Unmarshal(*v, &typeVar)
10981				if err != nil {
10982					return err
10983				}
10984				erc.Type = &typeVar
10985			}
10986		case "location":
10987			if v != nil {
10988				var location string
10989				err = json.Unmarshal(*v, &location)
10990				if err != nil {
10991					return err
10992				}
10993				erc.Location = &location
10994			}
10995		case "tags":
10996			if v != nil {
10997				var tags map[string]*string
10998				err = json.Unmarshal(*v, &tags)
10999				if err != nil {
11000					return err
11001				}
11002				erc.Tags = tags
11003			}
11004		}
11005	}
11006
11007	return nil
11008}
11009
11010// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
11011type ExpressRouteCircuitArpTable struct {
11012	// Age - Entry age in minutes.
11013	Age *int32 `json:"age,omitempty"`
11014	// Interface - Interface address.
11015	Interface *string `json:"interface,omitempty"`
11016	// IPAddress - The IP address.
11017	IPAddress *string `json:"ipAddress,omitempty"`
11018	// MacAddress - The MAC address.
11019	MacAddress *string `json:"macAddress,omitempty"`
11020}
11021
11022// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
11023type ExpressRouteCircuitAuthorization struct {
11024	autorest.Response `json:"-"`
11025	// AuthorizationPropertiesFormat - Properties of the express route circuit authorization.
11026	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
11027	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
11028	Name *string `json:"name,omitempty"`
11029	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11030	Etag *string `json:"etag,omitempty"`
11031	// Type - READ-ONLY; Type of the resource.
11032	Type *string `json:"type,omitempty"`
11033	// ID - Resource ID.
11034	ID *string `json:"id,omitempty"`
11035}
11036
11037// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
11038func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
11039	objectMap := make(map[string]interface{})
11040	if erca.AuthorizationPropertiesFormat != nil {
11041		objectMap["properties"] = erca.AuthorizationPropertiesFormat
11042	}
11043	if erca.Name != nil {
11044		objectMap["name"] = erca.Name
11045	}
11046	if erca.ID != nil {
11047		objectMap["id"] = erca.ID
11048	}
11049	return json.Marshal(objectMap)
11050}
11051
11052// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
11053func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
11054	var m map[string]*json.RawMessage
11055	err := json.Unmarshal(body, &m)
11056	if err != nil {
11057		return err
11058	}
11059	for k, v := range m {
11060		switch k {
11061		case "properties":
11062			if v != nil {
11063				var authorizationPropertiesFormat AuthorizationPropertiesFormat
11064				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
11065				if err != nil {
11066					return err
11067				}
11068				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
11069			}
11070		case "name":
11071			if v != nil {
11072				var name string
11073				err = json.Unmarshal(*v, &name)
11074				if err != nil {
11075					return err
11076				}
11077				erca.Name = &name
11078			}
11079		case "etag":
11080			if v != nil {
11081				var etag string
11082				err = json.Unmarshal(*v, &etag)
11083				if err != nil {
11084					return err
11085				}
11086				erca.Etag = &etag
11087			}
11088		case "type":
11089			if v != nil {
11090				var typeVar string
11091				err = json.Unmarshal(*v, &typeVar)
11092				if err != nil {
11093					return err
11094				}
11095				erca.Type = &typeVar
11096			}
11097		case "id":
11098			if v != nil {
11099				var ID string
11100				err = json.Unmarshal(*v, &ID)
11101				if err != nil {
11102					return err
11103				}
11104				erca.ID = &ID
11105			}
11106		}
11107	}
11108
11109	return nil
11110}
11111
11112// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
11113// results of a long-running operation.
11114type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
11115	azure.Future
11116}
11117
11118// Result returns the result of the asynchronous operation.
11119// If the operation has not completed it will return an error.
11120func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
11121	var done bool
11122	done, err = future.DoneWithContext(context.Background(), client)
11123	if err != nil {
11124		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11125		return
11126	}
11127	if !done {
11128		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
11129		return
11130	}
11131	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11132	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
11133		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
11134		if err != nil {
11135			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
11136		}
11137	}
11138	return
11139}
11140
11141// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
11142// of a long-running operation.
11143type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
11144	azure.Future
11145}
11146
11147// Result returns the result of the asynchronous operation.
11148// If the operation has not completed it will return an error.
11149func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
11150	var done bool
11151	done, err = future.DoneWithContext(context.Background(), client)
11152	if err != nil {
11153		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
11154		return
11155	}
11156	if !done {
11157		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
11158		return
11159	}
11160	ar.Response = future.Response()
11161	return
11162}
11163
11164// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
11165// resource.
11166type ExpressRouteCircuitConnection struct {
11167	autorest.Response `json:"-"`
11168	// ExpressRouteCircuitConnectionPropertiesFormat - Properties of the express route circuit connection.
11169	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
11170	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
11171	Name *string `json:"name,omitempty"`
11172	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11173	Etag *string `json:"etag,omitempty"`
11174	// Type - READ-ONLY; Type of the resource.
11175	Type *string `json:"type,omitempty"`
11176	// ID - Resource ID.
11177	ID *string `json:"id,omitempty"`
11178}
11179
11180// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
11181func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
11182	objectMap := make(map[string]interface{})
11183	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
11184		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
11185	}
11186	if ercc.Name != nil {
11187		objectMap["name"] = ercc.Name
11188	}
11189	if ercc.ID != nil {
11190		objectMap["id"] = ercc.ID
11191	}
11192	return json.Marshal(objectMap)
11193}
11194
11195// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
11196func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
11197	var m map[string]*json.RawMessage
11198	err := json.Unmarshal(body, &m)
11199	if err != nil {
11200		return err
11201	}
11202	for k, v := range m {
11203		switch k {
11204		case "properties":
11205			if v != nil {
11206				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
11207				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
11208				if err != nil {
11209					return err
11210				}
11211				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
11212			}
11213		case "name":
11214			if v != nil {
11215				var name string
11216				err = json.Unmarshal(*v, &name)
11217				if err != nil {
11218					return err
11219				}
11220				ercc.Name = &name
11221			}
11222		case "etag":
11223			if v != nil {
11224				var etag string
11225				err = json.Unmarshal(*v, &etag)
11226				if err != nil {
11227					return err
11228				}
11229				ercc.Etag = &etag
11230			}
11231		case "type":
11232			if v != nil {
11233				var typeVar string
11234				err = json.Unmarshal(*v, &typeVar)
11235				if err != nil {
11236					return err
11237				}
11238				ercc.Type = &typeVar
11239			}
11240		case "id":
11241			if v != nil {
11242				var ID string
11243				err = json.Unmarshal(*v, &ID)
11244				if err != nil {
11245					return err
11246				}
11247				ercc.ID = &ID
11248			}
11249		}
11250	}
11251
11252	return nil
11253}
11254
11255// ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
11256// global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
11257type ExpressRouteCircuitConnectionListResult struct {
11258	autorest.Response `json:"-"`
11259	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
11260	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
11261	// NextLink - The URL to get the next set of results.
11262	NextLink *string `json:"nextLink,omitempty"`
11263}
11264
11265// ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
11266// ExpressRouteCircuitConnection values.
11267type ExpressRouteCircuitConnectionListResultIterator struct {
11268	i    int
11269	page ExpressRouteCircuitConnectionListResultPage
11270}
11271
11272// NextWithContext advances to the next value.  If there was an error making
11273// the request the iterator does not advance and the error is returned.
11274func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
11275	if tracing.IsEnabled() {
11276		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
11277		defer func() {
11278			sc := -1
11279			if iter.Response().Response.Response != nil {
11280				sc = iter.Response().Response.Response.StatusCode
11281			}
11282			tracing.EndSpan(ctx, sc, err)
11283		}()
11284	}
11285	iter.i++
11286	if iter.i < len(iter.page.Values()) {
11287		return nil
11288	}
11289	err = iter.page.NextWithContext(ctx)
11290	if err != nil {
11291		iter.i--
11292		return err
11293	}
11294	iter.i = 0
11295	return nil
11296}
11297
11298// Next advances to the next value.  If there was an error making
11299// the request the iterator does not advance and the error is returned.
11300// Deprecated: Use NextWithContext() instead.
11301func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
11302	return iter.NextWithContext(context.Background())
11303}
11304
11305// NotDone returns true if the enumeration should be started or is not yet complete.
11306func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
11307	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11308}
11309
11310// Response returns the raw server response from the last page request.
11311func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
11312	return iter.page.Response()
11313}
11314
11315// Value returns the current value or a zero-initialized value if the
11316// iterator has advanced beyond the end of the collection.
11317func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
11318	if !iter.page.NotDone() {
11319		return ExpressRouteCircuitConnection{}
11320	}
11321	return iter.page.Values()[iter.i]
11322}
11323
11324// Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
11325func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
11326	return ExpressRouteCircuitConnectionListResultIterator{page: page}
11327}
11328
11329// IsEmpty returns true if the ListResult contains no values.
11330func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
11331	return ercclr.Value == nil || len(*ercclr.Value) == 0
11332}
11333
11334// expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
11335// It returns nil if no more results exist.
11336func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
11337	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
11338		return nil, nil
11339	}
11340	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11341		autorest.AsJSON(),
11342		autorest.AsGet(),
11343		autorest.WithBaseURL(to.String(ercclr.NextLink)))
11344}
11345
11346// ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
11347type ExpressRouteCircuitConnectionListResultPage struct {
11348	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
11349	ercclr ExpressRouteCircuitConnectionListResult
11350}
11351
11352// NextWithContext advances to the next page of values.  If there was an error making
11353// the request the page does not advance and the error is returned.
11354func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
11355	if tracing.IsEnabled() {
11356		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
11357		defer func() {
11358			sc := -1
11359			if page.Response().Response.Response != nil {
11360				sc = page.Response().Response.Response.StatusCode
11361			}
11362			tracing.EndSpan(ctx, sc, err)
11363		}()
11364	}
11365	next, err := page.fn(ctx, page.ercclr)
11366	if err != nil {
11367		return err
11368	}
11369	page.ercclr = next
11370	return nil
11371}
11372
11373// Next advances to the next page of values.  If there was an error making
11374// the request the page does not advance and the error is returned.
11375// Deprecated: Use NextWithContext() instead.
11376func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
11377	return page.NextWithContext(context.Background())
11378}
11379
11380// NotDone returns true if the page enumeration should be started or is not yet complete.
11381func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
11382	return !page.ercclr.IsEmpty()
11383}
11384
11385// Response returns the raw server response from the last page request.
11386func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
11387	return page.ercclr
11388}
11389
11390// Values returns the slice of values for the current page or nil if there are no values.
11391func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
11392	if page.ercclr.IsEmpty() {
11393		return nil
11394	}
11395	return *page.ercclr.Value
11396}
11397
11398// Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
11399func NewExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
11400	return ExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
11401}
11402
11403// ExpressRouteCircuitConnectionPropertiesFormat properties of the express route circuit connection.
11404type ExpressRouteCircuitConnectionPropertiesFormat struct {
11405	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
11406	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
11407	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
11408	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
11409	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
11410	AddressPrefix *string `json:"addressPrefix,omitempty"`
11411	// AuthorizationKey - The authorization key.
11412	AuthorizationKey *string `json:"authorizationKey,omitempty"`
11413	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
11414	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
11415	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11416	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11417}
11418
11419// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
11420// results of a long-running operation.
11421type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
11422	azure.Future
11423}
11424
11425// Result returns the result of the asynchronous operation.
11426// If the operation has not completed it will return an error.
11427func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
11428	var done bool
11429	done, err = future.DoneWithContext(context.Background(), client)
11430	if err != nil {
11431		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11432		return
11433	}
11434	if !done {
11435		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
11436		return
11437	}
11438	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11439	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
11440		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
11441		if err != nil {
11442			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
11443		}
11444	}
11445	return
11446}
11447
11448// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
11449// long-running operation.
11450type ExpressRouteCircuitConnectionsDeleteFuture struct {
11451	azure.Future
11452}
11453
11454// Result returns the result of the asynchronous operation.
11455// If the operation has not completed it will return an error.
11456func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
11457	var done bool
11458	done, err = future.DoneWithContext(context.Background(), client)
11459	if err != nil {
11460		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
11461		return
11462	}
11463	if !done {
11464		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
11465		return
11466	}
11467	ar.Response = future.Response()
11468	return
11469}
11470
11471// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
11472type ExpressRouteCircuitListResult struct {
11473	autorest.Response `json:"-"`
11474	// Value - A list of ExpressRouteCircuits in a resource group.
11475	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
11476	// NextLink - The URL to get the next set of results.
11477	NextLink *string `json:"nextLink,omitempty"`
11478}
11479
11480// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
11481// values.
11482type ExpressRouteCircuitListResultIterator struct {
11483	i    int
11484	page ExpressRouteCircuitListResultPage
11485}
11486
11487// NextWithContext advances to the next value.  If there was an error making
11488// the request the iterator does not advance and the error is returned.
11489func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
11490	if tracing.IsEnabled() {
11491		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
11492		defer func() {
11493			sc := -1
11494			if iter.Response().Response.Response != nil {
11495				sc = iter.Response().Response.Response.StatusCode
11496			}
11497			tracing.EndSpan(ctx, sc, err)
11498		}()
11499	}
11500	iter.i++
11501	if iter.i < len(iter.page.Values()) {
11502		return nil
11503	}
11504	err = iter.page.NextWithContext(ctx)
11505	if err != nil {
11506		iter.i--
11507		return err
11508	}
11509	iter.i = 0
11510	return nil
11511}
11512
11513// Next advances to the next value.  If there was an error making
11514// the request the iterator does not advance and the error is returned.
11515// Deprecated: Use NextWithContext() instead.
11516func (iter *ExpressRouteCircuitListResultIterator) Next() error {
11517	return iter.NextWithContext(context.Background())
11518}
11519
11520// NotDone returns true if the enumeration should be started or is not yet complete.
11521func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
11522	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11523}
11524
11525// Response returns the raw server response from the last page request.
11526func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
11527	return iter.page.Response()
11528}
11529
11530// Value returns the current value or a zero-initialized value if the
11531// iterator has advanced beyond the end of the collection.
11532func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
11533	if !iter.page.NotDone() {
11534		return ExpressRouteCircuit{}
11535	}
11536	return iter.page.Values()[iter.i]
11537}
11538
11539// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
11540func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
11541	return ExpressRouteCircuitListResultIterator{page: page}
11542}
11543
11544// IsEmpty returns true if the ListResult contains no values.
11545func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
11546	return erclr.Value == nil || len(*erclr.Value) == 0
11547}
11548
11549// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
11550// It returns nil if no more results exist.
11551func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
11552	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
11553		return nil, nil
11554	}
11555	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11556		autorest.AsJSON(),
11557		autorest.AsGet(),
11558		autorest.WithBaseURL(to.String(erclr.NextLink)))
11559}
11560
11561// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
11562type ExpressRouteCircuitListResultPage struct {
11563	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
11564	erclr ExpressRouteCircuitListResult
11565}
11566
11567// NextWithContext advances to the next page of values.  If there was an error making
11568// the request the page does not advance and the error is returned.
11569func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
11570	if tracing.IsEnabled() {
11571		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
11572		defer func() {
11573			sc := -1
11574			if page.Response().Response.Response != nil {
11575				sc = page.Response().Response.Response.StatusCode
11576			}
11577			tracing.EndSpan(ctx, sc, err)
11578		}()
11579	}
11580	next, err := page.fn(ctx, page.erclr)
11581	if err != nil {
11582		return err
11583	}
11584	page.erclr = next
11585	return nil
11586}
11587
11588// Next advances to the next page of values.  If there was an error making
11589// the request the page does not advance and the error is returned.
11590// Deprecated: Use NextWithContext() instead.
11591func (page *ExpressRouteCircuitListResultPage) Next() error {
11592	return page.NextWithContext(context.Background())
11593}
11594
11595// NotDone returns true if the page enumeration should be started or is not yet complete.
11596func (page ExpressRouteCircuitListResultPage) NotDone() bool {
11597	return !page.erclr.IsEmpty()
11598}
11599
11600// Response returns the raw server response from the last page request.
11601func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
11602	return page.erclr
11603}
11604
11605// Values returns the slice of values for the current page or nil if there are no values.
11606func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
11607	if page.erclr.IsEmpty() {
11608		return nil
11609	}
11610	return *page.erclr.Value
11611}
11612
11613// Creates a new instance of the ExpressRouteCircuitListResultPage type.
11614func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
11615	return ExpressRouteCircuitListResultPage{fn: getNextPage}
11616}
11617
11618// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
11619type ExpressRouteCircuitPeering struct {
11620	autorest.Response `json:"-"`
11621	// ExpressRouteCircuitPeeringPropertiesFormat - Properties of the express route circuit peering.
11622	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
11623	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
11624	Name *string `json:"name,omitempty"`
11625	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11626	Etag *string `json:"etag,omitempty"`
11627	// Type - READ-ONLY; Type of the resource.
11628	Type *string `json:"type,omitempty"`
11629	// ID - Resource ID.
11630	ID *string `json:"id,omitempty"`
11631}
11632
11633// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
11634func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
11635	objectMap := make(map[string]interface{})
11636	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
11637		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
11638	}
11639	if ercp.Name != nil {
11640		objectMap["name"] = ercp.Name
11641	}
11642	if ercp.ID != nil {
11643		objectMap["id"] = ercp.ID
11644	}
11645	return json.Marshal(objectMap)
11646}
11647
11648// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
11649func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
11650	var m map[string]*json.RawMessage
11651	err := json.Unmarshal(body, &m)
11652	if err != nil {
11653		return err
11654	}
11655	for k, v := range m {
11656		switch k {
11657		case "properties":
11658			if v != nil {
11659				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
11660				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
11661				if err != nil {
11662					return err
11663				}
11664				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
11665			}
11666		case "name":
11667			if v != nil {
11668				var name string
11669				err = json.Unmarshal(*v, &name)
11670				if err != nil {
11671					return err
11672				}
11673				ercp.Name = &name
11674			}
11675		case "etag":
11676			if v != nil {
11677				var etag string
11678				err = json.Unmarshal(*v, &etag)
11679				if err != nil {
11680					return err
11681				}
11682				ercp.Etag = &etag
11683			}
11684		case "type":
11685			if v != nil {
11686				var typeVar string
11687				err = json.Unmarshal(*v, &typeVar)
11688				if err != nil {
11689					return err
11690				}
11691				ercp.Type = &typeVar
11692			}
11693		case "id":
11694			if v != nil {
11695				var ID string
11696				err = json.Unmarshal(*v, &ID)
11697				if err != nil {
11698					return err
11699				}
11700				ercp.ID = &ID
11701			}
11702		}
11703	}
11704
11705	return nil
11706}
11707
11708// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
11709type ExpressRouteCircuitPeeringConfig struct {
11710	// AdvertisedPublicPrefixes - The reference to AdvertisedPublicPrefixes.
11711	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
11712	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering.
11713	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
11714	// AdvertisedPublicPrefixesState - READ-ONLY; The advertised public prefix state of the Peering resource. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
11715	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
11716	// LegacyMode - The legacy mode of the peering.
11717	LegacyMode *int32 `json:"legacyMode,omitempty"`
11718	// CustomerASN - The CustomerASN of the peering.
11719	CustomerASN *int32 `json:"customerASN,omitempty"`
11720	// RoutingRegistryName - The RoutingRegistryName of the configuration.
11721	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
11722}
11723
11724// ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
11725type ExpressRouteCircuitPeeringID struct {
11726	// ID - The ID of the ExpressRoute circuit peering.
11727	ID *string `json:"id,omitempty"`
11728}
11729
11730// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
11731// that belong to an ExpressRouteCircuit.
11732type ExpressRouteCircuitPeeringListResult struct {
11733	autorest.Response `json:"-"`
11734	// Value - The peerings in an express route circuit.
11735	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
11736	// NextLink - The URL to get the next set of results.
11737	NextLink *string `json:"nextLink,omitempty"`
11738}
11739
11740// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
11741// ExpressRouteCircuitPeering values.
11742type ExpressRouteCircuitPeeringListResultIterator struct {
11743	i    int
11744	page ExpressRouteCircuitPeeringListResultPage
11745}
11746
11747// NextWithContext advances to the next value.  If there was an error making
11748// the request the iterator does not advance and the error is returned.
11749func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
11750	if tracing.IsEnabled() {
11751		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
11752		defer func() {
11753			sc := -1
11754			if iter.Response().Response.Response != nil {
11755				sc = iter.Response().Response.Response.StatusCode
11756			}
11757			tracing.EndSpan(ctx, sc, err)
11758		}()
11759	}
11760	iter.i++
11761	if iter.i < len(iter.page.Values()) {
11762		return nil
11763	}
11764	err = iter.page.NextWithContext(ctx)
11765	if err != nil {
11766		iter.i--
11767		return err
11768	}
11769	iter.i = 0
11770	return nil
11771}
11772
11773// Next advances to the next value.  If there was an error making
11774// the request the iterator does not advance and the error is returned.
11775// Deprecated: Use NextWithContext() instead.
11776func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
11777	return iter.NextWithContext(context.Background())
11778}
11779
11780// NotDone returns true if the enumeration should be started or is not yet complete.
11781func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
11782	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11783}
11784
11785// Response returns the raw server response from the last page request.
11786func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
11787	return iter.page.Response()
11788}
11789
11790// Value returns the current value or a zero-initialized value if the
11791// iterator has advanced beyond the end of the collection.
11792func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
11793	if !iter.page.NotDone() {
11794		return ExpressRouteCircuitPeering{}
11795	}
11796	return iter.page.Values()[iter.i]
11797}
11798
11799// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
11800func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
11801	return ExpressRouteCircuitPeeringListResultIterator{page: page}
11802}
11803
11804// IsEmpty returns true if the ListResult contains no values.
11805func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
11806	return ercplr.Value == nil || len(*ercplr.Value) == 0
11807}
11808
11809// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
11810// It returns nil if no more results exist.
11811func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
11812	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
11813		return nil, nil
11814	}
11815	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11816		autorest.AsJSON(),
11817		autorest.AsGet(),
11818		autorest.WithBaseURL(to.String(ercplr.NextLink)))
11819}
11820
11821// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
11822type ExpressRouteCircuitPeeringListResultPage struct {
11823	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
11824	ercplr ExpressRouteCircuitPeeringListResult
11825}
11826
11827// NextWithContext advances to the next page of values.  If there was an error making
11828// the request the page does not advance and the error is returned.
11829func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
11830	if tracing.IsEnabled() {
11831		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
11832		defer func() {
11833			sc := -1
11834			if page.Response().Response.Response != nil {
11835				sc = page.Response().Response.Response.StatusCode
11836			}
11837			tracing.EndSpan(ctx, sc, err)
11838		}()
11839	}
11840	next, err := page.fn(ctx, page.ercplr)
11841	if err != nil {
11842		return err
11843	}
11844	page.ercplr = next
11845	return nil
11846}
11847
11848// Next advances to the next page of values.  If there was an error making
11849// the request the page does not advance and the error is returned.
11850// Deprecated: Use NextWithContext() instead.
11851func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
11852	return page.NextWithContext(context.Background())
11853}
11854
11855// NotDone returns true if the page enumeration should be started or is not yet complete.
11856func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
11857	return !page.ercplr.IsEmpty()
11858}
11859
11860// Response returns the raw server response from the last page request.
11861func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
11862	return page.ercplr
11863}
11864
11865// Values returns the slice of values for the current page or nil if there are no values.
11866func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
11867	if page.ercplr.IsEmpty() {
11868		return nil
11869	}
11870	return *page.ercplr.Value
11871}
11872
11873// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
11874func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
11875	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
11876}
11877
11878// ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering.
11879type ExpressRouteCircuitPeeringPropertiesFormat struct {
11880	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
11881	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
11882	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
11883	State ExpressRoutePeeringState `json:"state,omitempty"`
11884	// AzureASN - The Azure ASN.
11885	AzureASN *int32 `json:"azureASN,omitempty"`
11886	// PeerASN - The peer ASN.
11887	PeerASN *int64 `json:"peerASN,omitempty"`
11888	// PrimaryPeerAddressPrefix - The primary address prefix.
11889	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
11890	// SecondaryPeerAddressPrefix - The secondary address prefix.
11891	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
11892	// PrimaryAzurePort - The primary port.
11893	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
11894	// SecondaryAzurePort - The secondary port.
11895	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
11896	// SharedKey - The shared key.
11897	SharedKey *string `json:"sharedKey,omitempty"`
11898	// VlanID - The VLAN ID.
11899	VlanID *int32 `json:"vlanId,omitempty"`
11900	// MicrosoftPeeringConfig - The Microsoft peering configuration.
11901	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
11902	// Stats - The peering stats of express route circuit.
11903	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
11904	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11905	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11906	// GatewayManagerEtag - The GatewayManager Etag.
11907	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
11908	// LastModifiedBy - READ-ONLY; Who was the last to modify the peering.
11909	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
11910	// RouteFilter - The reference to the RouteFilter resource.
11911	RouteFilter *SubResource `json:"routeFilter,omitempty"`
11912	// Ipv6PeeringConfig - The IPv6 peering configuration.
11913	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
11914	// ExpressRouteConnection - The ExpressRoute connection.
11915	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
11916	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
11917	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
11918	// PeeredConnections - READ-ONLY; The list of peered circuit connections associated with Azure Private Peering for this circuit.
11919	PeeredConnections *[]PeerExpressRouteCircuitConnection `json:"peeredConnections,omitempty"`
11920}
11921
11922// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
11923// of a long-running operation.
11924type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
11925	azure.Future
11926}
11927
11928// Result returns the result of the asynchronous operation.
11929// If the operation has not completed it will return an error.
11930func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
11931	var done bool
11932	done, err = future.DoneWithContext(context.Background(), client)
11933	if err != nil {
11934		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11935		return
11936	}
11937	if !done {
11938		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
11939		return
11940	}
11941	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11942	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
11943		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
11944		if err != nil {
11945			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
11946		}
11947	}
11948	return
11949}
11950
11951// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
11952// long-running operation.
11953type ExpressRouteCircuitPeeringsDeleteFuture struct {
11954	azure.Future
11955}
11956
11957// Result returns the result of the asynchronous operation.
11958// If the operation has not completed it will return an error.
11959func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
11960	var done bool
11961	done, err = future.DoneWithContext(context.Background(), client)
11962	if err != nil {
11963		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
11964		return
11965	}
11966	if !done {
11967		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
11968		return
11969	}
11970	ar.Response = future.Response()
11971	return
11972}
11973
11974// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
11975type ExpressRouteCircuitPropertiesFormat struct {
11976	// AllowClassicOperations - Allow classic operations.
11977	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
11978	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
11979	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
11980	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
11981	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
11982	// Authorizations - The list of authorizations.
11983	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
11984	// Peerings - The list of peerings.
11985	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
11986	// ServiceKey - The ServiceKey.
11987	ServiceKey *string `json:"serviceKey,omitempty"`
11988	// ServiceProviderNotes - The ServiceProviderNotes.
11989	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
11990	// ServiceProviderProperties - The ServiceProviderProperties.
11991	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
11992	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
11993	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
11994	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
11995	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
11996	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
11997	Stag *int32 `json:"stag,omitempty"`
11998	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11999	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12000	// GatewayManagerEtag - The GatewayManager Etag.
12001	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
12002	// GlobalReachEnabled - Flag denoting Global reach status.
12003	GlobalReachEnabled *bool `json:"globalReachEnabled,omitempty"`
12004}
12005
12006// ExpressRouteCircuitReference reference to an express route circuit.
12007type ExpressRouteCircuitReference struct {
12008	// ID - Corresponding Express Route Circuit Id.
12009	ID *string `json:"id,omitempty"`
12010}
12011
12012// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit.
12013type ExpressRouteCircuitRoutesTable struct {
12014	// NetworkProperty - IP address of a network entity.
12015	NetworkProperty *string `json:"network,omitempty"`
12016	// NextHop - NextHop address.
12017	NextHop *string `json:"nextHop,omitempty"`
12018	// LocPrf - Local preference value as set with the set local-preference route-map configuration command.
12019	LocPrf *string `json:"locPrf,omitempty"`
12020	// Weight - Route Weight.
12021	Weight *int32 `json:"weight,omitempty"`
12022	// Path - Autonomous system paths to the destination network.
12023	Path *string `json:"path,omitempty"`
12024}
12025
12026// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
12027type ExpressRouteCircuitRoutesTableSummary struct {
12028	// Neighbor - IP address of the neighbor.
12029	Neighbor *string `json:"neighbor,omitempty"`
12030	// V - BGP version number spoken to the neighbor.
12031	V *int32 `json:"v,omitempty"`
12032	// As - Autonomous system number.
12033	As *int32 `json:"as,omitempty"`
12034	// 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.
12035	UpDown *string `json:"upDown,omitempty"`
12036	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
12037	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
12038}
12039
12040// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
12041// Circuits API.
12042type ExpressRouteCircuitsArpTableListResult struct {
12043	autorest.Response `json:"-"`
12044	// Value - A list of the ARP tables.
12045	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
12046	// NextLink - The URL to get the next set of results.
12047	NextLink *string `json:"nextLink,omitempty"`
12048}
12049
12050// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
12051// long-running operation.
12052type ExpressRouteCircuitsCreateOrUpdateFuture struct {
12053	azure.Future
12054}
12055
12056// Result returns the result of the asynchronous operation.
12057// If the operation has not completed it will return an error.
12058func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
12059	var done bool
12060	done, err = future.DoneWithContext(context.Background(), client)
12061	if err != nil {
12062		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12063		return
12064	}
12065	if !done {
12066		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
12067		return
12068	}
12069	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12070	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
12071		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
12072		if err != nil {
12073			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
12074		}
12075	}
12076	return
12077}
12078
12079// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
12080// long-running operation.
12081type ExpressRouteCircuitsDeleteFuture struct {
12082	azure.Future
12083}
12084
12085// Result returns the result of the asynchronous operation.
12086// If the operation has not completed it will return an error.
12087func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
12088	var done bool
12089	done, err = future.DoneWithContext(context.Background(), client)
12090	if err != nil {
12091		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
12092		return
12093	}
12094	if !done {
12095		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
12096		return
12097	}
12098	ar.Response = future.Response()
12099	return
12100}
12101
12102// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
12103// ExpressRouteCircuit.
12104type ExpressRouteCircuitServiceProviderProperties struct {
12105	// ServiceProviderName - The serviceProviderName.
12106	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
12107	// PeeringLocation - The peering location.
12108	PeeringLocation *string `json:"peeringLocation,omitempty"`
12109	// BandwidthInMbps - The BandwidthInMbps.
12110	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
12111}
12112
12113// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
12114type ExpressRouteCircuitSku struct {
12115	// Name - The name of the SKU.
12116	Name *string `json:"name,omitempty"`
12117	// Tier - The tier of the SKU. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal'
12118	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
12119	// Family - The family of the SKU. Possible values include: 'UnlimitedData', 'MeteredData'
12120	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
12121}
12122
12123// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
12124// long-running operation.
12125type ExpressRouteCircuitsListArpTableFuture struct {
12126	azure.Future
12127}
12128
12129// Result returns the result of the asynchronous operation.
12130// If the operation has not completed it will return an error.
12131func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
12132	var done bool
12133	done, err = future.DoneWithContext(context.Background(), client)
12134	if err != nil {
12135		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
12136		return
12137	}
12138	if !done {
12139		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
12140		return
12141	}
12142	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12143	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
12144		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
12145		if err != nil {
12146			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
12147		}
12148	}
12149	return
12150}
12151
12152// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
12153// long-running operation.
12154type ExpressRouteCircuitsListRoutesTableFuture struct {
12155	azure.Future
12156}
12157
12158// Result returns the result of the asynchronous operation.
12159// If the operation has not completed it will return an error.
12160func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
12161	var done bool
12162	done, err = future.DoneWithContext(context.Background(), client)
12163	if err != nil {
12164		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
12165		return
12166	}
12167	if !done {
12168		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
12169		return
12170	}
12171	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12172	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
12173		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
12174		if err != nil {
12175			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
12176		}
12177	}
12178	return
12179}
12180
12181// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
12182// results of a long-running operation.
12183type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
12184	azure.Future
12185}
12186
12187// Result returns the result of the asynchronous operation.
12188// If the operation has not completed it will return an error.
12189func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
12190	var done bool
12191	done, err = future.DoneWithContext(context.Background(), client)
12192	if err != nil {
12193		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
12194		return
12195	}
12196	if !done {
12197		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
12198		return
12199	}
12200	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12201	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
12202		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
12203		if err != nil {
12204			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
12205		}
12206	}
12207	return
12208}
12209
12210// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
12211// Circuits API.
12212type ExpressRouteCircuitsRoutesTableListResult struct {
12213	autorest.Response `json:"-"`
12214	// Value - The list of routes table.
12215	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
12216	// NextLink - The URL to get the next set of results.
12217	NextLink *string `json:"nextLink,omitempty"`
12218}
12219
12220// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
12221// Express Route Circuits API.
12222type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
12223	autorest.Response `json:"-"`
12224	// Value - A list of the routes table.
12225	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
12226	// NextLink - The URL to get the next set of results.
12227	NextLink *string `json:"nextLink,omitempty"`
12228}
12229
12230// ExpressRouteCircuitStats contains stats associated with the peering.
12231type ExpressRouteCircuitStats struct {
12232	autorest.Response `json:"-"`
12233	// PrimarybytesIn - The Primary BytesIn of the peering.
12234	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
12235	// PrimarybytesOut - The primary BytesOut of the peering.
12236	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
12237	// SecondarybytesIn - The secondary BytesIn of the peering.
12238	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
12239	// SecondarybytesOut - The secondary BytesOut of the peering.
12240	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
12241}
12242
12243// ExpressRouteConnection expressRouteConnection resource.
12244type ExpressRouteConnection struct {
12245	autorest.Response `json:"-"`
12246	// ExpressRouteConnectionProperties - Properties of the express route connection.
12247	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
12248	// Name - The name of the resource.
12249	Name *string `json:"name,omitempty"`
12250	// ID - Resource ID.
12251	ID *string `json:"id,omitempty"`
12252}
12253
12254// MarshalJSON is the custom marshaler for ExpressRouteConnection.
12255func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
12256	objectMap := make(map[string]interface{})
12257	if erc.ExpressRouteConnectionProperties != nil {
12258		objectMap["properties"] = erc.ExpressRouteConnectionProperties
12259	}
12260	if erc.Name != nil {
12261		objectMap["name"] = erc.Name
12262	}
12263	if erc.ID != nil {
12264		objectMap["id"] = erc.ID
12265	}
12266	return json.Marshal(objectMap)
12267}
12268
12269// UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
12270func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
12271	var m map[string]*json.RawMessage
12272	err := json.Unmarshal(body, &m)
12273	if err != nil {
12274		return err
12275	}
12276	for k, v := range m {
12277		switch k {
12278		case "properties":
12279			if v != nil {
12280				var expressRouteConnectionProperties ExpressRouteConnectionProperties
12281				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
12282				if err != nil {
12283					return err
12284				}
12285				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
12286			}
12287		case "name":
12288			if v != nil {
12289				var name string
12290				err = json.Unmarshal(*v, &name)
12291				if err != nil {
12292					return err
12293				}
12294				erc.Name = &name
12295			}
12296		case "id":
12297			if v != nil {
12298				var ID string
12299				err = json.Unmarshal(*v, &ID)
12300				if err != nil {
12301					return err
12302				}
12303				erc.ID = &ID
12304			}
12305		}
12306	}
12307
12308	return nil
12309}
12310
12311// ExpressRouteConnectionID the ID of the ExpressRouteConnection.
12312type ExpressRouteConnectionID struct {
12313	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
12314	ID *string `json:"id,omitempty"`
12315}
12316
12317// ExpressRouteConnectionList expressRouteConnection list.
12318type ExpressRouteConnectionList struct {
12319	autorest.Response `json:"-"`
12320	// Value - The list of ExpressRoute connections.
12321	Value *[]ExpressRouteConnection `json:"value,omitempty"`
12322}
12323
12324// ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
12325type ExpressRouteConnectionProperties struct {
12326	// ProvisioningState - READ-ONLY; The provisioning state of the express route connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12327	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12328	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
12329	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
12330	// AuthorizationKey - Authorization key to establish the connection.
12331	AuthorizationKey *string `json:"authorizationKey,omitempty"`
12332	// RoutingWeight - The routing weight associated to the connection.
12333	RoutingWeight *int32 `json:"routingWeight,omitempty"`
12334	// EnableInternetSecurity - Enable internet security.
12335	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
12336}
12337
12338// ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
12339// a long-running operation.
12340type ExpressRouteConnectionsCreateOrUpdateFuture struct {
12341	azure.Future
12342}
12343
12344// Result returns the result of the asynchronous operation.
12345// If the operation has not completed it will return an error.
12346func (future *ExpressRouteConnectionsCreateOrUpdateFuture) Result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
12347	var done bool
12348	done, err = future.DoneWithContext(context.Background(), client)
12349	if err != nil {
12350		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12351		return
12352	}
12353	if !done {
12354		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
12355		return
12356	}
12357	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12358	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
12359		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
12360		if err != nil {
12361			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
12362		}
12363	}
12364	return
12365}
12366
12367// ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
12368// long-running operation.
12369type ExpressRouteConnectionsDeleteFuture struct {
12370	azure.Future
12371}
12372
12373// Result returns the result of the asynchronous operation.
12374// If the operation has not completed it will return an error.
12375func (future *ExpressRouteConnectionsDeleteFuture) Result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
12376	var done bool
12377	done, err = future.DoneWithContext(context.Background(), client)
12378	if err != nil {
12379		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
12380		return
12381	}
12382	if !done {
12383		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
12384		return
12385	}
12386	ar.Response = future.Response()
12387	return
12388}
12389
12390// ExpressRouteCrossConnection expressRouteCrossConnection resource.
12391type ExpressRouteCrossConnection struct {
12392	autorest.Response `json:"-"`
12393	// ExpressRouteCrossConnectionProperties - Properties of the express route cross connection.
12394	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
12395	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12396	Etag *string `json:"etag,omitempty"`
12397	// ID - Resource ID.
12398	ID *string `json:"id,omitempty"`
12399	// Name - READ-ONLY; Resource name.
12400	Name *string `json:"name,omitempty"`
12401	// Type - READ-ONLY; Resource type.
12402	Type *string `json:"type,omitempty"`
12403	// Location - Resource location.
12404	Location *string `json:"location,omitempty"`
12405	// Tags - Resource tags.
12406	Tags map[string]*string `json:"tags"`
12407}
12408
12409// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
12410func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
12411	objectMap := make(map[string]interface{})
12412	if ercc.ExpressRouteCrossConnectionProperties != nil {
12413		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
12414	}
12415	if ercc.ID != nil {
12416		objectMap["id"] = ercc.ID
12417	}
12418	if ercc.Location != nil {
12419		objectMap["location"] = ercc.Location
12420	}
12421	if ercc.Tags != nil {
12422		objectMap["tags"] = ercc.Tags
12423	}
12424	return json.Marshal(objectMap)
12425}
12426
12427// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
12428func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
12429	var m map[string]*json.RawMessage
12430	err := json.Unmarshal(body, &m)
12431	if err != nil {
12432		return err
12433	}
12434	for k, v := range m {
12435		switch k {
12436		case "properties":
12437			if v != nil {
12438				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
12439				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
12440				if err != nil {
12441					return err
12442				}
12443				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
12444			}
12445		case "etag":
12446			if v != nil {
12447				var etag string
12448				err = json.Unmarshal(*v, &etag)
12449				if err != nil {
12450					return err
12451				}
12452				ercc.Etag = &etag
12453			}
12454		case "id":
12455			if v != nil {
12456				var ID string
12457				err = json.Unmarshal(*v, &ID)
12458				if err != nil {
12459					return err
12460				}
12461				ercc.ID = &ID
12462			}
12463		case "name":
12464			if v != nil {
12465				var name string
12466				err = json.Unmarshal(*v, &name)
12467				if err != nil {
12468					return err
12469				}
12470				ercc.Name = &name
12471			}
12472		case "type":
12473			if v != nil {
12474				var typeVar string
12475				err = json.Unmarshal(*v, &typeVar)
12476				if err != nil {
12477					return err
12478				}
12479				ercc.Type = &typeVar
12480			}
12481		case "location":
12482			if v != nil {
12483				var location string
12484				err = json.Unmarshal(*v, &location)
12485				if err != nil {
12486					return err
12487				}
12488				ercc.Location = &location
12489			}
12490		case "tags":
12491			if v != nil {
12492				var tags map[string]*string
12493				err = json.Unmarshal(*v, &tags)
12494				if err != nil {
12495					return err
12496				}
12497				ercc.Tags = tags
12498			}
12499		}
12500	}
12501
12502	return nil
12503}
12504
12505// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
12506type ExpressRouteCrossConnectionListResult struct {
12507	autorest.Response `json:"-"`
12508	// Value - A list of ExpressRouteCrossConnection resources.
12509	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
12510	// NextLink - READ-ONLY; The URL to get the next set of results.
12511	NextLink *string `json:"nextLink,omitempty"`
12512}
12513
12514// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
12515// ExpressRouteCrossConnection values.
12516type ExpressRouteCrossConnectionListResultIterator struct {
12517	i    int
12518	page ExpressRouteCrossConnectionListResultPage
12519}
12520
12521// NextWithContext advances to the next value.  If there was an error making
12522// the request the iterator does not advance and the error is returned.
12523func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
12524	if tracing.IsEnabled() {
12525		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
12526		defer func() {
12527			sc := -1
12528			if iter.Response().Response.Response != nil {
12529				sc = iter.Response().Response.Response.StatusCode
12530			}
12531			tracing.EndSpan(ctx, sc, err)
12532		}()
12533	}
12534	iter.i++
12535	if iter.i < len(iter.page.Values()) {
12536		return nil
12537	}
12538	err = iter.page.NextWithContext(ctx)
12539	if err != nil {
12540		iter.i--
12541		return err
12542	}
12543	iter.i = 0
12544	return nil
12545}
12546
12547// Next advances to the next value.  If there was an error making
12548// the request the iterator does not advance and the error is returned.
12549// Deprecated: Use NextWithContext() instead.
12550func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
12551	return iter.NextWithContext(context.Background())
12552}
12553
12554// NotDone returns true if the enumeration should be started or is not yet complete.
12555func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
12556	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12557}
12558
12559// Response returns the raw server response from the last page request.
12560func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
12561	return iter.page.Response()
12562}
12563
12564// Value returns the current value or a zero-initialized value if the
12565// iterator has advanced beyond the end of the collection.
12566func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
12567	if !iter.page.NotDone() {
12568		return ExpressRouteCrossConnection{}
12569	}
12570	return iter.page.Values()[iter.i]
12571}
12572
12573// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
12574func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
12575	return ExpressRouteCrossConnectionListResultIterator{page: page}
12576}
12577
12578// IsEmpty returns true if the ListResult contains no values.
12579func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
12580	return ercclr.Value == nil || len(*ercclr.Value) == 0
12581}
12582
12583// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
12584// It returns nil if no more results exist.
12585func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
12586	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
12587		return nil, nil
12588	}
12589	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12590		autorest.AsJSON(),
12591		autorest.AsGet(),
12592		autorest.WithBaseURL(to.String(ercclr.NextLink)))
12593}
12594
12595// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
12596type ExpressRouteCrossConnectionListResultPage struct {
12597	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
12598	ercclr ExpressRouteCrossConnectionListResult
12599}
12600
12601// NextWithContext advances to the next page of values.  If there was an error making
12602// the request the page does not advance and the error is returned.
12603func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
12604	if tracing.IsEnabled() {
12605		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
12606		defer func() {
12607			sc := -1
12608			if page.Response().Response.Response != nil {
12609				sc = page.Response().Response.Response.StatusCode
12610			}
12611			tracing.EndSpan(ctx, sc, err)
12612		}()
12613	}
12614	next, err := page.fn(ctx, page.ercclr)
12615	if err != nil {
12616		return err
12617	}
12618	page.ercclr = next
12619	return nil
12620}
12621
12622// Next advances to the next page of values.  If there was an error making
12623// the request the page does not advance and the error is returned.
12624// Deprecated: Use NextWithContext() instead.
12625func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
12626	return page.NextWithContext(context.Background())
12627}
12628
12629// NotDone returns true if the page enumeration should be started or is not yet complete.
12630func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
12631	return !page.ercclr.IsEmpty()
12632}
12633
12634// Response returns the raw server response from the last page request.
12635func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
12636	return page.ercclr
12637}
12638
12639// Values returns the slice of values for the current page or nil if there are no values.
12640func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
12641	if page.ercclr.IsEmpty() {
12642		return nil
12643	}
12644	return *page.ercclr.Value
12645}
12646
12647// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
12648func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
12649	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
12650}
12651
12652// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
12653type ExpressRouteCrossConnectionPeering struct {
12654	autorest.Response `json:"-"`
12655	// ExpressRouteCrossConnectionPeeringProperties - Properties of the express route cross connection peering.
12656	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
12657	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12658	Name *string `json:"name,omitempty"`
12659	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12660	Etag *string `json:"etag,omitempty"`
12661	// ID - Resource ID.
12662	ID *string `json:"id,omitempty"`
12663}
12664
12665// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
12666func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
12667	objectMap := make(map[string]interface{})
12668	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
12669		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
12670	}
12671	if erccp.Name != nil {
12672		objectMap["name"] = erccp.Name
12673	}
12674	if erccp.ID != nil {
12675		objectMap["id"] = erccp.ID
12676	}
12677	return json.Marshal(objectMap)
12678}
12679
12680// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
12681func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
12682	var m map[string]*json.RawMessage
12683	err := json.Unmarshal(body, &m)
12684	if err != nil {
12685		return err
12686	}
12687	for k, v := range m {
12688		switch k {
12689		case "properties":
12690			if v != nil {
12691				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
12692				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
12693				if err != nil {
12694					return err
12695				}
12696				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
12697			}
12698		case "name":
12699			if v != nil {
12700				var name string
12701				err = json.Unmarshal(*v, &name)
12702				if err != nil {
12703					return err
12704				}
12705				erccp.Name = &name
12706			}
12707		case "etag":
12708			if v != nil {
12709				var etag string
12710				err = json.Unmarshal(*v, &etag)
12711				if err != nil {
12712					return err
12713				}
12714				erccp.Etag = &etag
12715			}
12716		case "id":
12717			if v != nil {
12718				var ID string
12719				err = json.Unmarshal(*v, &ID)
12720				if err != nil {
12721					return err
12722				}
12723				erccp.ID = &ID
12724			}
12725		}
12726	}
12727
12728	return nil
12729}
12730
12731// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
12732// that belong to an ExpressRouteCrossConnection.
12733type ExpressRouteCrossConnectionPeeringList struct {
12734	autorest.Response `json:"-"`
12735	// Value - The peerings in an express route cross connection.
12736	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
12737	// NextLink - READ-ONLY; The URL to get the next set of results.
12738	NextLink *string `json:"nextLink,omitempty"`
12739}
12740
12741// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
12742// ExpressRouteCrossConnectionPeering values.
12743type ExpressRouteCrossConnectionPeeringListIterator struct {
12744	i    int
12745	page ExpressRouteCrossConnectionPeeringListPage
12746}
12747
12748// NextWithContext advances to the next value.  If there was an error making
12749// the request the iterator does not advance and the error is returned.
12750func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
12751	if tracing.IsEnabled() {
12752		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
12753		defer func() {
12754			sc := -1
12755			if iter.Response().Response.Response != nil {
12756				sc = iter.Response().Response.Response.StatusCode
12757			}
12758			tracing.EndSpan(ctx, sc, err)
12759		}()
12760	}
12761	iter.i++
12762	if iter.i < len(iter.page.Values()) {
12763		return nil
12764	}
12765	err = iter.page.NextWithContext(ctx)
12766	if err != nil {
12767		iter.i--
12768		return err
12769	}
12770	iter.i = 0
12771	return nil
12772}
12773
12774// Next advances to the next value.  If there was an error making
12775// the request the iterator does not advance and the error is returned.
12776// Deprecated: Use NextWithContext() instead.
12777func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
12778	return iter.NextWithContext(context.Background())
12779}
12780
12781// NotDone returns true if the enumeration should be started or is not yet complete.
12782func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
12783	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12784}
12785
12786// Response returns the raw server response from the last page request.
12787func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
12788	return iter.page.Response()
12789}
12790
12791// Value returns the current value or a zero-initialized value if the
12792// iterator has advanced beyond the end of the collection.
12793func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
12794	if !iter.page.NotDone() {
12795		return ExpressRouteCrossConnectionPeering{}
12796	}
12797	return iter.page.Values()[iter.i]
12798}
12799
12800// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
12801func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
12802	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
12803}
12804
12805// IsEmpty returns true if the ListResult contains no values.
12806func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
12807	return erccpl.Value == nil || len(*erccpl.Value) == 0
12808}
12809
12810// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
12811// It returns nil if no more results exist.
12812func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
12813	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
12814		return nil, nil
12815	}
12816	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12817		autorest.AsJSON(),
12818		autorest.AsGet(),
12819		autorest.WithBaseURL(to.String(erccpl.NextLink)))
12820}
12821
12822// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
12823type ExpressRouteCrossConnectionPeeringListPage struct {
12824	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
12825	erccpl ExpressRouteCrossConnectionPeeringList
12826}
12827
12828// NextWithContext advances to the next page of values.  If there was an error making
12829// the request the page does not advance and the error is returned.
12830func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
12831	if tracing.IsEnabled() {
12832		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
12833		defer func() {
12834			sc := -1
12835			if page.Response().Response.Response != nil {
12836				sc = page.Response().Response.Response.StatusCode
12837			}
12838			tracing.EndSpan(ctx, sc, err)
12839		}()
12840	}
12841	next, err := page.fn(ctx, page.erccpl)
12842	if err != nil {
12843		return err
12844	}
12845	page.erccpl = next
12846	return nil
12847}
12848
12849// Next advances to the next page of values.  If there was an error making
12850// the request the page does not advance and the error is returned.
12851// Deprecated: Use NextWithContext() instead.
12852func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
12853	return page.NextWithContext(context.Background())
12854}
12855
12856// NotDone returns true if the page enumeration should be started or is not yet complete.
12857func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
12858	return !page.erccpl.IsEmpty()
12859}
12860
12861// Response returns the raw server response from the last page request.
12862func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
12863	return page.erccpl
12864}
12865
12866// Values returns the slice of values for the current page or nil if there are no values.
12867func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
12868	if page.erccpl.IsEmpty() {
12869		return nil
12870	}
12871	return *page.erccpl.Value
12872}
12873
12874// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
12875func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
12876	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
12877}
12878
12879// ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering.
12880type ExpressRouteCrossConnectionPeeringProperties struct {
12881	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
12882	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
12883	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
12884	State ExpressRoutePeeringState `json:"state,omitempty"`
12885	// AzureASN - READ-ONLY; The Azure ASN.
12886	AzureASN *int32 `json:"azureASN,omitempty"`
12887	// PeerASN - The peer ASN.
12888	PeerASN *int64 `json:"peerASN,omitempty"`
12889	// PrimaryPeerAddressPrefix - The primary address prefix.
12890	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
12891	// SecondaryPeerAddressPrefix - The secondary address prefix.
12892	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
12893	// PrimaryAzurePort - READ-ONLY; The primary port.
12894	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
12895	// SecondaryAzurePort - READ-ONLY; The secondary port.
12896	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
12897	// SharedKey - The shared key.
12898	SharedKey *string `json:"sharedKey,omitempty"`
12899	// VlanID - The VLAN ID.
12900	VlanID *int32 `json:"vlanId,omitempty"`
12901	// MicrosoftPeeringConfig - The Microsoft peering configuration.
12902	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
12903	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12904	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12905	// GatewayManagerEtag - The GatewayManager Etag.
12906	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
12907	// LastModifiedBy - READ-ONLY; Who was the last to modify the peering.
12908	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
12909	// Ipv6PeeringConfig - The IPv6 peering configuration.
12910	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
12911}
12912
12913// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
12914// results of a long-running operation.
12915type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
12916	azure.Future
12917}
12918
12919// Result returns the result of the asynchronous operation.
12920// If the operation has not completed it will return an error.
12921func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
12922	var done bool
12923	done, err = future.DoneWithContext(context.Background(), client)
12924	if err != nil {
12925		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12926		return
12927	}
12928	if !done {
12929		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
12930		return
12931	}
12932	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12933	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
12934		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
12935		if err != nil {
12936			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
12937		}
12938	}
12939	return
12940}
12941
12942// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
12943// of a long-running operation.
12944type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
12945	azure.Future
12946}
12947
12948// Result returns the result of the asynchronous operation.
12949// If the operation has not completed it will return an error.
12950func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
12951	var done bool
12952	done, err = future.DoneWithContext(context.Background(), client)
12953	if err != nil {
12954		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
12955		return
12956	}
12957	if !done {
12958		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
12959		return
12960	}
12961	ar.Response = future.Response()
12962	return
12963}
12964
12965// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
12966type ExpressRouteCrossConnectionProperties struct {
12967	// PrimaryAzurePort - READ-ONLY; The name of the primary port.
12968	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
12969	// SecondaryAzurePort - READ-ONLY; The name of the secondary port.
12970	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
12971	// STag - READ-ONLY; The identifier of the circuit traffic.
12972	STag *int32 `json:"sTag,omitempty"`
12973	// PeeringLocation - The peering location of the ExpressRoute circuit.
12974	PeeringLocation *string `json:"peeringLocation,omitempty"`
12975	// BandwidthInMbps - The circuit bandwidth In Mbps.
12976	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
12977	// ExpressRouteCircuit - The ExpressRouteCircuit.
12978	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
12979	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
12980	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
12981	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
12982	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
12983	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12984	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12985	// Peerings - The list of peerings.
12986	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
12987}
12988
12989// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
12990type ExpressRouteCrossConnectionRoutesTableSummary struct {
12991	// Neighbor - IP address of Neighbor router.
12992	Neighbor *string `json:"neighbor,omitempty"`
12993	// Asn - Autonomous system number.
12994	Asn *int32 `json:"asn,omitempty"`
12995	// 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.
12996	UpDown *string `json:"upDown,omitempty"`
12997	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
12998	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
12999}
13000
13001// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
13002// results of a long-running operation.
13003type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
13004	azure.Future
13005}
13006
13007// Result returns the result of the asynchronous operation.
13008// If the operation has not completed it will return an error.
13009func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
13010	var done bool
13011	done, err = future.DoneWithContext(context.Background(), client)
13012	if err != nil {
13013		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13014		return
13015	}
13016	if !done {
13017		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
13018		return
13019	}
13020	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13021	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
13022		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
13023		if err != nil {
13024			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
13025		}
13026	}
13027	return
13028}
13029
13030// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
13031// of a long-running operation.
13032type ExpressRouteCrossConnectionsListArpTableFuture struct {
13033	azure.Future
13034}
13035
13036// Result returns the result of the asynchronous operation.
13037// If the operation has not completed it will return an error.
13038func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
13039	var done bool
13040	done, err = future.DoneWithContext(context.Background(), client)
13041	if err != nil {
13042		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
13043		return
13044	}
13045	if !done {
13046		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
13047		return
13048	}
13049	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13050	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
13051		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
13052		if err != nil {
13053			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
13054		}
13055	}
13056	return
13057}
13058
13059// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
13060// results of a long-running operation.
13061type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
13062	azure.Future
13063}
13064
13065// Result returns the result of the asynchronous operation.
13066// If the operation has not completed it will return an error.
13067func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
13068	var done bool
13069	done, err = future.DoneWithContext(context.Background(), client)
13070	if err != nil {
13071		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
13072		return
13073	}
13074	if !done {
13075		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
13076		return
13077	}
13078	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13079	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
13080		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
13081		if err != nil {
13082			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
13083		}
13084	}
13085	return
13086}
13087
13088// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
13089// the results of a long-running operation.
13090type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
13091	azure.Future
13092}
13093
13094// Result returns the result of the asynchronous operation.
13095// If the operation has not completed it will return an error.
13096func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
13097	var done bool
13098	done, err = future.DoneWithContext(context.Background(), client)
13099	if err != nil {
13100		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
13101		return
13102	}
13103	if !done {
13104		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
13105		return
13106	}
13107	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13108	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
13109		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
13110		if err != nil {
13111			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
13112		}
13113	}
13114	return
13115}
13116
13117// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
13118// the Express Route Cross Connections.
13119type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
13120	autorest.Response `json:"-"`
13121	// Value - A list of the routes table.
13122	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
13123	// NextLink - READ-ONLY; The URL to get the next set of results.
13124	NextLink *string `json:"nextLink,omitempty"`
13125}
13126
13127// ExpressRouteGateway expressRoute gateway resource.
13128type ExpressRouteGateway struct {
13129	autorest.Response `json:"-"`
13130	// ExpressRouteGatewayProperties - Properties of the express route gateway.
13131	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
13132	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13133	Etag *string `json:"etag,omitempty"`
13134	// ID - Resource ID.
13135	ID *string `json:"id,omitempty"`
13136	// Name - READ-ONLY; Resource name.
13137	Name *string `json:"name,omitempty"`
13138	// Type - READ-ONLY; Resource type.
13139	Type *string `json:"type,omitempty"`
13140	// Location - Resource location.
13141	Location *string `json:"location,omitempty"`
13142	// Tags - Resource tags.
13143	Tags map[string]*string `json:"tags"`
13144}
13145
13146// MarshalJSON is the custom marshaler for ExpressRouteGateway.
13147func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
13148	objectMap := make(map[string]interface{})
13149	if erg.ExpressRouteGatewayProperties != nil {
13150		objectMap["properties"] = erg.ExpressRouteGatewayProperties
13151	}
13152	if erg.ID != nil {
13153		objectMap["id"] = erg.ID
13154	}
13155	if erg.Location != nil {
13156		objectMap["location"] = erg.Location
13157	}
13158	if erg.Tags != nil {
13159		objectMap["tags"] = erg.Tags
13160	}
13161	return json.Marshal(objectMap)
13162}
13163
13164// UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
13165func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
13166	var m map[string]*json.RawMessage
13167	err := json.Unmarshal(body, &m)
13168	if err != nil {
13169		return err
13170	}
13171	for k, v := range m {
13172		switch k {
13173		case "properties":
13174			if v != nil {
13175				var expressRouteGatewayProperties ExpressRouteGatewayProperties
13176				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
13177				if err != nil {
13178					return err
13179				}
13180				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
13181			}
13182		case "etag":
13183			if v != nil {
13184				var etag string
13185				err = json.Unmarshal(*v, &etag)
13186				if err != nil {
13187					return err
13188				}
13189				erg.Etag = &etag
13190			}
13191		case "id":
13192			if v != nil {
13193				var ID string
13194				err = json.Unmarshal(*v, &ID)
13195				if err != nil {
13196					return err
13197				}
13198				erg.ID = &ID
13199			}
13200		case "name":
13201			if v != nil {
13202				var name string
13203				err = json.Unmarshal(*v, &name)
13204				if err != nil {
13205					return err
13206				}
13207				erg.Name = &name
13208			}
13209		case "type":
13210			if v != nil {
13211				var typeVar string
13212				err = json.Unmarshal(*v, &typeVar)
13213				if err != nil {
13214					return err
13215				}
13216				erg.Type = &typeVar
13217			}
13218		case "location":
13219			if v != nil {
13220				var location string
13221				err = json.Unmarshal(*v, &location)
13222				if err != nil {
13223					return err
13224				}
13225				erg.Location = &location
13226			}
13227		case "tags":
13228			if v != nil {
13229				var tags map[string]*string
13230				err = json.Unmarshal(*v, &tags)
13231				if err != nil {
13232					return err
13233				}
13234				erg.Tags = tags
13235			}
13236		}
13237	}
13238
13239	return nil
13240}
13241
13242// ExpressRouteGatewayList list of ExpressRoute gateways.
13243type ExpressRouteGatewayList struct {
13244	autorest.Response `json:"-"`
13245	// Value - List of ExpressRoute gateways.
13246	Value *[]ExpressRouteGateway `json:"value,omitempty"`
13247}
13248
13249// ExpressRouteGatewayProperties expressRoute gateway resource properties.
13250type ExpressRouteGatewayProperties struct {
13251	// AutoScaleConfiguration - Configuration for auto scaling.
13252	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
13253	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
13254	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
13255	// ProvisioningState - READ-ONLY; The provisioning state of the express route gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13256	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13257	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
13258	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
13259}
13260
13261// ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
13262type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
13263	// Bounds - Minimum and maximum number of scale units to deploy.
13264	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
13265}
13266
13267// ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
13268// deploy.
13269type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
13270	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
13271	Min *int32 `json:"min,omitempty"`
13272	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
13273	Max *int32 `json:"max,omitempty"`
13274}
13275
13276// ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13277// long-running operation.
13278type ExpressRouteGatewaysCreateOrUpdateFuture struct {
13279	azure.Future
13280}
13281
13282// Result returns the result of the asynchronous operation.
13283// If the operation has not completed it will return an error.
13284func (future *ExpressRouteGatewaysCreateOrUpdateFuture) Result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
13285	var done bool
13286	done, err = future.DoneWithContext(context.Background(), client)
13287	if err != nil {
13288		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13289		return
13290	}
13291	if !done {
13292		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
13293		return
13294	}
13295	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13296	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
13297		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
13298		if err != nil {
13299			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
13300		}
13301	}
13302	return
13303}
13304
13305// ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
13306// long-running operation.
13307type ExpressRouteGatewaysDeleteFuture struct {
13308	azure.Future
13309}
13310
13311// Result returns the result of the asynchronous operation.
13312// If the operation has not completed it will return an error.
13313func (future *ExpressRouteGatewaysDeleteFuture) Result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
13314	var done bool
13315	done, err = future.DoneWithContext(context.Background(), client)
13316	if err != nil {
13317		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
13318		return
13319	}
13320	if !done {
13321		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
13322		return
13323	}
13324	ar.Response = future.Response()
13325	return
13326}
13327
13328// ExpressRouteLink expressRouteLink child resource definition.
13329type ExpressRouteLink struct {
13330	autorest.Response `json:"-"`
13331	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties.
13332	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
13333	// Name - Name of child port resource that is unique among child port resources of the parent.
13334	Name *string `json:"name,omitempty"`
13335	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13336	Etag *string `json:"etag,omitempty"`
13337	// ID - Resource ID.
13338	ID *string `json:"id,omitempty"`
13339}
13340
13341// MarshalJSON is the custom marshaler for ExpressRouteLink.
13342func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
13343	objectMap := make(map[string]interface{})
13344	if erl.ExpressRouteLinkPropertiesFormat != nil {
13345		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
13346	}
13347	if erl.Name != nil {
13348		objectMap["name"] = erl.Name
13349	}
13350	if erl.ID != nil {
13351		objectMap["id"] = erl.ID
13352	}
13353	return json.Marshal(objectMap)
13354}
13355
13356// UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
13357func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
13358	var m map[string]*json.RawMessage
13359	err := json.Unmarshal(body, &m)
13360	if err != nil {
13361		return err
13362	}
13363	for k, v := range m {
13364		switch k {
13365		case "properties":
13366			if v != nil {
13367				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
13368				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
13369				if err != nil {
13370					return err
13371				}
13372				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
13373			}
13374		case "name":
13375			if v != nil {
13376				var name string
13377				err = json.Unmarshal(*v, &name)
13378				if err != nil {
13379					return err
13380				}
13381				erl.Name = &name
13382			}
13383		case "etag":
13384			if v != nil {
13385				var etag string
13386				err = json.Unmarshal(*v, &etag)
13387				if err != nil {
13388					return err
13389				}
13390				erl.Etag = &etag
13391			}
13392		case "id":
13393			if v != nil {
13394				var ID string
13395				err = json.Unmarshal(*v, &ID)
13396				if err != nil {
13397					return err
13398				}
13399				erl.ID = &ID
13400			}
13401		}
13402	}
13403
13404	return nil
13405}
13406
13407// ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
13408type ExpressRouteLinkListResult struct {
13409	autorest.Response `json:"-"`
13410	// Value - The list of ExpressRouteLink sub-resources.
13411	Value *[]ExpressRouteLink `json:"value,omitempty"`
13412	// NextLink - The URL to get the next set of results.
13413	NextLink *string `json:"nextLink,omitempty"`
13414}
13415
13416// ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
13417type ExpressRouteLinkListResultIterator struct {
13418	i    int
13419	page ExpressRouteLinkListResultPage
13420}
13421
13422// NextWithContext advances to the next value.  If there was an error making
13423// the request the iterator does not advance and the error is returned.
13424func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
13425	if tracing.IsEnabled() {
13426		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
13427		defer func() {
13428			sc := -1
13429			if iter.Response().Response.Response != nil {
13430				sc = iter.Response().Response.Response.StatusCode
13431			}
13432			tracing.EndSpan(ctx, sc, err)
13433		}()
13434	}
13435	iter.i++
13436	if iter.i < len(iter.page.Values()) {
13437		return nil
13438	}
13439	err = iter.page.NextWithContext(ctx)
13440	if err != nil {
13441		iter.i--
13442		return err
13443	}
13444	iter.i = 0
13445	return nil
13446}
13447
13448// Next advances to the next value.  If there was an error making
13449// the request the iterator does not advance and the error is returned.
13450// Deprecated: Use NextWithContext() instead.
13451func (iter *ExpressRouteLinkListResultIterator) Next() error {
13452	return iter.NextWithContext(context.Background())
13453}
13454
13455// NotDone returns true if the enumeration should be started or is not yet complete.
13456func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
13457	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13458}
13459
13460// Response returns the raw server response from the last page request.
13461func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
13462	return iter.page.Response()
13463}
13464
13465// Value returns the current value or a zero-initialized value if the
13466// iterator has advanced beyond the end of the collection.
13467func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
13468	if !iter.page.NotDone() {
13469		return ExpressRouteLink{}
13470	}
13471	return iter.page.Values()[iter.i]
13472}
13473
13474// Creates a new instance of the ExpressRouteLinkListResultIterator type.
13475func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
13476	return ExpressRouteLinkListResultIterator{page: page}
13477}
13478
13479// IsEmpty returns true if the ListResult contains no values.
13480func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
13481	return erllr.Value == nil || len(*erllr.Value) == 0
13482}
13483
13484// expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
13485// It returns nil if no more results exist.
13486func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
13487	if erllr.NextLink == nil || len(to.String(erllr.NextLink)) < 1 {
13488		return nil, nil
13489	}
13490	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13491		autorest.AsJSON(),
13492		autorest.AsGet(),
13493		autorest.WithBaseURL(to.String(erllr.NextLink)))
13494}
13495
13496// ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
13497type ExpressRouteLinkListResultPage struct {
13498	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
13499	erllr ExpressRouteLinkListResult
13500}
13501
13502// NextWithContext advances to the next page of values.  If there was an error making
13503// the request the page does not advance and the error is returned.
13504func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
13505	if tracing.IsEnabled() {
13506		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
13507		defer func() {
13508			sc := -1
13509			if page.Response().Response.Response != nil {
13510				sc = page.Response().Response.Response.StatusCode
13511			}
13512			tracing.EndSpan(ctx, sc, err)
13513		}()
13514	}
13515	next, err := page.fn(ctx, page.erllr)
13516	if err != nil {
13517		return err
13518	}
13519	page.erllr = next
13520	return nil
13521}
13522
13523// Next advances to the next page of values.  If there was an error making
13524// the request the page does not advance and the error is returned.
13525// Deprecated: Use NextWithContext() instead.
13526func (page *ExpressRouteLinkListResultPage) Next() error {
13527	return page.NextWithContext(context.Background())
13528}
13529
13530// NotDone returns true if the page enumeration should be started or is not yet complete.
13531func (page ExpressRouteLinkListResultPage) NotDone() bool {
13532	return !page.erllr.IsEmpty()
13533}
13534
13535// Response returns the raw server response from the last page request.
13536func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
13537	return page.erllr
13538}
13539
13540// Values returns the slice of values for the current page or nil if there are no values.
13541func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
13542	if page.erllr.IsEmpty() {
13543		return nil
13544	}
13545	return *page.erllr.Value
13546}
13547
13548// Creates a new instance of the ExpressRouteLinkListResultPage type.
13549func NewExpressRouteLinkListResultPage(getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
13550	return ExpressRouteLinkListResultPage{fn: getNextPage}
13551}
13552
13553// ExpressRouteLinkMacSecConfig expressRouteLink Mac Security Configuration.
13554type ExpressRouteLinkMacSecConfig struct {
13555	// CknSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CKN key.
13556	CknSecretIdentifier *string `json:"cknSecretIdentifier,omitempty"`
13557	// CakSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CAK key.
13558	CakSecretIdentifier *string `json:"cakSecretIdentifier,omitempty"`
13559	// Cipher - Mac security cipher. Possible values include: 'GcmAes128', 'GcmAes256'
13560	Cipher ExpressRouteLinkMacSecCipher `json:"cipher,omitempty"`
13561}
13562
13563// ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
13564type ExpressRouteLinkPropertiesFormat struct {
13565	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
13566	RouterName *string `json:"routerName,omitempty"`
13567	// InterfaceName - READ-ONLY; Name of Azure router interface.
13568	InterfaceName *string `json:"interfaceName,omitempty"`
13569	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
13570	PatchPanelID *string `json:"patchPanelId,omitempty"`
13571	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
13572	RackID *string `json:"rackId,omitempty"`
13573	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
13574	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
13575	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
13576	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
13577	// ProvisioningState - READ-ONLY; The provisioning state of the express route link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13578	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13579	// MacSecConfig - MacSec configuration.
13580	MacSecConfig *ExpressRouteLinkMacSecConfig `json:"macSecConfig,omitempty"`
13581}
13582
13583// ExpressRoutePort expressRoutePort resource definition.
13584type ExpressRoutePort struct {
13585	autorest.Response `json:"-"`
13586	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties.
13587	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
13588	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13589	Etag *string `json:"etag,omitempty"`
13590	// Identity - The identity of ExpressRoutePort, if configured.
13591	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
13592	// ID - Resource ID.
13593	ID *string `json:"id,omitempty"`
13594	// Name - READ-ONLY; Resource name.
13595	Name *string `json:"name,omitempty"`
13596	// Type - READ-ONLY; Resource type.
13597	Type *string `json:"type,omitempty"`
13598	// Location - Resource location.
13599	Location *string `json:"location,omitempty"`
13600	// Tags - Resource tags.
13601	Tags map[string]*string `json:"tags"`
13602}
13603
13604// MarshalJSON is the custom marshaler for ExpressRoutePort.
13605func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
13606	objectMap := make(map[string]interface{})
13607	if erp.ExpressRoutePortPropertiesFormat != nil {
13608		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
13609	}
13610	if erp.Identity != nil {
13611		objectMap["identity"] = erp.Identity
13612	}
13613	if erp.ID != nil {
13614		objectMap["id"] = erp.ID
13615	}
13616	if erp.Location != nil {
13617		objectMap["location"] = erp.Location
13618	}
13619	if erp.Tags != nil {
13620		objectMap["tags"] = erp.Tags
13621	}
13622	return json.Marshal(objectMap)
13623}
13624
13625// UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
13626func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
13627	var m map[string]*json.RawMessage
13628	err := json.Unmarshal(body, &m)
13629	if err != nil {
13630		return err
13631	}
13632	for k, v := range m {
13633		switch k {
13634		case "properties":
13635			if v != nil {
13636				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
13637				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
13638				if err != nil {
13639					return err
13640				}
13641				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
13642			}
13643		case "etag":
13644			if v != nil {
13645				var etag string
13646				err = json.Unmarshal(*v, &etag)
13647				if err != nil {
13648					return err
13649				}
13650				erp.Etag = &etag
13651			}
13652		case "identity":
13653			if v != nil {
13654				var identity ManagedServiceIdentity
13655				err = json.Unmarshal(*v, &identity)
13656				if err != nil {
13657					return err
13658				}
13659				erp.Identity = &identity
13660			}
13661		case "id":
13662			if v != nil {
13663				var ID string
13664				err = json.Unmarshal(*v, &ID)
13665				if err != nil {
13666					return err
13667				}
13668				erp.ID = &ID
13669			}
13670		case "name":
13671			if v != nil {
13672				var name string
13673				err = json.Unmarshal(*v, &name)
13674				if err != nil {
13675					return err
13676				}
13677				erp.Name = &name
13678			}
13679		case "type":
13680			if v != nil {
13681				var typeVar string
13682				err = json.Unmarshal(*v, &typeVar)
13683				if err != nil {
13684					return err
13685				}
13686				erp.Type = &typeVar
13687			}
13688		case "location":
13689			if v != nil {
13690				var location string
13691				err = json.Unmarshal(*v, &location)
13692				if err != nil {
13693					return err
13694				}
13695				erp.Location = &location
13696			}
13697		case "tags":
13698			if v != nil {
13699				var tags map[string]*string
13700				err = json.Unmarshal(*v, &tags)
13701				if err != nil {
13702					return err
13703				}
13704				erp.Tags = tags
13705			}
13706		}
13707	}
13708
13709	return nil
13710}
13711
13712// ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
13713type ExpressRoutePortListResult struct {
13714	autorest.Response `json:"-"`
13715	// Value - A list of ExpressRoutePort resources.
13716	Value *[]ExpressRoutePort `json:"value,omitempty"`
13717	// NextLink - The URL to get the next set of results.
13718	NextLink *string `json:"nextLink,omitempty"`
13719}
13720
13721// ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
13722type ExpressRoutePortListResultIterator struct {
13723	i    int
13724	page ExpressRoutePortListResultPage
13725}
13726
13727// NextWithContext advances to the next value.  If there was an error making
13728// the request the iterator does not advance and the error is returned.
13729func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
13730	if tracing.IsEnabled() {
13731		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
13732		defer func() {
13733			sc := -1
13734			if iter.Response().Response.Response != nil {
13735				sc = iter.Response().Response.Response.StatusCode
13736			}
13737			tracing.EndSpan(ctx, sc, err)
13738		}()
13739	}
13740	iter.i++
13741	if iter.i < len(iter.page.Values()) {
13742		return nil
13743	}
13744	err = iter.page.NextWithContext(ctx)
13745	if err != nil {
13746		iter.i--
13747		return err
13748	}
13749	iter.i = 0
13750	return nil
13751}
13752
13753// Next advances to the next value.  If there was an error making
13754// the request the iterator does not advance and the error is returned.
13755// Deprecated: Use NextWithContext() instead.
13756func (iter *ExpressRoutePortListResultIterator) Next() error {
13757	return iter.NextWithContext(context.Background())
13758}
13759
13760// NotDone returns true if the enumeration should be started or is not yet complete.
13761func (iter ExpressRoutePortListResultIterator) NotDone() bool {
13762	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13763}
13764
13765// Response returns the raw server response from the last page request.
13766func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
13767	return iter.page.Response()
13768}
13769
13770// Value returns the current value or a zero-initialized value if the
13771// iterator has advanced beyond the end of the collection.
13772func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
13773	if !iter.page.NotDone() {
13774		return ExpressRoutePort{}
13775	}
13776	return iter.page.Values()[iter.i]
13777}
13778
13779// Creates a new instance of the ExpressRoutePortListResultIterator type.
13780func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
13781	return ExpressRoutePortListResultIterator{page: page}
13782}
13783
13784// IsEmpty returns true if the ListResult contains no values.
13785func (erplr ExpressRoutePortListResult) IsEmpty() bool {
13786	return erplr.Value == nil || len(*erplr.Value) == 0
13787}
13788
13789// expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
13790// It returns nil if no more results exist.
13791func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
13792	if erplr.NextLink == nil || len(to.String(erplr.NextLink)) < 1 {
13793		return nil, nil
13794	}
13795	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13796		autorest.AsJSON(),
13797		autorest.AsGet(),
13798		autorest.WithBaseURL(to.String(erplr.NextLink)))
13799}
13800
13801// ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
13802type ExpressRoutePortListResultPage struct {
13803	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
13804	erplr ExpressRoutePortListResult
13805}
13806
13807// NextWithContext advances to the next page of values.  If there was an error making
13808// the request the page does not advance and the error is returned.
13809func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
13810	if tracing.IsEnabled() {
13811		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
13812		defer func() {
13813			sc := -1
13814			if page.Response().Response.Response != nil {
13815				sc = page.Response().Response.Response.StatusCode
13816			}
13817			tracing.EndSpan(ctx, sc, err)
13818		}()
13819	}
13820	next, err := page.fn(ctx, page.erplr)
13821	if err != nil {
13822		return err
13823	}
13824	page.erplr = next
13825	return nil
13826}
13827
13828// Next advances to the next page of values.  If there was an error making
13829// the request the page does not advance and the error is returned.
13830// Deprecated: Use NextWithContext() instead.
13831func (page *ExpressRoutePortListResultPage) Next() error {
13832	return page.NextWithContext(context.Background())
13833}
13834
13835// NotDone returns true if the page enumeration should be started or is not yet complete.
13836func (page ExpressRoutePortListResultPage) NotDone() bool {
13837	return !page.erplr.IsEmpty()
13838}
13839
13840// Response returns the raw server response from the last page request.
13841func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
13842	return page.erplr
13843}
13844
13845// Values returns the slice of values for the current page or nil if there are no values.
13846func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
13847	if page.erplr.IsEmpty() {
13848		return nil
13849	}
13850	return *page.erplr.Value
13851}
13852
13853// Creates a new instance of the ExpressRoutePortListResultPage type.
13854func NewExpressRoutePortListResultPage(getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
13855	return ExpressRoutePortListResultPage{fn: getNextPage}
13856}
13857
13858// ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
13859type ExpressRoutePortPropertiesFormat struct {
13860	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
13861	PeeringLocation *string `json:"peeringLocation,omitempty"`
13862	// BandwidthInGbps - Bandwidth of procured ports in Gbps.
13863	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
13864	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
13865	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
13866	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s).
13867	Mtu *string `json:"mtu,omitempty"`
13868	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
13869	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
13870	// EtherType - READ-ONLY; Ether type of the physical port.
13871	EtherType *string `json:"etherType,omitempty"`
13872	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
13873	AllocationDate *string `json:"allocationDate,omitempty"`
13874	// Links - The set of physical links of the ExpressRoutePort resource.
13875	Links *[]ExpressRouteLink `json:"links,omitempty"`
13876	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
13877	Circuits *[]SubResource `json:"circuits,omitempty"`
13878	// ProvisioningState - READ-ONLY; The provisioning state of the express route port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13879	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13880	// ResourceGUID - READ-ONLY; The resource GUID property of the express route port resource.
13881	ResourceGUID *string `json:"resourceGuid,omitempty"`
13882}
13883
13884// ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13885// long-running operation.
13886type ExpressRoutePortsCreateOrUpdateFuture struct {
13887	azure.Future
13888}
13889
13890// Result returns the result of the asynchronous operation.
13891// If the operation has not completed it will return an error.
13892func (future *ExpressRoutePortsCreateOrUpdateFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
13893	var done bool
13894	done, err = future.DoneWithContext(context.Background(), client)
13895	if err != nil {
13896		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13897		return
13898	}
13899	if !done {
13900		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
13901		return
13902	}
13903	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13904	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
13905		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
13906		if err != nil {
13907			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
13908		}
13909	}
13910	return
13911}
13912
13913// ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13914// operation.
13915type ExpressRoutePortsDeleteFuture struct {
13916	azure.Future
13917}
13918
13919// Result returns the result of the asynchronous operation.
13920// If the operation has not completed it will return an error.
13921func (future *ExpressRoutePortsDeleteFuture) Result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
13922	var done bool
13923	done, err = future.DoneWithContext(context.Background(), client)
13924	if err != nil {
13925		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
13926		return
13927	}
13928	if !done {
13929		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
13930		return
13931	}
13932	ar.Response = future.Response()
13933	return
13934}
13935
13936// ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
13937type ExpressRoutePortsLocation struct {
13938	autorest.Response `json:"-"`
13939	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties.
13940	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
13941	// ID - Resource ID.
13942	ID *string `json:"id,omitempty"`
13943	// Name - READ-ONLY; Resource name.
13944	Name *string `json:"name,omitempty"`
13945	// Type - READ-ONLY; Resource type.
13946	Type *string `json:"type,omitempty"`
13947	// Location - Resource location.
13948	Location *string `json:"location,omitempty"`
13949	// Tags - Resource tags.
13950	Tags map[string]*string `json:"tags"`
13951}
13952
13953// MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
13954func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
13955	objectMap := make(map[string]interface{})
13956	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
13957		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
13958	}
13959	if erpl.ID != nil {
13960		objectMap["id"] = erpl.ID
13961	}
13962	if erpl.Location != nil {
13963		objectMap["location"] = erpl.Location
13964	}
13965	if erpl.Tags != nil {
13966		objectMap["tags"] = erpl.Tags
13967	}
13968	return json.Marshal(objectMap)
13969}
13970
13971// UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
13972func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
13973	var m map[string]*json.RawMessage
13974	err := json.Unmarshal(body, &m)
13975	if err != nil {
13976		return err
13977	}
13978	for k, v := range m {
13979		switch k {
13980		case "properties":
13981			if v != nil {
13982				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
13983				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
13984				if err != nil {
13985					return err
13986				}
13987				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
13988			}
13989		case "id":
13990			if v != nil {
13991				var ID string
13992				err = json.Unmarshal(*v, &ID)
13993				if err != nil {
13994					return err
13995				}
13996				erpl.ID = &ID
13997			}
13998		case "name":
13999			if v != nil {
14000				var name string
14001				err = json.Unmarshal(*v, &name)
14002				if err != nil {
14003					return err
14004				}
14005				erpl.Name = &name
14006			}
14007		case "type":
14008			if v != nil {
14009				var typeVar string
14010				err = json.Unmarshal(*v, &typeVar)
14011				if err != nil {
14012					return err
14013				}
14014				erpl.Type = &typeVar
14015			}
14016		case "location":
14017			if v != nil {
14018				var location string
14019				err = json.Unmarshal(*v, &location)
14020				if err != nil {
14021					return err
14022				}
14023				erpl.Location = &location
14024			}
14025		case "tags":
14026			if v != nil {
14027				var tags map[string]*string
14028				err = json.Unmarshal(*v, &tags)
14029				if err != nil {
14030					return err
14031				}
14032				erpl.Tags = tags
14033			}
14034		}
14035	}
14036
14037	return nil
14038}
14039
14040// ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
14041type ExpressRoutePortsLocationBandwidths struct {
14042	// OfferName - READ-ONLY; Bandwidth descriptive name.
14043	OfferName *string `json:"offerName,omitempty"`
14044	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps.
14045	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
14046}
14047
14048// ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
14049type ExpressRoutePortsLocationListResult struct {
14050	autorest.Response `json:"-"`
14051	// Value - The list of all ExpressRoutePort peering locations.
14052	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
14053	// NextLink - The URL to get the next set of results.
14054	NextLink *string `json:"nextLink,omitempty"`
14055}
14056
14057// ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
14058// ExpressRoutePortsLocation values.
14059type ExpressRoutePortsLocationListResultIterator struct {
14060	i    int
14061	page ExpressRoutePortsLocationListResultPage
14062}
14063
14064// NextWithContext advances to the next value.  If there was an error making
14065// the request the iterator does not advance and the error is returned.
14066func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
14067	if tracing.IsEnabled() {
14068		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
14069		defer func() {
14070			sc := -1
14071			if iter.Response().Response.Response != nil {
14072				sc = iter.Response().Response.Response.StatusCode
14073			}
14074			tracing.EndSpan(ctx, sc, err)
14075		}()
14076	}
14077	iter.i++
14078	if iter.i < len(iter.page.Values()) {
14079		return nil
14080	}
14081	err = iter.page.NextWithContext(ctx)
14082	if err != nil {
14083		iter.i--
14084		return err
14085	}
14086	iter.i = 0
14087	return nil
14088}
14089
14090// Next advances to the next value.  If there was an error making
14091// the request the iterator does not advance and the error is returned.
14092// Deprecated: Use NextWithContext() instead.
14093func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
14094	return iter.NextWithContext(context.Background())
14095}
14096
14097// NotDone returns true if the enumeration should be started or is not yet complete.
14098func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
14099	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14100}
14101
14102// Response returns the raw server response from the last page request.
14103func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
14104	return iter.page.Response()
14105}
14106
14107// Value returns the current value or a zero-initialized value if the
14108// iterator has advanced beyond the end of the collection.
14109func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
14110	if !iter.page.NotDone() {
14111		return ExpressRoutePortsLocation{}
14112	}
14113	return iter.page.Values()[iter.i]
14114}
14115
14116// Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
14117func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
14118	return ExpressRoutePortsLocationListResultIterator{page: page}
14119}
14120
14121// IsEmpty returns true if the ListResult contains no values.
14122func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
14123	return erpllr.Value == nil || len(*erpllr.Value) == 0
14124}
14125
14126// expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
14127// It returns nil if no more results exist.
14128func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
14129	if erpllr.NextLink == nil || len(to.String(erpllr.NextLink)) < 1 {
14130		return nil, nil
14131	}
14132	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14133		autorest.AsJSON(),
14134		autorest.AsGet(),
14135		autorest.WithBaseURL(to.String(erpllr.NextLink)))
14136}
14137
14138// ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
14139type ExpressRoutePortsLocationListResultPage struct {
14140	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
14141	erpllr ExpressRoutePortsLocationListResult
14142}
14143
14144// NextWithContext advances to the next page of values.  If there was an error making
14145// the request the page does not advance and the error is returned.
14146func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
14147	if tracing.IsEnabled() {
14148		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
14149		defer func() {
14150			sc := -1
14151			if page.Response().Response.Response != nil {
14152				sc = page.Response().Response.Response.StatusCode
14153			}
14154			tracing.EndSpan(ctx, sc, err)
14155		}()
14156	}
14157	next, err := page.fn(ctx, page.erpllr)
14158	if err != nil {
14159		return err
14160	}
14161	page.erpllr = next
14162	return nil
14163}
14164
14165// Next advances to the next page of values.  If there was an error making
14166// the request the page does not advance and the error is returned.
14167// Deprecated: Use NextWithContext() instead.
14168func (page *ExpressRoutePortsLocationListResultPage) Next() error {
14169	return page.NextWithContext(context.Background())
14170}
14171
14172// NotDone returns true if the page enumeration should be started or is not yet complete.
14173func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
14174	return !page.erpllr.IsEmpty()
14175}
14176
14177// Response returns the raw server response from the last page request.
14178func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
14179	return page.erpllr
14180}
14181
14182// Values returns the slice of values for the current page or nil if there are no values.
14183func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
14184	if page.erpllr.IsEmpty() {
14185		return nil
14186	}
14187	return *page.erpllr.Value
14188}
14189
14190// Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
14191func NewExpressRoutePortsLocationListResultPage(getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
14192	return ExpressRoutePortsLocationListResultPage{fn: getNextPage}
14193}
14194
14195// ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
14196// resources.
14197type ExpressRoutePortsLocationPropertiesFormat struct {
14198	// Address - READ-ONLY; Address of peering location.
14199	Address *string `json:"address,omitempty"`
14200	// Contact - READ-ONLY; Contact details of peering locations.
14201	Contact *string `json:"contact,omitempty"`
14202	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
14203	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
14204	// ProvisioningState - READ-ONLY; The provisioning state of the express route port location resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14205	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14206}
14207
14208// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
14209type ExpressRouteServiceProvider struct {
14210	// ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider.
14211	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
14212	// ID - Resource ID.
14213	ID *string `json:"id,omitempty"`
14214	// Name - READ-ONLY; Resource name.
14215	Name *string `json:"name,omitempty"`
14216	// Type - READ-ONLY; Resource type.
14217	Type *string `json:"type,omitempty"`
14218	// Location - Resource location.
14219	Location *string `json:"location,omitempty"`
14220	// Tags - Resource tags.
14221	Tags map[string]*string `json:"tags"`
14222}
14223
14224// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
14225func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
14226	objectMap := make(map[string]interface{})
14227	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
14228		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
14229	}
14230	if ersp.ID != nil {
14231		objectMap["id"] = ersp.ID
14232	}
14233	if ersp.Location != nil {
14234		objectMap["location"] = ersp.Location
14235	}
14236	if ersp.Tags != nil {
14237		objectMap["tags"] = ersp.Tags
14238	}
14239	return json.Marshal(objectMap)
14240}
14241
14242// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
14243func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
14244	var m map[string]*json.RawMessage
14245	err := json.Unmarshal(body, &m)
14246	if err != nil {
14247		return err
14248	}
14249	for k, v := range m {
14250		switch k {
14251		case "properties":
14252			if v != nil {
14253				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
14254				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
14255				if err != nil {
14256					return err
14257				}
14258				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
14259			}
14260		case "id":
14261			if v != nil {
14262				var ID string
14263				err = json.Unmarshal(*v, &ID)
14264				if err != nil {
14265					return err
14266				}
14267				ersp.ID = &ID
14268			}
14269		case "name":
14270			if v != nil {
14271				var name string
14272				err = json.Unmarshal(*v, &name)
14273				if err != nil {
14274					return err
14275				}
14276				ersp.Name = &name
14277			}
14278		case "type":
14279			if v != nil {
14280				var typeVar string
14281				err = json.Unmarshal(*v, &typeVar)
14282				if err != nil {
14283					return err
14284				}
14285				ersp.Type = &typeVar
14286			}
14287		case "location":
14288			if v != nil {
14289				var location string
14290				err = json.Unmarshal(*v, &location)
14291				if err != nil {
14292					return err
14293				}
14294				ersp.Location = &location
14295			}
14296		case "tags":
14297			if v != nil {
14298				var tags map[string]*string
14299				err = json.Unmarshal(*v, &tags)
14300				if err != nil {
14301					return err
14302				}
14303				ersp.Tags = tags
14304			}
14305		}
14306	}
14307
14308	return nil
14309}
14310
14311// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
14312// resources.
14313type ExpressRouteServiceProviderBandwidthsOffered struct {
14314	// OfferName - The OfferName.
14315	OfferName *string `json:"offerName,omitempty"`
14316	// ValueInMbps - The ValueInMbps.
14317	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
14318}
14319
14320// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
14321type ExpressRouteServiceProviderListResult struct {
14322	autorest.Response `json:"-"`
14323	// Value - A list of ExpressRouteResourceProvider resources.
14324	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
14325	// NextLink - The URL to get the next set of results.
14326	NextLink *string `json:"nextLink,omitempty"`
14327}
14328
14329// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
14330// ExpressRouteServiceProvider values.
14331type ExpressRouteServiceProviderListResultIterator struct {
14332	i    int
14333	page ExpressRouteServiceProviderListResultPage
14334}
14335
14336// NextWithContext advances to the next value.  If there was an error making
14337// the request the iterator does not advance and the error is returned.
14338func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
14339	if tracing.IsEnabled() {
14340		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
14341		defer func() {
14342			sc := -1
14343			if iter.Response().Response.Response != nil {
14344				sc = iter.Response().Response.Response.StatusCode
14345			}
14346			tracing.EndSpan(ctx, sc, err)
14347		}()
14348	}
14349	iter.i++
14350	if iter.i < len(iter.page.Values()) {
14351		return nil
14352	}
14353	err = iter.page.NextWithContext(ctx)
14354	if err != nil {
14355		iter.i--
14356		return err
14357	}
14358	iter.i = 0
14359	return nil
14360}
14361
14362// Next advances to the next value.  If there was an error making
14363// the request the iterator does not advance and the error is returned.
14364// Deprecated: Use NextWithContext() instead.
14365func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
14366	return iter.NextWithContext(context.Background())
14367}
14368
14369// NotDone returns true if the enumeration should be started or is not yet complete.
14370func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
14371	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14372}
14373
14374// Response returns the raw server response from the last page request.
14375func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
14376	return iter.page.Response()
14377}
14378
14379// Value returns the current value or a zero-initialized value if the
14380// iterator has advanced beyond the end of the collection.
14381func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
14382	if !iter.page.NotDone() {
14383		return ExpressRouteServiceProvider{}
14384	}
14385	return iter.page.Values()[iter.i]
14386}
14387
14388// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
14389func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
14390	return ExpressRouteServiceProviderListResultIterator{page: page}
14391}
14392
14393// IsEmpty returns true if the ListResult contains no values.
14394func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
14395	return ersplr.Value == nil || len(*ersplr.Value) == 0
14396}
14397
14398// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
14399// It returns nil if no more results exist.
14400func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
14401	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
14402		return nil, nil
14403	}
14404	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14405		autorest.AsJSON(),
14406		autorest.AsGet(),
14407		autorest.WithBaseURL(to.String(ersplr.NextLink)))
14408}
14409
14410// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
14411type ExpressRouteServiceProviderListResultPage struct {
14412	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
14413	ersplr ExpressRouteServiceProviderListResult
14414}
14415
14416// NextWithContext advances to the next page of values.  If there was an error making
14417// the request the page does not advance and the error is returned.
14418func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
14419	if tracing.IsEnabled() {
14420		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
14421		defer func() {
14422			sc := -1
14423			if page.Response().Response.Response != nil {
14424				sc = page.Response().Response.Response.StatusCode
14425			}
14426			tracing.EndSpan(ctx, sc, err)
14427		}()
14428	}
14429	next, err := page.fn(ctx, page.ersplr)
14430	if err != nil {
14431		return err
14432	}
14433	page.ersplr = next
14434	return nil
14435}
14436
14437// Next advances to the next page of values.  If there was an error making
14438// the request the page does not advance and the error is returned.
14439// Deprecated: Use NextWithContext() instead.
14440func (page *ExpressRouteServiceProviderListResultPage) Next() error {
14441	return page.NextWithContext(context.Background())
14442}
14443
14444// NotDone returns true if the page enumeration should be started or is not yet complete.
14445func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
14446	return !page.ersplr.IsEmpty()
14447}
14448
14449// Response returns the raw server response from the last page request.
14450func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
14451	return page.ersplr
14452}
14453
14454// Values returns the slice of values for the current page or nil if there are no values.
14455func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
14456	if page.ersplr.IsEmpty() {
14457		return nil
14458	}
14459	return *page.ersplr.Value
14460}
14461
14462// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
14463func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
14464	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
14465}
14466
14467// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
14468type ExpressRouteServiceProviderPropertiesFormat struct {
14469	// PeeringLocations - A list of peering locations.
14470	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
14471	// BandwidthsOffered - A list of bandwidths offered.
14472	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
14473	// ProvisioningState - READ-ONLY; The provisioning state of the express route service provider resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14474	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14475}
14476
14477// FirewallPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14478// long-running operation.
14479type FirewallPoliciesCreateOrUpdateFuture struct {
14480	azure.Future
14481}
14482
14483// Result returns the result of the asynchronous operation.
14484// If the operation has not completed it will return an error.
14485func (future *FirewallPoliciesCreateOrUpdateFuture) Result(client FirewallPoliciesClient) (fp FirewallPolicy, err error) {
14486	var done bool
14487	done, err = future.DoneWithContext(context.Background(), client)
14488	if err != nil {
14489		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14490		return
14491	}
14492	if !done {
14493		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesCreateOrUpdateFuture")
14494		return
14495	}
14496	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14497	if fp.Response.Response, err = future.GetResult(sender); err == nil && fp.Response.Response.StatusCode != http.StatusNoContent {
14498		fp, err = client.CreateOrUpdateResponder(fp.Response.Response)
14499		if err != nil {
14500			err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", fp.Response.Response, "Failure responding to request")
14501		}
14502	}
14503	return
14504}
14505
14506// FirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14507// operation.
14508type FirewallPoliciesDeleteFuture struct {
14509	azure.Future
14510}
14511
14512// Result returns the result of the asynchronous operation.
14513// If the operation has not completed it will return an error.
14514func (future *FirewallPoliciesDeleteFuture) Result(client FirewallPoliciesClient) (ar autorest.Response, err error) {
14515	var done bool
14516	done, err = future.DoneWithContext(context.Background(), client)
14517	if err != nil {
14518		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
14519		return
14520	}
14521	if !done {
14522		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesDeleteFuture")
14523		return
14524	}
14525	ar.Response = future.Response()
14526	return
14527}
14528
14529// FirewallPolicy firewallPolicy Resource.
14530type FirewallPolicy struct {
14531	autorest.Response `json:"-"`
14532	// FirewallPolicyPropertiesFormat - Properties of the firewall policy.
14533	*FirewallPolicyPropertiesFormat `json:"properties,omitempty"`
14534	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
14535	Etag *string `json:"etag,omitempty"`
14536	// ID - Resource ID.
14537	ID *string `json:"id,omitempty"`
14538	// Name - READ-ONLY; Resource name.
14539	Name *string `json:"name,omitempty"`
14540	// Type - READ-ONLY; Resource type.
14541	Type *string `json:"type,omitempty"`
14542	// Location - Resource location.
14543	Location *string `json:"location,omitempty"`
14544	// Tags - Resource tags.
14545	Tags map[string]*string `json:"tags"`
14546}
14547
14548// MarshalJSON is the custom marshaler for FirewallPolicy.
14549func (fp FirewallPolicy) MarshalJSON() ([]byte, error) {
14550	objectMap := make(map[string]interface{})
14551	if fp.FirewallPolicyPropertiesFormat != nil {
14552		objectMap["properties"] = fp.FirewallPolicyPropertiesFormat
14553	}
14554	if fp.ID != nil {
14555		objectMap["id"] = fp.ID
14556	}
14557	if fp.Location != nil {
14558		objectMap["location"] = fp.Location
14559	}
14560	if fp.Tags != nil {
14561		objectMap["tags"] = fp.Tags
14562	}
14563	return json.Marshal(objectMap)
14564}
14565
14566// UnmarshalJSON is the custom unmarshaler for FirewallPolicy struct.
14567func (fp *FirewallPolicy) UnmarshalJSON(body []byte) error {
14568	var m map[string]*json.RawMessage
14569	err := json.Unmarshal(body, &m)
14570	if err != nil {
14571		return err
14572	}
14573	for k, v := range m {
14574		switch k {
14575		case "properties":
14576			if v != nil {
14577				var firewallPolicyPropertiesFormat FirewallPolicyPropertiesFormat
14578				err = json.Unmarshal(*v, &firewallPolicyPropertiesFormat)
14579				if err != nil {
14580					return err
14581				}
14582				fp.FirewallPolicyPropertiesFormat = &firewallPolicyPropertiesFormat
14583			}
14584		case "etag":
14585			if v != nil {
14586				var etag string
14587				err = json.Unmarshal(*v, &etag)
14588				if err != nil {
14589					return err
14590				}
14591				fp.Etag = &etag
14592			}
14593		case "id":
14594			if v != nil {
14595				var ID string
14596				err = json.Unmarshal(*v, &ID)
14597				if err != nil {
14598					return err
14599				}
14600				fp.ID = &ID
14601			}
14602		case "name":
14603			if v != nil {
14604				var name string
14605				err = json.Unmarshal(*v, &name)
14606				if err != nil {
14607					return err
14608				}
14609				fp.Name = &name
14610			}
14611		case "type":
14612			if v != nil {
14613				var typeVar string
14614				err = json.Unmarshal(*v, &typeVar)
14615				if err != nil {
14616					return err
14617				}
14618				fp.Type = &typeVar
14619			}
14620		case "location":
14621			if v != nil {
14622				var location string
14623				err = json.Unmarshal(*v, &location)
14624				if err != nil {
14625					return err
14626				}
14627				fp.Location = &location
14628			}
14629		case "tags":
14630			if v != nil {
14631				var tags map[string]*string
14632				err = json.Unmarshal(*v, &tags)
14633				if err != nil {
14634					return err
14635				}
14636				fp.Tags = tags
14637			}
14638		}
14639	}
14640
14641	return nil
14642}
14643
14644// FirewallPolicyFilterRule firewall Policy Filter Rule.
14645type FirewallPolicyFilterRule struct {
14646	// Action - The action type of a Filter rule.
14647	Action *FirewallPolicyFilterRuleAction `json:"action,omitempty"`
14648	// RuleConditions - Collection of rule conditions used by a rule.
14649	RuleConditions *[]BasicFirewallPolicyRuleCondition `json:"ruleConditions,omitempty"`
14650	// Name - The name of the rule.
14651	Name *string `json:"name,omitempty"`
14652	// Priority - Priority of the Firewall Policy Rule resource.
14653	Priority *int32 `json:"priority,omitempty"`
14654	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
14655	RuleType RuleType `json:"ruleType,omitempty"`
14656}
14657
14658// MarshalJSON is the custom marshaler for FirewallPolicyFilterRule.
14659func (fpfr FirewallPolicyFilterRule) MarshalJSON() ([]byte, error) {
14660	fpfr.RuleType = RuleTypeFirewallPolicyFilterRule
14661	objectMap := make(map[string]interface{})
14662	if fpfr.Action != nil {
14663		objectMap["action"] = fpfr.Action
14664	}
14665	if fpfr.RuleConditions != nil {
14666		objectMap["ruleConditions"] = fpfr.RuleConditions
14667	}
14668	if fpfr.Name != nil {
14669		objectMap["name"] = fpfr.Name
14670	}
14671	if fpfr.Priority != nil {
14672		objectMap["priority"] = fpfr.Priority
14673	}
14674	if fpfr.RuleType != "" {
14675		objectMap["ruleType"] = fpfr.RuleType
14676	}
14677	return json.Marshal(objectMap)
14678}
14679
14680// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14681func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
14682	return nil, false
14683}
14684
14685// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14686func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
14687	return &fpfr, true
14688}
14689
14690// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14691func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
14692	return nil, false
14693}
14694
14695// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
14696func (fpfr FirewallPolicyFilterRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
14697	return &fpfr, true
14698}
14699
14700// UnmarshalJSON is the custom unmarshaler for FirewallPolicyFilterRule struct.
14701func (fpfr *FirewallPolicyFilterRule) UnmarshalJSON(body []byte) error {
14702	var m map[string]*json.RawMessage
14703	err := json.Unmarshal(body, &m)
14704	if err != nil {
14705		return err
14706	}
14707	for k, v := range m {
14708		switch k {
14709		case "action":
14710			if v != nil {
14711				var action FirewallPolicyFilterRuleAction
14712				err = json.Unmarshal(*v, &action)
14713				if err != nil {
14714					return err
14715				}
14716				fpfr.Action = &action
14717			}
14718		case "ruleConditions":
14719			if v != nil {
14720				ruleConditions, err := unmarshalBasicFirewallPolicyRuleConditionArray(*v)
14721				if err != nil {
14722					return err
14723				}
14724				fpfr.RuleConditions = &ruleConditions
14725			}
14726		case "name":
14727			if v != nil {
14728				var name string
14729				err = json.Unmarshal(*v, &name)
14730				if err != nil {
14731					return err
14732				}
14733				fpfr.Name = &name
14734			}
14735		case "priority":
14736			if v != nil {
14737				var priority int32
14738				err = json.Unmarshal(*v, &priority)
14739				if err != nil {
14740					return err
14741				}
14742				fpfr.Priority = &priority
14743			}
14744		case "ruleType":
14745			if v != nil {
14746				var ruleType RuleType
14747				err = json.Unmarshal(*v, &ruleType)
14748				if err != nil {
14749					return err
14750				}
14751				fpfr.RuleType = ruleType
14752			}
14753		}
14754	}
14755
14756	return nil
14757}
14758
14759// FirewallPolicyFilterRuleAction properties of the FirewallPolicyFilterRuleAction.
14760type FirewallPolicyFilterRuleAction struct {
14761	// Type - The type of action. Possible values include: 'FirewallPolicyFilterRuleActionTypeAllow', 'FirewallPolicyFilterRuleActionTypeDeny'
14762	Type FirewallPolicyFilterRuleActionType `json:"type,omitempty"`
14763}
14764
14765// FirewallPolicyListResult response for ListFirewallPolicies API service call.
14766type FirewallPolicyListResult struct {
14767	autorest.Response `json:"-"`
14768	// Value - List of Firewall Policies in a resource group.
14769	Value *[]FirewallPolicy `json:"value,omitempty"`
14770	// NextLink - URL to get the next set of results.
14771	NextLink *string `json:"nextLink,omitempty"`
14772}
14773
14774// FirewallPolicyListResultIterator provides access to a complete listing of FirewallPolicy values.
14775type FirewallPolicyListResultIterator struct {
14776	i    int
14777	page FirewallPolicyListResultPage
14778}
14779
14780// NextWithContext advances to the next value.  If there was an error making
14781// the request the iterator does not advance and the error is returned.
14782func (iter *FirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
14783	if tracing.IsEnabled() {
14784		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultIterator.NextWithContext")
14785		defer func() {
14786			sc := -1
14787			if iter.Response().Response.Response != nil {
14788				sc = iter.Response().Response.Response.StatusCode
14789			}
14790			tracing.EndSpan(ctx, sc, err)
14791		}()
14792	}
14793	iter.i++
14794	if iter.i < len(iter.page.Values()) {
14795		return nil
14796	}
14797	err = iter.page.NextWithContext(ctx)
14798	if err != nil {
14799		iter.i--
14800		return err
14801	}
14802	iter.i = 0
14803	return nil
14804}
14805
14806// Next advances to the next value.  If there was an error making
14807// the request the iterator does not advance and the error is returned.
14808// Deprecated: Use NextWithContext() instead.
14809func (iter *FirewallPolicyListResultIterator) Next() error {
14810	return iter.NextWithContext(context.Background())
14811}
14812
14813// NotDone returns true if the enumeration should be started or is not yet complete.
14814func (iter FirewallPolicyListResultIterator) NotDone() bool {
14815	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14816}
14817
14818// Response returns the raw server response from the last page request.
14819func (iter FirewallPolicyListResultIterator) Response() FirewallPolicyListResult {
14820	return iter.page.Response()
14821}
14822
14823// Value returns the current value or a zero-initialized value if the
14824// iterator has advanced beyond the end of the collection.
14825func (iter FirewallPolicyListResultIterator) Value() FirewallPolicy {
14826	if !iter.page.NotDone() {
14827		return FirewallPolicy{}
14828	}
14829	return iter.page.Values()[iter.i]
14830}
14831
14832// Creates a new instance of the FirewallPolicyListResultIterator type.
14833func NewFirewallPolicyListResultIterator(page FirewallPolicyListResultPage) FirewallPolicyListResultIterator {
14834	return FirewallPolicyListResultIterator{page: page}
14835}
14836
14837// IsEmpty returns true if the ListResult contains no values.
14838func (fplr FirewallPolicyListResult) IsEmpty() bool {
14839	return fplr.Value == nil || len(*fplr.Value) == 0
14840}
14841
14842// firewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
14843// It returns nil if no more results exist.
14844func (fplr FirewallPolicyListResult) firewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
14845	if fplr.NextLink == nil || len(to.String(fplr.NextLink)) < 1 {
14846		return nil, nil
14847	}
14848	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14849		autorest.AsJSON(),
14850		autorest.AsGet(),
14851		autorest.WithBaseURL(to.String(fplr.NextLink)))
14852}
14853
14854// FirewallPolicyListResultPage contains a page of FirewallPolicy values.
14855type FirewallPolicyListResultPage struct {
14856	fn   func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)
14857	fplr FirewallPolicyListResult
14858}
14859
14860// NextWithContext advances to the next page of values.  If there was an error making
14861// the request the page does not advance and the error is returned.
14862func (page *FirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
14863	if tracing.IsEnabled() {
14864		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultPage.NextWithContext")
14865		defer func() {
14866			sc := -1
14867			if page.Response().Response.Response != nil {
14868				sc = page.Response().Response.Response.StatusCode
14869			}
14870			tracing.EndSpan(ctx, sc, err)
14871		}()
14872	}
14873	next, err := page.fn(ctx, page.fplr)
14874	if err != nil {
14875		return err
14876	}
14877	page.fplr = next
14878	return nil
14879}
14880
14881// Next advances to the next page of values.  If there was an error making
14882// the request the page does not advance and the error is returned.
14883// Deprecated: Use NextWithContext() instead.
14884func (page *FirewallPolicyListResultPage) Next() error {
14885	return page.NextWithContext(context.Background())
14886}
14887
14888// NotDone returns true if the page enumeration should be started or is not yet complete.
14889func (page FirewallPolicyListResultPage) NotDone() bool {
14890	return !page.fplr.IsEmpty()
14891}
14892
14893// Response returns the raw server response from the last page request.
14894func (page FirewallPolicyListResultPage) Response() FirewallPolicyListResult {
14895	return page.fplr
14896}
14897
14898// Values returns the slice of values for the current page or nil if there are no values.
14899func (page FirewallPolicyListResultPage) Values() []FirewallPolicy {
14900	if page.fplr.IsEmpty() {
14901		return nil
14902	}
14903	return *page.fplr.Value
14904}
14905
14906// Creates a new instance of the FirewallPolicyListResultPage type.
14907func NewFirewallPolicyListResultPage(getNextPage func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)) FirewallPolicyListResultPage {
14908	return FirewallPolicyListResultPage{fn: getNextPage}
14909}
14910
14911// FirewallPolicyNatRule firewall Policy NAT Rule.
14912type FirewallPolicyNatRule struct {
14913	// Action - The action type of a Nat rule.
14914	Action *FirewallPolicyNatRuleAction `json:"action,omitempty"`
14915	// TranslatedAddress - The translated address for this NAT rule.
14916	TranslatedAddress *string `json:"translatedAddress,omitempty"`
14917	// TranslatedPort - The translated port for this NAT rule.
14918	TranslatedPort *string `json:"translatedPort,omitempty"`
14919	// RuleCondition - The match conditions for incoming traffic.
14920	RuleCondition BasicFirewallPolicyRuleCondition `json:"ruleCondition,omitempty"`
14921	// Name - The name of the rule.
14922	Name *string `json:"name,omitempty"`
14923	// Priority - Priority of the Firewall Policy Rule resource.
14924	Priority *int32 `json:"priority,omitempty"`
14925	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
14926	RuleType RuleType `json:"ruleType,omitempty"`
14927}
14928
14929// MarshalJSON is the custom marshaler for FirewallPolicyNatRule.
14930func (fpnr FirewallPolicyNatRule) MarshalJSON() ([]byte, error) {
14931	fpnr.RuleType = RuleTypeFirewallPolicyNatRule
14932	objectMap := make(map[string]interface{})
14933	if fpnr.Action != nil {
14934		objectMap["action"] = fpnr.Action
14935	}
14936	if fpnr.TranslatedAddress != nil {
14937		objectMap["translatedAddress"] = fpnr.TranslatedAddress
14938	}
14939	if fpnr.TranslatedPort != nil {
14940		objectMap["translatedPort"] = fpnr.TranslatedPort
14941	}
14942	objectMap["ruleCondition"] = fpnr.RuleCondition
14943	if fpnr.Name != nil {
14944		objectMap["name"] = fpnr.Name
14945	}
14946	if fpnr.Priority != nil {
14947		objectMap["priority"] = fpnr.Priority
14948	}
14949	if fpnr.RuleType != "" {
14950		objectMap["ruleType"] = fpnr.RuleType
14951	}
14952	return json.Marshal(objectMap)
14953}
14954
14955// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14956func (fpnr FirewallPolicyNatRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
14957	return &fpnr, true
14958}
14959
14960// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14961func (fpnr FirewallPolicyNatRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
14962	return nil, false
14963}
14964
14965// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14966func (fpnr FirewallPolicyNatRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
14967	return nil, false
14968}
14969
14970// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14971func (fpnr FirewallPolicyNatRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
14972	return &fpnr, true
14973}
14974
14975// UnmarshalJSON is the custom unmarshaler for FirewallPolicyNatRule struct.
14976func (fpnr *FirewallPolicyNatRule) UnmarshalJSON(body []byte) error {
14977	var m map[string]*json.RawMessage
14978	err := json.Unmarshal(body, &m)
14979	if err != nil {
14980		return err
14981	}
14982	for k, v := range m {
14983		switch k {
14984		case "action":
14985			if v != nil {
14986				var action FirewallPolicyNatRuleAction
14987				err = json.Unmarshal(*v, &action)
14988				if err != nil {
14989					return err
14990				}
14991				fpnr.Action = &action
14992			}
14993		case "translatedAddress":
14994			if v != nil {
14995				var translatedAddress string
14996				err = json.Unmarshal(*v, &translatedAddress)
14997				if err != nil {
14998					return err
14999				}
15000				fpnr.TranslatedAddress = &translatedAddress
15001			}
15002		case "translatedPort":
15003			if v != nil {
15004				var translatedPort string
15005				err = json.Unmarshal(*v, &translatedPort)
15006				if err != nil {
15007					return err
15008				}
15009				fpnr.TranslatedPort = &translatedPort
15010			}
15011		case "ruleCondition":
15012			if v != nil {
15013				ruleCondition, err := unmarshalBasicFirewallPolicyRuleCondition(*v)
15014				if err != nil {
15015					return err
15016				}
15017				fpnr.RuleCondition = ruleCondition
15018			}
15019		case "name":
15020			if v != nil {
15021				var name string
15022				err = json.Unmarshal(*v, &name)
15023				if err != nil {
15024					return err
15025				}
15026				fpnr.Name = &name
15027			}
15028		case "priority":
15029			if v != nil {
15030				var priority int32
15031				err = json.Unmarshal(*v, &priority)
15032				if err != nil {
15033					return err
15034				}
15035				fpnr.Priority = &priority
15036			}
15037		case "ruleType":
15038			if v != nil {
15039				var ruleType RuleType
15040				err = json.Unmarshal(*v, &ruleType)
15041				if err != nil {
15042					return err
15043				}
15044				fpnr.RuleType = ruleType
15045			}
15046		}
15047	}
15048
15049	return nil
15050}
15051
15052// FirewallPolicyNatRuleAction properties of the FirewallPolicyNatRuleAction.
15053type FirewallPolicyNatRuleAction struct {
15054	// Type - The type of action. Possible values include: 'DNAT'
15055	Type FirewallPolicyNatRuleActionType `json:"type,omitempty"`
15056}
15057
15058// FirewallPolicyPropertiesFormat firewall Policy definition.
15059type FirewallPolicyPropertiesFormat struct {
15060	// RuleGroups - READ-ONLY; List of references to FirewallPolicyRuleGroups.
15061	RuleGroups *[]SubResource `json:"ruleGroups,omitempty"`
15062	// ProvisioningState - READ-ONLY; The provisioning state of the firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15063	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15064	// BasePolicy - The parent firewall policy from which rules are inherited.
15065	BasePolicy *SubResource `json:"basePolicy,omitempty"`
15066	// Firewalls - READ-ONLY; List of references to Azure Firewalls that this Firewall Policy is associated with.
15067	Firewalls *[]SubResource `json:"firewalls,omitempty"`
15068	// ChildPolicies - READ-ONLY; List of references to Child Firewall Policies.
15069	ChildPolicies *[]SubResource `json:"childPolicies,omitempty"`
15070	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
15071	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
15072}
15073
15074// BasicFirewallPolicyRule properties of the rule.
15075type BasicFirewallPolicyRule interface {
15076	AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool)
15077	AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool)
15078	AsFirewallPolicyRule() (*FirewallPolicyRule, bool)
15079}
15080
15081// FirewallPolicyRule properties of the rule.
15082type FirewallPolicyRule struct {
15083	// Name - The name of the rule.
15084	Name *string `json:"name,omitempty"`
15085	// Priority - Priority of the Firewall Policy Rule resource.
15086	Priority *int32 `json:"priority,omitempty"`
15087	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
15088	RuleType RuleType `json:"ruleType,omitempty"`
15089}
15090
15091func unmarshalBasicFirewallPolicyRule(body []byte) (BasicFirewallPolicyRule, error) {
15092	var m map[string]interface{}
15093	err := json.Unmarshal(body, &m)
15094	if err != nil {
15095		return nil, err
15096	}
15097
15098	switch m["ruleType"] {
15099	case string(RuleTypeFirewallPolicyNatRule):
15100		var fpnr FirewallPolicyNatRule
15101		err := json.Unmarshal(body, &fpnr)
15102		return fpnr, err
15103	case string(RuleTypeFirewallPolicyFilterRule):
15104		var fpfr FirewallPolicyFilterRule
15105		err := json.Unmarshal(body, &fpfr)
15106		return fpfr, err
15107	default:
15108		var fpr FirewallPolicyRule
15109		err := json.Unmarshal(body, &fpr)
15110		return fpr, err
15111	}
15112}
15113func unmarshalBasicFirewallPolicyRuleArray(body []byte) ([]BasicFirewallPolicyRule, error) {
15114	var rawMessages []*json.RawMessage
15115	err := json.Unmarshal(body, &rawMessages)
15116	if err != nil {
15117		return nil, err
15118	}
15119
15120	fprArray := make([]BasicFirewallPolicyRule, len(rawMessages))
15121
15122	for index, rawMessage := range rawMessages {
15123		fpr, err := unmarshalBasicFirewallPolicyRule(*rawMessage)
15124		if err != nil {
15125			return nil, err
15126		}
15127		fprArray[index] = fpr
15128	}
15129	return fprArray, nil
15130}
15131
15132// MarshalJSON is the custom marshaler for FirewallPolicyRule.
15133func (fpr FirewallPolicyRule) MarshalJSON() ([]byte, error) {
15134	fpr.RuleType = RuleTypeFirewallPolicyRule
15135	objectMap := make(map[string]interface{})
15136	if fpr.Name != nil {
15137		objectMap["name"] = fpr.Name
15138	}
15139	if fpr.Priority != nil {
15140		objectMap["priority"] = fpr.Priority
15141	}
15142	if fpr.RuleType != "" {
15143		objectMap["ruleType"] = fpr.RuleType
15144	}
15145	return json.Marshal(objectMap)
15146}
15147
15148// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
15149func (fpr FirewallPolicyRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
15150	return nil, false
15151}
15152
15153// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
15154func (fpr FirewallPolicyRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
15155	return nil, false
15156}
15157
15158// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
15159func (fpr FirewallPolicyRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
15160	return &fpr, true
15161}
15162
15163// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
15164func (fpr FirewallPolicyRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
15165	return &fpr, true
15166}
15167
15168// BasicFirewallPolicyRuleCondition properties of a rule.
15169type BasicFirewallPolicyRuleCondition interface {
15170	AsApplicationRuleCondition() (*ApplicationRuleCondition, bool)
15171	AsRuleCondition() (*RuleCondition, bool)
15172	AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool)
15173}
15174
15175// FirewallPolicyRuleCondition properties of a rule.
15176type FirewallPolicyRuleCondition struct {
15177	// Name - Name of the rule condition.
15178	Name *string `json:"name,omitempty"`
15179	// Description - Description of the rule condition.
15180	Description *string `json:"description,omitempty"`
15181	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
15182	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
15183}
15184
15185func unmarshalBasicFirewallPolicyRuleCondition(body []byte) (BasicFirewallPolicyRuleCondition, error) {
15186	var m map[string]interface{}
15187	err := json.Unmarshal(body, &m)
15188	if err != nil {
15189		return nil, err
15190	}
15191
15192	switch m["ruleConditionType"] {
15193	case string(RuleConditionTypeApplicationRuleCondition):
15194		var arc ApplicationRuleCondition
15195		err := json.Unmarshal(body, &arc)
15196		return arc, err
15197	case string(RuleConditionTypeNetworkRuleCondition):
15198		var rc RuleCondition
15199		err := json.Unmarshal(body, &rc)
15200		return rc, err
15201	default:
15202		var fprc FirewallPolicyRuleCondition
15203		err := json.Unmarshal(body, &fprc)
15204		return fprc, err
15205	}
15206}
15207func unmarshalBasicFirewallPolicyRuleConditionArray(body []byte) ([]BasicFirewallPolicyRuleCondition, error) {
15208	var rawMessages []*json.RawMessage
15209	err := json.Unmarshal(body, &rawMessages)
15210	if err != nil {
15211		return nil, err
15212	}
15213
15214	fprcArray := make([]BasicFirewallPolicyRuleCondition, len(rawMessages))
15215
15216	for index, rawMessage := range rawMessages {
15217		fprc, err := unmarshalBasicFirewallPolicyRuleCondition(*rawMessage)
15218		if err != nil {
15219			return nil, err
15220		}
15221		fprcArray[index] = fprc
15222	}
15223	return fprcArray, nil
15224}
15225
15226// MarshalJSON is the custom marshaler for FirewallPolicyRuleCondition.
15227func (fprc FirewallPolicyRuleCondition) MarshalJSON() ([]byte, error) {
15228	fprc.RuleConditionType = RuleConditionTypeFirewallPolicyRuleCondition
15229	objectMap := make(map[string]interface{})
15230	if fprc.Name != nil {
15231		objectMap["name"] = fprc.Name
15232	}
15233	if fprc.Description != nil {
15234		objectMap["description"] = fprc.Description
15235	}
15236	if fprc.RuleConditionType != "" {
15237		objectMap["ruleConditionType"] = fprc.RuleConditionType
15238	}
15239	return json.Marshal(objectMap)
15240}
15241
15242// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
15243func (fprc FirewallPolicyRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
15244	return nil, false
15245}
15246
15247// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
15248func (fprc FirewallPolicyRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
15249	return nil, false
15250}
15251
15252// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
15253func (fprc FirewallPolicyRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
15254	return &fprc, true
15255}
15256
15257// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
15258func (fprc FirewallPolicyRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
15259	return &fprc, true
15260}
15261
15262// FirewallPolicyRuleConditionApplicationProtocol properties of the application rule protocol.
15263type FirewallPolicyRuleConditionApplicationProtocol struct {
15264	// ProtocolType - Protocol type. Possible values include: 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTP', 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS'
15265	ProtocolType FirewallPolicyRuleConditionApplicationProtocolType `json:"protocolType,omitempty"`
15266	// Port - Port number for the protocol, cannot be greater than 64000.
15267	Port *int32 `json:"port,omitempty"`
15268}
15269
15270// FirewallPolicyRuleGroup rule Group resource.
15271type FirewallPolicyRuleGroup struct {
15272	autorest.Response `json:"-"`
15273	// FirewallPolicyRuleGroupProperties - The properties of the firewall policy rule group.
15274	*FirewallPolicyRuleGroupProperties `json:"properties,omitempty"`
15275	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15276	Name *string `json:"name,omitempty"`
15277	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
15278	Etag *string `json:"etag,omitempty"`
15279	// Type - READ-ONLY; Rule Group type.
15280	Type *string `json:"type,omitempty"`
15281	// ID - Resource ID.
15282	ID *string `json:"id,omitempty"`
15283}
15284
15285// MarshalJSON is the custom marshaler for FirewallPolicyRuleGroup.
15286func (fprg FirewallPolicyRuleGroup) MarshalJSON() ([]byte, error) {
15287	objectMap := make(map[string]interface{})
15288	if fprg.FirewallPolicyRuleGroupProperties != nil {
15289		objectMap["properties"] = fprg.FirewallPolicyRuleGroupProperties
15290	}
15291	if fprg.Name != nil {
15292		objectMap["name"] = fprg.Name
15293	}
15294	if fprg.ID != nil {
15295		objectMap["id"] = fprg.ID
15296	}
15297	return json.Marshal(objectMap)
15298}
15299
15300// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroup struct.
15301func (fprg *FirewallPolicyRuleGroup) UnmarshalJSON(body []byte) error {
15302	var m map[string]*json.RawMessage
15303	err := json.Unmarshal(body, &m)
15304	if err != nil {
15305		return err
15306	}
15307	for k, v := range m {
15308		switch k {
15309		case "properties":
15310			if v != nil {
15311				var firewallPolicyRuleGroupProperties FirewallPolicyRuleGroupProperties
15312				err = json.Unmarshal(*v, &firewallPolicyRuleGroupProperties)
15313				if err != nil {
15314					return err
15315				}
15316				fprg.FirewallPolicyRuleGroupProperties = &firewallPolicyRuleGroupProperties
15317			}
15318		case "name":
15319			if v != nil {
15320				var name string
15321				err = json.Unmarshal(*v, &name)
15322				if err != nil {
15323					return err
15324				}
15325				fprg.Name = &name
15326			}
15327		case "etag":
15328			if v != nil {
15329				var etag string
15330				err = json.Unmarshal(*v, &etag)
15331				if err != nil {
15332					return err
15333				}
15334				fprg.Etag = &etag
15335			}
15336		case "type":
15337			if v != nil {
15338				var typeVar string
15339				err = json.Unmarshal(*v, &typeVar)
15340				if err != nil {
15341					return err
15342				}
15343				fprg.Type = &typeVar
15344			}
15345		case "id":
15346			if v != nil {
15347				var ID string
15348				err = json.Unmarshal(*v, &ID)
15349				if err != nil {
15350					return err
15351				}
15352				fprg.ID = &ID
15353			}
15354		}
15355	}
15356
15357	return nil
15358}
15359
15360// FirewallPolicyRuleGroupListResult response for ListFirewallPolicyRuleGroups API service call.
15361type FirewallPolicyRuleGroupListResult struct {
15362	autorest.Response `json:"-"`
15363	// Value - List of FirewallPolicyRuleGroups in a FirewallPolicy.
15364	Value *[]FirewallPolicyRuleGroup `json:"value,omitempty"`
15365	// NextLink - URL to get the next set of results.
15366	NextLink *string `json:"nextLink,omitempty"`
15367}
15368
15369// FirewallPolicyRuleGroupListResultIterator provides access to a complete listing of
15370// FirewallPolicyRuleGroup values.
15371type FirewallPolicyRuleGroupListResultIterator struct {
15372	i    int
15373	page FirewallPolicyRuleGroupListResultPage
15374}
15375
15376// NextWithContext advances to the next value.  If there was an error making
15377// the request the iterator does not advance and the error is returned.
15378func (iter *FirewallPolicyRuleGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
15379	if tracing.IsEnabled() {
15380		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultIterator.NextWithContext")
15381		defer func() {
15382			sc := -1
15383			if iter.Response().Response.Response != nil {
15384				sc = iter.Response().Response.Response.StatusCode
15385			}
15386			tracing.EndSpan(ctx, sc, err)
15387		}()
15388	}
15389	iter.i++
15390	if iter.i < len(iter.page.Values()) {
15391		return nil
15392	}
15393	err = iter.page.NextWithContext(ctx)
15394	if err != nil {
15395		iter.i--
15396		return err
15397	}
15398	iter.i = 0
15399	return nil
15400}
15401
15402// Next advances to the next value.  If there was an error making
15403// the request the iterator does not advance and the error is returned.
15404// Deprecated: Use NextWithContext() instead.
15405func (iter *FirewallPolicyRuleGroupListResultIterator) Next() error {
15406	return iter.NextWithContext(context.Background())
15407}
15408
15409// NotDone returns true if the enumeration should be started or is not yet complete.
15410func (iter FirewallPolicyRuleGroupListResultIterator) NotDone() bool {
15411	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15412}
15413
15414// Response returns the raw server response from the last page request.
15415func (iter FirewallPolicyRuleGroupListResultIterator) Response() FirewallPolicyRuleGroupListResult {
15416	return iter.page.Response()
15417}
15418
15419// Value returns the current value or a zero-initialized value if the
15420// iterator has advanced beyond the end of the collection.
15421func (iter FirewallPolicyRuleGroupListResultIterator) Value() FirewallPolicyRuleGroup {
15422	if !iter.page.NotDone() {
15423		return FirewallPolicyRuleGroup{}
15424	}
15425	return iter.page.Values()[iter.i]
15426}
15427
15428// Creates a new instance of the FirewallPolicyRuleGroupListResultIterator type.
15429func NewFirewallPolicyRuleGroupListResultIterator(page FirewallPolicyRuleGroupListResultPage) FirewallPolicyRuleGroupListResultIterator {
15430	return FirewallPolicyRuleGroupListResultIterator{page: page}
15431}
15432
15433// IsEmpty returns true if the ListResult contains no values.
15434func (fprglr FirewallPolicyRuleGroupListResult) IsEmpty() bool {
15435	return fprglr.Value == nil || len(*fprglr.Value) == 0
15436}
15437
15438// firewallPolicyRuleGroupListResultPreparer prepares a request to retrieve the next set of results.
15439// It returns nil if no more results exist.
15440func (fprglr FirewallPolicyRuleGroupListResult) firewallPolicyRuleGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
15441	if fprglr.NextLink == nil || len(to.String(fprglr.NextLink)) < 1 {
15442		return nil, nil
15443	}
15444	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15445		autorest.AsJSON(),
15446		autorest.AsGet(),
15447		autorest.WithBaseURL(to.String(fprglr.NextLink)))
15448}
15449
15450// FirewallPolicyRuleGroupListResultPage contains a page of FirewallPolicyRuleGroup values.
15451type FirewallPolicyRuleGroupListResultPage struct {
15452	fn     func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)
15453	fprglr FirewallPolicyRuleGroupListResult
15454}
15455
15456// NextWithContext advances to the next page of values.  If there was an error making
15457// the request the page does not advance and the error is returned.
15458func (page *FirewallPolicyRuleGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
15459	if tracing.IsEnabled() {
15460		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultPage.NextWithContext")
15461		defer func() {
15462			sc := -1
15463			if page.Response().Response.Response != nil {
15464				sc = page.Response().Response.Response.StatusCode
15465			}
15466			tracing.EndSpan(ctx, sc, err)
15467		}()
15468	}
15469	next, err := page.fn(ctx, page.fprglr)
15470	if err != nil {
15471		return err
15472	}
15473	page.fprglr = next
15474	return nil
15475}
15476
15477// Next advances to the next page of values.  If there was an error making
15478// the request the page does not advance and the error is returned.
15479// Deprecated: Use NextWithContext() instead.
15480func (page *FirewallPolicyRuleGroupListResultPage) Next() error {
15481	return page.NextWithContext(context.Background())
15482}
15483
15484// NotDone returns true if the page enumeration should be started or is not yet complete.
15485func (page FirewallPolicyRuleGroupListResultPage) NotDone() bool {
15486	return !page.fprglr.IsEmpty()
15487}
15488
15489// Response returns the raw server response from the last page request.
15490func (page FirewallPolicyRuleGroupListResultPage) Response() FirewallPolicyRuleGroupListResult {
15491	return page.fprglr
15492}
15493
15494// Values returns the slice of values for the current page or nil if there are no values.
15495func (page FirewallPolicyRuleGroupListResultPage) Values() []FirewallPolicyRuleGroup {
15496	if page.fprglr.IsEmpty() {
15497		return nil
15498	}
15499	return *page.fprglr.Value
15500}
15501
15502// Creates a new instance of the FirewallPolicyRuleGroupListResultPage type.
15503func NewFirewallPolicyRuleGroupListResultPage(getNextPage func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)) FirewallPolicyRuleGroupListResultPage {
15504	return FirewallPolicyRuleGroupListResultPage{fn: getNextPage}
15505}
15506
15507// FirewallPolicyRuleGroupProperties properties of the rule group.
15508type FirewallPolicyRuleGroupProperties struct {
15509	// Priority - Priority of the Firewall Policy Rule Group resource.
15510	Priority *int32 `json:"priority,omitempty"`
15511	// Rules - Group of Firewall Policy rules.
15512	Rules *[]BasicFirewallPolicyRule `json:"rules,omitempty"`
15513	// ProvisioningState - READ-ONLY; The provisioning state of the firewall policy rule group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15514	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15515}
15516
15517// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroupProperties struct.
15518func (fprgp *FirewallPolicyRuleGroupProperties) UnmarshalJSON(body []byte) error {
15519	var m map[string]*json.RawMessage
15520	err := json.Unmarshal(body, &m)
15521	if err != nil {
15522		return err
15523	}
15524	for k, v := range m {
15525		switch k {
15526		case "priority":
15527			if v != nil {
15528				var priority int32
15529				err = json.Unmarshal(*v, &priority)
15530				if err != nil {
15531					return err
15532				}
15533				fprgp.Priority = &priority
15534			}
15535		case "rules":
15536			if v != nil {
15537				rules, err := unmarshalBasicFirewallPolicyRuleArray(*v)
15538				if err != nil {
15539					return err
15540				}
15541				fprgp.Rules = &rules
15542			}
15543		case "provisioningState":
15544			if v != nil {
15545				var provisioningState ProvisioningState
15546				err = json.Unmarshal(*v, &provisioningState)
15547				if err != nil {
15548					return err
15549				}
15550				fprgp.ProvisioningState = provisioningState
15551			}
15552		}
15553	}
15554
15555	return nil
15556}
15557
15558// FirewallPolicyRuleGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
15559// a long-running operation.
15560type FirewallPolicyRuleGroupsCreateOrUpdateFuture struct {
15561	azure.Future
15562}
15563
15564// Result returns the result of the asynchronous operation.
15565// If the operation has not completed it will return an error.
15566func (future *FirewallPolicyRuleGroupsCreateOrUpdateFuture) Result(client FirewallPolicyRuleGroupsClient) (fprg FirewallPolicyRuleGroup, err error) {
15567	var done bool
15568	done, err = future.DoneWithContext(context.Background(), client)
15569	if err != nil {
15570		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15571		return
15572	}
15573	if !done {
15574		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsCreateOrUpdateFuture")
15575		return
15576	}
15577	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15578	if fprg.Response.Response, err = future.GetResult(sender); err == nil && fprg.Response.Response.StatusCode != http.StatusNoContent {
15579		fprg, err = client.CreateOrUpdateResponder(fprg.Response.Response)
15580		if err != nil {
15581			err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", fprg.Response.Response, "Failure responding to request")
15582		}
15583	}
15584	return
15585}
15586
15587// FirewallPolicyRuleGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
15588// long-running operation.
15589type FirewallPolicyRuleGroupsDeleteFuture struct {
15590	azure.Future
15591}
15592
15593// Result returns the result of the asynchronous operation.
15594// If the operation has not completed it will return an error.
15595func (future *FirewallPolicyRuleGroupsDeleteFuture) Result(client FirewallPolicyRuleGroupsClient) (ar autorest.Response, err error) {
15596	var done bool
15597	done, err = future.DoneWithContext(context.Background(), client)
15598	if err != nil {
15599		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
15600		return
15601	}
15602	if !done {
15603		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsDeleteFuture")
15604		return
15605	}
15606	ar.Response = future.Response()
15607	return
15608}
15609
15610// FlowLog a flow log resource.
15611type FlowLog struct {
15612	autorest.Response `json:"-"`
15613	// FlowLogPropertiesFormat - Properties of the flow log.
15614	*FlowLogPropertiesFormat `json:"properties,omitempty"`
15615	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
15616	Etag *string `json:"etag,omitempty"`
15617	// ID - Resource ID.
15618	ID *string `json:"id,omitempty"`
15619	// Name - READ-ONLY; Resource name.
15620	Name *string `json:"name,omitempty"`
15621	// Type - READ-ONLY; Resource type.
15622	Type *string `json:"type,omitempty"`
15623	// Location - Resource location.
15624	Location *string `json:"location,omitempty"`
15625	// Tags - Resource tags.
15626	Tags map[string]*string `json:"tags"`
15627}
15628
15629// MarshalJSON is the custom marshaler for FlowLog.
15630func (fl FlowLog) MarshalJSON() ([]byte, error) {
15631	objectMap := make(map[string]interface{})
15632	if fl.FlowLogPropertiesFormat != nil {
15633		objectMap["properties"] = fl.FlowLogPropertiesFormat
15634	}
15635	if fl.ID != nil {
15636		objectMap["id"] = fl.ID
15637	}
15638	if fl.Location != nil {
15639		objectMap["location"] = fl.Location
15640	}
15641	if fl.Tags != nil {
15642		objectMap["tags"] = fl.Tags
15643	}
15644	return json.Marshal(objectMap)
15645}
15646
15647// UnmarshalJSON is the custom unmarshaler for FlowLog struct.
15648func (fl *FlowLog) UnmarshalJSON(body []byte) error {
15649	var m map[string]*json.RawMessage
15650	err := json.Unmarshal(body, &m)
15651	if err != nil {
15652		return err
15653	}
15654	for k, v := range m {
15655		switch k {
15656		case "properties":
15657			if v != nil {
15658				var flowLogPropertiesFormat FlowLogPropertiesFormat
15659				err = json.Unmarshal(*v, &flowLogPropertiesFormat)
15660				if err != nil {
15661					return err
15662				}
15663				fl.FlowLogPropertiesFormat = &flowLogPropertiesFormat
15664			}
15665		case "etag":
15666			if v != nil {
15667				var etag string
15668				err = json.Unmarshal(*v, &etag)
15669				if err != nil {
15670					return err
15671				}
15672				fl.Etag = &etag
15673			}
15674		case "id":
15675			if v != nil {
15676				var ID string
15677				err = json.Unmarshal(*v, &ID)
15678				if err != nil {
15679					return err
15680				}
15681				fl.ID = &ID
15682			}
15683		case "name":
15684			if v != nil {
15685				var name string
15686				err = json.Unmarshal(*v, &name)
15687				if err != nil {
15688					return err
15689				}
15690				fl.Name = &name
15691			}
15692		case "type":
15693			if v != nil {
15694				var typeVar string
15695				err = json.Unmarshal(*v, &typeVar)
15696				if err != nil {
15697					return err
15698				}
15699				fl.Type = &typeVar
15700			}
15701		case "location":
15702			if v != nil {
15703				var location string
15704				err = json.Unmarshal(*v, &location)
15705				if err != nil {
15706					return err
15707				}
15708				fl.Location = &location
15709			}
15710		case "tags":
15711			if v != nil {
15712				var tags map[string]*string
15713				err = json.Unmarshal(*v, &tags)
15714				if err != nil {
15715					return err
15716				}
15717				fl.Tags = tags
15718			}
15719		}
15720	}
15721
15722	return nil
15723}
15724
15725// FlowLogFormatParameters parameters that define the flow log format.
15726type FlowLogFormatParameters struct {
15727	// Type - The file type of flow log. Possible values include: 'JSON'
15728	Type FlowLogFormatType `json:"type,omitempty"`
15729	// Version - The version (revision) of the flow log.
15730	Version *int32 `json:"version,omitempty"`
15731}
15732
15733// FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
15734type FlowLogInformation struct {
15735	autorest.Response `json:"-"`
15736	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
15737	TargetResourceID *string `json:"targetResourceId,omitempty"`
15738	// FlowLogProperties - Properties of the flow log.
15739	*FlowLogProperties `json:"properties,omitempty"`
15740	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
15741	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
15742}
15743
15744// MarshalJSON is the custom marshaler for FlowLogInformation.
15745func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
15746	objectMap := make(map[string]interface{})
15747	if fli.TargetResourceID != nil {
15748		objectMap["targetResourceId"] = fli.TargetResourceID
15749	}
15750	if fli.FlowLogProperties != nil {
15751		objectMap["properties"] = fli.FlowLogProperties
15752	}
15753	if fli.FlowAnalyticsConfiguration != nil {
15754		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
15755	}
15756	return json.Marshal(objectMap)
15757}
15758
15759// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
15760func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
15761	var m map[string]*json.RawMessage
15762	err := json.Unmarshal(body, &m)
15763	if err != nil {
15764		return err
15765	}
15766	for k, v := range m {
15767		switch k {
15768		case "targetResourceId":
15769			if v != nil {
15770				var targetResourceID string
15771				err = json.Unmarshal(*v, &targetResourceID)
15772				if err != nil {
15773					return err
15774				}
15775				fli.TargetResourceID = &targetResourceID
15776			}
15777		case "properties":
15778			if v != nil {
15779				var flowLogProperties FlowLogProperties
15780				err = json.Unmarshal(*v, &flowLogProperties)
15781				if err != nil {
15782					return err
15783				}
15784				fli.FlowLogProperties = &flowLogProperties
15785			}
15786		case "flowAnalyticsConfiguration":
15787			if v != nil {
15788				var flowAnalyticsConfiguration TrafficAnalyticsProperties
15789				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
15790				if err != nil {
15791					return err
15792				}
15793				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
15794			}
15795		}
15796	}
15797
15798	return nil
15799}
15800
15801// FlowLogListResult list of flow logs.
15802type FlowLogListResult struct {
15803	autorest.Response `json:"-"`
15804	// Value - Information about flow log resource.
15805	Value *[]FlowLog `json:"value,omitempty"`
15806	// NextLink - READ-ONLY; The URL to get the next set of results.
15807	NextLink *string `json:"nextLink,omitempty"`
15808}
15809
15810// FlowLogListResultIterator provides access to a complete listing of FlowLog values.
15811type FlowLogListResultIterator struct {
15812	i    int
15813	page FlowLogListResultPage
15814}
15815
15816// NextWithContext advances to the next value.  If there was an error making
15817// the request the iterator does not advance and the error is returned.
15818func (iter *FlowLogListResultIterator) NextWithContext(ctx context.Context) (err error) {
15819	if tracing.IsEnabled() {
15820		ctx = tracing.StartSpan(ctx, fqdn+"/FlowLogListResultIterator.NextWithContext")
15821		defer func() {
15822			sc := -1
15823			if iter.Response().Response.Response != nil {
15824				sc = iter.Response().Response.Response.StatusCode
15825			}
15826			tracing.EndSpan(ctx, sc, err)
15827		}()
15828	}
15829	iter.i++
15830	if iter.i < len(iter.page.Values()) {
15831		return nil
15832	}
15833	err = iter.page.NextWithContext(ctx)
15834	if err != nil {
15835		iter.i--
15836		return err
15837	}
15838	iter.i = 0
15839	return nil
15840}
15841
15842// Next advances to the next value.  If there was an error making
15843// the request the iterator does not advance and the error is returned.
15844// Deprecated: Use NextWithContext() instead.
15845func (iter *FlowLogListResultIterator) Next() error {
15846	return iter.NextWithContext(context.Background())
15847}
15848
15849// NotDone returns true if the enumeration should be started or is not yet complete.
15850func (iter FlowLogListResultIterator) NotDone() bool {
15851	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15852}
15853
15854// Response returns the raw server response from the last page request.
15855func (iter FlowLogListResultIterator) Response() FlowLogListResult {
15856	return iter.page.Response()
15857}
15858
15859// Value returns the current value or a zero-initialized value if the
15860// iterator has advanced beyond the end of the collection.
15861func (iter FlowLogListResultIterator) Value() FlowLog {
15862	if !iter.page.NotDone() {
15863		return FlowLog{}
15864	}
15865	return iter.page.Values()[iter.i]
15866}
15867
15868// Creates a new instance of the FlowLogListResultIterator type.
15869func NewFlowLogListResultIterator(page FlowLogListResultPage) FlowLogListResultIterator {
15870	return FlowLogListResultIterator{page: page}
15871}
15872
15873// IsEmpty returns true if the ListResult contains no values.
15874func (fllr FlowLogListResult) IsEmpty() bool {
15875	return fllr.Value == nil || len(*fllr.Value) == 0
15876}
15877
15878// flowLogListResultPreparer prepares a request to retrieve the next set of results.
15879// It returns nil if no more results exist.
15880func (fllr FlowLogListResult) flowLogListResultPreparer(ctx context.Context) (*http.Request, error) {
15881	if fllr.NextLink == nil || len(to.String(fllr.NextLink)) < 1 {
15882		return nil, nil
15883	}
15884	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15885		autorest.AsJSON(),
15886		autorest.AsGet(),
15887		autorest.WithBaseURL(to.String(fllr.NextLink)))
15888}
15889
15890// FlowLogListResultPage contains a page of FlowLog values.
15891type FlowLogListResultPage struct {
15892	fn   func(context.Context, FlowLogListResult) (FlowLogListResult, error)
15893	fllr FlowLogListResult
15894}
15895
15896// NextWithContext advances to the next page of values.  If there was an error making
15897// the request the page does not advance and the error is returned.
15898func (page *FlowLogListResultPage) NextWithContext(ctx context.Context) (err error) {
15899	if tracing.IsEnabled() {
15900		ctx = tracing.StartSpan(ctx, fqdn+"/FlowLogListResultPage.NextWithContext")
15901		defer func() {
15902			sc := -1
15903			if page.Response().Response.Response != nil {
15904				sc = page.Response().Response.Response.StatusCode
15905			}
15906			tracing.EndSpan(ctx, sc, err)
15907		}()
15908	}
15909	next, err := page.fn(ctx, page.fllr)
15910	if err != nil {
15911		return err
15912	}
15913	page.fllr = next
15914	return nil
15915}
15916
15917// Next advances to the next page of values.  If there was an error making
15918// the request the page does not advance and the error is returned.
15919// Deprecated: Use NextWithContext() instead.
15920func (page *FlowLogListResultPage) Next() error {
15921	return page.NextWithContext(context.Background())
15922}
15923
15924// NotDone returns true if the page enumeration should be started or is not yet complete.
15925func (page FlowLogListResultPage) NotDone() bool {
15926	return !page.fllr.IsEmpty()
15927}
15928
15929// Response returns the raw server response from the last page request.
15930func (page FlowLogListResultPage) Response() FlowLogListResult {
15931	return page.fllr
15932}
15933
15934// Values returns the slice of values for the current page or nil if there are no values.
15935func (page FlowLogListResultPage) Values() []FlowLog {
15936	if page.fllr.IsEmpty() {
15937		return nil
15938	}
15939	return *page.fllr.Value
15940}
15941
15942// Creates a new instance of the FlowLogListResultPage type.
15943func NewFlowLogListResultPage(getNextPage func(context.Context, FlowLogListResult) (FlowLogListResult, error)) FlowLogListResultPage {
15944	return FlowLogListResultPage{fn: getNextPage}
15945}
15946
15947// FlowLogProperties parameters that define the configuration of flow log.
15948type FlowLogProperties struct {
15949	// StorageID - ID of the storage account which is used to store the flow log.
15950	StorageID *string `json:"storageId,omitempty"`
15951	// Enabled - Flag to enable/disable flow logging.
15952	Enabled *bool `json:"enabled,omitempty"`
15953	// RetentionPolicy - Parameters that define the retention policy for flow log.
15954	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
15955	// Format - Parameters that define the flow log format.
15956	Format *FlowLogFormatParameters `json:"format,omitempty"`
15957}
15958
15959// FlowLogPropertiesFormat parameters that define the configuration of flow log.
15960type FlowLogPropertiesFormat struct {
15961	// TargetResourceID - ID of network security group to which flow log will be applied.
15962	TargetResourceID *string `json:"targetResourceId,omitempty"`
15963	// TargetResourceGUID - READ-ONLY; Guid of network security group to which flow log will be applied.
15964	TargetResourceGUID *string `json:"targetResourceGuid,omitempty"`
15965	// StorageID - ID of the storage account which is used to store the flow log.
15966	StorageID *string `json:"storageId,omitempty"`
15967	// Enabled - Flag to enable/disable flow logging.
15968	Enabled *bool `json:"enabled,omitempty"`
15969	// RetentionPolicy - Parameters that define the retention policy for flow log.
15970	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
15971	// Format - Parameters that define the flow log format.
15972	Format *FlowLogFormatParameters `json:"format,omitempty"`
15973	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
15974	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
15975	// ProvisioningState - READ-ONLY; The provisioning state of the flow log. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15976	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15977}
15978
15979// FlowLogsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
15980// operation.
15981type FlowLogsCreateOrUpdateFuture struct {
15982	azure.Future
15983}
15984
15985// Result returns the result of the asynchronous operation.
15986// If the operation has not completed it will return an error.
15987func (future *FlowLogsCreateOrUpdateFuture) Result(client FlowLogsClient) (fl FlowLog, err error) {
15988	var done bool
15989	done, err = future.DoneWithContext(context.Background(), client)
15990	if err != nil {
15991		err = autorest.NewErrorWithError(err, "network.FlowLogsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15992		return
15993	}
15994	if !done {
15995		err = azure.NewAsyncOpIncompleteError("network.FlowLogsCreateOrUpdateFuture")
15996		return
15997	}
15998	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15999	if fl.Response.Response, err = future.GetResult(sender); err == nil && fl.Response.Response.StatusCode != http.StatusNoContent {
16000		fl, err = client.CreateOrUpdateResponder(fl.Response.Response)
16001		if err != nil {
16002			err = autorest.NewErrorWithError(err, "network.FlowLogsCreateOrUpdateFuture", "Result", fl.Response.Response, "Failure responding to request")
16003		}
16004	}
16005	return
16006}
16007
16008// FlowLogsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
16009// operation.
16010type FlowLogsDeleteFuture struct {
16011	azure.Future
16012}
16013
16014// Result returns the result of the asynchronous operation.
16015// If the operation has not completed it will return an error.
16016func (future *FlowLogsDeleteFuture) Result(client FlowLogsClient) (ar autorest.Response, err error) {
16017	var done bool
16018	done, err = future.DoneWithContext(context.Background(), client)
16019	if err != nil {
16020		err = autorest.NewErrorWithError(err, "network.FlowLogsDeleteFuture", "Result", future.Response(), "Polling failure")
16021		return
16022	}
16023	if !done {
16024		err = azure.NewAsyncOpIncompleteError("network.FlowLogsDeleteFuture")
16025		return
16026	}
16027	ar.Response = future.Response()
16028	return
16029}
16030
16031// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
16032// (optional) status.
16033type FlowLogStatusParameters struct {
16034	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
16035	TargetResourceID *string `json:"targetResourceId,omitempty"`
16036}
16037
16038// FrontendIPConfiguration frontend IP address of the load balancer.
16039type FrontendIPConfiguration struct {
16040	autorest.Response `json:"-"`
16041	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
16042	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
16043	// Name - The name of the resource that is unique within the set of frontend IP configurations used by the load balancer. This name can be used to access the resource.
16044	Name *string `json:"name,omitempty"`
16045	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16046	Etag *string `json:"etag,omitempty"`
16047	// Type - READ-ONLY; Type of the resource.
16048	Type *string `json:"type,omitempty"`
16049	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
16050	Zones *[]string `json:"zones,omitempty"`
16051	// ID - Resource ID.
16052	ID *string `json:"id,omitempty"`
16053}
16054
16055// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
16056func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
16057	objectMap := make(map[string]interface{})
16058	if fic.FrontendIPConfigurationPropertiesFormat != nil {
16059		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
16060	}
16061	if fic.Name != nil {
16062		objectMap["name"] = fic.Name
16063	}
16064	if fic.Zones != nil {
16065		objectMap["zones"] = fic.Zones
16066	}
16067	if fic.ID != nil {
16068		objectMap["id"] = fic.ID
16069	}
16070	return json.Marshal(objectMap)
16071}
16072
16073// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
16074func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
16075	var m map[string]*json.RawMessage
16076	err := json.Unmarshal(body, &m)
16077	if err != nil {
16078		return err
16079	}
16080	for k, v := range m {
16081		switch k {
16082		case "properties":
16083			if v != nil {
16084				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
16085				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
16086				if err != nil {
16087					return err
16088				}
16089				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
16090			}
16091		case "name":
16092			if v != nil {
16093				var name string
16094				err = json.Unmarshal(*v, &name)
16095				if err != nil {
16096					return err
16097				}
16098				fic.Name = &name
16099			}
16100		case "etag":
16101			if v != nil {
16102				var etag string
16103				err = json.Unmarshal(*v, &etag)
16104				if err != nil {
16105					return err
16106				}
16107				fic.Etag = &etag
16108			}
16109		case "type":
16110			if v != nil {
16111				var typeVar string
16112				err = json.Unmarshal(*v, &typeVar)
16113				if err != nil {
16114					return err
16115				}
16116				fic.Type = &typeVar
16117			}
16118		case "zones":
16119			if v != nil {
16120				var zones []string
16121				err = json.Unmarshal(*v, &zones)
16122				if err != nil {
16123					return err
16124				}
16125				fic.Zones = &zones
16126			}
16127		case "id":
16128			if v != nil {
16129				var ID string
16130				err = json.Unmarshal(*v, &ID)
16131				if err != nil {
16132					return err
16133				}
16134				fic.ID = &ID
16135			}
16136		}
16137	}
16138
16139	return nil
16140}
16141
16142// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
16143type FrontendIPConfigurationPropertiesFormat struct {
16144	// InboundNatRules - READ-ONLY; An array of references to inbound rules that use this frontend IP.
16145	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
16146	// InboundNatPools - READ-ONLY; An array of references to inbound pools that use this frontend IP.
16147	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
16148	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this frontend IP.
16149	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
16150	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this frontend IP.
16151	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
16152	// PrivateIPAddress - The private IP address of the IP configuration.
16153	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
16154	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic'
16155	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
16156	// PrivateIPAddressVersion - Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
16157	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
16158	// Subnet - The reference to the subnet resource.
16159	Subnet *Subnet `json:"subnet,omitempty"`
16160	// PublicIPAddress - The reference to the Public IP resource.
16161	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
16162	// PublicIPPrefix - The reference to the Public IP Prefix resource.
16163	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
16164	// ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16165	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16166}
16167
16168// GatewayRoute gateway routing details.
16169type GatewayRoute struct {
16170	// LocalAddress - READ-ONLY; The gateway's local address.
16171	LocalAddress *string `json:"localAddress,omitempty"`
16172	// NetworkProperty - READ-ONLY; The route's network prefix.
16173	NetworkProperty *string `json:"network,omitempty"`
16174	// NextHop - READ-ONLY; The route's next hop.
16175	NextHop *string `json:"nextHop,omitempty"`
16176	// SourcePeer - READ-ONLY; The peer this route was learned from.
16177	SourcePeer *string `json:"sourcePeer,omitempty"`
16178	// Origin - READ-ONLY; The source this route was learned from.
16179	Origin *string `json:"origin,omitempty"`
16180	// AsPath - READ-ONLY; The route's AS path sequence.
16181	AsPath *string `json:"asPath,omitempty"`
16182	// Weight - READ-ONLY; The route's weight.
16183	Weight *int32 `json:"weight,omitempty"`
16184}
16185
16186// GatewayRouteListResult list of virtual network gateway routes.
16187type GatewayRouteListResult struct {
16188	autorest.Response `json:"-"`
16189	// Value - List of gateway routes.
16190	Value *[]GatewayRoute `json:"value,omitempty"`
16191}
16192
16193// GeneratevirtualwanvpnserverconfigurationvpnprofileFuture an abstraction for monitoring and retrieving
16194// the results of a long-running operation.
16195type GeneratevirtualwanvpnserverconfigurationvpnprofileFuture struct {
16196	azure.Future
16197}
16198
16199// Result returns the result of the asynchronous operation.
16200// If the operation has not completed it will return an error.
16201func (future *GeneratevirtualwanvpnserverconfigurationvpnprofileFuture) Result(client BaseClient) (vpr VpnProfileResponse, err error) {
16202	var done bool
16203	done, err = future.DoneWithContext(context.Background(), client)
16204	if err != nil {
16205		err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", future.Response(), "Polling failure")
16206		return
16207	}
16208	if !done {
16209		err = azure.NewAsyncOpIncompleteError("network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture")
16210		return
16211	}
16212	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16213	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
16214		vpr, err = client.GeneratevirtualwanvpnserverconfigurationvpnprofileResponder(vpr.Response.Response)
16215		if err != nil {
16216			err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", vpr.Response.Response, "Failure responding to request")
16217		}
16218	}
16219	return
16220}
16221
16222// GetActiveSessionsAllFuture an abstraction for monitoring and retrieving the results of a long-running
16223// operation.
16224type GetActiveSessionsAllFuture struct {
16225	azure.Future
16226}
16227
16228// Result returns the result of the asynchronous operation.
16229// If the operation has not completed it will return an error.
16230func (future *GetActiveSessionsAllFuture) Result(client BaseClient) (baslrp BastionActiveSessionListResultPage, err error) {
16231	var done bool
16232	done, err = future.DoneWithContext(context.Background(), client)
16233	if err != nil {
16234		err = autorest.NewErrorWithError(err, "network.GetActiveSessionsAllFuture", "Result", future.Response(), "Polling failure")
16235		return
16236	}
16237	if !done {
16238		err = azure.NewAsyncOpIncompleteError("network.GetActiveSessionsAllFuture")
16239		return
16240	}
16241	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16242	if baslrp.baslr.Response.Response, err = future.GetResult(sender); err == nil && baslrp.baslr.Response.Response.StatusCode != http.StatusNoContent {
16243		baslrp, err = client.GetActiveSessionsResponder(baslrp.baslr.Response.Response)
16244		if err != nil {
16245			err = autorest.NewErrorWithError(err, "network.GetActiveSessionsAllFuture", "Result", baslrp.baslr.Response.Response, "Failure responding to request")
16246		}
16247	}
16248	return
16249}
16250
16251// GetActiveSessionsFuture an abstraction for monitoring and retrieving the results of a long-running
16252// operation.
16253type GetActiveSessionsFuture struct {
16254	azure.Future
16255}
16256
16257// Result returns the result of the asynchronous operation.
16258// If the operation has not completed it will return an error.
16259func (future *GetActiveSessionsFuture) Result(client BaseClient) (baslrp BastionActiveSessionListResultPage, err error) {
16260	var done bool
16261	done, err = future.DoneWithContext(context.Background(), client)
16262	if err != nil {
16263		err = autorest.NewErrorWithError(err, "network.GetActiveSessionsFuture", "Result", future.Response(), "Polling failure")
16264		return
16265	}
16266	if !done {
16267		err = azure.NewAsyncOpIncompleteError("network.GetActiveSessionsFuture")
16268		return
16269	}
16270	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16271	if baslrp.baslr.Response.Response, err = future.GetResult(sender); err == nil && baslrp.baslr.Response.Response.StatusCode != http.StatusNoContent {
16272		baslrp, err = client.GetActiveSessionsResponder(baslrp.baslr.Response.Response)
16273		if err != nil {
16274			err = autorest.NewErrorWithError(err, "network.GetActiveSessionsFuture", "Result", baslrp.baslr.Response.Response, "Failure responding to request")
16275		}
16276	}
16277	return
16278}
16279
16280// GetVpnSitesConfigurationRequest list of Vpn-Sites.
16281type GetVpnSitesConfigurationRequest struct {
16282	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
16283	VpnSites *[]string `json:"vpnSites,omitempty"`
16284	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites.
16285	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
16286}
16287
16288// HTTPConfiguration HTTP configuration of the connectivity check.
16289type HTTPConfiguration struct {
16290	// Method - HTTP method. Possible values include: 'HTTPMethodGet'
16291	Method HTTPMethod `json:"method,omitempty"`
16292	// Headers - List of HTTP headers.
16293	Headers *[]HTTPHeader `json:"headers,omitempty"`
16294	// ValidStatusCodes - Valid status codes.
16295	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
16296}
16297
16298// HTTPHeader the HTTP header.
16299type HTTPHeader struct {
16300	// Name - The name in HTTP header.
16301	Name *string `json:"name,omitempty"`
16302	// Value - The value in HTTP header.
16303	Value *string `json:"value,omitempty"`
16304}
16305
16306// HubIPAddresses IP addresses associated with azure firewall.
16307type HubIPAddresses struct {
16308	// PublicIPAddresses - List of Public IP addresses associated with azure firewall.
16309	PublicIPAddresses *[]AzureFirewallPublicIPAddress `json:"publicIPAddresses,omitempty"`
16310	// PrivateIPAddress - Private IP Address associated with azure firewall.
16311	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
16312}
16313
16314// HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
16315type HubVirtualNetworkConnection struct {
16316	autorest.Response `json:"-"`
16317	// HubVirtualNetworkConnectionProperties - Properties of the hub virtual network connection.
16318	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
16319	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16320	Name *string `json:"name,omitempty"`
16321	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16322	Etag *string `json:"etag,omitempty"`
16323	// ID - Resource ID.
16324	ID *string `json:"id,omitempty"`
16325}
16326
16327// MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
16328func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
16329	objectMap := make(map[string]interface{})
16330	if hvnc.HubVirtualNetworkConnectionProperties != nil {
16331		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
16332	}
16333	if hvnc.Name != nil {
16334		objectMap["name"] = hvnc.Name
16335	}
16336	if hvnc.ID != nil {
16337		objectMap["id"] = hvnc.ID
16338	}
16339	return json.Marshal(objectMap)
16340}
16341
16342// UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
16343func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
16344	var m map[string]*json.RawMessage
16345	err := json.Unmarshal(body, &m)
16346	if err != nil {
16347		return err
16348	}
16349	for k, v := range m {
16350		switch k {
16351		case "properties":
16352			if v != nil {
16353				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
16354				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
16355				if err != nil {
16356					return err
16357				}
16358				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
16359			}
16360		case "name":
16361			if v != nil {
16362				var name string
16363				err = json.Unmarshal(*v, &name)
16364				if err != nil {
16365					return err
16366				}
16367				hvnc.Name = &name
16368			}
16369		case "etag":
16370			if v != nil {
16371				var etag string
16372				err = json.Unmarshal(*v, &etag)
16373				if err != nil {
16374					return err
16375				}
16376				hvnc.Etag = &etag
16377			}
16378		case "id":
16379			if v != nil {
16380				var ID string
16381				err = json.Unmarshal(*v, &ID)
16382				if err != nil {
16383					return err
16384				}
16385				hvnc.ID = &ID
16386			}
16387		}
16388	}
16389
16390	return nil
16391}
16392
16393// HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection.
16394type HubVirtualNetworkConnectionProperties struct {
16395	// RemoteVirtualNetwork - Reference to the remote virtual network.
16396	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
16397	// AllowHubToRemoteVnetTransit - VirtualHub to RemoteVnet transit to enabled or not.
16398	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
16399	// AllowRemoteVnetToUseHubVnetGateways - Allow RemoteVnet to use Virtual Hub's gateways.
16400	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
16401	// EnableInternetSecurity - Enable internet security.
16402	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
16403	// ProvisioningState - READ-ONLY; The provisioning state of the hub virtual network connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16404	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16405}
16406
16407// InboundNatPool inbound NAT pool of the load balancer.
16408type InboundNatPool struct {
16409	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
16410	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
16411	// Name - The name of the resource that is unique within the set of inbound NAT pools used by the load balancer. This name can be used to access the resource.
16412	Name *string `json:"name,omitempty"`
16413	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16414	Etag *string `json:"etag,omitempty"`
16415	// Type - READ-ONLY; Type of the resource.
16416	Type *string `json:"type,omitempty"`
16417	// ID - Resource ID.
16418	ID *string `json:"id,omitempty"`
16419}
16420
16421// MarshalJSON is the custom marshaler for InboundNatPool.
16422func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
16423	objectMap := make(map[string]interface{})
16424	if inp.InboundNatPoolPropertiesFormat != nil {
16425		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
16426	}
16427	if inp.Name != nil {
16428		objectMap["name"] = inp.Name
16429	}
16430	if inp.ID != nil {
16431		objectMap["id"] = inp.ID
16432	}
16433	return json.Marshal(objectMap)
16434}
16435
16436// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
16437func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
16438	var m map[string]*json.RawMessage
16439	err := json.Unmarshal(body, &m)
16440	if err != nil {
16441		return err
16442	}
16443	for k, v := range m {
16444		switch k {
16445		case "properties":
16446			if v != nil {
16447				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
16448				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
16449				if err != nil {
16450					return err
16451				}
16452				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
16453			}
16454		case "name":
16455			if v != nil {
16456				var name string
16457				err = json.Unmarshal(*v, &name)
16458				if err != nil {
16459					return err
16460				}
16461				inp.Name = &name
16462			}
16463		case "etag":
16464			if v != nil {
16465				var etag string
16466				err = json.Unmarshal(*v, &etag)
16467				if err != nil {
16468					return err
16469				}
16470				inp.Etag = &etag
16471			}
16472		case "type":
16473			if v != nil {
16474				var typeVar string
16475				err = json.Unmarshal(*v, &typeVar)
16476				if err != nil {
16477					return err
16478				}
16479				inp.Type = &typeVar
16480			}
16481		case "id":
16482			if v != nil {
16483				var ID string
16484				err = json.Unmarshal(*v, &ID)
16485				if err != nil {
16486					return err
16487				}
16488				inp.ID = &ID
16489			}
16490		}
16491	}
16492
16493	return nil
16494}
16495
16496// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
16497type InboundNatPoolPropertiesFormat struct {
16498	// FrontendIPConfiguration - A reference to frontend IP addresses.
16499	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
16500	// Protocol - The reference to the transport protocol used by the inbound NAT pool. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
16501	Protocol TransportProtocol `json:"protocol,omitempty"`
16502	// 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.
16503	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
16504	// 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.
16505	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
16506	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
16507	BackendPort *int32 `json:"backendPort,omitempty"`
16508	// 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.
16509	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
16510	// 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.
16511	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
16512	// 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.
16513	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
16514	// ProvisioningState - READ-ONLY; The provisioning state of the inbound NAT pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16515	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16516}
16517
16518// InboundNatRule inbound NAT rule of the load balancer.
16519type InboundNatRule struct {
16520	autorest.Response `json:"-"`
16521	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
16522	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
16523	// Name - The name of the resource that is unique within the set of inbound NAT rules used by the load balancer. This name can be used to access the resource.
16524	Name *string `json:"name,omitempty"`
16525	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16526	Etag *string `json:"etag,omitempty"`
16527	// Type - READ-ONLY; Type of the resource.
16528	Type *string `json:"type,omitempty"`
16529	// ID - Resource ID.
16530	ID *string `json:"id,omitempty"`
16531}
16532
16533// MarshalJSON is the custom marshaler for InboundNatRule.
16534func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
16535	objectMap := make(map[string]interface{})
16536	if inr.InboundNatRulePropertiesFormat != nil {
16537		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
16538	}
16539	if inr.Name != nil {
16540		objectMap["name"] = inr.Name
16541	}
16542	if inr.ID != nil {
16543		objectMap["id"] = inr.ID
16544	}
16545	return json.Marshal(objectMap)
16546}
16547
16548// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
16549func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
16550	var m map[string]*json.RawMessage
16551	err := json.Unmarshal(body, &m)
16552	if err != nil {
16553		return err
16554	}
16555	for k, v := range m {
16556		switch k {
16557		case "properties":
16558			if v != nil {
16559				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
16560				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
16561				if err != nil {
16562					return err
16563				}
16564				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
16565			}
16566		case "name":
16567			if v != nil {
16568				var name string
16569				err = json.Unmarshal(*v, &name)
16570				if err != nil {
16571					return err
16572				}
16573				inr.Name = &name
16574			}
16575		case "etag":
16576			if v != nil {
16577				var etag string
16578				err = json.Unmarshal(*v, &etag)
16579				if err != nil {
16580					return err
16581				}
16582				inr.Etag = &etag
16583			}
16584		case "type":
16585			if v != nil {
16586				var typeVar string
16587				err = json.Unmarshal(*v, &typeVar)
16588				if err != nil {
16589					return err
16590				}
16591				inr.Type = &typeVar
16592			}
16593		case "id":
16594			if v != nil {
16595				var ID string
16596				err = json.Unmarshal(*v, &ID)
16597				if err != nil {
16598					return err
16599				}
16600				inr.ID = &ID
16601			}
16602		}
16603	}
16604
16605	return nil
16606}
16607
16608// InboundNatRuleListResult response for ListInboundNatRule API service call.
16609type InboundNatRuleListResult struct {
16610	autorest.Response `json:"-"`
16611	// Value - A list of inbound nat rules in a load balancer.
16612	Value *[]InboundNatRule `json:"value,omitempty"`
16613	// NextLink - READ-ONLY; The URL to get the next set of results.
16614	NextLink *string `json:"nextLink,omitempty"`
16615}
16616
16617// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
16618type InboundNatRuleListResultIterator struct {
16619	i    int
16620	page InboundNatRuleListResultPage
16621}
16622
16623// NextWithContext advances to the next value.  If there was an error making
16624// the request the iterator does not advance and the error is returned.
16625func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
16626	if tracing.IsEnabled() {
16627		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
16628		defer func() {
16629			sc := -1
16630			if iter.Response().Response.Response != nil {
16631				sc = iter.Response().Response.Response.StatusCode
16632			}
16633			tracing.EndSpan(ctx, sc, err)
16634		}()
16635	}
16636	iter.i++
16637	if iter.i < len(iter.page.Values()) {
16638		return nil
16639	}
16640	err = iter.page.NextWithContext(ctx)
16641	if err != nil {
16642		iter.i--
16643		return err
16644	}
16645	iter.i = 0
16646	return nil
16647}
16648
16649// Next advances to the next value.  If there was an error making
16650// the request the iterator does not advance and the error is returned.
16651// Deprecated: Use NextWithContext() instead.
16652func (iter *InboundNatRuleListResultIterator) Next() error {
16653	return iter.NextWithContext(context.Background())
16654}
16655
16656// NotDone returns true if the enumeration should be started or is not yet complete.
16657func (iter InboundNatRuleListResultIterator) NotDone() bool {
16658	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16659}
16660
16661// Response returns the raw server response from the last page request.
16662func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
16663	return iter.page.Response()
16664}
16665
16666// Value returns the current value or a zero-initialized value if the
16667// iterator has advanced beyond the end of the collection.
16668func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
16669	if !iter.page.NotDone() {
16670		return InboundNatRule{}
16671	}
16672	return iter.page.Values()[iter.i]
16673}
16674
16675// Creates a new instance of the InboundNatRuleListResultIterator type.
16676func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
16677	return InboundNatRuleListResultIterator{page: page}
16678}
16679
16680// IsEmpty returns true if the ListResult contains no values.
16681func (inrlr InboundNatRuleListResult) IsEmpty() bool {
16682	return inrlr.Value == nil || len(*inrlr.Value) == 0
16683}
16684
16685// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
16686// It returns nil if no more results exist.
16687func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
16688	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
16689		return nil, nil
16690	}
16691	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16692		autorest.AsJSON(),
16693		autorest.AsGet(),
16694		autorest.WithBaseURL(to.String(inrlr.NextLink)))
16695}
16696
16697// InboundNatRuleListResultPage contains a page of InboundNatRule values.
16698type InboundNatRuleListResultPage struct {
16699	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
16700	inrlr InboundNatRuleListResult
16701}
16702
16703// NextWithContext advances to the next page of values.  If there was an error making
16704// the request the page does not advance and the error is returned.
16705func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
16706	if tracing.IsEnabled() {
16707		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
16708		defer func() {
16709			sc := -1
16710			if page.Response().Response.Response != nil {
16711				sc = page.Response().Response.Response.StatusCode
16712			}
16713			tracing.EndSpan(ctx, sc, err)
16714		}()
16715	}
16716	next, err := page.fn(ctx, page.inrlr)
16717	if err != nil {
16718		return err
16719	}
16720	page.inrlr = next
16721	return nil
16722}
16723
16724// Next advances to the next page of values.  If there was an error making
16725// the request the page does not advance and the error is returned.
16726// Deprecated: Use NextWithContext() instead.
16727func (page *InboundNatRuleListResultPage) Next() error {
16728	return page.NextWithContext(context.Background())
16729}
16730
16731// NotDone returns true if the page enumeration should be started or is not yet complete.
16732func (page InboundNatRuleListResultPage) NotDone() bool {
16733	return !page.inrlr.IsEmpty()
16734}
16735
16736// Response returns the raw server response from the last page request.
16737func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
16738	return page.inrlr
16739}
16740
16741// Values returns the slice of values for the current page or nil if there are no values.
16742func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
16743	if page.inrlr.IsEmpty() {
16744		return nil
16745	}
16746	return *page.inrlr.Value
16747}
16748
16749// Creates a new instance of the InboundNatRuleListResultPage type.
16750func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
16751	return InboundNatRuleListResultPage{fn: getNextPage}
16752}
16753
16754// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
16755type InboundNatRulePropertiesFormat struct {
16756	// FrontendIPConfiguration - A reference to frontend IP addresses.
16757	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
16758	// 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.
16759	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
16760	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
16761	Protocol TransportProtocol `json:"protocol,omitempty"`
16762	// 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.
16763	FrontendPort *int32 `json:"frontendPort,omitempty"`
16764	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
16765	BackendPort *int32 `json:"backendPort,omitempty"`
16766	// 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.
16767	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
16768	// 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.
16769	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
16770	// 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.
16771	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
16772	// ProvisioningState - READ-ONLY; The provisioning state of the inbound NAT rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16773	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16774}
16775
16776// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
16777// long-running operation.
16778type InboundNatRulesCreateOrUpdateFuture struct {
16779	azure.Future
16780}
16781
16782// Result returns the result of the asynchronous operation.
16783// If the operation has not completed it will return an error.
16784func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
16785	var done bool
16786	done, err = future.DoneWithContext(context.Background(), client)
16787	if err != nil {
16788		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16789		return
16790	}
16791	if !done {
16792		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
16793		return
16794	}
16795	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16796	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
16797		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
16798		if err != nil {
16799			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
16800		}
16801	}
16802	return
16803}
16804
16805// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
16806// operation.
16807type InboundNatRulesDeleteFuture struct {
16808	azure.Future
16809}
16810
16811// Result returns the result of the asynchronous operation.
16812// If the operation has not completed it will return an error.
16813func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
16814	var done bool
16815	done, err = future.DoneWithContext(context.Background(), client)
16816	if err != nil {
16817		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
16818		return
16819	}
16820	if !done {
16821		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
16822		return
16823	}
16824	ar.Response = future.Response()
16825	return
16826}
16827
16828// IntentPolicy network Intent Policy resource.
16829type IntentPolicy struct {
16830	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16831	Etag *string `json:"etag,omitempty"`
16832	// ID - Resource ID.
16833	ID *string `json:"id,omitempty"`
16834	// Name - READ-ONLY; Resource name.
16835	Name *string `json:"name,omitempty"`
16836	// Type - READ-ONLY; Resource type.
16837	Type *string `json:"type,omitempty"`
16838	// Location - Resource location.
16839	Location *string `json:"location,omitempty"`
16840	// Tags - Resource tags.
16841	Tags map[string]*string `json:"tags"`
16842}
16843
16844// MarshalJSON is the custom marshaler for IntentPolicy.
16845func (IP IntentPolicy) MarshalJSON() ([]byte, error) {
16846	objectMap := make(map[string]interface{})
16847	if IP.ID != nil {
16848		objectMap["id"] = IP.ID
16849	}
16850	if IP.Location != nil {
16851		objectMap["location"] = IP.Location
16852	}
16853	if IP.Tags != nil {
16854		objectMap["tags"] = IP.Tags
16855	}
16856	return json.Marshal(objectMap)
16857}
16858
16859// IntentPolicyConfiguration details of NetworkIntentPolicyConfiguration for PrepareNetworkPoliciesRequest.
16860type IntentPolicyConfiguration struct {
16861	// NetworkIntentPolicyName - The name of the Network Intent Policy for storing in target subscription.
16862	NetworkIntentPolicyName *string `json:"networkIntentPolicyName,omitempty"`
16863	// SourceNetworkIntentPolicy - Source network intent policy.
16864	SourceNetworkIntentPolicy *IntentPolicy `json:"sourceNetworkIntentPolicy,omitempty"`
16865}
16866
16867// Interface a network interface in a resource group.
16868type Interface struct {
16869	autorest.Response `json:"-"`
16870	// InterfacePropertiesFormat - Properties of the network interface.
16871	*InterfacePropertiesFormat `json:"properties,omitempty"`
16872	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16873	Etag *string `json:"etag,omitempty"`
16874	// ID - Resource ID.
16875	ID *string `json:"id,omitempty"`
16876	// Name - READ-ONLY; Resource name.
16877	Name *string `json:"name,omitempty"`
16878	// Type - READ-ONLY; Resource type.
16879	Type *string `json:"type,omitempty"`
16880	// Location - Resource location.
16881	Location *string `json:"location,omitempty"`
16882	// Tags - Resource tags.
16883	Tags map[string]*string `json:"tags"`
16884}
16885
16886// MarshalJSON is the custom marshaler for Interface.
16887func (i Interface) MarshalJSON() ([]byte, error) {
16888	objectMap := make(map[string]interface{})
16889	if i.InterfacePropertiesFormat != nil {
16890		objectMap["properties"] = i.InterfacePropertiesFormat
16891	}
16892	if i.ID != nil {
16893		objectMap["id"] = i.ID
16894	}
16895	if i.Location != nil {
16896		objectMap["location"] = i.Location
16897	}
16898	if i.Tags != nil {
16899		objectMap["tags"] = i.Tags
16900	}
16901	return json.Marshal(objectMap)
16902}
16903
16904// UnmarshalJSON is the custom unmarshaler for Interface struct.
16905func (i *Interface) UnmarshalJSON(body []byte) error {
16906	var m map[string]*json.RawMessage
16907	err := json.Unmarshal(body, &m)
16908	if err != nil {
16909		return err
16910	}
16911	for k, v := range m {
16912		switch k {
16913		case "properties":
16914			if v != nil {
16915				var interfacePropertiesFormat InterfacePropertiesFormat
16916				err = json.Unmarshal(*v, &interfacePropertiesFormat)
16917				if err != nil {
16918					return err
16919				}
16920				i.InterfacePropertiesFormat = &interfacePropertiesFormat
16921			}
16922		case "etag":
16923			if v != nil {
16924				var etag string
16925				err = json.Unmarshal(*v, &etag)
16926				if err != nil {
16927					return err
16928				}
16929				i.Etag = &etag
16930			}
16931		case "id":
16932			if v != nil {
16933				var ID string
16934				err = json.Unmarshal(*v, &ID)
16935				if err != nil {
16936					return err
16937				}
16938				i.ID = &ID
16939			}
16940		case "name":
16941			if v != nil {
16942				var name string
16943				err = json.Unmarshal(*v, &name)
16944				if err != nil {
16945					return err
16946				}
16947				i.Name = &name
16948			}
16949		case "type":
16950			if v != nil {
16951				var typeVar string
16952				err = json.Unmarshal(*v, &typeVar)
16953				if err != nil {
16954					return err
16955				}
16956				i.Type = &typeVar
16957			}
16958		case "location":
16959			if v != nil {
16960				var location string
16961				err = json.Unmarshal(*v, &location)
16962				if err != nil {
16963					return err
16964				}
16965				i.Location = &location
16966			}
16967		case "tags":
16968			if v != nil {
16969				var tags map[string]*string
16970				err = json.Unmarshal(*v, &tags)
16971				if err != nil {
16972					return err
16973				}
16974				i.Tags = tags
16975			}
16976		}
16977	}
16978
16979	return nil
16980}
16981
16982// InterfaceAssociation network interface and its custom security rules.
16983type InterfaceAssociation struct {
16984	// ID - READ-ONLY; Network interface ID.
16985	ID *string `json:"id,omitempty"`
16986	// SecurityRules - Collection of custom security rules.
16987	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
16988}
16989
16990// InterfaceDNSSettings DNS settings of a network interface.
16991type InterfaceDNSSettings struct {
16992	// 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.
16993	DNSServers *[]string `json:"dnsServers,omitempty"`
16994	// AppliedDNSServers - READ-ONLY; 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.
16995	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
16996	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
16997	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
16998	// InternalFqdn - READ-ONLY; Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
16999	InternalFqdn *string `json:"internalFqdn,omitempty"`
17000	// InternalDomainNameSuffix - READ-ONLY; 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.
17001	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
17002}
17003
17004// InterfaceIPConfiguration iPConfiguration in a network interface.
17005type InterfaceIPConfiguration struct {
17006	autorest.Response `json:"-"`
17007	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
17008	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
17009	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17010	Name *string `json:"name,omitempty"`
17011	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
17012	Etag *string `json:"etag,omitempty"`
17013	// ID - Resource ID.
17014	ID *string `json:"id,omitempty"`
17015}
17016
17017// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
17018func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
17019	objectMap := make(map[string]interface{})
17020	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
17021		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
17022	}
17023	if iic.Name != nil {
17024		objectMap["name"] = iic.Name
17025	}
17026	if iic.ID != nil {
17027		objectMap["id"] = iic.ID
17028	}
17029	return json.Marshal(objectMap)
17030}
17031
17032// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
17033func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
17034	var m map[string]*json.RawMessage
17035	err := json.Unmarshal(body, &m)
17036	if err != nil {
17037		return err
17038	}
17039	for k, v := range m {
17040		switch k {
17041		case "properties":
17042			if v != nil {
17043				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
17044				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
17045				if err != nil {
17046					return err
17047				}
17048				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
17049			}
17050		case "name":
17051			if v != nil {
17052				var name string
17053				err = json.Unmarshal(*v, &name)
17054				if err != nil {
17055					return err
17056				}
17057				iic.Name = &name
17058			}
17059		case "etag":
17060			if v != nil {
17061				var etag string
17062				err = json.Unmarshal(*v, &etag)
17063				if err != nil {
17064					return err
17065				}
17066				iic.Etag = &etag
17067			}
17068		case "id":
17069			if v != nil {
17070				var ID string
17071				err = json.Unmarshal(*v, &ID)
17072				if err != nil {
17073					return err
17074				}
17075				iic.ID = &ID
17076			}
17077		}
17078	}
17079
17080	return nil
17081}
17082
17083// InterfaceIPConfigurationListResult response for list ip configurations API service call.
17084type InterfaceIPConfigurationListResult struct {
17085	autorest.Response `json:"-"`
17086	// Value - A list of ip configurations.
17087	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
17088	// NextLink - READ-ONLY; The URL to get the next set of results.
17089	NextLink *string `json:"nextLink,omitempty"`
17090}
17091
17092// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
17093// InterfaceIPConfiguration values.
17094type InterfaceIPConfigurationListResultIterator struct {
17095	i    int
17096	page InterfaceIPConfigurationListResultPage
17097}
17098
17099// NextWithContext advances to the next value.  If there was an error making
17100// the request the iterator does not advance and the error is returned.
17101func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
17102	if tracing.IsEnabled() {
17103		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
17104		defer func() {
17105			sc := -1
17106			if iter.Response().Response.Response != nil {
17107				sc = iter.Response().Response.Response.StatusCode
17108			}
17109			tracing.EndSpan(ctx, sc, err)
17110		}()
17111	}
17112	iter.i++
17113	if iter.i < len(iter.page.Values()) {
17114		return nil
17115	}
17116	err = iter.page.NextWithContext(ctx)
17117	if err != nil {
17118		iter.i--
17119		return err
17120	}
17121	iter.i = 0
17122	return nil
17123}
17124
17125// Next advances to the next value.  If there was an error making
17126// the request the iterator does not advance and the error is returned.
17127// Deprecated: Use NextWithContext() instead.
17128func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
17129	return iter.NextWithContext(context.Background())
17130}
17131
17132// NotDone returns true if the enumeration should be started or is not yet complete.
17133func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
17134	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17135}
17136
17137// Response returns the raw server response from the last page request.
17138func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
17139	return iter.page.Response()
17140}
17141
17142// Value returns the current value or a zero-initialized value if the
17143// iterator has advanced beyond the end of the collection.
17144func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
17145	if !iter.page.NotDone() {
17146		return InterfaceIPConfiguration{}
17147	}
17148	return iter.page.Values()[iter.i]
17149}
17150
17151// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
17152func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
17153	return InterfaceIPConfigurationListResultIterator{page: page}
17154}
17155
17156// IsEmpty returns true if the ListResult contains no values.
17157func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
17158	return iiclr.Value == nil || len(*iiclr.Value) == 0
17159}
17160
17161// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
17162// It returns nil if no more results exist.
17163func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
17164	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
17165		return nil, nil
17166	}
17167	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17168		autorest.AsJSON(),
17169		autorest.AsGet(),
17170		autorest.WithBaseURL(to.String(iiclr.NextLink)))
17171}
17172
17173// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
17174type InterfaceIPConfigurationListResultPage struct {
17175	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
17176	iiclr InterfaceIPConfigurationListResult
17177}
17178
17179// NextWithContext advances to the next page of values.  If there was an error making
17180// the request the page does not advance and the error is returned.
17181func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
17182	if tracing.IsEnabled() {
17183		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
17184		defer func() {
17185			sc := -1
17186			if page.Response().Response.Response != nil {
17187				sc = page.Response().Response.Response.StatusCode
17188			}
17189			tracing.EndSpan(ctx, sc, err)
17190		}()
17191	}
17192	next, err := page.fn(ctx, page.iiclr)
17193	if err != nil {
17194		return err
17195	}
17196	page.iiclr = next
17197	return nil
17198}
17199
17200// Next advances to the next page of values.  If there was an error making
17201// the request the page does not advance and the error is returned.
17202// Deprecated: Use NextWithContext() instead.
17203func (page *InterfaceIPConfigurationListResultPage) Next() error {
17204	return page.NextWithContext(context.Background())
17205}
17206
17207// NotDone returns true if the page enumeration should be started or is not yet complete.
17208func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
17209	return !page.iiclr.IsEmpty()
17210}
17211
17212// Response returns the raw server response from the last page request.
17213func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
17214	return page.iiclr
17215}
17216
17217// Values returns the slice of values for the current page or nil if there are no values.
17218func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
17219	if page.iiclr.IsEmpty() {
17220		return nil
17221	}
17222	return *page.iiclr.Value
17223}
17224
17225// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
17226func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
17227	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
17228}
17229
17230// InterfaceIPConfigurationPrivateLinkConnectionProperties privateLinkConnection properties for the network
17231// interface.
17232type InterfaceIPConfigurationPrivateLinkConnectionProperties struct {
17233	// GroupID - READ-ONLY; The group ID for current private link connection.
17234	GroupID *string `json:"groupId,omitempty"`
17235	// RequiredMemberName - READ-ONLY; The required member name for current private link connection.
17236	RequiredMemberName *string `json:"requiredMemberName,omitempty"`
17237	// Fqdns - READ-ONLY; List of FQDNs for current private link connection.
17238	Fqdns *[]string `json:"fqdns,omitempty"`
17239}
17240
17241// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
17242type InterfaceIPConfigurationPropertiesFormat struct {
17243	// VirtualNetworkTaps - The reference to Virtual Network Taps.
17244	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
17245	// ApplicationGatewayBackendAddressPools - The reference to ApplicationGatewayBackendAddressPool resource.
17246	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
17247	// LoadBalancerBackendAddressPools - The reference to LoadBalancerBackendAddressPool resource.
17248	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
17249	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
17250	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
17251	// PrivateIPAddress - Private IP address of the IP configuration.
17252	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
17253	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
17254	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
17255	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
17256	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
17257	// Subnet - Subnet bound to the IP configuration.
17258	Subnet *Subnet `json:"subnet,omitempty"`
17259	// Primary - Whether this is a primary customer address on the network interface.
17260	Primary *bool `json:"primary,omitempty"`
17261	// PublicIPAddress - Public IP address bound to the IP configuration.
17262	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
17263	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
17264	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
17265	// ProvisioningState - READ-ONLY; The provisioning state of the network interface IP configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17266	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17267	// PrivateLinkConnectionProperties - READ-ONLY; PrivateLinkConnection properties for the network interface.
17268	PrivateLinkConnectionProperties *InterfaceIPConfigurationPrivateLinkConnectionProperties `json:"privateLinkConnectionProperties,omitempty"`
17269}
17270
17271// InterfaceListResult response for the ListNetworkInterface API service call.
17272type InterfaceListResult struct {
17273	autorest.Response `json:"-"`
17274	// Value - A list of network interfaces in a resource group.
17275	Value *[]Interface `json:"value,omitempty"`
17276	// NextLink - READ-ONLY; The URL to get the next set of results.
17277	NextLink *string `json:"nextLink,omitempty"`
17278}
17279
17280// InterfaceListResultIterator provides access to a complete listing of Interface values.
17281type InterfaceListResultIterator struct {
17282	i    int
17283	page InterfaceListResultPage
17284}
17285
17286// NextWithContext advances to the next value.  If there was an error making
17287// the request the iterator does not advance and the error is returned.
17288func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
17289	if tracing.IsEnabled() {
17290		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
17291		defer func() {
17292			sc := -1
17293			if iter.Response().Response.Response != nil {
17294				sc = iter.Response().Response.Response.StatusCode
17295			}
17296			tracing.EndSpan(ctx, sc, err)
17297		}()
17298	}
17299	iter.i++
17300	if iter.i < len(iter.page.Values()) {
17301		return nil
17302	}
17303	err = iter.page.NextWithContext(ctx)
17304	if err != nil {
17305		iter.i--
17306		return err
17307	}
17308	iter.i = 0
17309	return nil
17310}
17311
17312// Next advances to the next value.  If there was an error making
17313// the request the iterator does not advance and the error is returned.
17314// Deprecated: Use NextWithContext() instead.
17315func (iter *InterfaceListResultIterator) Next() error {
17316	return iter.NextWithContext(context.Background())
17317}
17318
17319// NotDone returns true if the enumeration should be started or is not yet complete.
17320func (iter InterfaceListResultIterator) NotDone() bool {
17321	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17322}
17323
17324// Response returns the raw server response from the last page request.
17325func (iter InterfaceListResultIterator) Response() InterfaceListResult {
17326	return iter.page.Response()
17327}
17328
17329// Value returns the current value or a zero-initialized value if the
17330// iterator has advanced beyond the end of the collection.
17331func (iter InterfaceListResultIterator) Value() Interface {
17332	if !iter.page.NotDone() {
17333		return Interface{}
17334	}
17335	return iter.page.Values()[iter.i]
17336}
17337
17338// Creates a new instance of the InterfaceListResultIterator type.
17339func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
17340	return InterfaceListResultIterator{page: page}
17341}
17342
17343// IsEmpty returns true if the ListResult contains no values.
17344func (ilr InterfaceListResult) IsEmpty() bool {
17345	return ilr.Value == nil || len(*ilr.Value) == 0
17346}
17347
17348// interfaceListResultPreparer prepares a request to retrieve the next set of results.
17349// It returns nil if no more results exist.
17350func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
17351	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
17352		return nil, nil
17353	}
17354	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17355		autorest.AsJSON(),
17356		autorest.AsGet(),
17357		autorest.WithBaseURL(to.String(ilr.NextLink)))
17358}
17359
17360// InterfaceListResultPage contains a page of Interface values.
17361type InterfaceListResultPage struct {
17362	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
17363	ilr InterfaceListResult
17364}
17365
17366// NextWithContext advances to the next page of values.  If there was an error making
17367// the request the page does not advance and the error is returned.
17368func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
17369	if tracing.IsEnabled() {
17370		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
17371		defer func() {
17372			sc := -1
17373			if page.Response().Response.Response != nil {
17374				sc = page.Response().Response.Response.StatusCode
17375			}
17376			tracing.EndSpan(ctx, sc, err)
17377		}()
17378	}
17379	next, err := page.fn(ctx, page.ilr)
17380	if err != nil {
17381		return err
17382	}
17383	page.ilr = next
17384	return nil
17385}
17386
17387// Next advances to the next page of values.  If there was an error making
17388// the request the page does not advance and the error is returned.
17389// Deprecated: Use NextWithContext() instead.
17390func (page *InterfaceListResultPage) Next() error {
17391	return page.NextWithContext(context.Background())
17392}
17393
17394// NotDone returns true if the page enumeration should be started or is not yet complete.
17395func (page InterfaceListResultPage) NotDone() bool {
17396	return !page.ilr.IsEmpty()
17397}
17398
17399// Response returns the raw server response from the last page request.
17400func (page InterfaceListResultPage) Response() InterfaceListResult {
17401	return page.ilr
17402}
17403
17404// Values returns the slice of values for the current page or nil if there are no values.
17405func (page InterfaceListResultPage) Values() []Interface {
17406	if page.ilr.IsEmpty() {
17407		return nil
17408	}
17409	return *page.ilr.Value
17410}
17411
17412// Creates a new instance of the InterfaceListResultPage type.
17413func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
17414	return InterfaceListResultPage{fn: getNextPage}
17415}
17416
17417// InterfaceLoadBalancerListResult response for list ip configurations API service call.
17418type InterfaceLoadBalancerListResult struct {
17419	autorest.Response `json:"-"`
17420	// Value - A list of load balancers.
17421	Value *[]LoadBalancer `json:"value,omitempty"`
17422	// NextLink - READ-ONLY; The URL to get the next set of results.
17423	NextLink *string `json:"nextLink,omitempty"`
17424}
17425
17426// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
17427type InterfaceLoadBalancerListResultIterator struct {
17428	i    int
17429	page InterfaceLoadBalancerListResultPage
17430}
17431
17432// NextWithContext advances to the next value.  If there was an error making
17433// the request the iterator does not advance and the error is returned.
17434func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
17435	if tracing.IsEnabled() {
17436		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
17437		defer func() {
17438			sc := -1
17439			if iter.Response().Response.Response != nil {
17440				sc = iter.Response().Response.Response.StatusCode
17441			}
17442			tracing.EndSpan(ctx, sc, err)
17443		}()
17444	}
17445	iter.i++
17446	if iter.i < len(iter.page.Values()) {
17447		return nil
17448	}
17449	err = iter.page.NextWithContext(ctx)
17450	if err != nil {
17451		iter.i--
17452		return err
17453	}
17454	iter.i = 0
17455	return nil
17456}
17457
17458// Next advances to the next value.  If there was an error making
17459// the request the iterator does not advance and the error is returned.
17460// Deprecated: Use NextWithContext() instead.
17461func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
17462	return iter.NextWithContext(context.Background())
17463}
17464
17465// NotDone returns true if the enumeration should be started or is not yet complete.
17466func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
17467	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17468}
17469
17470// Response returns the raw server response from the last page request.
17471func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
17472	return iter.page.Response()
17473}
17474
17475// Value returns the current value or a zero-initialized value if the
17476// iterator has advanced beyond the end of the collection.
17477func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
17478	if !iter.page.NotDone() {
17479		return LoadBalancer{}
17480	}
17481	return iter.page.Values()[iter.i]
17482}
17483
17484// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
17485func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
17486	return InterfaceLoadBalancerListResultIterator{page: page}
17487}
17488
17489// IsEmpty returns true if the ListResult contains no values.
17490func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
17491	return ilblr.Value == nil || len(*ilblr.Value) == 0
17492}
17493
17494// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
17495// It returns nil if no more results exist.
17496func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
17497	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
17498		return nil, nil
17499	}
17500	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17501		autorest.AsJSON(),
17502		autorest.AsGet(),
17503		autorest.WithBaseURL(to.String(ilblr.NextLink)))
17504}
17505
17506// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
17507type InterfaceLoadBalancerListResultPage struct {
17508	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
17509	ilblr InterfaceLoadBalancerListResult
17510}
17511
17512// NextWithContext advances to the next page of values.  If there was an error making
17513// the request the page does not advance and the error is returned.
17514func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
17515	if tracing.IsEnabled() {
17516		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
17517		defer func() {
17518			sc := -1
17519			if page.Response().Response.Response != nil {
17520				sc = page.Response().Response.Response.StatusCode
17521			}
17522			tracing.EndSpan(ctx, sc, err)
17523		}()
17524	}
17525	next, err := page.fn(ctx, page.ilblr)
17526	if err != nil {
17527		return err
17528	}
17529	page.ilblr = next
17530	return nil
17531}
17532
17533// Next advances to the next page of values.  If there was an error making
17534// the request the page does not advance and the error is returned.
17535// Deprecated: Use NextWithContext() instead.
17536func (page *InterfaceLoadBalancerListResultPage) Next() error {
17537	return page.NextWithContext(context.Background())
17538}
17539
17540// NotDone returns true if the page enumeration should be started or is not yet complete.
17541func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
17542	return !page.ilblr.IsEmpty()
17543}
17544
17545// Response returns the raw server response from the last page request.
17546func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
17547	return page.ilblr
17548}
17549
17550// Values returns the slice of values for the current page or nil if there are no values.
17551func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
17552	if page.ilblr.IsEmpty() {
17553		return nil
17554	}
17555	return *page.ilblr.Value
17556}
17557
17558// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
17559func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
17560	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
17561}
17562
17563// InterfacePropertiesFormat networkInterface properties.
17564type InterfacePropertiesFormat struct {
17565	// VirtualMachine - READ-ONLY; The reference to a virtual machine.
17566	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
17567	// NetworkSecurityGroup - The reference to the NetworkSecurityGroup resource.
17568	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
17569	// PrivateEndpoint - READ-ONLY; A reference to the private endpoint to which the network interface is linked.
17570	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
17571	// IPConfigurations - A list of IPConfigurations of the network interface.
17572	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
17573	// TapConfigurations - READ-ONLY; A list of TapConfigurations of the network interface.
17574	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
17575	// DNSSettings - The DNS settings in network interface.
17576	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
17577	// MacAddress - READ-ONLY; The MAC address of the network interface.
17578	MacAddress *string `json:"macAddress,omitempty"`
17579	// Primary - READ-ONLY; Whether this is a primary network interface on a virtual machine.
17580	Primary *bool `json:"primary,omitempty"`
17581	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
17582	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
17583	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
17584	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
17585	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources.
17586	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
17587	// ResourceGUID - READ-ONLY; The resource GUID property of the network interface resource.
17588	ResourceGUID *string `json:"resourceGuid,omitempty"`
17589	// ProvisioningState - READ-ONLY; The provisioning state of the network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17590	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17591}
17592
17593// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17594// long-running operation.
17595type InterfacesCreateOrUpdateFuture struct {
17596	azure.Future
17597}
17598
17599// Result returns the result of the asynchronous operation.
17600// If the operation has not completed it will return an error.
17601func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
17602	var done bool
17603	done, err = future.DoneWithContext(context.Background(), client)
17604	if err != nil {
17605		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17606		return
17607	}
17608	if !done {
17609		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
17610		return
17611	}
17612	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17613	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
17614		i, err = client.CreateOrUpdateResponder(i.Response.Response)
17615		if err != nil {
17616			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
17617		}
17618	}
17619	return
17620}
17621
17622// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
17623// operation.
17624type InterfacesDeleteFuture struct {
17625	azure.Future
17626}
17627
17628// Result returns the result of the asynchronous operation.
17629// If the operation has not completed it will return an error.
17630func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
17631	var done bool
17632	done, err = future.DoneWithContext(context.Background(), client)
17633	if err != nil {
17634		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
17635		return
17636	}
17637	if !done {
17638		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
17639		return
17640	}
17641	ar.Response = future.Response()
17642	return
17643}
17644
17645// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
17646// long-running operation.
17647type InterfacesGetEffectiveRouteTableFuture struct {
17648	azure.Future
17649}
17650
17651// Result returns the result of the asynchronous operation.
17652// If the operation has not completed it will return an error.
17653func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
17654	var done bool
17655	done, err = future.DoneWithContext(context.Background(), client)
17656	if err != nil {
17657		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
17658		return
17659	}
17660	if !done {
17661		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
17662		return
17663	}
17664	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17665	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
17666		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
17667		if err != nil {
17668			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
17669		}
17670	}
17671	return
17672}
17673
17674// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
17675// results of a long-running operation.
17676type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
17677	azure.Future
17678}
17679
17680// Result returns the result of the asynchronous operation.
17681// If the operation has not completed it will return an error.
17682func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
17683	var done bool
17684	done, err = future.DoneWithContext(context.Background(), client)
17685	if err != nil {
17686		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
17687		return
17688	}
17689	if !done {
17690		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
17691		return
17692	}
17693	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17694	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
17695		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
17696		if err != nil {
17697			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
17698		}
17699	}
17700	return
17701}
17702
17703// InterfaceTapConfiguration tap configuration in a Network Interface.
17704type InterfaceTapConfiguration struct {
17705	autorest.Response `json:"-"`
17706	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration.
17707	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
17708	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17709	Name *string `json:"name,omitempty"`
17710	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
17711	Etag *string `json:"etag,omitempty"`
17712	// Type - READ-ONLY; Sub Resource type.
17713	Type *string `json:"type,omitempty"`
17714	// ID - Resource ID.
17715	ID *string `json:"id,omitempty"`
17716}
17717
17718// MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
17719func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
17720	objectMap := make(map[string]interface{})
17721	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
17722		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
17723	}
17724	if itc.Name != nil {
17725		objectMap["name"] = itc.Name
17726	}
17727	if itc.ID != nil {
17728		objectMap["id"] = itc.ID
17729	}
17730	return json.Marshal(objectMap)
17731}
17732
17733// UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
17734func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
17735	var m map[string]*json.RawMessage
17736	err := json.Unmarshal(body, &m)
17737	if err != nil {
17738		return err
17739	}
17740	for k, v := range m {
17741		switch k {
17742		case "properties":
17743			if v != nil {
17744				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
17745				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
17746				if err != nil {
17747					return err
17748				}
17749				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
17750			}
17751		case "name":
17752			if v != nil {
17753				var name string
17754				err = json.Unmarshal(*v, &name)
17755				if err != nil {
17756					return err
17757				}
17758				itc.Name = &name
17759			}
17760		case "etag":
17761			if v != nil {
17762				var etag string
17763				err = json.Unmarshal(*v, &etag)
17764				if err != nil {
17765					return err
17766				}
17767				itc.Etag = &etag
17768			}
17769		case "type":
17770			if v != nil {
17771				var typeVar string
17772				err = json.Unmarshal(*v, &typeVar)
17773				if err != nil {
17774					return err
17775				}
17776				itc.Type = &typeVar
17777			}
17778		case "id":
17779			if v != nil {
17780				var ID string
17781				err = json.Unmarshal(*v, &ID)
17782				if err != nil {
17783					return err
17784				}
17785				itc.ID = &ID
17786			}
17787		}
17788	}
17789
17790	return nil
17791}
17792
17793// InterfaceTapConfigurationListResult response for list tap configurations API service call.
17794type InterfaceTapConfigurationListResult struct {
17795	autorest.Response `json:"-"`
17796	// Value - A list of tap configurations.
17797	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
17798	// NextLink - READ-ONLY; The URL to get the next set of results.
17799	NextLink *string `json:"nextLink,omitempty"`
17800}
17801
17802// InterfaceTapConfigurationListResultIterator provides access to a complete listing of
17803// InterfaceTapConfiguration values.
17804type InterfaceTapConfigurationListResultIterator struct {
17805	i    int
17806	page InterfaceTapConfigurationListResultPage
17807}
17808
17809// NextWithContext advances to the next value.  If there was an error making
17810// the request the iterator does not advance and the error is returned.
17811func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
17812	if tracing.IsEnabled() {
17813		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
17814		defer func() {
17815			sc := -1
17816			if iter.Response().Response.Response != nil {
17817				sc = iter.Response().Response.Response.StatusCode
17818			}
17819			tracing.EndSpan(ctx, sc, err)
17820		}()
17821	}
17822	iter.i++
17823	if iter.i < len(iter.page.Values()) {
17824		return nil
17825	}
17826	err = iter.page.NextWithContext(ctx)
17827	if err != nil {
17828		iter.i--
17829		return err
17830	}
17831	iter.i = 0
17832	return nil
17833}
17834
17835// Next advances to the next value.  If there was an error making
17836// the request the iterator does not advance and the error is returned.
17837// Deprecated: Use NextWithContext() instead.
17838func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
17839	return iter.NextWithContext(context.Background())
17840}
17841
17842// NotDone returns true if the enumeration should be started or is not yet complete.
17843func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
17844	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17845}
17846
17847// Response returns the raw server response from the last page request.
17848func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
17849	return iter.page.Response()
17850}
17851
17852// Value returns the current value or a zero-initialized value if the
17853// iterator has advanced beyond the end of the collection.
17854func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
17855	if !iter.page.NotDone() {
17856		return InterfaceTapConfiguration{}
17857	}
17858	return iter.page.Values()[iter.i]
17859}
17860
17861// Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
17862func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
17863	return InterfaceTapConfigurationListResultIterator{page: page}
17864}
17865
17866// IsEmpty returns true if the ListResult contains no values.
17867func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
17868	return itclr.Value == nil || len(*itclr.Value) == 0
17869}
17870
17871// interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
17872// It returns nil if no more results exist.
17873func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
17874	if itclr.NextLink == nil || len(to.String(itclr.NextLink)) < 1 {
17875		return nil, nil
17876	}
17877	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17878		autorest.AsJSON(),
17879		autorest.AsGet(),
17880		autorest.WithBaseURL(to.String(itclr.NextLink)))
17881}
17882
17883// InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
17884type InterfaceTapConfigurationListResultPage struct {
17885	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
17886	itclr InterfaceTapConfigurationListResult
17887}
17888
17889// NextWithContext advances to the next page of values.  If there was an error making
17890// the request the page does not advance and the error is returned.
17891func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
17892	if tracing.IsEnabled() {
17893		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
17894		defer func() {
17895			sc := -1
17896			if page.Response().Response.Response != nil {
17897				sc = page.Response().Response.Response.StatusCode
17898			}
17899			tracing.EndSpan(ctx, sc, err)
17900		}()
17901	}
17902	next, err := page.fn(ctx, page.itclr)
17903	if err != nil {
17904		return err
17905	}
17906	page.itclr = next
17907	return nil
17908}
17909
17910// Next advances to the next page of values.  If there was an error making
17911// the request the page does not advance and the error is returned.
17912// Deprecated: Use NextWithContext() instead.
17913func (page *InterfaceTapConfigurationListResultPage) Next() error {
17914	return page.NextWithContext(context.Background())
17915}
17916
17917// NotDone returns true if the page enumeration should be started or is not yet complete.
17918func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
17919	return !page.itclr.IsEmpty()
17920}
17921
17922// Response returns the raw server response from the last page request.
17923func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
17924	return page.itclr
17925}
17926
17927// Values returns the slice of values for the current page or nil if there are no values.
17928func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
17929	if page.itclr.IsEmpty() {
17930		return nil
17931	}
17932	return *page.itclr.Value
17933}
17934
17935// Creates a new instance of the InterfaceTapConfigurationListResultPage type.
17936func NewInterfaceTapConfigurationListResultPage(getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
17937	return InterfaceTapConfigurationListResultPage{fn: getNextPage}
17938}
17939
17940// InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
17941type InterfaceTapConfigurationPropertiesFormat struct {
17942	// VirtualNetworkTap - The reference to the Virtual Network Tap resource.
17943	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
17944	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17945	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17946}
17947
17948// InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
17949// of a long-running operation.
17950type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
17951	azure.Future
17952}
17953
17954// Result returns the result of the asynchronous operation.
17955// If the operation has not completed it will return an error.
17956func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) Result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
17957	var done bool
17958	done, err = future.DoneWithContext(context.Background(), client)
17959	if err != nil {
17960		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17961		return
17962	}
17963	if !done {
17964		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
17965		return
17966	}
17967	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17968	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
17969		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
17970		if err != nil {
17971			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
17972		}
17973	}
17974	return
17975}
17976
17977// InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
17978// long-running operation.
17979type InterfaceTapConfigurationsDeleteFuture struct {
17980	azure.Future
17981}
17982
17983// Result returns the result of the asynchronous operation.
17984// If the operation has not completed it will return an error.
17985func (future *InterfaceTapConfigurationsDeleteFuture) Result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
17986	var done bool
17987	done, err = future.DoneWithContext(context.Background(), client)
17988	if err != nil {
17989		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
17990		return
17991	}
17992	if !done {
17993		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
17994		return
17995	}
17996	ar.Response = future.Response()
17997	return
17998}
17999
18000// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call.
18001type IPAddressAvailabilityResult struct {
18002	autorest.Response `json:"-"`
18003	// Available - Private IP address availability.
18004	Available *bool `json:"available,omitempty"`
18005	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
18006	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
18007}
18008
18009// IPConfiguration IP configuration.
18010type IPConfiguration struct {
18011	// IPConfigurationPropertiesFormat - Properties of the IP configuration.
18012	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
18013	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
18014	Name *string `json:"name,omitempty"`
18015	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18016	Etag *string `json:"etag,omitempty"`
18017	// ID - Resource ID.
18018	ID *string `json:"id,omitempty"`
18019}
18020
18021// MarshalJSON is the custom marshaler for IPConfiguration.
18022func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
18023	objectMap := make(map[string]interface{})
18024	if ic.IPConfigurationPropertiesFormat != nil {
18025		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
18026	}
18027	if ic.Name != nil {
18028		objectMap["name"] = ic.Name
18029	}
18030	if ic.ID != nil {
18031		objectMap["id"] = ic.ID
18032	}
18033	return json.Marshal(objectMap)
18034}
18035
18036// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
18037func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
18038	var m map[string]*json.RawMessage
18039	err := json.Unmarshal(body, &m)
18040	if err != nil {
18041		return err
18042	}
18043	for k, v := range m {
18044		switch k {
18045		case "properties":
18046			if v != nil {
18047				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
18048				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
18049				if err != nil {
18050					return err
18051				}
18052				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
18053			}
18054		case "name":
18055			if v != nil {
18056				var name string
18057				err = json.Unmarshal(*v, &name)
18058				if err != nil {
18059					return err
18060				}
18061				ic.Name = &name
18062			}
18063		case "etag":
18064			if v != nil {
18065				var etag string
18066				err = json.Unmarshal(*v, &etag)
18067				if err != nil {
18068					return err
18069				}
18070				ic.Etag = &etag
18071			}
18072		case "id":
18073			if v != nil {
18074				var ID string
18075				err = json.Unmarshal(*v, &ID)
18076				if err != nil {
18077					return err
18078				}
18079				ic.ID = &ID
18080			}
18081		}
18082	}
18083
18084	return nil
18085}
18086
18087// IPConfigurationProfile IP configuration profile child resource.
18088type IPConfigurationProfile struct {
18089	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
18090	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
18091	// Name - The name of the resource. This name can be used to access the resource.
18092	Name *string `json:"name,omitempty"`
18093	// Type - READ-ONLY; Sub Resource type.
18094	Type *string `json:"type,omitempty"`
18095	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18096	Etag *string `json:"etag,omitempty"`
18097	// ID - Resource ID.
18098	ID *string `json:"id,omitempty"`
18099}
18100
18101// MarshalJSON is the custom marshaler for IPConfigurationProfile.
18102func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
18103	objectMap := make(map[string]interface{})
18104	if icp.IPConfigurationProfilePropertiesFormat != nil {
18105		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
18106	}
18107	if icp.Name != nil {
18108		objectMap["name"] = icp.Name
18109	}
18110	if icp.ID != nil {
18111		objectMap["id"] = icp.ID
18112	}
18113	return json.Marshal(objectMap)
18114}
18115
18116// UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
18117func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
18118	var m map[string]*json.RawMessage
18119	err := json.Unmarshal(body, &m)
18120	if err != nil {
18121		return err
18122	}
18123	for k, v := range m {
18124		switch k {
18125		case "properties":
18126			if v != nil {
18127				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
18128				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
18129				if err != nil {
18130					return err
18131				}
18132				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
18133			}
18134		case "name":
18135			if v != nil {
18136				var name string
18137				err = json.Unmarshal(*v, &name)
18138				if err != nil {
18139					return err
18140				}
18141				icp.Name = &name
18142			}
18143		case "type":
18144			if v != nil {
18145				var typeVar string
18146				err = json.Unmarshal(*v, &typeVar)
18147				if err != nil {
18148					return err
18149				}
18150				icp.Type = &typeVar
18151			}
18152		case "etag":
18153			if v != nil {
18154				var etag string
18155				err = json.Unmarshal(*v, &etag)
18156				if err != nil {
18157					return err
18158				}
18159				icp.Etag = &etag
18160			}
18161		case "id":
18162			if v != nil {
18163				var ID string
18164				err = json.Unmarshal(*v, &ID)
18165				if err != nil {
18166					return err
18167				}
18168				icp.ID = &ID
18169			}
18170		}
18171	}
18172
18173	return nil
18174}
18175
18176// IPConfigurationProfilePropertiesFormat IP configuration profile properties.
18177type IPConfigurationProfilePropertiesFormat struct {
18178	// Subnet - The reference to the subnet resource to create a container network interface ip configuration.
18179	Subnet *Subnet `json:"subnet,omitempty"`
18180	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18181	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18182}
18183
18184// IPConfigurationPropertiesFormat properties of IP configuration.
18185type IPConfigurationPropertiesFormat struct {
18186	// PrivateIPAddress - The private IP address of the IP configuration.
18187	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
18188	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
18189	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
18190	// Subnet - The reference to the subnet resource.
18191	Subnet *Subnet `json:"subnet,omitempty"`
18192	// PublicIPAddress - The reference to the public IP resource.
18193	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
18194	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18195	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18196}
18197
18198// IPGroup the IpGroups resource information.
18199type IPGroup struct {
18200	autorest.Response `json:"-"`
18201	// IPGroupPropertiesFormat - Properties of the IpGroups.
18202	*IPGroupPropertiesFormat `json:"properties,omitempty"`
18203	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18204	Etag *string `json:"etag,omitempty"`
18205	// ID - Resource ID.
18206	ID *string `json:"id,omitempty"`
18207	// Name - READ-ONLY; Resource name.
18208	Name *string `json:"name,omitempty"`
18209	// Type - READ-ONLY; Resource type.
18210	Type *string `json:"type,omitempty"`
18211	// Location - Resource location.
18212	Location *string `json:"location,omitempty"`
18213	// Tags - Resource tags.
18214	Tags map[string]*string `json:"tags"`
18215}
18216
18217// MarshalJSON is the custom marshaler for IPGroup.
18218func (ig IPGroup) MarshalJSON() ([]byte, error) {
18219	objectMap := make(map[string]interface{})
18220	if ig.IPGroupPropertiesFormat != nil {
18221		objectMap["properties"] = ig.IPGroupPropertiesFormat
18222	}
18223	if ig.ID != nil {
18224		objectMap["id"] = ig.ID
18225	}
18226	if ig.Location != nil {
18227		objectMap["location"] = ig.Location
18228	}
18229	if ig.Tags != nil {
18230		objectMap["tags"] = ig.Tags
18231	}
18232	return json.Marshal(objectMap)
18233}
18234
18235// UnmarshalJSON is the custom unmarshaler for IPGroup struct.
18236func (ig *IPGroup) UnmarshalJSON(body []byte) error {
18237	var m map[string]*json.RawMessage
18238	err := json.Unmarshal(body, &m)
18239	if err != nil {
18240		return err
18241	}
18242	for k, v := range m {
18243		switch k {
18244		case "properties":
18245			if v != nil {
18246				var IPGroupPropertiesFormat IPGroupPropertiesFormat
18247				err = json.Unmarshal(*v, &IPGroupPropertiesFormat)
18248				if err != nil {
18249					return err
18250				}
18251				ig.IPGroupPropertiesFormat = &IPGroupPropertiesFormat
18252			}
18253		case "etag":
18254			if v != nil {
18255				var etag string
18256				err = json.Unmarshal(*v, &etag)
18257				if err != nil {
18258					return err
18259				}
18260				ig.Etag = &etag
18261			}
18262		case "id":
18263			if v != nil {
18264				var ID string
18265				err = json.Unmarshal(*v, &ID)
18266				if err != nil {
18267					return err
18268				}
18269				ig.ID = &ID
18270			}
18271		case "name":
18272			if v != nil {
18273				var name string
18274				err = json.Unmarshal(*v, &name)
18275				if err != nil {
18276					return err
18277				}
18278				ig.Name = &name
18279			}
18280		case "type":
18281			if v != nil {
18282				var typeVar string
18283				err = json.Unmarshal(*v, &typeVar)
18284				if err != nil {
18285					return err
18286				}
18287				ig.Type = &typeVar
18288			}
18289		case "location":
18290			if v != nil {
18291				var location string
18292				err = json.Unmarshal(*v, &location)
18293				if err != nil {
18294					return err
18295				}
18296				ig.Location = &location
18297			}
18298		case "tags":
18299			if v != nil {
18300				var tags map[string]*string
18301				err = json.Unmarshal(*v, &tags)
18302				if err != nil {
18303					return err
18304				}
18305				ig.Tags = tags
18306			}
18307		}
18308	}
18309
18310	return nil
18311}
18312
18313// IPGroupListResult response for the ListIpGroups API service call.
18314type IPGroupListResult struct {
18315	autorest.Response `json:"-"`
18316	// Value - The list of IpGroups information resources.
18317	Value *[]IPGroup `json:"value,omitempty"`
18318	// NextLink - URL to get the next set of results.
18319	NextLink *string `json:"nextLink,omitempty"`
18320}
18321
18322// IPGroupListResultIterator provides access to a complete listing of IPGroup values.
18323type IPGroupListResultIterator struct {
18324	i    int
18325	page IPGroupListResultPage
18326}
18327
18328// NextWithContext advances to the next value.  If there was an error making
18329// the request the iterator does not advance and the error is returned.
18330func (iter *IPGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
18331	if tracing.IsEnabled() {
18332		ctx = tracing.StartSpan(ctx, fqdn+"/IPGroupListResultIterator.NextWithContext")
18333		defer func() {
18334			sc := -1
18335			if iter.Response().Response.Response != nil {
18336				sc = iter.Response().Response.Response.StatusCode
18337			}
18338			tracing.EndSpan(ctx, sc, err)
18339		}()
18340	}
18341	iter.i++
18342	if iter.i < len(iter.page.Values()) {
18343		return nil
18344	}
18345	err = iter.page.NextWithContext(ctx)
18346	if err != nil {
18347		iter.i--
18348		return err
18349	}
18350	iter.i = 0
18351	return nil
18352}
18353
18354// Next advances to the next value.  If there was an error making
18355// the request the iterator does not advance and the error is returned.
18356// Deprecated: Use NextWithContext() instead.
18357func (iter *IPGroupListResultIterator) Next() error {
18358	return iter.NextWithContext(context.Background())
18359}
18360
18361// NotDone returns true if the enumeration should be started or is not yet complete.
18362func (iter IPGroupListResultIterator) NotDone() bool {
18363	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18364}
18365
18366// Response returns the raw server response from the last page request.
18367func (iter IPGroupListResultIterator) Response() IPGroupListResult {
18368	return iter.page.Response()
18369}
18370
18371// Value returns the current value or a zero-initialized value if the
18372// iterator has advanced beyond the end of the collection.
18373func (iter IPGroupListResultIterator) Value() IPGroup {
18374	if !iter.page.NotDone() {
18375		return IPGroup{}
18376	}
18377	return iter.page.Values()[iter.i]
18378}
18379
18380// Creates a new instance of the IPGroupListResultIterator type.
18381func NewIPGroupListResultIterator(page IPGroupListResultPage) IPGroupListResultIterator {
18382	return IPGroupListResultIterator{page: page}
18383}
18384
18385// IsEmpty returns true if the ListResult contains no values.
18386func (iglr IPGroupListResult) IsEmpty() bool {
18387	return iglr.Value == nil || len(*iglr.Value) == 0
18388}
18389
18390// iPGroupListResultPreparer prepares a request to retrieve the next set of results.
18391// It returns nil if no more results exist.
18392func (iglr IPGroupListResult) iPGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
18393	if iglr.NextLink == nil || len(to.String(iglr.NextLink)) < 1 {
18394		return nil, nil
18395	}
18396	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18397		autorest.AsJSON(),
18398		autorest.AsGet(),
18399		autorest.WithBaseURL(to.String(iglr.NextLink)))
18400}
18401
18402// IPGroupListResultPage contains a page of IPGroup values.
18403type IPGroupListResultPage struct {
18404	fn   func(context.Context, IPGroupListResult) (IPGroupListResult, error)
18405	iglr IPGroupListResult
18406}
18407
18408// NextWithContext advances to the next page of values.  If there was an error making
18409// the request the page does not advance and the error is returned.
18410func (page *IPGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
18411	if tracing.IsEnabled() {
18412		ctx = tracing.StartSpan(ctx, fqdn+"/IPGroupListResultPage.NextWithContext")
18413		defer func() {
18414			sc := -1
18415			if page.Response().Response.Response != nil {
18416				sc = page.Response().Response.Response.StatusCode
18417			}
18418			tracing.EndSpan(ctx, sc, err)
18419		}()
18420	}
18421	next, err := page.fn(ctx, page.iglr)
18422	if err != nil {
18423		return err
18424	}
18425	page.iglr = next
18426	return nil
18427}
18428
18429// Next advances to the next page of values.  If there was an error making
18430// the request the page does not advance and the error is returned.
18431// Deprecated: Use NextWithContext() instead.
18432func (page *IPGroupListResultPage) Next() error {
18433	return page.NextWithContext(context.Background())
18434}
18435
18436// NotDone returns true if the page enumeration should be started or is not yet complete.
18437func (page IPGroupListResultPage) NotDone() bool {
18438	return !page.iglr.IsEmpty()
18439}
18440
18441// Response returns the raw server response from the last page request.
18442func (page IPGroupListResultPage) Response() IPGroupListResult {
18443	return page.iglr
18444}
18445
18446// Values returns the slice of values for the current page or nil if there are no values.
18447func (page IPGroupListResultPage) Values() []IPGroup {
18448	if page.iglr.IsEmpty() {
18449		return nil
18450	}
18451	return *page.iglr.Value
18452}
18453
18454// Creates a new instance of the IPGroupListResultPage type.
18455func NewIPGroupListResultPage(getNextPage func(context.Context, IPGroupListResult) (IPGroupListResult, error)) IPGroupListResultPage {
18456	return IPGroupListResultPage{fn: getNextPage}
18457}
18458
18459// IPGroupPropertiesFormat the IpGroups property information.
18460type IPGroupPropertiesFormat struct {
18461	// ProvisioningState - READ-ONLY; The provisioning state of the IpGroups resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18462	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18463	// IPAddresses - IpAddresses/IpAddressPrefixes in the IpGroups resource.
18464	IPAddresses *[]string `json:"ipAddresses,omitempty"`
18465	// Firewalls - READ-ONLY; List of references to Azure resources that this IpGroups is associated with.
18466	Firewalls *[]SubResource `json:"firewalls,omitempty"`
18467}
18468
18469// IPGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
18470// operation.
18471type IPGroupsCreateOrUpdateFuture struct {
18472	azure.Future
18473}
18474
18475// Result returns the result of the asynchronous operation.
18476// If the operation has not completed it will return an error.
18477func (future *IPGroupsCreateOrUpdateFuture) Result(client IPGroupsClient) (ig IPGroup, err error) {
18478	var done bool
18479	done, err = future.DoneWithContext(context.Background(), client)
18480	if err != nil {
18481		err = autorest.NewErrorWithError(err, "network.IPGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18482		return
18483	}
18484	if !done {
18485		err = azure.NewAsyncOpIncompleteError("network.IPGroupsCreateOrUpdateFuture")
18486		return
18487	}
18488	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18489	if ig.Response.Response, err = future.GetResult(sender); err == nil && ig.Response.Response.StatusCode != http.StatusNoContent {
18490		ig, err = client.CreateOrUpdateResponder(ig.Response.Response)
18491		if err != nil {
18492			err = autorest.NewErrorWithError(err, "network.IPGroupsCreateOrUpdateFuture", "Result", ig.Response.Response, "Failure responding to request")
18493		}
18494	}
18495	return
18496}
18497
18498// IPGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
18499// operation.
18500type IPGroupsDeleteFuture struct {
18501	azure.Future
18502}
18503
18504// Result returns the result of the asynchronous operation.
18505// If the operation has not completed it will return an error.
18506func (future *IPGroupsDeleteFuture) Result(client IPGroupsClient) (ar autorest.Response, err error) {
18507	var done bool
18508	done, err = future.DoneWithContext(context.Background(), client)
18509	if err != nil {
18510		err = autorest.NewErrorWithError(err, "network.IPGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
18511		return
18512	}
18513	if !done {
18514		err = azure.NewAsyncOpIncompleteError("network.IPGroupsDeleteFuture")
18515		return
18516	}
18517	ar.Response = future.Response()
18518	return
18519}
18520
18521// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection.
18522type IpsecPolicy struct {
18523	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
18524	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
18525	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
18526	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
18527	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
18528	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
18529	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
18530	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
18531	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
18532	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
18533	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
18534	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
18535	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
18536	DhGroup DhGroup `json:"dhGroup,omitempty"`
18537	// 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'
18538	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
18539}
18540
18541// IPTag contains the IpTag associated with the object.
18542type IPTag struct {
18543	// IPTagType - The IP tag type. Example: FirstPartyUsage.
18544	IPTagType *string `json:"ipTagType,omitempty"`
18545	// Tag - The value of the IP tag associated with the public IP. Example: SQL.
18546	Tag *string `json:"tag,omitempty"`
18547}
18548
18549// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
18550type Ipv6ExpressRouteCircuitPeeringConfig struct {
18551	// PrimaryPeerAddressPrefix - The primary address prefix.
18552	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
18553	// SecondaryPeerAddressPrefix - The secondary address prefix.
18554	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
18555	// MicrosoftPeeringConfig - The Microsoft peering configuration.
18556	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
18557	// RouteFilter - The reference to the RouteFilter resource.
18558	RouteFilter *SubResource `json:"routeFilter,omitempty"`
18559	// State - The state of peering. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
18560	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
18561}
18562
18563// ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
18564// the next set of results.
18565type ListHubVirtualNetworkConnectionsResult struct {
18566	autorest.Response `json:"-"`
18567	// Value - List of HubVirtualNetworkConnections.
18568	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
18569	// NextLink - URL to get the next set of operation list results if there are any.
18570	NextLink *string `json:"nextLink,omitempty"`
18571}
18572
18573// ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
18574// HubVirtualNetworkConnection values.
18575type ListHubVirtualNetworkConnectionsResultIterator struct {
18576	i    int
18577	page ListHubVirtualNetworkConnectionsResultPage
18578}
18579
18580// NextWithContext advances to the next value.  If there was an error making
18581// the request the iterator does not advance and the error is returned.
18582func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
18583	if tracing.IsEnabled() {
18584		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
18585		defer func() {
18586			sc := -1
18587			if iter.Response().Response.Response != nil {
18588				sc = iter.Response().Response.Response.StatusCode
18589			}
18590			tracing.EndSpan(ctx, sc, err)
18591		}()
18592	}
18593	iter.i++
18594	if iter.i < len(iter.page.Values()) {
18595		return nil
18596	}
18597	err = iter.page.NextWithContext(ctx)
18598	if err != nil {
18599		iter.i--
18600		return err
18601	}
18602	iter.i = 0
18603	return nil
18604}
18605
18606// Next advances to the next value.  If there was an error making
18607// the request the iterator does not advance and the error is returned.
18608// Deprecated: Use NextWithContext() instead.
18609func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
18610	return iter.NextWithContext(context.Background())
18611}
18612
18613// NotDone returns true if the enumeration should be started or is not yet complete.
18614func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
18615	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18616}
18617
18618// Response returns the raw server response from the last page request.
18619func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
18620	return iter.page.Response()
18621}
18622
18623// Value returns the current value or a zero-initialized value if the
18624// iterator has advanced beyond the end of the collection.
18625func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
18626	if !iter.page.NotDone() {
18627		return HubVirtualNetworkConnection{}
18628	}
18629	return iter.page.Values()[iter.i]
18630}
18631
18632// Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
18633func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
18634	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
18635}
18636
18637// IsEmpty returns true if the ListResult contains no values.
18638func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
18639	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
18640}
18641
18642// listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
18643// It returns nil if no more results exist.
18644func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
18645	if lhvncr.NextLink == nil || len(to.String(lhvncr.NextLink)) < 1 {
18646		return nil, nil
18647	}
18648	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18649		autorest.AsJSON(),
18650		autorest.AsGet(),
18651		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
18652}
18653
18654// ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
18655type ListHubVirtualNetworkConnectionsResultPage struct {
18656	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
18657	lhvncr ListHubVirtualNetworkConnectionsResult
18658}
18659
18660// NextWithContext advances to the next page of values.  If there was an error making
18661// the request the page does not advance and the error is returned.
18662func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
18663	if tracing.IsEnabled() {
18664		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
18665		defer func() {
18666			sc := -1
18667			if page.Response().Response.Response != nil {
18668				sc = page.Response().Response.Response.StatusCode
18669			}
18670			tracing.EndSpan(ctx, sc, err)
18671		}()
18672	}
18673	next, err := page.fn(ctx, page.lhvncr)
18674	if err != nil {
18675		return err
18676	}
18677	page.lhvncr = next
18678	return nil
18679}
18680
18681// Next advances to the next page of values.  If there was an error making
18682// the request the page does not advance and the error is returned.
18683// Deprecated: Use NextWithContext() instead.
18684func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
18685	return page.NextWithContext(context.Background())
18686}
18687
18688// NotDone returns true if the page enumeration should be started or is not yet complete.
18689func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
18690	return !page.lhvncr.IsEmpty()
18691}
18692
18693// Response returns the raw server response from the last page request.
18694func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
18695	return page.lhvncr
18696}
18697
18698// Values returns the slice of values for the current page or nil if there are no values.
18699func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
18700	if page.lhvncr.IsEmpty() {
18701		return nil
18702	}
18703	return *page.lhvncr.Value
18704}
18705
18706// Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
18707func NewListHubVirtualNetworkConnectionsResultPage(getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
18708	return ListHubVirtualNetworkConnectionsResultPage{fn: getNextPage}
18709}
18710
18711// ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
18712// P2SVpnGateways and a URL nextLink to get the next set of results.
18713type ListP2SVpnGatewaysResult struct {
18714	autorest.Response `json:"-"`
18715	// Value - List of P2SVpnGateways.
18716	Value *[]P2SVpnGateway `json:"value,omitempty"`
18717	// NextLink - URL to get the next set of operation list results if there are any.
18718	NextLink *string `json:"nextLink,omitempty"`
18719}
18720
18721// ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
18722type ListP2SVpnGatewaysResultIterator struct {
18723	i    int
18724	page ListP2SVpnGatewaysResultPage
18725}
18726
18727// NextWithContext advances to the next value.  If there was an error making
18728// the request the iterator does not advance and the error is returned.
18729func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
18730	if tracing.IsEnabled() {
18731		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
18732		defer func() {
18733			sc := -1
18734			if iter.Response().Response.Response != nil {
18735				sc = iter.Response().Response.Response.StatusCode
18736			}
18737			tracing.EndSpan(ctx, sc, err)
18738		}()
18739	}
18740	iter.i++
18741	if iter.i < len(iter.page.Values()) {
18742		return nil
18743	}
18744	err = iter.page.NextWithContext(ctx)
18745	if err != nil {
18746		iter.i--
18747		return err
18748	}
18749	iter.i = 0
18750	return nil
18751}
18752
18753// Next advances to the next value.  If there was an error making
18754// the request the iterator does not advance and the error is returned.
18755// Deprecated: Use NextWithContext() instead.
18756func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
18757	return iter.NextWithContext(context.Background())
18758}
18759
18760// NotDone returns true if the enumeration should be started or is not yet complete.
18761func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
18762	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18763}
18764
18765// Response returns the raw server response from the last page request.
18766func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
18767	return iter.page.Response()
18768}
18769
18770// Value returns the current value or a zero-initialized value if the
18771// iterator has advanced beyond the end of the collection.
18772func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
18773	if !iter.page.NotDone() {
18774		return P2SVpnGateway{}
18775	}
18776	return iter.page.Values()[iter.i]
18777}
18778
18779// Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
18780func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
18781	return ListP2SVpnGatewaysResultIterator{page: page}
18782}
18783
18784// IsEmpty returns true if the ListResult contains no values.
18785func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
18786	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
18787}
18788
18789// listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
18790// It returns nil if no more results exist.
18791func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
18792	if lpvgr.NextLink == nil || len(to.String(lpvgr.NextLink)) < 1 {
18793		return nil, nil
18794	}
18795	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18796		autorest.AsJSON(),
18797		autorest.AsGet(),
18798		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
18799}
18800
18801// ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
18802type ListP2SVpnGatewaysResultPage struct {
18803	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
18804	lpvgr ListP2SVpnGatewaysResult
18805}
18806
18807// NextWithContext advances to the next page of values.  If there was an error making
18808// the request the page does not advance and the error is returned.
18809func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
18810	if tracing.IsEnabled() {
18811		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
18812		defer func() {
18813			sc := -1
18814			if page.Response().Response.Response != nil {
18815				sc = page.Response().Response.Response.StatusCode
18816			}
18817			tracing.EndSpan(ctx, sc, err)
18818		}()
18819	}
18820	next, err := page.fn(ctx, page.lpvgr)
18821	if err != nil {
18822		return err
18823	}
18824	page.lpvgr = next
18825	return nil
18826}
18827
18828// Next advances to the next page of values.  If there was an error making
18829// the request the page does not advance and the error is returned.
18830// Deprecated: Use NextWithContext() instead.
18831func (page *ListP2SVpnGatewaysResultPage) Next() error {
18832	return page.NextWithContext(context.Background())
18833}
18834
18835// NotDone returns true if the page enumeration should be started or is not yet complete.
18836func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
18837	return !page.lpvgr.IsEmpty()
18838}
18839
18840// Response returns the raw server response from the last page request.
18841func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
18842	return page.lpvgr
18843}
18844
18845// Values returns the slice of values for the current page or nil if there are no values.
18846func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
18847	if page.lpvgr.IsEmpty() {
18848		return nil
18849	}
18850	return *page.lpvgr.Value
18851}
18852
18853// Creates a new instance of the ListP2SVpnGatewaysResultPage type.
18854func NewListP2SVpnGatewaysResultPage(getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
18855	return ListP2SVpnGatewaysResultPage{fn: getNextPage}
18856}
18857
18858// ListString ...
18859type ListString struct {
18860	autorest.Response `json:"-"`
18861	Value             *[]string `json:"value,omitempty"`
18862}
18863
18864// ListVirtualHubRouteTableV2sResult list of VirtualHubRouteTableV2s and a URL nextLink to get the next set
18865// of results.
18866type ListVirtualHubRouteTableV2sResult struct {
18867	autorest.Response `json:"-"`
18868	// Value - List of VirtualHubRouteTableV2s.
18869	Value *[]VirtualHubRouteTableV2 `json:"value,omitempty"`
18870	// NextLink - URL to get the next set of operation list results if there are any.
18871	NextLink *string `json:"nextLink,omitempty"`
18872}
18873
18874// ListVirtualHubRouteTableV2sResultIterator provides access to a complete listing of
18875// VirtualHubRouteTableV2 values.
18876type ListVirtualHubRouteTableV2sResultIterator struct {
18877	i    int
18878	page ListVirtualHubRouteTableV2sResultPage
18879}
18880
18881// NextWithContext advances to the next value.  If there was an error making
18882// the request the iterator does not advance and the error is returned.
18883func (iter *ListVirtualHubRouteTableV2sResultIterator) NextWithContext(ctx context.Context) (err error) {
18884	if tracing.IsEnabled() {
18885		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultIterator.NextWithContext")
18886		defer func() {
18887			sc := -1
18888			if iter.Response().Response.Response != nil {
18889				sc = iter.Response().Response.Response.StatusCode
18890			}
18891			tracing.EndSpan(ctx, sc, err)
18892		}()
18893	}
18894	iter.i++
18895	if iter.i < len(iter.page.Values()) {
18896		return nil
18897	}
18898	err = iter.page.NextWithContext(ctx)
18899	if err != nil {
18900		iter.i--
18901		return err
18902	}
18903	iter.i = 0
18904	return nil
18905}
18906
18907// Next advances to the next value.  If there was an error making
18908// the request the iterator does not advance and the error is returned.
18909// Deprecated: Use NextWithContext() instead.
18910func (iter *ListVirtualHubRouteTableV2sResultIterator) Next() error {
18911	return iter.NextWithContext(context.Background())
18912}
18913
18914// NotDone returns true if the enumeration should be started or is not yet complete.
18915func (iter ListVirtualHubRouteTableV2sResultIterator) NotDone() bool {
18916	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18917}
18918
18919// Response returns the raw server response from the last page request.
18920func (iter ListVirtualHubRouteTableV2sResultIterator) Response() ListVirtualHubRouteTableV2sResult {
18921	return iter.page.Response()
18922}
18923
18924// Value returns the current value or a zero-initialized value if the
18925// iterator has advanced beyond the end of the collection.
18926func (iter ListVirtualHubRouteTableV2sResultIterator) Value() VirtualHubRouteTableV2 {
18927	if !iter.page.NotDone() {
18928		return VirtualHubRouteTableV2{}
18929	}
18930	return iter.page.Values()[iter.i]
18931}
18932
18933// Creates a new instance of the ListVirtualHubRouteTableV2sResultIterator type.
18934func NewListVirtualHubRouteTableV2sResultIterator(page ListVirtualHubRouteTableV2sResultPage) ListVirtualHubRouteTableV2sResultIterator {
18935	return ListVirtualHubRouteTableV2sResultIterator{page: page}
18936}
18937
18938// IsEmpty returns true if the ListResult contains no values.
18939func (lvhrtvr ListVirtualHubRouteTableV2sResult) IsEmpty() bool {
18940	return lvhrtvr.Value == nil || len(*lvhrtvr.Value) == 0
18941}
18942
18943// listVirtualHubRouteTableV2sResultPreparer prepares a request to retrieve the next set of results.
18944// It returns nil if no more results exist.
18945func (lvhrtvr ListVirtualHubRouteTableV2sResult) listVirtualHubRouteTableV2sResultPreparer(ctx context.Context) (*http.Request, error) {
18946	if lvhrtvr.NextLink == nil || len(to.String(lvhrtvr.NextLink)) < 1 {
18947		return nil, nil
18948	}
18949	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18950		autorest.AsJSON(),
18951		autorest.AsGet(),
18952		autorest.WithBaseURL(to.String(lvhrtvr.NextLink)))
18953}
18954
18955// ListVirtualHubRouteTableV2sResultPage contains a page of VirtualHubRouteTableV2 values.
18956type ListVirtualHubRouteTableV2sResultPage struct {
18957	fn      func(context.Context, ListVirtualHubRouteTableV2sResult) (ListVirtualHubRouteTableV2sResult, error)
18958	lvhrtvr ListVirtualHubRouteTableV2sResult
18959}
18960
18961// NextWithContext advances to the next page of values.  If there was an error making
18962// the request the page does not advance and the error is returned.
18963func (page *ListVirtualHubRouteTableV2sResultPage) NextWithContext(ctx context.Context) (err error) {
18964	if tracing.IsEnabled() {
18965		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultPage.NextWithContext")
18966		defer func() {
18967			sc := -1
18968			if page.Response().Response.Response != nil {
18969				sc = page.Response().Response.Response.StatusCode
18970			}
18971			tracing.EndSpan(ctx, sc, err)
18972		}()
18973	}
18974	next, err := page.fn(ctx, page.lvhrtvr)
18975	if err != nil {
18976		return err
18977	}
18978	page.lvhrtvr = next
18979	return nil
18980}
18981
18982// Next advances to the next page of values.  If there was an error making
18983// the request the page does not advance and the error is returned.
18984// Deprecated: Use NextWithContext() instead.
18985func (page *ListVirtualHubRouteTableV2sResultPage) Next() error {
18986	return page.NextWithContext(context.Background())
18987}
18988
18989// NotDone returns true if the page enumeration should be started or is not yet complete.
18990func (page ListVirtualHubRouteTableV2sResultPage) NotDone() bool {
18991	return !page.lvhrtvr.IsEmpty()
18992}
18993
18994// Response returns the raw server response from the last page request.
18995func (page ListVirtualHubRouteTableV2sResultPage) Response() ListVirtualHubRouteTableV2sResult {
18996	return page.lvhrtvr
18997}
18998
18999// Values returns the slice of values for the current page or nil if there are no values.
19000func (page ListVirtualHubRouteTableV2sResultPage) Values() []VirtualHubRouteTableV2 {
19001	if page.lvhrtvr.IsEmpty() {
19002		return nil
19003	}
19004	return *page.lvhrtvr.Value
19005}
19006
19007// Creates a new instance of the ListVirtualHubRouteTableV2sResultPage type.
19008func NewListVirtualHubRouteTableV2sResultPage(getNextPage func(context.Context, ListVirtualHubRouteTableV2sResult) (ListVirtualHubRouteTableV2sResult, error)) ListVirtualHubRouteTableV2sResultPage {
19009	return ListVirtualHubRouteTableV2sResultPage{fn: getNextPage}
19010}
19011
19012// ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
19013// URL nextLink to get the next set of results.
19014type ListVirtualHubsResult struct {
19015	autorest.Response `json:"-"`
19016	// Value - List of VirtualHubs.
19017	Value *[]VirtualHub `json:"value,omitempty"`
19018	// NextLink - URL to get the next set of operation list results if there are any.
19019	NextLink *string `json:"nextLink,omitempty"`
19020}
19021
19022// ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
19023type ListVirtualHubsResultIterator struct {
19024	i    int
19025	page ListVirtualHubsResultPage
19026}
19027
19028// NextWithContext advances to the next value.  If there was an error making
19029// the request the iterator does not advance and the error is returned.
19030func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
19031	if tracing.IsEnabled() {
19032		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
19033		defer func() {
19034			sc := -1
19035			if iter.Response().Response.Response != nil {
19036				sc = iter.Response().Response.Response.StatusCode
19037			}
19038			tracing.EndSpan(ctx, sc, err)
19039		}()
19040	}
19041	iter.i++
19042	if iter.i < len(iter.page.Values()) {
19043		return nil
19044	}
19045	err = iter.page.NextWithContext(ctx)
19046	if err != nil {
19047		iter.i--
19048		return err
19049	}
19050	iter.i = 0
19051	return nil
19052}
19053
19054// Next advances to the next value.  If there was an error making
19055// the request the iterator does not advance and the error is returned.
19056// Deprecated: Use NextWithContext() instead.
19057func (iter *ListVirtualHubsResultIterator) Next() error {
19058	return iter.NextWithContext(context.Background())
19059}
19060
19061// NotDone returns true if the enumeration should be started or is not yet complete.
19062func (iter ListVirtualHubsResultIterator) NotDone() bool {
19063	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19064}
19065
19066// Response returns the raw server response from the last page request.
19067func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
19068	return iter.page.Response()
19069}
19070
19071// Value returns the current value or a zero-initialized value if the
19072// iterator has advanced beyond the end of the collection.
19073func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
19074	if !iter.page.NotDone() {
19075		return VirtualHub{}
19076	}
19077	return iter.page.Values()[iter.i]
19078}
19079
19080// Creates a new instance of the ListVirtualHubsResultIterator type.
19081func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
19082	return ListVirtualHubsResultIterator{page: page}
19083}
19084
19085// IsEmpty returns true if the ListResult contains no values.
19086func (lvhr ListVirtualHubsResult) IsEmpty() bool {
19087	return lvhr.Value == nil || len(*lvhr.Value) == 0
19088}
19089
19090// listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
19091// It returns nil if no more results exist.
19092func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
19093	if lvhr.NextLink == nil || len(to.String(lvhr.NextLink)) < 1 {
19094		return nil, nil
19095	}
19096	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19097		autorest.AsJSON(),
19098		autorest.AsGet(),
19099		autorest.WithBaseURL(to.String(lvhr.NextLink)))
19100}
19101
19102// ListVirtualHubsResultPage contains a page of VirtualHub values.
19103type ListVirtualHubsResultPage struct {
19104	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
19105	lvhr ListVirtualHubsResult
19106}
19107
19108// NextWithContext advances to the next page of values.  If there was an error making
19109// the request the page does not advance and the error is returned.
19110func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
19111	if tracing.IsEnabled() {
19112		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
19113		defer func() {
19114			sc := -1
19115			if page.Response().Response.Response != nil {
19116				sc = page.Response().Response.Response.StatusCode
19117			}
19118			tracing.EndSpan(ctx, sc, err)
19119		}()
19120	}
19121	next, err := page.fn(ctx, page.lvhr)
19122	if err != nil {
19123		return err
19124	}
19125	page.lvhr = next
19126	return nil
19127}
19128
19129// Next advances to the next page of values.  If there was an error making
19130// the request the page does not advance and the error is returned.
19131// Deprecated: Use NextWithContext() instead.
19132func (page *ListVirtualHubsResultPage) Next() error {
19133	return page.NextWithContext(context.Background())
19134}
19135
19136// NotDone returns true if the page enumeration should be started or is not yet complete.
19137func (page ListVirtualHubsResultPage) NotDone() bool {
19138	return !page.lvhr.IsEmpty()
19139}
19140
19141// Response returns the raw server response from the last page request.
19142func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
19143	return page.lvhr
19144}
19145
19146// Values returns the slice of values for the current page or nil if there are no values.
19147func (page ListVirtualHubsResultPage) Values() []VirtualHub {
19148	if page.lvhr.IsEmpty() {
19149		return nil
19150	}
19151	return *page.lvhr.Value
19152}
19153
19154// Creates a new instance of the ListVirtualHubsResultPage type.
19155func NewListVirtualHubsResultPage(getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
19156	return ListVirtualHubsResultPage{fn: getNextPage}
19157}
19158
19159// ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
19160// URL nextLink to get the next set of results.
19161type ListVirtualWANsResult struct {
19162	autorest.Response `json:"-"`
19163	// Value - List of VirtualWANs.
19164	Value *[]VirtualWAN `json:"value,omitempty"`
19165	// NextLink - URL to get the next set of operation list results if there are any.
19166	NextLink *string `json:"nextLink,omitempty"`
19167}
19168
19169// ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
19170type ListVirtualWANsResultIterator struct {
19171	i    int
19172	page ListVirtualWANsResultPage
19173}
19174
19175// NextWithContext advances to the next value.  If there was an error making
19176// the request the iterator does not advance and the error is returned.
19177func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
19178	if tracing.IsEnabled() {
19179		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
19180		defer func() {
19181			sc := -1
19182			if iter.Response().Response.Response != nil {
19183				sc = iter.Response().Response.Response.StatusCode
19184			}
19185			tracing.EndSpan(ctx, sc, err)
19186		}()
19187	}
19188	iter.i++
19189	if iter.i < len(iter.page.Values()) {
19190		return nil
19191	}
19192	err = iter.page.NextWithContext(ctx)
19193	if err != nil {
19194		iter.i--
19195		return err
19196	}
19197	iter.i = 0
19198	return nil
19199}
19200
19201// Next advances to the next value.  If there was an error making
19202// the request the iterator does not advance and the error is returned.
19203// Deprecated: Use NextWithContext() instead.
19204func (iter *ListVirtualWANsResultIterator) Next() error {
19205	return iter.NextWithContext(context.Background())
19206}
19207
19208// NotDone returns true if the enumeration should be started or is not yet complete.
19209func (iter ListVirtualWANsResultIterator) NotDone() bool {
19210	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19211}
19212
19213// Response returns the raw server response from the last page request.
19214func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
19215	return iter.page.Response()
19216}
19217
19218// Value returns the current value or a zero-initialized value if the
19219// iterator has advanced beyond the end of the collection.
19220func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
19221	if !iter.page.NotDone() {
19222		return VirtualWAN{}
19223	}
19224	return iter.page.Values()[iter.i]
19225}
19226
19227// Creates a new instance of the ListVirtualWANsResultIterator type.
19228func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
19229	return ListVirtualWANsResultIterator{page: page}
19230}
19231
19232// IsEmpty returns true if the ListResult contains no values.
19233func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
19234	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
19235}
19236
19237// listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
19238// It returns nil if no more results exist.
19239func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
19240	if lvwnr.NextLink == nil || len(to.String(lvwnr.NextLink)) < 1 {
19241		return nil, nil
19242	}
19243	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19244		autorest.AsJSON(),
19245		autorest.AsGet(),
19246		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
19247}
19248
19249// ListVirtualWANsResultPage contains a page of VirtualWAN values.
19250type ListVirtualWANsResultPage struct {
19251	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
19252	lvwnr ListVirtualWANsResult
19253}
19254
19255// NextWithContext advances to the next page of values.  If there was an error making
19256// the request the page does not advance and the error is returned.
19257func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
19258	if tracing.IsEnabled() {
19259		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
19260		defer func() {
19261			sc := -1
19262			if page.Response().Response.Response != nil {
19263				sc = page.Response().Response.Response.StatusCode
19264			}
19265			tracing.EndSpan(ctx, sc, err)
19266		}()
19267	}
19268	next, err := page.fn(ctx, page.lvwnr)
19269	if err != nil {
19270		return err
19271	}
19272	page.lvwnr = next
19273	return nil
19274}
19275
19276// Next advances to the next page of values.  If there was an error making
19277// the request the page does not advance and the error is returned.
19278// Deprecated: Use NextWithContext() instead.
19279func (page *ListVirtualWANsResultPage) Next() error {
19280	return page.NextWithContext(context.Background())
19281}
19282
19283// NotDone returns true if the page enumeration should be started or is not yet complete.
19284func (page ListVirtualWANsResultPage) NotDone() bool {
19285	return !page.lvwnr.IsEmpty()
19286}
19287
19288// Response returns the raw server response from the last page request.
19289func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
19290	return page.lvwnr
19291}
19292
19293// Values returns the slice of values for the current page or nil if there are no values.
19294func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
19295	if page.lvwnr.IsEmpty() {
19296		return nil
19297	}
19298	return *page.lvwnr.Value
19299}
19300
19301// Creates a new instance of the ListVirtualWANsResultPage type.
19302func NewListVirtualWANsResultPage(getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
19303	return ListVirtualWANsResultPage{fn: getNextPage}
19304}
19305
19306// ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
19307// It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
19308type ListVpnConnectionsResult struct {
19309	autorest.Response `json:"-"`
19310	// Value - List of Vpn Connections.
19311	Value *[]VpnConnection `json:"value,omitempty"`
19312	// NextLink - URL to get the next set of operation list results if there are any.
19313	NextLink *string `json:"nextLink,omitempty"`
19314}
19315
19316// ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
19317type ListVpnConnectionsResultIterator struct {
19318	i    int
19319	page ListVpnConnectionsResultPage
19320}
19321
19322// NextWithContext advances to the next value.  If there was an error making
19323// the request the iterator does not advance and the error is returned.
19324func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
19325	if tracing.IsEnabled() {
19326		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
19327		defer func() {
19328			sc := -1
19329			if iter.Response().Response.Response != nil {
19330				sc = iter.Response().Response.Response.StatusCode
19331			}
19332			tracing.EndSpan(ctx, sc, err)
19333		}()
19334	}
19335	iter.i++
19336	if iter.i < len(iter.page.Values()) {
19337		return nil
19338	}
19339	err = iter.page.NextWithContext(ctx)
19340	if err != nil {
19341		iter.i--
19342		return err
19343	}
19344	iter.i = 0
19345	return nil
19346}
19347
19348// Next advances to the next value.  If there was an error making
19349// the request the iterator does not advance and the error is returned.
19350// Deprecated: Use NextWithContext() instead.
19351func (iter *ListVpnConnectionsResultIterator) Next() error {
19352	return iter.NextWithContext(context.Background())
19353}
19354
19355// NotDone returns true if the enumeration should be started or is not yet complete.
19356func (iter ListVpnConnectionsResultIterator) NotDone() bool {
19357	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19358}
19359
19360// Response returns the raw server response from the last page request.
19361func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
19362	return iter.page.Response()
19363}
19364
19365// Value returns the current value or a zero-initialized value if the
19366// iterator has advanced beyond the end of the collection.
19367func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
19368	if !iter.page.NotDone() {
19369		return VpnConnection{}
19370	}
19371	return iter.page.Values()[iter.i]
19372}
19373
19374// Creates a new instance of the ListVpnConnectionsResultIterator type.
19375func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
19376	return ListVpnConnectionsResultIterator{page: page}
19377}
19378
19379// IsEmpty returns true if the ListResult contains no values.
19380func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
19381	return lvcr.Value == nil || len(*lvcr.Value) == 0
19382}
19383
19384// listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
19385// It returns nil if no more results exist.
19386func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
19387	if lvcr.NextLink == nil || len(to.String(lvcr.NextLink)) < 1 {
19388		return nil, nil
19389	}
19390	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19391		autorest.AsJSON(),
19392		autorest.AsGet(),
19393		autorest.WithBaseURL(to.String(lvcr.NextLink)))
19394}
19395
19396// ListVpnConnectionsResultPage contains a page of VpnConnection values.
19397type ListVpnConnectionsResultPage struct {
19398	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
19399	lvcr ListVpnConnectionsResult
19400}
19401
19402// NextWithContext advances to the next page of values.  If there was an error making
19403// the request the page does not advance and the error is returned.
19404func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
19405	if tracing.IsEnabled() {
19406		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
19407		defer func() {
19408			sc := -1
19409			if page.Response().Response.Response != nil {
19410				sc = page.Response().Response.Response.StatusCode
19411			}
19412			tracing.EndSpan(ctx, sc, err)
19413		}()
19414	}
19415	next, err := page.fn(ctx, page.lvcr)
19416	if err != nil {
19417		return err
19418	}
19419	page.lvcr = next
19420	return nil
19421}
19422
19423// Next advances to the next page of values.  If there was an error making
19424// the request the page does not advance and the error is returned.
19425// Deprecated: Use NextWithContext() instead.
19426func (page *ListVpnConnectionsResultPage) Next() error {
19427	return page.NextWithContext(context.Background())
19428}
19429
19430// NotDone returns true if the page enumeration should be started or is not yet complete.
19431func (page ListVpnConnectionsResultPage) NotDone() bool {
19432	return !page.lvcr.IsEmpty()
19433}
19434
19435// Response returns the raw server response from the last page request.
19436func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
19437	return page.lvcr
19438}
19439
19440// Values returns the slice of values for the current page or nil if there are no values.
19441func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
19442	if page.lvcr.IsEmpty() {
19443		return nil
19444	}
19445	return *page.lvcr.Value
19446}
19447
19448// Creates a new instance of the ListVpnConnectionsResultPage type.
19449func NewListVpnConnectionsResultPage(getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
19450	return ListVpnConnectionsResultPage{fn: getNextPage}
19451}
19452
19453// ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
19454// URL nextLink to get the next set of results.
19455type ListVpnGatewaysResult struct {
19456	autorest.Response `json:"-"`
19457	// Value - List of VpnGateways.
19458	Value *[]VpnGateway `json:"value,omitempty"`
19459	// NextLink - URL to get the next set of operation list results if there are any.
19460	NextLink *string `json:"nextLink,omitempty"`
19461}
19462
19463// ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
19464type ListVpnGatewaysResultIterator struct {
19465	i    int
19466	page ListVpnGatewaysResultPage
19467}
19468
19469// NextWithContext advances to the next value.  If there was an error making
19470// the request the iterator does not advance and the error is returned.
19471func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
19472	if tracing.IsEnabled() {
19473		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
19474		defer func() {
19475			sc := -1
19476			if iter.Response().Response.Response != nil {
19477				sc = iter.Response().Response.Response.StatusCode
19478			}
19479			tracing.EndSpan(ctx, sc, err)
19480		}()
19481	}
19482	iter.i++
19483	if iter.i < len(iter.page.Values()) {
19484		return nil
19485	}
19486	err = iter.page.NextWithContext(ctx)
19487	if err != nil {
19488		iter.i--
19489		return err
19490	}
19491	iter.i = 0
19492	return nil
19493}
19494
19495// Next advances to the next value.  If there was an error making
19496// the request the iterator does not advance and the error is returned.
19497// Deprecated: Use NextWithContext() instead.
19498func (iter *ListVpnGatewaysResultIterator) Next() error {
19499	return iter.NextWithContext(context.Background())
19500}
19501
19502// NotDone returns true if the enumeration should be started or is not yet complete.
19503func (iter ListVpnGatewaysResultIterator) NotDone() bool {
19504	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19505}
19506
19507// Response returns the raw server response from the last page request.
19508func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
19509	return iter.page.Response()
19510}
19511
19512// Value returns the current value or a zero-initialized value if the
19513// iterator has advanced beyond the end of the collection.
19514func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
19515	if !iter.page.NotDone() {
19516		return VpnGateway{}
19517	}
19518	return iter.page.Values()[iter.i]
19519}
19520
19521// Creates a new instance of the ListVpnGatewaysResultIterator type.
19522func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
19523	return ListVpnGatewaysResultIterator{page: page}
19524}
19525
19526// IsEmpty returns true if the ListResult contains no values.
19527func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
19528	return lvgr.Value == nil || len(*lvgr.Value) == 0
19529}
19530
19531// listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
19532// It returns nil if no more results exist.
19533func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
19534	if lvgr.NextLink == nil || len(to.String(lvgr.NextLink)) < 1 {
19535		return nil, nil
19536	}
19537	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19538		autorest.AsJSON(),
19539		autorest.AsGet(),
19540		autorest.WithBaseURL(to.String(lvgr.NextLink)))
19541}
19542
19543// ListVpnGatewaysResultPage contains a page of VpnGateway values.
19544type ListVpnGatewaysResultPage struct {
19545	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
19546	lvgr ListVpnGatewaysResult
19547}
19548
19549// NextWithContext advances to the next page of values.  If there was an error making
19550// the request the page does not advance and the error is returned.
19551func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
19552	if tracing.IsEnabled() {
19553		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
19554		defer func() {
19555			sc := -1
19556			if page.Response().Response.Response != nil {
19557				sc = page.Response().Response.Response.StatusCode
19558			}
19559			tracing.EndSpan(ctx, sc, err)
19560		}()
19561	}
19562	next, err := page.fn(ctx, page.lvgr)
19563	if err != nil {
19564		return err
19565	}
19566	page.lvgr = next
19567	return nil
19568}
19569
19570// Next advances to the next page of values.  If there was an error making
19571// the request the page does not advance and the error is returned.
19572// Deprecated: Use NextWithContext() instead.
19573func (page *ListVpnGatewaysResultPage) Next() error {
19574	return page.NextWithContext(context.Background())
19575}
19576
19577// NotDone returns true if the page enumeration should be started or is not yet complete.
19578func (page ListVpnGatewaysResultPage) NotDone() bool {
19579	return !page.lvgr.IsEmpty()
19580}
19581
19582// Response returns the raw server response from the last page request.
19583func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
19584	return page.lvgr
19585}
19586
19587// Values returns the slice of values for the current page or nil if there are no values.
19588func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
19589	if page.lvgr.IsEmpty() {
19590		return nil
19591	}
19592	return *page.lvgr.Value
19593}
19594
19595// Creates a new instance of the ListVpnGatewaysResultPage type.
19596func NewListVpnGatewaysResultPage(getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
19597	return ListVpnGatewaysResultPage{fn: getNextPage}
19598}
19599
19600// ListVpnServerConfigurationsResult result of the request to list all VpnServerConfigurations. It contains
19601// a list of VpnServerConfigurations and a URL nextLink to get the next set of results.
19602type ListVpnServerConfigurationsResult struct {
19603	autorest.Response `json:"-"`
19604	// Value - List of VpnServerConfigurations.
19605	Value *[]VpnServerConfiguration `json:"value,omitempty"`
19606	// NextLink - URL to get the next set of operation list results if there are any.
19607	NextLink *string `json:"nextLink,omitempty"`
19608}
19609
19610// ListVpnServerConfigurationsResultIterator provides access to a complete listing of
19611// VpnServerConfiguration values.
19612type ListVpnServerConfigurationsResultIterator struct {
19613	i    int
19614	page ListVpnServerConfigurationsResultPage
19615}
19616
19617// NextWithContext advances to the next value.  If there was an error making
19618// the request the iterator does not advance and the error is returned.
19619func (iter *ListVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
19620	if tracing.IsEnabled() {
19621		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultIterator.NextWithContext")
19622		defer func() {
19623			sc := -1
19624			if iter.Response().Response.Response != nil {
19625				sc = iter.Response().Response.Response.StatusCode
19626			}
19627			tracing.EndSpan(ctx, sc, err)
19628		}()
19629	}
19630	iter.i++
19631	if iter.i < len(iter.page.Values()) {
19632		return nil
19633	}
19634	err = iter.page.NextWithContext(ctx)
19635	if err != nil {
19636		iter.i--
19637		return err
19638	}
19639	iter.i = 0
19640	return nil
19641}
19642
19643// Next advances to the next value.  If there was an error making
19644// the request the iterator does not advance and the error is returned.
19645// Deprecated: Use NextWithContext() instead.
19646func (iter *ListVpnServerConfigurationsResultIterator) Next() error {
19647	return iter.NextWithContext(context.Background())
19648}
19649
19650// NotDone returns true if the enumeration should be started or is not yet complete.
19651func (iter ListVpnServerConfigurationsResultIterator) NotDone() bool {
19652	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19653}
19654
19655// Response returns the raw server response from the last page request.
19656func (iter ListVpnServerConfigurationsResultIterator) Response() ListVpnServerConfigurationsResult {
19657	return iter.page.Response()
19658}
19659
19660// Value returns the current value or a zero-initialized value if the
19661// iterator has advanced beyond the end of the collection.
19662func (iter ListVpnServerConfigurationsResultIterator) Value() VpnServerConfiguration {
19663	if !iter.page.NotDone() {
19664		return VpnServerConfiguration{}
19665	}
19666	return iter.page.Values()[iter.i]
19667}
19668
19669// Creates a new instance of the ListVpnServerConfigurationsResultIterator type.
19670func NewListVpnServerConfigurationsResultIterator(page ListVpnServerConfigurationsResultPage) ListVpnServerConfigurationsResultIterator {
19671	return ListVpnServerConfigurationsResultIterator{page: page}
19672}
19673
19674// IsEmpty returns true if the ListResult contains no values.
19675func (lvscr ListVpnServerConfigurationsResult) IsEmpty() bool {
19676	return lvscr.Value == nil || len(*lvscr.Value) == 0
19677}
19678
19679// listVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
19680// It returns nil if no more results exist.
19681func (lvscr ListVpnServerConfigurationsResult) listVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
19682	if lvscr.NextLink == nil || len(to.String(lvscr.NextLink)) < 1 {
19683		return nil, nil
19684	}
19685	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19686		autorest.AsJSON(),
19687		autorest.AsGet(),
19688		autorest.WithBaseURL(to.String(lvscr.NextLink)))
19689}
19690
19691// ListVpnServerConfigurationsResultPage contains a page of VpnServerConfiguration values.
19692type ListVpnServerConfigurationsResultPage struct {
19693	fn    func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)
19694	lvscr ListVpnServerConfigurationsResult
19695}
19696
19697// NextWithContext advances to the next page of values.  If there was an error making
19698// the request the page does not advance and the error is returned.
19699func (page *ListVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
19700	if tracing.IsEnabled() {
19701		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultPage.NextWithContext")
19702		defer func() {
19703			sc := -1
19704			if page.Response().Response.Response != nil {
19705				sc = page.Response().Response.Response.StatusCode
19706			}
19707			tracing.EndSpan(ctx, sc, err)
19708		}()
19709	}
19710	next, err := page.fn(ctx, page.lvscr)
19711	if err != nil {
19712		return err
19713	}
19714	page.lvscr = next
19715	return nil
19716}
19717
19718// Next advances to the next page of values.  If there was an error making
19719// the request the page does not advance and the error is returned.
19720// Deprecated: Use NextWithContext() instead.
19721func (page *ListVpnServerConfigurationsResultPage) Next() error {
19722	return page.NextWithContext(context.Background())
19723}
19724
19725// NotDone returns true if the page enumeration should be started or is not yet complete.
19726func (page ListVpnServerConfigurationsResultPage) NotDone() bool {
19727	return !page.lvscr.IsEmpty()
19728}
19729
19730// Response returns the raw server response from the last page request.
19731func (page ListVpnServerConfigurationsResultPage) Response() ListVpnServerConfigurationsResult {
19732	return page.lvscr
19733}
19734
19735// Values returns the slice of values for the current page or nil if there are no values.
19736func (page ListVpnServerConfigurationsResultPage) Values() []VpnServerConfiguration {
19737	if page.lvscr.IsEmpty() {
19738		return nil
19739	}
19740	return *page.lvscr.Value
19741}
19742
19743// Creates a new instance of the ListVpnServerConfigurationsResultPage type.
19744func NewListVpnServerConfigurationsResultPage(getNextPage func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)) ListVpnServerConfigurationsResultPage {
19745	return ListVpnServerConfigurationsResultPage{fn: getNextPage}
19746}
19747
19748// ListVpnSiteLinkConnectionsResult result of the request to list all vpn connections to a virtual wan vpn
19749// gateway. It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
19750type ListVpnSiteLinkConnectionsResult struct {
19751	autorest.Response `json:"-"`
19752	// Value - List of VpnSiteLinkConnections.
19753	Value *[]VpnSiteLinkConnection `json:"value,omitempty"`
19754	// NextLink - URL to get the next set of operation list results if there are any.
19755	NextLink *string `json:"nextLink,omitempty"`
19756}
19757
19758// ListVpnSiteLinkConnectionsResultIterator provides access to a complete listing of VpnSiteLinkConnection
19759// values.
19760type ListVpnSiteLinkConnectionsResultIterator struct {
19761	i    int
19762	page ListVpnSiteLinkConnectionsResultPage
19763}
19764
19765// NextWithContext advances to the next value.  If there was an error making
19766// the request the iterator does not advance and the error is returned.
19767func (iter *ListVpnSiteLinkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
19768	if tracing.IsEnabled() {
19769		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultIterator.NextWithContext")
19770		defer func() {
19771			sc := -1
19772			if iter.Response().Response.Response != nil {
19773				sc = iter.Response().Response.Response.StatusCode
19774			}
19775			tracing.EndSpan(ctx, sc, err)
19776		}()
19777	}
19778	iter.i++
19779	if iter.i < len(iter.page.Values()) {
19780		return nil
19781	}
19782	err = iter.page.NextWithContext(ctx)
19783	if err != nil {
19784		iter.i--
19785		return err
19786	}
19787	iter.i = 0
19788	return nil
19789}
19790
19791// Next advances to the next value.  If there was an error making
19792// the request the iterator does not advance and the error is returned.
19793// Deprecated: Use NextWithContext() instead.
19794func (iter *ListVpnSiteLinkConnectionsResultIterator) Next() error {
19795	return iter.NextWithContext(context.Background())
19796}
19797
19798// NotDone returns true if the enumeration should be started or is not yet complete.
19799func (iter ListVpnSiteLinkConnectionsResultIterator) NotDone() bool {
19800	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19801}
19802
19803// Response returns the raw server response from the last page request.
19804func (iter ListVpnSiteLinkConnectionsResultIterator) Response() ListVpnSiteLinkConnectionsResult {
19805	return iter.page.Response()
19806}
19807
19808// Value returns the current value or a zero-initialized value if the
19809// iterator has advanced beyond the end of the collection.
19810func (iter ListVpnSiteLinkConnectionsResultIterator) Value() VpnSiteLinkConnection {
19811	if !iter.page.NotDone() {
19812		return VpnSiteLinkConnection{}
19813	}
19814	return iter.page.Values()[iter.i]
19815}
19816
19817// Creates a new instance of the ListVpnSiteLinkConnectionsResultIterator type.
19818func NewListVpnSiteLinkConnectionsResultIterator(page ListVpnSiteLinkConnectionsResultPage) ListVpnSiteLinkConnectionsResultIterator {
19819	return ListVpnSiteLinkConnectionsResultIterator{page: page}
19820}
19821
19822// IsEmpty returns true if the ListResult contains no values.
19823func (lvslcr ListVpnSiteLinkConnectionsResult) IsEmpty() bool {
19824	return lvslcr.Value == nil || len(*lvslcr.Value) == 0
19825}
19826
19827// listVpnSiteLinkConnectionsResultPreparer prepares a request to retrieve the next set of results.
19828// It returns nil if no more results exist.
19829func (lvslcr ListVpnSiteLinkConnectionsResult) listVpnSiteLinkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
19830	if lvslcr.NextLink == nil || len(to.String(lvslcr.NextLink)) < 1 {
19831		return nil, nil
19832	}
19833	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19834		autorest.AsJSON(),
19835		autorest.AsGet(),
19836		autorest.WithBaseURL(to.String(lvslcr.NextLink)))
19837}
19838
19839// ListVpnSiteLinkConnectionsResultPage contains a page of VpnSiteLinkConnection values.
19840type ListVpnSiteLinkConnectionsResultPage struct {
19841	fn     func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)
19842	lvslcr ListVpnSiteLinkConnectionsResult
19843}
19844
19845// NextWithContext advances to the next page of values.  If there was an error making
19846// the request the page does not advance and the error is returned.
19847func (page *ListVpnSiteLinkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
19848	if tracing.IsEnabled() {
19849		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultPage.NextWithContext")
19850		defer func() {
19851			sc := -1
19852			if page.Response().Response.Response != nil {
19853				sc = page.Response().Response.Response.StatusCode
19854			}
19855			tracing.EndSpan(ctx, sc, err)
19856		}()
19857	}
19858	next, err := page.fn(ctx, page.lvslcr)
19859	if err != nil {
19860		return err
19861	}
19862	page.lvslcr = next
19863	return nil
19864}
19865
19866// Next advances to the next page of values.  If there was an error making
19867// the request the page does not advance and the error is returned.
19868// Deprecated: Use NextWithContext() instead.
19869func (page *ListVpnSiteLinkConnectionsResultPage) Next() error {
19870	return page.NextWithContext(context.Background())
19871}
19872
19873// NotDone returns true if the page enumeration should be started or is not yet complete.
19874func (page ListVpnSiteLinkConnectionsResultPage) NotDone() bool {
19875	return !page.lvslcr.IsEmpty()
19876}
19877
19878// Response returns the raw server response from the last page request.
19879func (page ListVpnSiteLinkConnectionsResultPage) Response() ListVpnSiteLinkConnectionsResult {
19880	return page.lvslcr
19881}
19882
19883// Values returns the slice of values for the current page or nil if there are no values.
19884func (page ListVpnSiteLinkConnectionsResultPage) Values() []VpnSiteLinkConnection {
19885	if page.lvslcr.IsEmpty() {
19886		return nil
19887	}
19888	return *page.lvslcr.Value
19889}
19890
19891// Creates a new instance of the ListVpnSiteLinkConnectionsResultPage type.
19892func NewListVpnSiteLinkConnectionsResultPage(getNextPage func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)) ListVpnSiteLinkConnectionsResultPage {
19893	return ListVpnSiteLinkConnectionsResultPage{fn: getNextPage}
19894}
19895
19896// ListVpnSiteLinksResult result of the request to list VpnSiteLinks. It contains a list of VpnSiteLinks
19897// and a URL nextLink to get the next set of results.
19898type ListVpnSiteLinksResult struct {
19899	autorest.Response `json:"-"`
19900	// Value - List of VpnSitesLinks.
19901	Value *[]VpnSiteLink `json:"value,omitempty"`
19902	// NextLink - URL to get the next set of operation list results if there are any.
19903	NextLink *string `json:"nextLink,omitempty"`
19904}
19905
19906// ListVpnSiteLinksResultIterator provides access to a complete listing of VpnSiteLink values.
19907type ListVpnSiteLinksResultIterator struct {
19908	i    int
19909	page ListVpnSiteLinksResultPage
19910}
19911
19912// NextWithContext advances to the next value.  If there was an error making
19913// the request the iterator does not advance and the error is returned.
19914func (iter *ListVpnSiteLinksResultIterator) NextWithContext(ctx context.Context) (err error) {
19915	if tracing.IsEnabled() {
19916		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultIterator.NextWithContext")
19917		defer func() {
19918			sc := -1
19919			if iter.Response().Response.Response != nil {
19920				sc = iter.Response().Response.Response.StatusCode
19921			}
19922			tracing.EndSpan(ctx, sc, err)
19923		}()
19924	}
19925	iter.i++
19926	if iter.i < len(iter.page.Values()) {
19927		return nil
19928	}
19929	err = iter.page.NextWithContext(ctx)
19930	if err != nil {
19931		iter.i--
19932		return err
19933	}
19934	iter.i = 0
19935	return nil
19936}
19937
19938// Next advances to the next value.  If there was an error making
19939// the request the iterator does not advance and the error is returned.
19940// Deprecated: Use NextWithContext() instead.
19941func (iter *ListVpnSiteLinksResultIterator) Next() error {
19942	return iter.NextWithContext(context.Background())
19943}
19944
19945// NotDone returns true if the enumeration should be started or is not yet complete.
19946func (iter ListVpnSiteLinksResultIterator) NotDone() bool {
19947	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19948}
19949
19950// Response returns the raw server response from the last page request.
19951func (iter ListVpnSiteLinksResultIterator) Response() ListVpnSiteLinksResult {
19952	return iter.page.Response()
19953}
19954
19955// Value returns the current value or a zero-initialized value if the
19956// iterator has advanced beyond the end of the collection.
19957func (iter ListVpnSiteLinksResultIterator) Value() VpnSiteLink {
19958	if !iter.page.NotDone() {
19959		return VpnSiteLink{}
19960	}
19961	return iter.page.Values()[iter.i]
19962}
19963
19964// Creates a new instance of the ListVpnSiteLinksResultIterator type.
19965func NewListVpnSiteLinksResultIterator(page ListVpnSiteLinksResultPage) ListVpnSiteLinksResultIterator {
19966	return ListVpnSiteLinksResultIterator{page: page}
19967}
19968
19969// IsEmpty returns true if the ListResult contains no values.
19970func (lvslr ListVpnSiteLinksResult) IsEmpty() bool {
19971	return lvslr.Value == nil || len(*lvslr.Value) == 0
19972}
19973
19974// listVpnSiteLinksResultPreparer prepares a request to retrieve the next set of results.
19975// It returns nil if no more results exist.
19976func (lvslr ListVpnSiteLinksResult) listVpnSiteLinksResultPreparer(ctx context.Context) (*http.Request, error) {
19977	if lvslr.NextLink == nil || len(to.String(lvslr.NextLink)) < 1 {
19978		return nil, nil
19979	}
19980	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19981		autorest.AsJSON(),
19982		autorest.AsGet(),
19983		autorest.WithBaseURL(to.String(lvslr.NextLink)))
19984}
19985
19986// ListVpnSiteLinksResultPage contains a page of VpnSiteLink values.
19987type ListVpnSiteLinksResultPage struct {
19988	fn    func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)
19989	lvslr ListVpnSiteLinksResult
19990}
19991
19992// NextWithContext advances to the next page of values.  If there was an error making
19993// the request the page does not advance and the error is returned.
19994func (page *ListVpnSiteLinksResultPage) NextWithContext(ctx context.Context) (err error) {
19995	if tracing.IsEnabled() {
19996		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultPage.NextWithContext")
19997		defer func() {
19998			sc := -1
19999			if page.Response().Response.Response != nil {
20000				sc = page.Response().Response.Response.StatusCode
20001			}
20002			tracing.EndSpan(ctx, sc, err)
20003		}()
20004	}
20005	next, err := page.fn(ctx, page.lvslr)
20006	if err != nil {
20007		return err
20008	}
20009	page.lvslr = next
20010	return nil
20011}
20012
20013// Next advances to the next page of values.  If there was an error making
20014// the request the page does not advance and the error is returned.
20015// Deprecated: Use NextWithContext() instead.
20016func (page *ListVpnSiteLinksResultPage) Next() error {
20017	return page.NextWithContext(context.Background())
20018}
20019
20020// NotDone returns true if the page enumeration should be started or is not yet complete.
20021func (page ListVpnSiteLinksResultPage) NotDone() bool {
20022	return !page.lvslr.IsEmpty()
20023}
20024
20025// Response returns the raw server response from the last page request.
20026func (page ListVpnSiteLinksResultPage) Response() ListVpnSiteLinksResult {
20027	return page.lvslr
20028}
20029
20030// Values returns the slice of values for the current page or nil if there are no values.
20031func (page ListVpnSiteLinksResultPage) Values() []VpnSiteLink {
20032	if page.lvslr.IsEmpty() {
20033		return nil
20034	}
20035	return *page.lvslr.Value
20036}
20037
20038// Creates a new instance of the ListVpnSiteLinksResultPage type.
20039func NewListVpnSiteLinksResultPage(getNextPage func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)) ListVpnSiteLinksResultPage {
20040	return ListVpnSiteLinksResultPage{fn: getNextPage}
20041}
20042
20043// ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
20044// nextLink to get the next set of results.
20045type ListVpnSitesResult struct {
20046	autorest.Response `json:"-"`
20047	// Value - List of VpnSites.
20048	Value *[]VpnSite `json:"value,omitempty"`
20049	// NextLink - URL to get the next set of operation list results if there are any.
20050	NextLink *string `json:"nextLink,omitempty"`
20051}
20052
20053// ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
20054type ListVpnSitesResultIterator struct {
20055	i    int
20056	page ListVpnSitesResultPage
20057}
20058
20059// NextWithContext advances to the next value.  If there was an error making
20060// the request the iterator does not advance and the error is returned.
20061func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
20062	if tracing.IsEnabled() {
20063		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
20064		defer func() {
20065			sc := -1
20066			if iter.Response().Response.Response != nil {
20067				sc = iter.Response().Response.Response.StatusCode
20068			}
20069			tracing.EndSpan(ctx, sc, err)
20070		}()
20071	}
20072	iter.i++
20073	if iter.i < len(iter.page.Values()) {
20074		return nil
20075	}
20076	err = iter.page.NextWithContext(ctx)
20077	if err != nil {
20078		iter.i--
20079		return err
20080	}
20081	iter.i = 0
20082	return nil
20083}
20084
20085// Next advances to the next value.  If there was an error making
20086// the request the iterator does not advance and the error is returned.
20087// Deprecated: Use NextWithContext() instead.
20088func (iter *ListVpnSitesResultIterator) Next() error {
20089	return iter.NextWithContext(context.Background())
20090}
20091
20092// NotDone returns true if the enumeration should be started or is not yet complete.
20093func (iter ListVpnSitesResultIterator) NotDone() bool {
20094	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20095}
20096
20097// Response returns the raw server response from the last page request.
20098func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
20099	return iter.page.Response()
20100}
20101
20102// Value returns the current value or a zero-initialized value if the
20103// iterator has advanced beyond the end of the collection.
20104func (iter ListVpnSitesResultIterator) Value() VpnSite {
20105	if !iter.page.NotDone() {
20106		return VpnSite{}
20107	}
20108	return iter.page.Values()[iter.i]
20109}
20110
20111// Creates a new instance of the ListVpnSitesResultIterator type.
20112func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
20113	return ListVpnSitesResultIterator{page: page}
20114}
20115
20116// IsEmpty returns true if the ListResult contains no values.
20117func (lvsr ListVpnSitesResult) IsEmpty() bool {
20118	return lvsr.Value == nil || len(*lvsr.Value) == 0
20119}
20120
20121// listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
20122// It returns nil if no more results exist.
20123func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
20124	if lvsr.NextLink == nil || len(to.String(lvsr.NextLink)) < 1 {
20125		return nil, nil
20126	}
20127	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20128		autorest.AsJSON(),
20129		autorest.AsGet(),
20130		autorest.WithBaseURL(to.String(lvsr.NextLink)))
20131}
20132
20133// ListVpnSitesResultPage contains a page of VpnSite values.
20134type ListVpnSitesResultPage struct {
20135	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
20136	lvsr ListVpnSitesResult
20137}
20138
20139// NextWithContext advances to the next page of values.  If there was an error making
20140// the request the page does not advance and the error is returned.
20141func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
20142	if tracing.IsEnabled() {
20143		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
20144		defer func() {
20145			sc := -1
20146			if page.Response().Response.Response != nil {
20147				sc = page.Response().Response.Response.StatusCode
20148			}
20149			tracing.EndSpan(ctx, sc, err)
20150		}()
20151	}
20152	next, err := page.fn(ctx, page.lvsr)
20153	if err != nil {
20154		return err
20155	}
20156	page.lvsr = next
20157	return nil
20158}
20159
20160// Next advances to the next page of values.  If there was an error making
20161// the request the page does not advance and the error is returned.
20162// Deprecated: Use NextWithContext() instead.
20163func (page *ListVpnSitesResultPage) Next() error {
20164	return page.NextWithContext(context.Background())
20165}
20166
20167// NotDone returns true if the page enumeration should be started or is not yet complete.
20168func (page ListVpnSitesResultPage) NotDone() bool {
20169	return !page.lvsr.IsEmpty()
20170}
20171
20172// Response returns the raw server response from the last page request.
20173func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
20174	return page.lvsr
20175}
20176
20177// Values returns the slice of values for the current page or nil if there are no values.
20178func (page ListVpnSitesResultPage) Values() []VpnSite {
20179	if page.lvsr.IsEmpty() {
20180		return nil
20181	}
20182	return *page.lvsr.Value
20183}
20184
20185// Creates a new instance of the ListVpnSitesResultPage type.
20186func NewListVpnSitesResultPage(getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
20187	return ListVpnSitesResultPage{fn: getNextPage}
20188}
20189
20190// LoadBalancer loadBalancer resource.
20191type LoadBalancer struct {
20192	autorest.Response `json:"-"`
20193	// Sku - The load balancer SKU.
20194	Sku *LoadBalancerSku `json:"sku,omitempty"`
20195	// LoadBalancerPropertiesFormat - Properties of load balancer.
20196	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
20197	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20198	Etag *string `json:"etag,omitempty"`
20199	// ID - Resource ID.
20200	ID *string `json:"id,omitempty"`
20201	// Name - READ-ONLY; Resource name.
20202	Name *string `json:"name,omitempty"`
20203	// Type - READ-ONLY; Resource type.
20204	Type *string `json:"type,omitempty"`
20205	// Location - Resource location.
20206	Location *string `json:"location,omitempty"`
20207	// Tags - Resource tags.
20208	Tags map[string]*string `json:"tags"`
20209}
20210
20211// MarshalJSON is the custom marshaler for LoadBalancer.
20212func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
20213	objectMap := make(map[string]interface{})
20214	if lb.Sku != nil {
20215		objectMap["sku"] = lb.Sku
20216	}
20217	if lb.LoadBalancerPropertiesFormat != nil {
20218		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
20219	}
20220	if lb.ID != nil {
20221		objectMap["id"] = lb.ID
20222	}
20223	if lb.Location != nil {
20224		objectMap["location"] = lb.Location
20225	}
20226	if lb.Tags != nil {
20227		objectMap["tags"] = lb.Tags
20228	}
20229	return json.Marshal(objectMap)
20230}
20231
20232// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
20233func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
20234	var m map[string]*json.RawMessage
20235	err := json.Unmarshal(body, &m)
20236	if err != nil {
20237		return err
20238	}
20239	for k, v := range m {
20240		switch k {
20241		case "sku":
20242			if v != nil {
20243				var sku LoadBalancerSku
20244				err = json.Unmarshal(*v, &sku)
20245				if err != nil {
20246					return err
20247				}
20248				lb.Sku = &sku
20249			}
20250		case "properties":
20251			if v != nil {
20252				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
20253				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
20254				if err != nil {
20255					return err
20256				}
20257				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
20258			}
20259		case "etag":
20260			if v != nil {
20261				var etag string
20262				err = json.Unmarshal(*v, &etag)
20263				if err != nil {
20264					return err
20265				}
20266				lb.Etag = &etag
20267			}
20268		case "id":
20269			if v != nil {
20270				var ID string
20271				err = json.Unmarshal(*v, &ID)
20272				if err != nil {
20273					return err
20274				}
20275				lb.ID = &ID
20276			}
20277		case "name":
20278			if v != nil {
20279				var name string
20280				err = json.Unmarshal(*v, &name)
20281				if err != nil {
20282					return err
20283				}
20284				lb.Name = &name
20285			}
20286		case "type":
20287			if v != nil {
20288				var typeVar string
20289				err = json.Unmarshal(*v, &typeVar)
20290				if err != nil {
20291					return err
20292				}
20293				lb.Type = &typeVar
20294			}
20295		case "location":
20296			if v != nil {
20297				var location string
20298				err = json.Unmarshal(*v, &location)
20299				if err != nil {
20300					return err
20301				}
20302				lb.Location = &location
20303			}
20304		case "tags":
20305			if v != nil {
20306				var tags map[string]*string
20307				err = json.Unmarshal(*v, &tags)
20308				if err != nil {
20309					return err
20310				}
20311				lb.Tags = tags
20312			}
20313		}
20314	}
20315
20316	return nil
20317}
20318
20319// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
20320type LoadBalancerBackendAddressPoolListResult struct {
20321	autorest.Response `json:"-"`
20322	// Value - A list of backend address pools in a load balancer.
20323	Value *[]BackendAddressPool `json:"value,omitempty"`
20324	// NextLink - READ-ONLY; The URL to get the next set of results.
20325	NextLink *string `json:"nextLink,omitempty"`
20326}
20327
20328// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
20329// BackendAddressPool values.
20330type LoadBalancerBackendAddressPoolListResultIterator struct {
20331	i    int
20332	page LoadBalancerBackendAddressPoolListResultPage
20333}
20334
20335// NextWithContext advances to the next value.  If there was an error making
20336// the request the iterator does not advance and the error is returned.
20337func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
20338	if tracing.IsEnabled() {
20339		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
20340		defer func() {
20341			sc := -1
20342			if iter.Response().Response.Response != nil {
20343				sc = iter.Response().Response.Response.StatusCode
20344			}
20345			tracing.EndSpan(ctx, sc, err)
20346		}()
20347	}
20348	iter.i++
20349	if iter.i < len(iter.page.Values()) {
20350		return nil
20351	}
20352	err = iter.page.NextWithContext(ctx)
20353	if err != nil {
20354		iter.i--
20355		return err
20356	}
20357	iter.i = 0
20358	return nil
20359}
20360
20361// Next advances to the next value.  If there was an error making
20362// the request the iterator does not advance and the error is returned.
20363// Deprecated: Use NextWithContext() instead.
20364func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
20365	return iter.NextWithContext(context.Background())
20366}
20367
20368// NotDone returns true if the enumeration should be started or is not yet complete.
20369func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
20370	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20371}
20372
20373// Response returns the raw server response from the last page request.
20374func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
20375	return iter.page.Response()
20376}
20377
20378// Value returns the current value or a zero-initialized value if the
20379// iterator has advanced beyond the end of the collection.
20380func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
20381	if !iter.page.NotDone() {
20382		return BackendAddressPool{}
20383	}
20384	return iter.page.Values()[iter.i]
20385}
20386
20387// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
20388func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
20389	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
20390}
20391
20392// IsEmpty returns true if the ListResult contains no values.
20393func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
20394	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
20395}
20396
20397// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
20398// It returns nil if no more results exist.
20399func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
20400	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
20401		return nil, nil
20402	}
20403	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20404		autorest.AsJSON(),
20405		autorest.AsGet(),
20406		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
20407}
20408
20409// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
20410type LoadBalancerBackendAddressPoolListResultPage struct {
20411	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
20412	lbbaplr LoadBalancerBackendAddressPoolListResult
20413}
20414
20415// NextWithContext advances to the next page of values.  If there was an error making
20416// the request the page does not advance and the error is returned.
20417func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
20418	if tracing.IsEnabled() {
20419		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
20420		defer func() {
20421			sc := -1
20422			if page.Response().Response.Response != nil {
20423				sc = page.Response().Response.Response.StatusCode
20424			}
20425			tracing.EndSpan(ctx, sc, err)
20426		}()
20427	}
20428	next, err := page.fn(ctx, page.lbbaplr)
20429	if err != nil {
20430		return err
20431	}
20432	page.lbbaplr = next
20433	return nil
20434}
20435
20436// Next advances to the next page of values.  If there was an error making
20437// the request the page does not advance and the error is returned.
20438// Deprecated: Use NextWithContext() instead.
20439func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
20440	return page.NextWithContext(context.Background())
20441}
20442
20443// NotDone returns true if the page enumeration should be started or is not yet complete.
20444func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
20445	return !page.lbbaplr.IsEmpty()
20446}
20447
20448// Response returns the raw server response from the last page request.
20449func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
20450	return page.lbbaplr
20451}
20452
20453// Values returns the slice of values for the current page or nil if there are no values.
20454func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
20455	if page.lbbaplr.IsEmpty() {
20456		return nil
20457	}
20458	return *page.lbbaplr.Value
20459}
20460
20461// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
20462func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
20463	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
20464}
20465
20466// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
20467type LoadBalancerFrontendIPConfigurationListResult struct {
20468	autorest.Response `json:"-"`
20469	// Value - A list of frontend IP configurations in a load balancer.
20470	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
20471	// NextLink - READ-ONLY; The URL to get the next set of results.
20472	NextLink *string `json:"nextLink,omitempty"`
20473}
20474
20475// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
20476// FrontendIPConfiguration values.
20477type LoadBalancerFrontendIPConfigurationListResultIterator struct {
20478	i    int
20479	page LoadBalancerFrontendIPConfigurationListResultPage
20480}
20481
20482// NextWithContext advances to the next value.  If there was an error making
20483// the request the iterator does not advance and the error is returned.
20484func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
20485	if tracing.IsEnabled() {
20486		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
20487		defer func() {
20488			sc := -1
20489			if iter.Response().Response.Response != nil {
20490				sc = iter.Response().Response.Response.StatusCode
20491			}
20492			tracing.EndSpan(ctx, sc, err)
20493		}()
20494	}
20495	iter.i++
20496	if iter.i < len(iter.page.Values()) {
20497		return nil
20498	}
20499	err = iter.page.NextWithContext(ctx)
20500	if err != nil {
20501		iter.i--
20502		return err
20503	}
20504	iter.i = 0
20505	return nil
20506}
20507
20508// Next advances to the next value.  If there was an error making
20509// the request the iterator does not advance and the error is returned.
20510// Deprecated: Use NextWithContext() instead.
20511func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
20512	return iter.NextWithContext(context.Background())
20513}
20514
20515// NotDone returns true if the enumeration should be started or is not yet complete.
20516func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
20517	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20518}
20519
20520// Response returns the raw server response from the last page request.
20521func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
20522	return iter.page.Response()
20523}
20524
20525// Value returns the current value or a zero-initialized value if the
20526// iterator has advanced beyond the end of the collection.
20527func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
20528	if !iter.page.NotDone() {
20529		return FrontendIPConfiguration{}
20530	}
20531	return iter.page.Values()[iter.i]
20532}
20533
20534// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
20535func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
20536	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
20537}
20538
20539// IsEmpty returns true if the ListResult contains no values.
20540func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
20541	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
20542}
20543
20544// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
20545// It returns nil if no more results exist.
20546func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
20547	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
20548		return nil, nil
20549	}
20550	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20551		autorest.AsJSON(),
20552		autorest.AsGet(),
20553		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
20554}
20555
20556// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
20557type LoadBalancerFrontendIPConfigurationListResultPage struct {
20558	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
20559	lbficlr LoadBalancerFrontendIPConfigurationListResult
20560}
20561
20562// NextWithContext advances to the next page of values.  If there was an error making
20563// the request the page does not advance and the error is returned.
20564func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
20565	if tracing.IsEnabled() {
20566		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
20567		defer func() {
20568			sc := -1
20569			if page.Response().Response.Response != nil {
20570				sc = page.Response().Response.Response.StatusCode
20571			}
20572			tracing.EndSpan(ctx, sc, err)
20573		}()
20574	}
20575	next, err := page.fn(ctx, page.lbficlr)
20576	if err != nil {
20577		return err
20578	}
20579	page.lbficlr = next
20580	return nil
20581}
20582
20583// Next advances to the next page of values.  If there was an error making
20584// the request the page does not advance and the error is returned.
20585// Deprecated: Use NextWithContext() instead.
20586func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
20587	return page.NextWithContext(context.Background())
20588}
20589
20590// NotDone returns true if the page enumeration should be started or is not yet complete.
20591func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
20592	return !page.lbficlr.IsEmpty()
20593}
20594
20595// Response returns the raw server response from the last page request.
20596func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
20597	return page.lbficlr
20598}
20599
20600// Values returns the slice of values for the current page or nil if there are no values.
20601func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
20602	if page.lbficlr.IsEmpty() {
20603		return nil
20604	}
20605	return *page.lbficlr.Value
20606}
20607
20608// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
20609func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
20610	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
20611}
20612
20613// LoadBalancerListResult response for ListLoadBalancers API service call.
20614type LoadBalancerListResult struct {
20615	autorest.Response `json:"-"`
20616	// Value - A list of load balancers in a resource group.
20617	Value *[]LoadBalancer `json:"value,omitempty"`
20618	// NextLink - READ-ONLY; The URL to get the next set of results.
20619	NextLink *string `json:"nextLink,omitempty"`
20620}
20621
20622// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
20623type LoadBalancerListResultIterator struct {
20624	i    int
20625	page LoadBalancerListResultPage
20626}
20627
20628// NextWithContext advances to the next value.  If there was an error making
20629// the request the iterator does not advance and the error is returned.
20630func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
20631	if tracing.IsEnabled() {
20632		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
20633		defer func() {
20634			sc := -1
20635			if iter.Response().Response.Response != nil {
20636				sc = iter.Response().Response.Response.StatusCode
20637			}
20638			tracing.EndSpan(ctx, sc, err)
20639		}()
20640	}
20641	iter.i++
20642	if iter.i < len(iter.page.Values()) {
20643		return nil
20644	}
20645	err = iter.page.NextWithContext(ctx)
20646	if err != nil {
20647		iter.i--
20648		return err
20649	}
20650	iter.i = 0
20651	return nil
20652}
20653
20654// Next advances to the next value.  If there was an error making
20655// the request the iterator does not advance and the error is returned.
20656// Deprecated: Use NextWithContext() instead.
20657func (iter *LoadBalancerListResultIterator) Next() error {
20658	return iter.NextWithContext(context.Background())
20659}
20660
20661// NotDone returns true if the enumeration should be started or is not yet complete.
20662func (iter LoadBalancerListResultIterator) NotDone() bool {
20663	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20664}
20665
20666// Response returns the raw server response from the last page request.
20667func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
20668	return iter.page.Response()
20669}
20670
20671// Value returns the current value or a zero-initialized value if the
20672// iterator has advanced beyond the end of the collection.
20673func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
20674	if !iter.page.NotDone() {
20675		return LoadBalancer{}
20676	}
20677	return iter.page.Values()[iter.i]
20678}
20679
20680// Creates a new instance of the LoadBalancerListResultIterator type.
20681func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
20682	return LoadBalancerListResultIterator{page: page}
20683}
20684
20685// IsEmpty returns true if the ListResult contains no values.
20686func (lblr LoadBalancerListResult) IsEmpty() bool {
20687	return lblr.Value == nil || len(*lblr.Value) == 0
20688}
20689
20690// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
20691// It returns nil if no more results exist.
20692func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
20693	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
20694		return nil, nil
20695	}
20696	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20697		autorest.AsJSON(),
20698		autorest.AsGet(),
20699		autorest.WithBaseURL(to.String(lblr.NextLink)))
20700}
20701
20702// LoadBalancerListResultPage contains a page of LoadBalancer values.
20703type LoadBalancerListResultPage struct {
20704	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
20705	lblr LoadBalancerListResult
20706}
20707
20708// NextWithContext advances to the next page of values.  If there was an error making
20709// the request the page does not advance and the error is returned.
20710func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
20711	if tracing.IsEnabled() {
20712		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
20713		defer func() {
20714			sc := -1
20715			if page.Response().Response.Response != nil {
20716				sc = page.Response().Response.Response.StatusCode
20717			}
20718			tracing.EndSpan(ctx, sc, err)
20719		}()
20720	}
20721	next, err := page.fn(ctx, page.lblr)
20722	if err != nil {
20723		return err
20724	}
20725	page.lblr = next
20726	return nil
20727}
20728
20729// Next advances to the next page of values.  If there was an error making
20730// the request the page does not advance and the error is returned.
20731// Deprecated: Use NextWithContext() instead.
20732func (page *LoadBalancerListResultPage) Next() error {
20733	return page.NextWithContext(context.Background())
20734}
20735
20736// NotDone returns true if the page enumeration should be started or is not yet complete.
20737func (page LoadBalancerListResultPage) NotDone() bool {
20738	return !page.lblr.IsEmpty()
20739}
20740
20741// Response returns the raw server response from the last page request.
20742func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
20743	return page.lblr
20744}
20745
20746// Values returns the slice of values for the current page or nil if there are no values.
20747func (page LoadBalancerListResultPage) Values() []LoadBalancer {
20748	if page.lblr.IsEmpty() {
20749		return nil
20750	}
20751	return *page.lblr.Value
20752}
20753
20754// Creates a new instance of the LoadBalancerListResultPage type.
20755func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
20756	return LoadBalancerListResultPage{fn: getNextPage}
20757}
20758
20759// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
20760type LoadBalancerLoadBalancingRuleListResult struct {
20761	autorest.Response `json:"-"`
20762	// Value - A list of load balancing rules in a load balancer.
20763	Value *[]LoadBalancingRule `json:"value,omitempty"`
20764	// NextLink - READ-ONLY; The URL to get the next set of results.
20765	NextLink *string `json:"nextLink,omitempty"`
20766}
20767
20768// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
20769// LoadBalancingRule values.
20770type LoadBalancerLoadBalancingRuleListResultIterator struct {
20771	i    int
20772	page LoadBalancerLoadBalancingRuleListResultPage
20773}
20774
20775// NextWithContext advances to the next value.  If there was an error making
20776// the request the iterator does not advance and the error is returned.
20777func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
20778	if tracing.IsEnabled() {
20779		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
20780		defer func() {
20781			sc := -1
20782			if iter.Response().Response.Response != nil {
20783				sc = iter.Response().Response.Response.StatusCode
20784			}
20785			tracing.EndSpan(ctx, sc, err)
20786		}()
20787	}
20788	iter.i++
20789	if iter.i < len(iter.page.Values()) {
20790		return nil
20791	}
20792	err = iter.page.NextWithContext(ctx)
20793	if err != nil {
20794		iter.i--
20795		return err
20796	}
20797	iter.i = 0
20798	return nil
20799}
20800
20801// Next advances to the next value.  If there was an error making
20802// the request the iterator does not advance and the error is returned.
20803// Deprecated: Use NextWithContext() instead.
20804func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
20805	return iter.NextWithContext(context.Background())
20806}
20807
20808// NotDone returns true if the enumeration should be started or is not yet complete.
20809func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
20810	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20811}
20812
20813// Response returns the raw server response from the last page request.
20814func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
20815	return iter.page.Response()
20816}
20817
20818// Value returns the current value or a zero-initialized value if the
20819// iterator has advanced beyond the end of the collection.
20820func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
20821	if !iter.page.NotDone() {
20822		return LoadBalancingRule{}
20823	}
20824	return iter.page.Values()[iter.i]
20825}
20826
20827// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
20828func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
20829	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
20830}
20831
20832// IsEmpty returns true if the ListResult contains no values.
20833func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
20834	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
20835}
20836
20837// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
20838// It returns nil if no more results exist.
20839func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
20840	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
20841		return nil, nil
20842	}
20843	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20844		autorest.AsJSON(),
20845		autorest.AsGet(),
20846		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
20847}
20848
20849// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
20850type LoadBalancerLoadBalancingRuleListResultPage struct {
20851	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
20852	lblbrlr LoadBalancerLoadBalancingRuleListResult
20853}
20854
20855// NextWithContext advances to the next page of values.  If there was an error making
20856// the request the page does not advance and the error is returned.
20857func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
20858	if tracing.IsEnabled() {
20859		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
20860		defer func() {
20861			sc := -1
20862			if page.Response().Response.Response != nil {
20863				sc = page.Response().Response.Response.StatusCode
20864			}
20865			tracing.EndSpan(ctx, sc, err)
20866		}()
20867	}
20868	next, err := page.fn(ctx, page.lblbrlr)
20869	if err != nil {
20870		return err
20871	}
20872	page.lblbrlr = next
20873	return nil
20874}
20875
20876// Next advances to the next page of values.  If there was an error making
20877// the request the page does not advance and the error is returned.
20878// Deprecated: Use NextWithContext() instead.
20879func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
20880	return page.NextWithContext(context.Background())
20881}
20882
20883// NotDone returns true if the page enumeration should be started or is not yet complete.
20884func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
20885	return !page.lblbrlr.IsEmpty()
20886}
20887
20888// Response returns the raw server response from the last page request.
20889func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
20890	return page.lblbrlr
20891}
20892
20893// Values returns the slice of values for the current page or nil if there are no values.
20894func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
20895	if page.lblbrlr.IsEmpty() {
20896		return nil
20897	}
20898	return *page.lblbrlr.Value
20899}
20900
20901// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
20902func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
20903	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
20904}
20905
20906// LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
20907type LoadBalancerOutboundRuleListResult struct {
20908	autorest.Response `json:"-"`
20909	// Value - A list of outbound rules in a load balancer.
20910	Value *[]OutboundRule `json:"value,omitempty"`
20911	// NextLink - READ-ONLY; The URL to get the next set of results.
20912	NextLink *string `json:"nextLink,omitempty"`
20913}
20914
20915// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
20916type LoadBalancerOutboundRuleListResultIterator struct {
20917	i    int
20918	page LoadBalancerOutboundRuleListResultPage
20919}
20920
20921// NextWithContext advances to the next value.  If there was an error making
20922// the request the iterator does not advance and the error is returned.
20923func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
20924	if tracing.IsEnabled() {
20925		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
20926		defer func() {
20927			sc := -1
20928			if iter.Response().Response.Response != nil {
20929				sc = iter.Response().Response.Response.StatusCode
20930			}
20931			tracing.EndSpan(ctx, sc, err)
20932		}()
20933	}
20934	iter.i++
20935	if iter.i < len(iter.page.Values()) {
20936		return nil
20937	}
20938	err = iter.page.NextWithContext(ctx)
20939	if err != nil {
20940		iter.i--
20941		return err
20942	}
20943	iter.i = 0
20944	return nil
20945}
20946
20947// Next advances to the next value.  If there was an error making
20948// the request the iterator does not advance and the error is returned.
20949// Deprecated: Use NextWithContext() instead.
20950func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
20951	return iter.NextWithContext(context.Background())
20952}
20953
20954// NotDone returns true if the enumeration should be started or is not yet complete.
20955func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
20956	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20957}
20958
20959// Response returns the raw server response from the last page request.
20960func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
20961	return iter.page.Response()
20962}
20963
20964// Value returns the current value or a zero-initialized value if the
20965// iterator has advanced beyond the end of the collection.
20966func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
20967	if !iter.page.NotDone() {
20968		return OutboundRule{}
20969	}
20970	return iter.page.Values()[iter.i]
20971}
20972
20973// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
20974func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
20975	return LoadBalancerOutboundRuleListResultIterator{page: page}
20976}
20977
20978// IsEmpty returns true if the ListResult contains no values.
20979func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
20980	return lborlr.Value == nil || len(*lborlr.Value) == 0
20981}
20982
20983// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
20984// It returns nil if no more results exist.
20985func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
20986	if lborlr.NextLink == nil || len(to.String(lborlr.NextLink)) < 1 {
20987		return nil, nil
20988	}
20989	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20990		autorest.AsJSON(),
20991		autorest.AsGet(),
20992		autorest.WithBaseURL(to.String(lborlr.NextLink)))
20993}
20994
20995// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
20996type LoadBalancerOutboundRuleListResultPage struct {
20997	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
20998	lborlr LoadBalancerOutboundRuleListResult
20999}
21000
21001// NextWithContext advances to the next page of values.  If there was an error making
21002// the request the page does not advance and the error is returned.
21003func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
21004	if tracing.IsEnabled() {
21005		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
21006		defer func() {
21007			sc := -1
21008			if page.Response().Response.Response != nil {
21009				sc = page.Response().Response.Response.StatusCode
21010			}
21011			tracing.EndSpan(ctx, sc, err)
21012		}()
21013	}
21014	next, err := page.fn(ctx, page.lborlr)
21015	if err != nil {
21016		return err
21017	}
21018	page.lborlr = next
21019	return nil
21020}
21021
21022// Next advances to the next page of values.  If there was an error making
21023// the request the page does not advance and the error is returned.
21024// Deprecated: Use NextWithContext() instead.
21025func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
21026	return page.NextWithContext(context.Background())
21027}
21028
21029// NotDone returns true if the page enumeration should be started or is not yet complete.
21030func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
21031	return !page.lborlr.IsEmpty()
21032}
21033
21034// Response returns the raw server response from the last page request.
21035func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
21036	return page.lborlr
21037}
21038
21039// Values returns the slice of values for the current page or nil if there are no values.
21040func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
21041	if page.lborlr.IsEmpty() {
21042		return nil
21043	}
21044	return *page.lborlr.Value
21045}
21046
21047// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
21048func NewLoadBalancerOutboundRuleListResultPage(getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
21049	return LoadBalancerOutboundRuleListResultPage{fn: getNextPage}
21050}
21051
21052// LoadBalancerProbeListResult response for ListProbe API service call.
21053type LoadBalancerProbeListResult struct {
21054	autorest.Response `json:"-"`
21055	// Value - A list of probes in a load balancer.
21056	Value *[]Probe `json:"value,omitempty"`
21057	// NextLink - READ-ONLY; The URL to get the next set of results.
21058	NextLink *string `json:"nextLink,omitempty"`
21059}
21060
21061// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
21062type LoadBalancerProbeListResultIterator struct {
21063	i    int
21064	page LoadBalancerProbeListResultPage
21065}
21066
21067// NextWithContext advances to the next value.  If there was an error making
21068// the request the iterator does not advance and the error is returned.
21069func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
21070	if tracing.IsEnabled() {
21071		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
21072		defer func() {
21073			sc := -1
21074			if iter.Response().Response.Response != nil {
21075				sc = iter.Response().Response.Response.StatusCode
21076			}
21077			tracing.EndSpan(ctx, sc, err)
21078		}()
21079	}
21080	iter.i++
21081	if iter.i < len(iter.page.Values()) {
21082		return nil
21083	}
21084	err = iter.page.NextWithContext(ctx)
21085	if err != nil {
21086		iter.i--
21087		return err
21088	}
21089	iter.i = 0
21090	return nil
21091}
21092
21093// Next advances to the next value.  If there was an error making
21094// the request the iterator does not advance and the error is returned.
21095// Deprecated: Use NextWithContext() instead.
21096func (iter *LoadBalancerProbeListResultIterator) Next() error {
21097	return iter.NextWithContext(context.Background())
21098}
21099
21100// NotDone returns true if the enumeration should be started or is not yet complete.
21101func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
21102	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21103}
21104
21105// Response returns the raw server response from the last page request.
21106func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
21107	return iter.page.Response()
21108}
21109
21110// Value returns the current value or a zero-initialized value if the
21111// iterator has advanced beyond the end of the collection.
21112func (iter LoadBalancerProbeListResultIterator) Value() Probe {
21113	if !iter.page.NotDone() {
21114		return Probe{}
21115	}
21116	return iter.page.Values()[iter.i]
21117}
21118
21119// Creates a new instance of the LoadBalancerProbeListResultIterator type.
21120func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
21121	return LoadBalancerProbeListResultIterator{page: page}
21122}
21123
21124// IsEmpty returns true if the ListResult contains no values.
21125func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
21126	return lbplr.Value == nil || len(*lbplr.Value) == 0
21127}
21128
21129// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
21130// It returns nil if no more results exist.
21131func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
21132	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
21133		return nil, nil
21134	}
21135	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21136		autorest.AsJSON(),
21137		autorest.AsGet(),
21138		autorest.WithBaseURL(to.String(lbplr.NextLink)))
21139}
21140
21141// LoadBalancerProbeListResultPage contains a page of Probe values.
21142type LoadBalancerProbeListResultPage struct {
21143	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
21144	lbplr LoadBalancerProbeListResult
21145}
21146
21147// NextWithContext advances to the next page of values.  If there was an error making
21148// the request the page does not advance and the error is returned.
21149func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
21150	if tracing.IsEnabled() {
21151		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
21152		defer func() {
21153			sc := -1
21154			if page.Response().Response.Response != nil {
21155				sc = page.Response().Response.Response.StatusCode
21156			}
21157			tracing.EndSpan(ctx, sc, err)
21158		}()
21159	}
21160	next, err := page.fn(ctx, page.lbplr)
21161	if err != nil {
21162		return err
21163	}
21164	page.lbplr = next
21165	return nil
21166}
21167
21168// Next advances to the next page of values.  If there was an error making
21169// the request the page does not advance and the error is returned.
21170// Deprecated: Use NextWithContext() instead.
21171func (page *LoadBalancerProbeListResultPage) Next() error {
21172	return page.NextWithContext(context.Background())
21173}
21174
21175// NotDone returns true if the page enumeration should be started or is not yet complete.
21176func (page LoadBalancerProbeListResultPage) NotDone() bool {
21177	return !page.lbplr.IsEmpty()
21178}
21179
21180// Response returns the raw server response from the last page request.
21181func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
21182	return page.lbplr
21183}
21184
21185// Values returns the slice of values for the current page or nil if there are no values.
21186func (page LoadBalancerProbeListResultPage) Values() []Probe {
21187	if page.lbplr.IsEmpty() {
21188		return nil
21189	}
21190	return *page.lbplr.Value
21191}
21192
21193// Creates a new instance of the LoadBalancerProbeListResultPage type.
21194func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
21195	return LoadBalancerProbeListResultPage{fn: getNextPage}
21196}
21197
21198// LoadBalancerPropertiesFormat properties of the load balancer.
21199type LoadBalancerPropertiesFormat struct {
21200	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer.
21201	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
21202	// BackendAddressPools - Collection of backend address pools used by a load balancer.
21203	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
21204	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning.
21205	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
21206	// Probes - Collection of probe objects used in the load balancer.
21207	Probes *[]Probe `json:"probes,omitempty"`
21208	// 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.
21209	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
21210	// 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.
21211	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
21212	// OutboundRules - The outbound rules.
21213	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
21214	// ResourceGUID - READ-ONLY; The resource GUID property of the load balancer resource.
21215	ResourceGUID *string `json:"resourceGuid,omitempty"`
21216	// ProvisioningState - READ-ONLY; The provisioning state of the load balancer resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21217	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21218}
21219
21220// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21221// long-running operation.
21222type LoadBalancersCreateOrUpdateFuture struct {
21223	azure.Future
21224}
21225
21226// Result returns the result of the asynchronous operation.
21227// If the operation has not completed it will return an error.
21228func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
21229	var done bool
21230	done, err = future.DoneWithContext(context.Background(), client)
21231	if err != nil {
21232		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21233		return
21234	}
21235	if !done {
21236		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
21237		return
21238	}
21239	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21240	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
21241		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
21242		if err != nil {
21243			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
21244		}
21245	}
21246	return
21247}
21248
21249// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21250// operation.
21251type LoadBalancersDeleteFuture struct {
21252	azure.Future
21253}
21254
21255// Result returns the result of the asynchronous operation.
21256// If the operation has not completed it will return an error.
21257func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
21258	var done bool
21259	done, err = future.DoneWithContext(context.Background(), client)
21260	if err != nil {
21261		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
21262		return
21263	}
21264	if !done {
21265		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
21266		return
21267	}
21268	ar.Response = future.Response()
21269	return
21270}
21271
21272// LoadBalancerSku SKU of a load balancer.
21273type LoadBalancerSku struct {
21274	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
21275	Name LoadBalancerSkuName `json:"name,omitempty"`
21276}
21277
21278// LoadBalancingRule a load balancing rule for a load balancer.
21279type LoadBalancingRule struct {
21280	autorest.Response `json:"-"`
21281	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
21282	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
21283	// Name - The name of the resource that is unique within the set of load balancing rules used by the load balancer. This name can be used to access the resource.
21284	Name *string `json:"name,omitempty"`
21285	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21286	Etag *string `json:"etag,omitempty"`
21287	// Type - READ-ONLY; Type of the resource.
21288	Type *string `json:"type,omitempty"`
21289	// ID - Resource ID.
21290	ID *string `json:"id,omitempty"`
21291}
21292
21293// MarshalJSON is the custom marshaler for LoadBalancingRule.
21294func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
21295	objectMap := make(map[string]interface{})
21296	if lbr.LoadBalancingRulePropertiesFormat != nil {
21297		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
21298	}
21299	if lbr.Name != nil {
21300		objectMap["name"] = lbr.Name
21301	}
21302	if lbr.ID != nil {
21303		objectMap["id"] = lbr.ID
21304	}
21305	return json.Marshal(objectMap)
21306}
21307
21308// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
21309func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
21310	var m map[string]*json.RawMessage
21311	err := json.Unmarshal(body, &m)
21312	if err != nil {
21313		return err
21314	}
21315	for k, v := range m {
21316		switch k {
21317		case "properties":
21318			if v != nil {
21319				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
21320				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
21321				if err != nil {
21322					return err
21323				}
21324				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
21325			}
21326		case "name":
21327			if v != nil {
21328				var name string
21329				err = json.Unmarshal(*v, &name)
21330				if err != nil {
21331					return err
21332				}
21333				lbr.Name = &name
21334			}
21335		case "etag":
21336			if v != nil {
21337				var etag string
21338				err = json.Unmarshal(*v, &etag)
21339				if err != nil {
21340					return err
21341				}
21342				lbr.Etag = &etag
21343			}
21344		case "type":
21345			if v != nil {
21346				var typeVar string
21347				err = json.Unmarshal(*v, &typeVar)
21348				if err != nil {
21349					return err
21350				}
21351				lbr.Type = &typeVar
21352			}
21353		case "id":
21354			if v != nil {
21355				var ID string
21356				err = json.Unmarshal(*v, &ID)
21357				if err != nil {
21358					return err
21359				}
21360				lbr.ID = &ID
21361			}
21362		}
21363	}
21364
21365	return nil
21366}
21367
21368// LoadBalancingRulePropertiesFormat properties of the load balancer.
21369type LoadBalancingRulePropertiesFormat struct {
21370	// FrontendIPConfiguration - A reference to frontend IP addresses.
21371	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
21372	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
21373	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
21374	// Probe - The reference to the load balancer probe used by the load balancing rule.
21375	Probe *SubResource `json:"probe,omitempty"`
21376	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
21377	Protocol TransportProtocol `json:"protocol,omitempty"`
21378	// LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol'
21379	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
21380	// 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".
21381	FrontendPort *int32 `json:"frontendPort,omitempty"`
21382	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port".
21383	BackendPort *int32 `json:"backendPort,omitempty"`
21384	// 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.
21385	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
21386	// 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.
21387	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
21388	// 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.
21389	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
21390	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
21391	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
21392	// ProvisioningState - READ-ONLY; The provisioning state of the load balancing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21393	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21394}
21395
21396// LocalNetworkGateway a common class for general resource information.
21397type LocalNetworkGateway struct {
21398	autorest.Response `json:"-"`
21399	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
21400	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
21401	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21402	Etag *string `json:"etag,omitempty"`
21403	// ID - Resource ID.
21404	ID *string `json:"id,omitempty"`
21405	// Name - READ-ONLY; Resource name.
21406	Name *string `json:"name,omitempty"`
21407	// Type - READ-ONLY; Resource type.
21408	Type *string `json:"type,omitempty"`
21409	// Location - Resource location.
21410	Location *string `json:"location,omitempty"`
21411	// Tags - Resource tags.
21412	Tags map[string]*string `json:"tags"`
21413}
21414
21415// MarshalJSON is the custom marshaler for LocalNetworkGateway.
21416func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
21417	objectMap := make(map[string]interface{})
21418	if lng.LocalNetworkGatewayPropertiesFormat != nil {
21419		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
21420	}
21421	if lng.ID != nil {
21422		objectMap["id"] = lng.ID
21423	}
21424	if lng.Location != nil {
21425		objectMap["location"] = lng.Location
21426	}
21427	if lng.Tags != nil {
21428		objectMap["tags"] = lng.Tags
21429	}
21430	return json.Marshal(objectMap)
21431}
21432
21433// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
21434func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
21435	var m map[string]*json.RawMessage
21436	err := json.Unmarshal(body, &m)
21437	if err != nil {
21438		return err
21439	}
21440	for k, v := range m {
21441		switch k {
21442		case "properties":
21443			if v != nil {
21444				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
21445				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
21446				if err != nil {
21447					return err
21448				}
21449				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
21450			}
21451		case "etag":
21452			if v != nil {
21453				var etag string
21454				err = json.Unmarshal(*v, &etag)
21455				if err != nil {
21456					return err
21457				}
21458				lng.Etag = &etag
21459			}
21460		case "id":
21461			if v != nil {
21462				var ID string
21463				err = json.Unmarshal(*v, &ID)
21464				if err != nil {
21465					return err
21466				}
21467				lng.ID = &ID
21468			}
21469		case "name":
21470			if v != nil {
21471				var name string
21472				err = json.Unmarshal(*v, &name)
21473				if err != nil {
21474					return err
21475				}
21476				lng.Name = &name
21477			}
21478		case "type":
21479			if v != nil {
21480				var typeVar string
21481				err = json.Unmarshal(*v, &typeVar)
21482				if err != nil {
21483					return err
21484				}
21485				lng.Type = &typeVar
21486			}
21487		case "location":
21488			if v != nil {
21489				var location string
21490				err = json.Unmarshal(*v, &location)
21491				if err != nil {
21492					return err
21493				}
21494				lng.Location = &location
21495			}
21496		case "tags":
21497			if v != nil {
21498				var tags map[string]*string
21499				err = json.Unmarshal(*v, &tags)
21500				if err != nil {
21501					return err
21502				}
21503				lng.Tags = tags
21504			}
21505		}
21506	}
21507
21508	return nil
21509}
21510
21511// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
21512type LocalNetworkGatewayListResult struct {
21513	autorest.Response `json:"-"`
21514	// Value - A list of local network gateways that exists in a resource group.
21515	Value *[]LocalNetworkGateway `json:"value,omitempty"`
21516	// NextLink - READ-ONLY; The URL to get the next set of results.
21517	NextLink *string `json:"nextLink,omitempty"`
21518}
21519
21520// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
21521// values.
21522type LocalNetworkGatewayListResultIterator struct {
21523	i    int
21524	page LocalNetworkGatewayListResultPage
21525}
21526
21527// NextWithContext advances to the next value.  If there was an error making
21528// the request the iterator does not advance and the error is returned.
21529func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
21530	if tracing.IsEnabled() {
21531		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
21532		defer func() {
21533			sc := -1
21534			if iter.Response().Response.Response != nil {
21535				sc = iter.Response().Response.Response.StatusCode
21536			}
21537			tracing.EndSpan(ctx, sc, err)
21538		}()
21539	}
21540	iter.i++
21541	if iter.i < len(iter.page.Values()) {
21542		return nil
21543	}
21544	err = iter.page.NextWithContext(ctx)
21545	if err != nil {
21546		iter.i--
21547		return err
21548	}
21549	iter.i = 0
21550	return nil
21551}
21552
21553// Next advances to the next value.  If there was an error making
21554// the request the iterator does not advance and the error is returned.
21555// Deprecated: Use NextWithContext() instead.
21556func (iter *LocalNetworkGatewayListResultIterator) Next() error {
21557	return iter.NextWithContext(context.Background())
21558}
21559
21560// NotDone returns true if the enumeration should be started or is not yet complete.
21561func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
21562	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21563}
21564
21565// Response returns the raw server response from the last page request.
21566func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
21567	return iter.page.Response()
21568}
21569
21570// Value returns the current value or a zero-initialized value if the
21571// iterator has advanced beyond the end of the collection.
21572func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
21573	if !iter.page.NotDone() {
21574		return LocalNetworkGateway{}
21575	}
21576	return iter.page.Values()[iter.i]
21577}
21578
21579// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
21580func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
21581	return LocalNetworkGatewayListResultIterator{page: page}
21582}
21583
21584// IsEmpty returns true if the ListResult contains no values.
21585func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
21586	return lnglr.Value == nil || len(*lnglr.Value) == 0
21587}
21588
21589// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
21590// It returns nil if no more results exist.
21591func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
21592	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
21593		return nil, nil
21594	}
21595	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21596		autorest.AsJSON(),
21597		autorest.AsGet(),
21598		autorest.WithBaseURL(to.String(lnglr.NextLink)))
21599}
21600
21601// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
21602type LocalNetworkGatewayListResultPage struct {
21603	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
21604	lnglr LocalNetworkGatewayListResult
21605}
21606
21607// NextWithContext advances to the next page of values.  If there was an error making
21608// the request the page does not advance and the error is returned.
21609func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
21610	if tracing.IsEnabled() {
21611		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
21612		defer func() {
21613			sc := -1
21614			if page.Response().Response.Response != nil {
21615				sc = page.Response().Response.Response.StatusCode
21616			}
21617			tracing.EndSpan(ctx, sc, err)
21618		}()
21619	}
21620	next, err := page.fn(ctx, page.lnglr)
21621	if err != nil {
21622		return err
21623	}
21624	page.lnglr = next
21625	return nil
21626}
21627
21628// Next advances to the next page of values.  If there was an error making
21629// the request the page does not advance and the error is returned.
21630// Deprecated: Use NextWithContext() instead.
21631func (page *LocalNetworkGatewayListResultPage) Next() error {
21632	return page.NextWithContext(context.Background())
21633}
21634
21635// NotDone returns true if the page enumeration should be started or is not yet complete.
21636func (page LocalNetworkGatewayListResultPage) NotDone() bool {
21637	return !page.lnglr.IsEmpty()
21638}
21639
21640// Response returns the raw server response from the last page request.
21641func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
21642	return page.lnglr
21643}
21644
21645// Values returns the slice of values for the current page or nil if there are no values.
21646func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
21647	if page.lnglr.IsEmpty() {
21648		return nil
21649	}
21650	return *page.lnglr.Value
21651}
21652
21653// Creates a new instance of the LocalNetworkGatewayListResultPage type.
21654func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
21655	return LocalNetworkGatewayListResultPage{fn: getNextPage}
21656}
21657
21658// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties.
21659type LocalNetworkGatewayPropertiesFormat struct {
21660	// LocalNetworkAddressSpace - Local network site address space.
21661	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
21662	// GatewayIPAddress - IP address of local network gateway.
21663	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
21664	// BgpSettings - Local network gateway's BGP speaker settings.
21665	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
21666	// ResourceGUID - READ-ONLY; The resource GUID property of the local network gateway resource.
21667	ResourceGUID *string `json:"resourceGuid,omitempty"`
21668	// ProvisioningState - READ-ONLY; The provisioning state of the local network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21669	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21670}
21671
21672// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21673// long-running operation.
21674type LocalNetworkGatewaysCreateOrUpdateFuture struct {
21675	azure.Future
21676}
21677
21678// Result returns the result of the asynchronous operation.
21679// If the operation has not completed it will return an error.
21680func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
21681	var done bool
21682	done, err = future.DoneWithContext(context.Background(), client)
21683	if err != nil {
21684		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21685		return
21686	}
21687	if !done {
21688		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
21689		return
21690	}
21691	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21692	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
21693		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
21694		if err != nil {
21695			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
21696		}
21697	}
21698	return
21699}
21700
21701// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
21702// long-running operation.
21703type LocalNetworkGatewaysDeleteFuture struct {
21704	azure.Future
21705}
21706
21707// Result returns the result of the asynchronous operation.
21708// If the operation has not completed it will return an error.
21709func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
21710	var done bool
21711	done, err = future.DoneWithContext(context.Background(), client)
21712	if err != nil {
21713		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
21714		return
21715	}
21716	if !done {
21717		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
21718		return
21719	}
21720	ar.Response = future.Response()
21721	return
21722}
21723
21724// LogSpecification description of logging specification.
21725type LogSpecification struct {
21726	// Name - The name of the specification.
21727	Name *string `json:"name,omitempty"`
21728	// DisplayName - The display name of the specification.
21729	DisplayName *string `json:"displayName,omitempty"`
21730	// BlobDuration - Duration of the blob.
21731	BlobDuration *string `json:"blobDuration,omitempty"`
21732}
21733
21734// ManagedRuleGroupOverride defines a managed rule group override setting.
21735type ManagedRuleGroupOverride struct {
21736	// RuleGroupName - The managed rule group to override.
21737	RuleGroupName *string `json:"ruleGroupName,omitempty"`
21738	// Rules - List of rules that will be disabled. If none specified, all rules in the group will be disabled.
21739	Rules *[]ManagedRuleOverride `json:"rules,omitempty"`
21740}
21741
21742// ManagedRuleOverride defines a managed rule group override setting.
21743type ManagedRuleOverride struct {
21744	// RuleID - Identifier for the managed rule.
21745	RuleID *string `json:"ruleId,omitempty"`
21746	// State - The state of the managed rule. Defaults to Disabled if not specified. Possible values include: 'ManagedRuleEnabledStateDisabled'
21747	State ManagedRuleEnabledState `json:"state,omitempty"`
21748}
21749
21750// ManagedRulesDefinition allow to exclude some variable satisfy the condition for the WAF check.
21751type ManagedRulesDefinition struct {
21752	// Exclusions - The Exclusions that are applied on the policy.
21753	Exclusions *[]OwaspCrsExclusionEntry `json:"exclusions,omitempty"`
21754	// ManagedRuleSets - The managed rule sets that are associated with the policy.
21755	ManagedRuleSets *[]ManagedRuleSet `json:"managedRuleSets,omitempty"`
21756}
21757
21758// ManagedRuleSet defines a managed rule set.
21759type ManagedRuleSet struct {
21760	// RuleSetType - Defines the rule set type to use.
21761	RuleSetType *string `json:"ruleSetType,omitempty"`
21762	// RuleSetVersion - Defines the version of the rule set to use.
21763	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
21764	// RuleGroupOverrides - Defines the rule group overrides to apply to the rule set.
21765	RuleGroupOverrides *[]ManagedRuleGroupOverride `json:"ruleGroupOverrides,omitempty"`
21766}
21767
21768// ManagedServiceIdentity identity for the resource.
21769type ManagedServiceIdentity struct {
21770	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
21771	PrincipalID *string `json:"principalId,omitempty"`
21772	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
21773	TenantID *string `json:"tenantId,omitempty"`
21774	// 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'
21775	Type ResourceIdentityType `json:"type,omitempty"`
21776	// 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}'.
21777	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
21778}
21779
21780// MarshalJSON is the custom marshaler for ManagedServiceIdentity.
21781func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
21782	objectMap := make(map[string]interface{})
21783	if msi.Type != "" {
21784		objectMap["type"] = msi.Type
21785	}
21786	if msi.UserAssignedIdentities != nil {
21787		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
21788	}
21789	return json.Marshal(objectMap)
21790}
21791
21792// ManagedServiceIdentityUserAssignedIdentitiesValue ...
21793type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
21794	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
21795	PrincipalID *string `json:"principalId,omitempty"`
21796	// ClientID - READ-ONLY; The client id of user assigned identity.
21797	ClientID *string `json:"clientId,omitempty"`
21798}
21799
21800// MatchCondition define match conditions.
21801type MatchCondition struct {
21802	// MatchVariables - List of match variables.
21803	MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"`
21804	// Operator - The operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex', 'WebApplicationFirewallOperatorGeoMatch'
21805	Operator WebApplicationFirewallOperator `json:"operator,omitempty"`
21806	// NegationConditon - Whether this is negate condition or not.
21807	NegationConditon *bool `json:"negationConditon,omitempty"`
21808	// MatchValues - Match value.
21809	MatchValues *[]string `json:"matchValues,omitempty"`
21810	// Transforms - List of transforms.
21811	Transforms *[]WebApplicationFirewallTransform `json:"transforms,omitempty"`
21812}
21813
21814// MatchedRule matched rule.
21815type MatchedRule struct {
21816	// RuleName - Name of the matched network security rule.
21817	RuleName *string `json:"ruleName,omitempty"`
21818	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
21819	Action *string `json:"action,omitempty"`
21820}
21821
21822// MatchVariable define match variables.
21823type MatchVariable struct {
21824	// VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies'
21825	VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"`
21826	// Selector - The selector of match variable.
21827	Selector *string `json:"selector,omitempty"`
21828}
21829
21830// MetricSpecification description of metrics specification.
21831type MetricSpecification struct {
21832	// Name - The name of the metric.
21833	Name *string `json:"name,omitempty"`
21834	// DisplayName - The display name of the metric.
21835	DisplayName *string `json:"displayName,omitempty"`
21836	// DisplayDescription - The description of the metric.
21837	DisplayDescription *string `json:"displayDescription,omitempty"`
21838	// Unit - Units the metric to be displayed in.
21839	Unit *string `json:"unit,omitempty"`
21840	// AggregationType - The aggregation type.
21841	AggregationType *string `json:"aggregationType,omitempty"`
21842	// Availabilities - List of availability.
21843	Availabilities *[]Availability `json:"availabilities,omitempty"`
21844	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
21845	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
21846	// FillGapWithZero - Whether gaps would be filled with zeros.
21847	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
21848	// MetricFilterPattern - Pattern for the filter of the metric.
21849	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
21850	// Dimensions - List of dimensions.
21851	Dimensions *[]Dimension `json:"dimensions,omitempty"`
21852	// IsInternal - Whether the metric is internal.
21853	IsInternal *bool `json:"isInternal,omitempty"`
21854	// SourceMdmAccount - The source MDM account.
21855	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
21856	// SourceMdmNamespace - The source MDM namespace.
21857	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
21858	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
21859	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
21860}
21861
21862// NatGateway nat Gateway resource.
21863type NatGateway struct {
21864	autorest.Response `json:"-"`
21865	// Sku - The nat gateway SKU.
21866	Sku *NatGatewaySku `json:"sku,omitempty"`
21867	// NatGatewayPropertiesFormat - Nat Gateway properties.
21868	*NatGatewayPropertiesFormat `json:"properties,omitempty"`
21869	// Zones - A list of availability zones denoting the zone in which Nat Gateway should be deployed.
21870	Zones *[]string `json:"zones,omitempty"`
21871	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21872	Etag *string `json:"etag,omitempty"`
21873	// ID - Resource ID.
21874	ID *string `json:"id,omitempty"`
21875	// Name - READ-ONLY; Resource name.
21876	Name *string `json:"name,omitempty"`
21877	// Type - READ-ONLY; Resource type.
21878	Type *string `json:"type,omitempty"`
21879	// Location - Resource location.
21880	Location *string `json:"location,omitempty"`
21881	// Tags - Resource tags.
21882	Tags map[string]*string `json:"tags"`
21883}
21884
21885// MarshalJSON is the custom marshaler for NatGateway.
21886func (ng NatGateway) MarshalJSON() ([]byte, error) {
21887	objectMap := make(map[string]interface{})
21888	if ng.Sku != nil {
21889		objectMap["sku"] = ng.Sku
21890	}
21891	if ng.NatGatewayPropertiesFormat != nil {
21892		objectMap["properties"] = ng.NatGatewayPropertiesFormat
21893	}
21894	if ng.Zones != nil {
21895		objectMap["zones"] = ng.Zones
21896	}
21897	if ng.ID != nil {
21898		objectMap["id"] = ng.ID
21899	}
21900	if ng.Location != nil {
21901		objectMap["location"] = ng.Location
21902	}
21903	if ng.Tags != nil {
21904		objectMap["tags"] = ng.Tags
21905	}
21906	return json.Marshal(objectMap)
21907}
21908
21909// UnmarshalJSON is the custom unmarshaler for NatGateway struct.
21910func (ng *NatGateway) UnmarshalJSON(body []byte) error {
21911	var m map[string]*json.RawMessage
21912	err := json.Unmarshal(body, &m)
21913	if err != nil {
21914		return err
21915	}
21916	for k, v := range m {
21917		switch k {
21918		case "sku":
21919			if v != nil {
21920				var sku NatGatewaySku
21921				err = json.Unmarshal(*v, &sku)
21922				if err != nil {
21923					return err
21924				}
21925				ng.Sku = &sku
21926			}
21927		case "properties":
21928			if v != nil {
21929				var natGatewayPropertiesFormat NatGatewayPropertiesFormat
21930				err = json.Unmarshal(*v, &natGatewayPropertiesFormat)
21931				if err != nil {
21932					return err
21933				}
21934				ng.NatGatewayPropertiesFormat = &natGatewayPropertiesFormat
21935			}
21936		case "zones":
21937			if v != nil {
21938				var zones []string
21939				err = json.Unmarshal(*v, &zones)
21940				if err != nil {
21941					return err
21942				}
21943				ng.Zones = &zones
21944			}
21945		case "etag":
21946			if v != nil {
21947				var etag string
21948				err = json.Unmarshal(*v, &etag)
21949				if err != nil {
21950					return err
21951				}
21952				ng.Etag = &etag
21953			}
21954		case "id":
21955			if v != nil {
21956				var ID string
21957				err = json.Unmarshal(*v, &ID)
21958				if err != nil {
21959					return err
21960				}
21961				ng.ID = &ID
21962			}
21963		case "name":
21964			if v != nil {
21965				var name string
21966				err = json.Unmarshal(*v, &name)
21967				if err != nil {
21968					return err
21969				}
21970				ng.Name = &name
21971			}
21972		case "type":
21973			if v != nil {
21974				var typeVar string
21975				err = json.Unmarshal(*v, &typeVar)
21976				if err != nil {
21977					return err
21978				}
21979				ng.Type = &typeVar
21980			}
21981		case "location":
21982			if v != nil {
21983				var location string
21984				err = json.Unmarshal(*v, &location)
21985				if err != nil {
21986					return err
21987				}
21988				ng.Location = &location
21989			}
21990		case "tags":
21991			if v != nil {
21992				var tags map[string]*string
21993				err = json.Unmarshal(*v, &tags)
21994				if err != nil {
21995					return err
21996				}
21997				ng.Tags = tags
21998			}
21999		}
22000	}
22001
22002	return nil
22003}
22004
22005// NatGatewayListResult response for ListNatGateways API service call.
22006type NatGatewayListResult struct {
22007	autorest.Response `json:"-"`
22008	// Value - A list of Nat Gateways that exists in a resource group.
22009	Value *[]NatGateway `json:"value,omitempty"`
22010	// NextLink - The URL to get the next set of results.
22011	NextLink *string `json:"nextLink,omitempty"`
22012}
22013
22014// NatGatewayListResultIterator provides access to a complete listing of NatGateway values.
22015type NatGatewayListResultIterator struct {
22016	i    int
22017	page NatGatewayListResultPage
22018}
22019
22020// NextWithContext advances to the next value.  If there was an error making
22021// the request the iterator does not advance and the error is returned.
22022func (iter *NatGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
22023	if tracing.IsEnabled() {
22024		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultIterator.NextWithContext")
22025		defer func() {
22026			sc := -1
22027			if iter.Response().Response.Response != nil {
22028				sc = iter.Response().Response.Response.StatusCode
22029			}
22030			tracing.EndSpan(ctx, sc, err)
22031		}()
22032	}
22033	iter.i++
22034	if iter.i < len(iter.page.Values()) {
22035		return nil
22036	}
22037	err = iter.page.NextWithContext(ctx)
22038	if err != nil {
22039		iter.i--
22040		return err
22041	}
22042	iter.i = 0
22043	return nil
22044}
22045
22046// Next advances to the next value.  If there was an error making
22047// the request the iterator does not advance and the error is returned.
22048// Deprecated: Use NextWithContext() instead.
22049func (iter *NatGatewayListResultIterator) Next() error {
22050	return iter.NextWithContext(context.Background())
22051}
22052
22053// NotDone returns true if the enumeration should be started or is not yet complete.
22054func (iter NatGatewayListResultIterator) NotDone() bool {
22055	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22056}
22057
22058// Response returns the raw server response from the last page request.
22059func (iter NatGatewayListResultIterator) Response() NatGatewayListResult {
22060	return iter.page.Response()
22061}
22062
22063// Value returns the current value or a zero-initialized value if the
22064// iterator has advanced beyond the end of the collection.
22065func (iter NatGatewayListResultIterator) Value() NatGateway {
22066	if !iter.page.NotDone() {
22067		return NatGateway{}
22068	}
22069	return iter.page.Values()[iter.i]
22070}
22071
22072// Creates a new instance of the NatGatewayListResultIterator type.
22073func NewNatGatewayListResultIterator(page NatGatewayListResultPage) NatGatewayListResultIterator {
22074	return NatGatewayListResultIterator{page: page}
22075}
22076
22077// IsEmpty returns true if the ListResult contains no values.
22078func (nglr NatGatewayListResult) IsEmpty() bool {
22079	return nglr.Value == nil || len(*nglr.Value) == 0
22080}
22081
22082// natGatewayListResultPreparer prepares a request to retrieve the next set of results.
22083// It returns nil if no more results exist.
22084func (nglr NatGatewayListResult) natGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
22085	if nglr.NextLink == nil || len(to.String(nglr.NextLink)) < 1 {
22086		return nil, nil
22087	}
22088	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22089		autorest.AsJSON(),
22090		autorest.AsGet(),
22091		autorest.WithBaseURL(to.String(nglr.NextLink)))
22092}
22093
22094// NatGatewayListResultPage contains a page of NatGateway values.
22095type NatGatewayListResultPage struct {
22096	fn   func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)
22097	nglr NatGatewayListResult
22098}
22099
22100// NextWithContext advances to the next page of values.  If there was an error making
22101// the request the page does not advance and the error is returned.
22102func (page *NatGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
22103	if tracing.IsEnabled() {
22104		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultPage.NextWithContext")
22105		defer func() {
22106			sc := -1
22107			if page.Response().Response.Response != nil {
22108				sc = page.Response().Response.Response.StatusCode
22109			}
22110			tracing.EndSpan(ctx, sc, err)
22111		}()
22112	}
22113	next, err := page.fn(ctx, page.nglr)
22114	if err != nil {
22115		return err
22116	}
22117	page.nglr = next
22118	return nil
22119}
22120
22121// Next advances to the next page of values.  If there was an error making
22122// the request the page does not advance and the error is returned.
22123// Deprecated: Use NextWithContext() instead.
22124func (page *NatGatewayListResultPage) Next() error {
22125	return page.NextWithContext(context.Background())
22126}
22127
22128// NotDone returns true if the page enumeration should be started or is not yet complete.
22129func (page NatGatewayListResultPage) NotDone() bool {
22130	return !page.nglr.IsEmpty()
22131}
22132
22133// Response returns the raw server response from the last page request.
22134func (page NatGatewayListResultPage) Response() NatGatewayListResult {
22135	return page.nglr
22136}
22137
22138// Values returns the slice of values for the current page or nil if there are no values.
22139func (page NatGatewayListResultPage) Values() []NatGateway {
22140	if page.nglr.IsEmpty() {
22141		return nil
22142	}
22143	return *page.nglr.Value
22144}
22145
22146// Creates a new instance of the NatGatewayListResultPage type.
22147func NewNatGatewayListResultPage(getNextPage func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)) NatGatewayListResultPage {
22148	return NatGatewayListResultPage{fn: getNextPage}
22149}
22150
22151// NatGatewayPropertiesFormat nat Gateway properties.
22152type NatGatewayPropertiesFormat struct {
22153	// IdleTimeoutInMinutes - The idle timeout of the nat gateway.
22154	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
22155	// PublicIPAddresses - An array of public ip addresses associated with the nat gateway resource.
22156	PublicIPAddresses *[]SubResource `json:"publicIpAddresses,omitempty"`
22157	// PublicIPPrefixes - An array of public ip prefixes associated with the nat gateway resource.
22158	PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"`
22159	// Subnets - READ-ONLY; An array of references to the subnets using this nat gateway resource.
22160	Subnets *[]SubResource `json:"subnets,omitempty"`
22161	// ResourceGUID - READ-ONLY; The resource GUID property of the NAT gateway resource.
22162	ResourceGUID *string `json:"resourceGuid,omitempty"`
22163	// ProvisioningState - READ-ONLY; The provisioning state of the NAT gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22164	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22165}
22166
22167// NatGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22168// long-running operation.
22169type NatGatewaysCreateOrUpdateFuture struct {
22170	azure.Future
22171}
22172
22173// Result returns the result of the asynchronous operation.
22174// If the operation has not completed it will return an error.
22175func (future *NatGatewaysCreateOrUpdateFuture) Result(client NatGatewaysClient) (ng NatGateway, err error) {
22176	var done bool
22177	done, err = future.DoneWithContext(context.Background(), client)
22178	if err != nil {
22179		err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22180		return
22181	}
22182	if !done {
22183		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysCreateOrUpdateFuture")
22184		return
22185	}
22186	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22187	if ng.Response.Response, err = future.GetResult(sender); err == nil && ng.Response.Response.StatusCode != http.StatusNoContent {
22188		ng, err = client.CreateOrUpdateResponder(ng.Response.Response)
22189		if err != nil {
22190			err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", ng.Response.Response, "Failure responding to request")
22191		}
22192	}
22193	return
22194}
22195
22196// NatGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22197// operation.
22198type NatGatewaysDeleteFuture struct {
22199	azure.Future
22200}
22201
22202// Result returns the result of the asynchronous operation.
22203// If the operation has not completed it will return an error.
22204func (future *NatGatewaysDeleteFuture) Result(client NatGatewaysClient) (ar autorest.Response, err error) {
22205	var done bool
22206	done, err = future.DoneWithContext(context.Background(), client)
22207	if err != nil {
22208		err = autorest.NewErrorWithError(err, "network.NatGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
22209		return
22210	}
22211	if !done {
22212		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysDeleteFuture")
22213		return
22214	}
22215	ar.Response = future.Response()
22216	return
22217}
22218
22219// NatGatewaySku SKU of nat gateway.
22220type NatGatewaySku struct {
22221	// Name - Name of Nat Gateway SKU. Possible values include: 'NatGatewaySkuNameStandard'
22222	Name NatGatewaySkuName `json:"name,omitempty"`
22223}
22224
22225// NextHopParameters parameters that define the source and destination endpoint.
22226type NextHopParameters struct {
22227	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
22228	TargetResourceID *string `json:"targetResourceId,omitempty"`
22229	// SourceIPAddress - The source IP address.
22230	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
22231	// DestinationIPAddress - The destination IP address.
22232	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
22233	// 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).
22234	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
22235}
22236
22237// NextHopResult the information about next hop from the specified VM.
22238type NextHopResult struct {
22239	autorest.Response `json:"-"`
22240	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
22241	NextHopType NextHopType `json:"nextHopType,omitempty"`
22242	// NextHopIPAddress - Next hop IP Address.
22243	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
22244	// 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'.
22245	RouteTableID *string `json:"routeTableId,omitempty"`
22246}
22247
22248// Operation network REST API operation definition.
22249type Operation struct {
22250	// Name - Operation name: {provider}/{resource}/{operation}.
22251	Name *string `json:"name,omitempty"`
22252	// Display - Display metadata associated with the operation.
22253	Display *OperationDisplay `json:"display,omitempty"`
22254	// Origin - Origin of the operation.
22255	Origin *string `json:"origin,omitempty"`
22256	// OperationPropertiesFormat - Operation properties format.
22257	*OperationPropertiesFormat `json:"properties,omitempty"`
22258}
22259
22260// MarshalJSON is the custom marshaler for Operation.
22261func (o Operation) MarshalJSON() ([]byte, error) {
22262	objectMap := make(map[string]interface{})
22263	if o.Name != nil {
22264		objectMap["name"] = o.Name
22265	}
22266	if o.Display != nil {
22267		objectMap["display"] = o.Display
22268	}
22269	if o.Origin != nil {
22270		objectMap["origin"] = o.Origin
22271	}
22272	if o.OperationPropertiesFormat != nil {
22273		objectMap["properties"] = o.OperationPropertiesFormat
22274	}
22275	return json.Marshal(objectMap)
22276}
22277
22278// UnmarshalJSON is the custom unmarshaler for Operation struct.
22279func (o *Operation) UnmarshalJSON(body []byte) error {
22280	var m map[string]*json.RawMessage
22281	err := json.Unmarshal(body, &m)
22282	if err != nil {
22283		return err
22284	}
22285	for k, v := range m {
22286		switch k {
22287		case "name":
22288			if v != nil {
22289				var name string
22290				err = json.Unmarshal(*v, &name)
22291				if err != nil {
22292					return err
22293				}
22294				o.Name = &name
22295			}
22296		case "display":
22297			if v != nil {
22298				var display OperationDisplay
22299				err = json.Unmarshal(*v, &display)
22300				if err != nil {
22301					return err
22302				}
22303				o.Display = &display
22304			}
22305		case "origin":
22306			if v != nil {
22307				var origin string
22308				err = json.Unmarshal(*v, &origin)
22309				if err != nil {
22310					return err
22311				}
22312				o.Origin = &origin
22313			}
22314		case "properties":
22315			if v != nil {
22316				var operationPropertiesFormat OperationPropertiesFormat
22317				err = json.Unmarshal(*v, &operationPropertiesFormat)
22318				if err != nil {
22319					return err
22320				}
22321				o.OperationPropertiesFormat = &operationPropertiesFormat
22322			}
22323		}
22324	}
22325
22326	return nil
22327}
22328
22329// OperationDisplay display metadata associated with the operation.
22330type OperationDisplay struct {
22331	// Provider - Service provider: Microsoft Network.
22332	Provider *string `json:"provider,omitempty"`
22333	// Resource - Resource on which the operation is performed.
22334	Resource *string `json:"resource,omitempty"`
22335	// Operation - Type of the operation: get, read, delete, etc.
22336	Operation *string `json:"operation,omitempty"`
22337	// Description - Description of the operation.
22338	Description *string `json:"description,omitempty"`
22339}
22340
22341// OperationListResult result of the request to list Network operations. It contains a list of operations
22342// and a URL link to get the next set of results.
22343type OperationListResult struct {
22344	autorest.Response `json:"-"`
22345	// Value - List of Network operations supported by the Network resource provider.
22346	Value *[]Operation `json:"value,omitempty"`
22347	// NextLink - URL to get the next set of operation list results if there are any.
22348	NextLink *string `json:"nextLink,omitempty"`
22349}
22350
22351// OperationListResultIterator provides access to a complete listing of Operation values.
22352type OperationListResultIterator struct {
22353	i    int
22354	page OperationListResultPage
22355}
22356
22357// NextWithContext advances to the next value.  If there was an error making
22358// the request the iterator does not advance and the error is returned.
22359func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
22360	if tracing.IsEnabled() {
22361		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
22362		defer func() {
22363			sc := -1
22364			if iter.Response().Response.Response != nil {
22365				sc = iter.Response().Response.Response.StatusCode
22366			}
22367			tracing.EndSpan(ctx, sc, err)
22368		}()
22369	}
22370	iter.i++
22371	if iter.i < len(iter.page.Values()) {
22372		return nil
22373	}
22374	err = iter.page.NextWithContext(ctx)
22375	if err != nil {
22376		iter.i--
22377		return err
22378	}
22379	iter.i = 0
22380	return nil
22381}
22382
22383// Next advances to the next value.  If there was an error making
22384// the request the iterator does not advance and the error is returned.
22385// Deprecated: Use NextWithContext() instead.
22386func (iter *OperationListResultIterator) Next() error {
22387	return iter.NextWithContext(context.Background())
22388}
22389
22390// NotDone returns true if the enumeration should be started or is not yet complete.
22391func (iter OperationListResultIterator) NotDone() bool {
22392	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22393}
22394
22395// Response returns the raw server response from the last page request.
22396func (iter OperationListResultIterator) Response() OperationListResult {
22397	return iter.page.Response()
22398}
22399
22400// Value returns the current value or a zero-initialized value if the
22401// iterator has advanced beyond the end of the collection.
22402func (iter OperationListResultIterator) Value() Operation {
22403	if !iter.page.NotDone() {
22404		return Operation{}
22405	}
22406	return iter.page.Values()[iter.i]
22407}
22408
22409// Creates a new instance of the OperationListResultIterator type.
22410func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
22411	return OperationListResultIterator{page: page}
22412}
22413
22414// IsEmpty returns true if the ListResult contains no values.
22415func (olr OperationListResult) IsEmpty() bool {
22416	return olr.Value == nil || len(*olr.Value) == 0
22417}
22418
22419// operationListResultPreparer prepares a request to retrieve the next set of results.
22420// It returns nil if no more results exist.
22421func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
22422	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
22423		return nil, nil
22424	}
22425	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22426		autorest.AsJSON(),
22427		autorest.AsGet(),
22428		autorest.WithBaseURL(to.String(olr.NextLink)))
22429}
22430
22431// OperationListResultPage contains a page of Operation values.
22432type OperationListResultPage struct {
22433	fn  func(context.Context, OperationListResult) (OperationListResult, error)
22434	olr OperationListResult
22435}
22436
22437// NextWithContext advances to the next page of values.  If there was an error making
22438// the request the page does not advance and the error is returned.
22439func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
22440	if tracing.IsEnabled() {
22441		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
22442		defer func() {
22443			sc := -1
22444			if page.Response().Response.Response != nil {
22445				sc = page.Response().Response.Response.StatusCode
22446			}
22447			tracing.EndSpan(ctx, sc, err)
22448		}()
22449	}
22450	next, err := page.fn(ctx, page.olr)
22451	if err != nil {
22452		return err
22453	}
22454	page.olr = next
22455	return nil
22456}
22457
22458// Next advances to the next page of values.  If there was an error making
22459// the request the page does not advance and the error is returned.
22460// Deprecated: Use NextWithContext() instead.
22461func (page *OperationListResultPage) Next() error {
22462	return page.NextWithContext(context.Background())
22463}
22464
22465// NotDone returns true if the page enumeration should be started or is not yet complete.
22466func (page OperationListResultPage) NotDone() bool {
22467	return !page.olr.IsEmpty()
22468}
22469
22470// Response returns the raw server response from the last page request.
22471func (page OperationListResultPage) Response() OperationListResult {
22472	return page.olr
22473}
22474
22475// Values returns the slice of values for the current page or nil if there are no values.
22476func (page OperationListResultPage) Values() []Operation {
22477	if page.olr.IsEmpty() {
22478		return nil
22479	}
22480	return *page.olr.Value
22481}
22482
22483// Creates a new instance of the OperationListResultPage type.
22484func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
22485	return OperationListResultPage{fn: getNextPage}
22486}
22487
22488// OperationPropertiesFormat description of operation properties format.
22489type OperationPropertiesFormat struct {
22490	// ServiceSpecification - Specification of the service.
22491	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
22492}
22493
22494// OperationPropertiesFormatServiceSpecification specification of the service.
22495type OperationPropertiesFormatServiceSpecification struct {
22496	// MetricSpecifications - Operation service specification.
22497	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
22498	// LogSpecifications - Operation log specification.
22499	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
22500}
22501
22502// OutboundRule outbound rule of the load balancer.
22503type OutboundRule struct {
22504	autorest.Response `json:"-"`
22505	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
22506	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
22507	// Name - The name of the resource that is unique within the set of outbound rules used by the load balancer. This name can be used to access the resource.
22508	Name *string `json:"name,omitempty"`
22509	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22510	Etag *string `json:"etag,omitempty"`
22511	// Type - READ-ONLY; Type of the resource.
22512	Type *string `json:"type,omitempty"`
22513	// ID - Resource ID.
22514	ID *string `json:"id,omitempty"`
22515}
22516
22517// MarshalJSON is the custom marshaler for OutboundRule.
22518func (or OutboundRule) MarshalJSON() ([]byte, error) {
22519	objectMap := make(map[string]interface{})
22520	if or.OutboundRulePropertiesFormat != nil {
22521		objectMap["properties"] = or.OutboundRulePropertiesFormat
22522	}
22523	if or.Name != nil {
22524		objectMap["name"] = or.Name
22525	}
22526	if or.ID != nil {
22527		objectMap["id"] = or.ID
22528	}
22529	return json.Marshal(objectMap)
22530}
22531
22532// UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
22533func (or *OutboundRule) UnmarshalJSON(body []byte) error {
22534	var m map[string]*json.RawMessage
22535	err := json.Unmarshal(body, &m)
22536	if err != nil {
22537		return err
22538	}
22539	for k, v := range m {
22540		switch k {
22541		case "properties":
22542			if v != nil {
22543				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
22544				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
22545				if err != nil {
22546					return err
22547				}
22548				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
22549			}
22550		case "name":
22551			if v != nil {
22552				var name string
22553				err = json.Unmarshal(*v, &name)
22554				if err != nil {
22555					return err
22556				}
22557				or.Name = &name
22558			}
22559		case "etag":
22560			if v != nil {
22561				var etag string
22562				err = json.Unmarshal(*v, &etag)
22563				if err != nil {
22564					return err
22565				}
22566				or.Etag = &etag
22567			}
22568		case "type":
22569			if v != nil {
22570				var typeVar string
22571				err = json.Unmarshal(*v, &typeVar)
22572				if err != nil {
22573					return err
22574				}
22575				or.Type = &typeVar
22576			}
22577		case "id":
22578			if v != nil {
22579				var ID string
22580				err = json.Unmarshal(*v, &ID)
22581				if err != nil {
22582					return err
22583				}
22584				or.ID = &ID
22585			}
22586		}
22587	}
22588
22589	return nil
22590}
22591
22592// OutboundRulePropertiesFormat outbound rule of the load balancer.
22593type OutboundRulePropertiesFormat struct {
22594	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
22595	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
22596	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
22597	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
22598	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
22599	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
22600	// ProvisioningState - READ-ONLY; The provisioning state of the outbound rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22601	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22602	// Protocol - The protocol for the outbound rule in load balancer. Possible values include: 'LoadBalancerOutboundRuleProtocolTCP', 'LoadBalancerOutboundRuleProtocolUDP', 'LoadBalancerOutboundRuleProtocolAll'
22603	Protocol LoadBalancerOutboundRuleProtocol `json:"protocol,omitempty"`
22604	// 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.
22605	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
22606	// IdleTimeoutInMinutes - The timeout for the TCP idle connection.
22607	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
22608}
22609
22610// OwaspCrsExclusionEntry allow to exclude some variable satisfy the condition for the WAF check.
22611type OwaspCrsExclusionEntry struct {
22612	// MatchVariable - The variable to be excluded. Possible values include: 'RequestHeaderNames', 'RequestCookieNames', 'RequestArgNames'
22613	MatchVariable OwaspCrsExclusionEntryMatchVariable `json:"matchVariable,omitempty"`
22614	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to. Possible values include: 'OwaspCrsExclusionEntrySelectorMatchOperatorEquals', 'OwaspCrsExclusionEntrySelectorMatchOperatorContains', 'OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny'
22615	SelectorMatchOperator OwaspCrsExclusionEntrySelectorMatchOperator `json:"selectorMatchOperator,omitempty"`
22616	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
22617	Selector *string `json:"selector,omitempty"`
22618}
22619
22620// P2SConnectionConfiguration p2SConnectionConfiguration Resource.
22621type P2SConnectionConfiguration struct {
22622	// P2SConnectionConfigurationProperties - Properties of the P2S connection configuration.
22623	*P2SConnectionConfigurationProperties `json:"properties,omitempty"`
22624	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
22625	Name *string `json:"name,omitempty"`
22626	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22627	Etag *string `json:"etag,omitempty"`
22628	// ID - Resource ID.
22629	ID *string `json:"id,omitempty"`
22630}
22631
22632// MarshalJSON is the custom marshaler for P2SConnectionConfiguration.
22633func (pcc P2SConnectionConfiguration) MarshalJSON() ([]byte, error) {
22634	objectMap := make(map[string]interface{})
22635	if pcc.P2SConnectionConfigurationProperties != nil {
22636		objectMap["properties"] = pcc.P2SConnectionConfigurationProperties
22637	}
22638	if pcc.Name != nil {
22639		objectMap["name"] = pcc.Name
22640	}
22641	if pcc.ID != nil {
22642		objectMap["id"] = pcc.ID
22643	}
22644	return json.Marshal(objectMap)
22645}
22646
22647// UnmarshalJSON is the custom unmarshaler for P2SConnectionConfiguration struct.
22648func (pcc *P2SConnectionConfiguration) UnmarshalJSON(body []byte) error {
22649	var m map[string]*json.RawMessage
22650	err := json.Unmarshal(body, &m)
22651	if err != nil {
22652		return err
22653	}
22654	for k, v := range m {
22655		switch k {
22656		case "properties":
22657			if v != nil {
22658				var p2SConnectionConfigurationProperties P2SConnectionConfigurationProperties
22659				err = json.Unmarshal(*v, &p2SConnectionConfigurationProperties)
22660				if err != nil {
22661					return err
22662				}
22663				pcc.P2SConnectionConfigurationProperties = &p2SConnectionConfigurationProperties
22664			}
22665		case "name":
22666			if v != nil {
22667				var name string
22668				err = json.Unmarshal(*v, &name)
22669				if err != nil {
22670					return err
22671				}
22672				pcc.Name = &name
22673			}
22674		case "etag":
22675			if v != nil {
22676				var etag string
22677				err = json.Unmarshal(*v, &etag)
22678				if err != nil {
22679					return err
22680				}
22681				pcc.Etag = &etag
22682			}
22683		case "id":
22684			if v != nil {
22685				var ID string
22686				err = json.Unmarshal(*v, &ID)
22687				if err != nil {
22688					return err
22689				}
22690				pcc.ID = &ID
22691			}
22692		}
22693	}
22694
22695	return nil
22696}
22697
22698// P2SConnectionConfigurationProperties parameters for P2SConnectionConfiguration.
22699type P2SConnectionConfigurationProperties struct {
22700	// VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient.
22701	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
22702	// ProvisioningState - READ-ONLY; The provisioning state of the P2SConnectionConfiguration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22703	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22704}
22705
22706// P2SVpnConnectionHealth p2S Vpn connection detailed health written to sas url.
22707type P2SVpnConnectionHealth struct {
22708	autorest.Response `json:"-"`
22709	// SasURL - Returned sas url of the blob to which the p2s vpn connection detailed health will be written.
22710	SasURL *string `json:"sasUrl,omitempty"`
22711}
22712
22713// P2SVpnConnectionHealthRequest list of P2S Vpn connection health request.
22714type P2SVpnConnectionHealthRequest struct {
22715	// VpnUserNamesFilter - The list of p2s vpn user names whose p2s vpn connection detailed health to retrieve for.
22716	VpnUserNamesFilter *[]string `json:"vpnUserNamesFilter,omitempty"`
22717	// OutputBlobSasURL - The sas-url to download the P2S Vpn connection health detail.
22718	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
22719}
22720
22721// P2SVpnConnectionRequest list of p2s vpn connections to be disconnected.
22722type P2SVpnConnectionRequest struct {
22723	// VpnConnectionIds - List of p2s vpn connection Ids.
22724	VpnConnectionIds *[]string `json:"vpnConnectionIds,omitempty"`
22725}
22726
22727// P2SVpnGateway p2SVpnGateway Resource.
22728type P2SVpnGateway struct {
22729	autorest.Response `json:"-"`
22730	// P2SVpnGatewayProperties - Properties of the P2SVpnGateway.
22731	*P2SVpnGatewayProperties `json:"properties,omitempty"`
22732	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22733	Etag *string `json:"etag,omitempty"`
22734	// ID - Resource ID.
22735	ID *string `json:"id,omitempty"`
22736	// Name - READ-ONLY; Resource name.
22737	Name *string `json:"name,omitempty"`
22738	// Type - READ-ONLY; Resource type.
22739	Type *string `json:"type,omitempty"`
22740	// Location - Resource location.
22741	Location *string `json:"location,omitempty"`
22742	// Tags - Resource tags.
22743	Tags map[string]*string `json:"tags"`
22744}
22745
22746// MarshalJSON is the custom marshaler for P2SVpnGateway.
22747func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
22748	objectMap := make(map[string]interface{})
22749	if pvg.P2SVpnGatewayProperties != nil {
22750		objectMap["properties"] = pvg.P2SVpnGatewayProperties
22751	}
22752	if pvg.ID != nil {
22753		objectMap["id"] = pvg.ID
22754	}
22755	if pvg.Location != nil {
22756		objectMap["location"] = pvg.Location
22757	}
22758	if pvg.Tags != nil {
22759		objectMap["tags"] = pvg.Tags
22760	}
22761	return json.Marshal(objectMap)
22762}
22763
22764// UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
22765func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
22766	var m map[string]*json.RawMessage
22767	err := json.Unmarshal(body, &m)
22768	if err != nil {
22769		return err
22770	}
22771	for k, v := range m {
22772		switch k {
22773		case "properties":
22774			if v != nil {
22775				var p2SVpnGatewayProperties P2SVpnGatewayProperties
22776				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
22777				if err != nil {
22778					return err
22779				}
22780				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
22781			}
22782		case "etag":
22783			if v != nil {
22784				var etag string
22785				err = json.Unmarshal(*v, &etag)
22786				if err != nil {
22787					return err
22788				}
22789				pvg.Etag = &etag
22790			}
22791		case "id":
22792			if v != nil {
22793				var ID string
22794				err = json.Unmarshal(*v, &ID)
22795				if err != nil {
22796					return err
22797				}
22798				pvg.ID = &ID
22799			}
22800		case "name":
22801			if v != nil {
22802				var name string
22803				err = json.Unmarshal(*v, &name)
22804				if err != nil {
22805					return err
22806				}
22807				pvg.Name = &name
22808			}
22809		case "type":
22810			if v != nil {
22811				var typeVar string
22812				err = json.Unmarshal(*v, &typeVar)
22813				if err != nil {
22814					return err
22815				}
22816				pvg.Type = &typeVar
22817			}
22818		case "location":
22819			if v != nil {
22820				var location string
22821				err = json.Unmarshal(*v, &location)
22822				if err != nil {
22823					return err
22824				}
22825				pvg.Location = &location
22826			}
22827		case "tags":
22828			if v != nil {
22829				var tags map[string]*string
22830				err = json.Unmarshal(*v, &tags)
22831				if err != nil {
22832					return err
22833				}
22834				pvg.Tags = tags
22835			}
22836		}
22837	}
22838
22839	return nil
22840}
22841
22842// P2SVpnGatewayProperties parameters for P2SVpnGateway.
22843type P2SVpnGatewayProperties struct {
22844	// VirtualHub - The VirtualHub to which the gateway belongs.
22845	VirtualHub *SubResource `json:"virtualHub,omitempty"`
22846	// P2SConnectionConfigurations - List of all p2s connection configurations of the gateway.
22847	P2SConnectionConfigurations *[]P2SConnectionConfiguration `json:"p2SConnectionConfigurations,omitempty"`
22848	// ProvisioningState - READ-ONLY; The provisioning state of the P2S VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22849	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22850	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
22851	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
22852	// VpnServerConfiguration - The VpnServerConfiguration to which the p2sVpnGateway is attached to.
22853	VpnServerConfiguration *SubResource `json:"vpnServerConfiguration,omitempty"`
22854	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
22855	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
22856}
22857
22858// P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22859// long-running operation.
22860type P2sVpnGatewaysCreateOrUpdateFuture struct {
22861	azure.Future
22862}
22863
22864// Result returns the result of the asynchronous operation.
22865// If the operation has not completed it will return an error.
22866func (future *P2sVpnGatewaysCreateOrUpdateFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
22867	var done bool
22868	done, err = future.DoneWithContext(context.Background(), client)
22869	if err != nil {
22870		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22871		return
22872	}
22873	if !done {
22874		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
22875		return
22876	}
22877	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22878	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
22879		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
22880		if err != nil {
22881			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
22882		}
22883	}
22884	return
22885}
22886
22887// P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22888// operation.
22889type P2sVpnGatewaysDeleteFuture struct {
22890	azure.Future
22891}
22892
22893// Result returns the result of the asynchronous operation.
22894// If the operation has not completed it will return an error.
22895func (future *P2sVpnGatewaysDeleteFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
22896	var done bool
22897	done, err = future.DoneWithContext(context.Background(), client)
22898	if err != nil {
22899		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
22900		return
22901	}
22902	if !done {
22903		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
22904		return
22905	}
22906	ar.Response = future.Response()
22907	return
22908}
22909
22910// P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture an abstraction for monitoring and retrieving the results
22911// of a long-running operation.
22912type P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture struct {
22913	azure.Future
22914}
22915
22916// Result returns the result of the asynchronous operation.
22917// If the operation has not completed it will return an error.
22918func (future *P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
22919	var done bool
22920	done, err = future.DoneWithContext(context.Background(), client)
22921	if err != nil {
22922		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture", "Result", future.Response(), "Polling failure")
22923		return
22924	}
22925	if !done {
22926		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture")
22927		return
22928	}
22929	ar.Response = future.Response()
22930	return
22931}
22932
22933// P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
22934// long-running operation.
22935type P2sVpnGatewaysGenerateVpnProfileFuture struct {
22936	azure.Future
22937}
22938
22939// Result returns the result of the asynchronous operation.
22940// If the operation has not completed it will return an error.
22941func (future *P2sVpnGatewaysGenerateVpnProfileFuture) Result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
22942	var done bool
22943	done, err = future.DoneWithContext(context.Background(), client)
22944	if err != nil {
22945		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
22946		return
22947	}
22948	if !done {
22949		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
22950		return
22951	}
22952	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22953	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
22954		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
22955		if err != nil {
22956			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
22957		}
22958	}
22959	return
22960}
22961
22962// P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture an abstraction for monitoring and retrieving the
22963// results of a long-running operation.
22964type P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture struct {
22965	azure.Future
22966}
22967
22968// Result returns the result of the asynchronous operation.
22969// If the operation has not completed it will return an error.
22970func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture) Result(client P2sVpnGatewaysClient) (pvch P2SVpnConnectionHealth, err error) {
22971	var done bool
22972	done, err = future.DoneWithContext(context.Background(), client)
22973	if err != nil {
22974		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", future.Response(), "Polling failure")
22975		return
22976	}
22977	if !done {
22978		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture")
22979		return
22980	}
22981	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22982	if pvch.Response.Response, err = future.GetResult(sender); err == nil && pvch.Response.Response.StatusCode != http.StatusNoContent {
22983		pvch, err = client.GetP2sVpnConnectionHealthDetailedResponder(pvch.Response.Response)
22984		if err != nil {
22985			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", pvch.Response.Response, "Failure responding to request")
22986		}
22987	}
22988	return
22989}
22990
22991// P2sVpnGatewaysGetP2sVpnConnectionHealthFuture an abstraction for monitoring and retrieving the results
22992// of a long-running operation.
22993type P2sVpnGatewaysGetP2sVpnConnectionHealthFuture struct {
22994	azure.Future
22995}
22996
22997// Result returns the result of the asynchronous operation.
22998// If the operation has not completed it will return an error.
22999func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
23000	var done bool
23001	done, err = future.DoneWithContext(context.Background(), client)
23002	if err != nil {
23003		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", future.Response(), "Polling failure")
23004		return
23005	}
23006	if !done {
23007		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture")
23008		return
23009	}
23010	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23011	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
23012		pvg, err = client.GetP2sVpnConnectionHealthResponder(pvg.Response.Response)
23013		if err != nil {
23014			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", pvg.Response.Response, "Failure responding to request")
23015		}
23016	}
23017	return
23018}
23019
23020// P2SVpnProfileParameters vpn Client Parameters for package generation.
23021type P2SVpnProfileParameters struct {
23022	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
23023	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
23024}
23025
23026// PacketCapture parameters that define the create packet capture operation.
23027type PacketCapture struct {
23028	// PacketCaptureParameters - Properties of the packet capture.
23029	*PacketCaptureParameters `json:"properties,omitempty"`
23030}
23031
23032// MarshalJSON is the custom marshaler for PacketCapture.
23033func (pc PacketCapture) MarshalJSON() ([]byte, error) {
23034	objectMap := make(map[string]interface{})
23035	if pc.PacketCaptureParameters != nil {
23036		objectMap["properties"] = pc.PacketCaptureParameters
23037	}
23038	return json.Marshal(objectMap)
23039}
23040
23041// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
23042func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
23043	var m map[string]*json.RawMessage
23044	err := json.Unmarshal(body, &m)
23045	if err != nil {
23046		return err
23047	}
23048	for k, v := range m {
23049		switch k {
23050		case "properties":
23051			if v != nil {
23052				var packetCaptureParameters PacketCaptureParameters
23053				err = json.Unmarshal(*v, &packetCaptureParameters)
23054				if err != nil {
23055					return err
23056				}
23057				pc.PacketCaptureParameters = &packetCaptureParameters
23058			}
23059		}
23060	}
23061
23062	return nil
23063}
23064
23065// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
23066type PacketCaptureFilter struct {
23067	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
23068	Protocol PcProtocol `json:"protocol,omitempty"`
23069	// 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.
23070	LocalIPAddress *string `json:"localIPAddress,omitempty"`
23071	// 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.
23072	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
23073	// 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.
23074	LocalPort *string `json:"localPort,omitempty"`
23075	// 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.
23076	RemotePort *string `json:"remotePort,omitempty"`
23077}
23078
23079// PacketCaptureListResult list of packet capture sessions.
23080type PacketCaptureListResult struct {
23081	autorest.Response `json:"-"`
23082	// Value - Information about packet capture sessions.
23083	Value *[]PacketCaptureResult `json:"value,omitempty"`
23084}
23085
23086// PacketCaptureParameters parameters that define the create packet capture operation.
23087type PacketCaptureParameters struct {
23088	// Target - The ID of the targeted resource, only VM is currently supported.
23089	Target *string `json:"target,omitempty"`
23090	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
23091	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
23092	// TotalBytesPerSession - Maximum size of the capture output.
23093	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
23094	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
23095	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
23096	// StorageLocation - The storage location for a packet capture session.
23097	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
23098	// Filters - A list of packet capture filters.
23099	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
23100}
23101
23102// PacketCaptureQueryStatusResult status of packet capture session.
23103type PacketCaptureQueryStatusResult struct {
23104	autorest.Response `json:"-"`
23105	// Name - The name of the packet capture resource.
23106	Name *string `json:"name,omitempty"`
23107	// ID - The ID of the packet capture resource.
23108	ID *string `json:"id,omitempty"`
23109	// CaptureStartTime - The start time of the packet capture session.
23110	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
23111	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
23112	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
23113	// StopReason - The reason the current packet capture session was stopped.
23114	StopReason *string `json:"stopReason,omitempty"`
23115	// PacketCaptureError - List of errors of packet capture session.
23116	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
23117}
23118
23119// PacketCaptureResult information about packet capture session.
23120type PacketCaptureResult struct {
23121	autorest.Response `json:"-"`
23122	// Name - READ-ONLY; Name of the packet capture session.
23123	Name *string `json:"name,omitempty"`
23124	// ID - READ-ONLY; ID of the packet capture operation.
23125	ID *string `json:"id,omitempty"`
23126	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23127	Etag *string `json:"etag,omitempty"`
23128	// PacketCaptureResultProperties - Properties of the packet capture result.
23129	*PacketCaptureResultProperties `json:"properties,omitempty"`
23130}
23131
23132// MarshalJSON is the custom marshaler for PacketCaptureResult.
23133func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
23134	objectMap := make(map[string]interface{})
23135	if pcr.PacketCaptureResultProperties != nil {
23136		objectMap["properties"] = pcr.PacketCaptureResultProperties
23137	}
23138	return json.Marshal(objectMap)
23139}
23140
23141// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
23142func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
23143	var m map[string]*json.RawMessage
23144	err := json.Unmarshal(body, &m)
23145	if err != nil {
23146		return err
23147	}
23148	for k, v := range m {
23149		switch k {
23150		case "name":
23151			if v != nil {
23152				var name string
23153				err = json.Unmarshal(*v, &name)
23154				if err != nil {
23155					return err
23156				}
23157				pcr.Name = &name
23158			}
23159		case "id":
23160			if v != nil {
23161				var ID string
23162				err = json.Unmarshal(*v, &ID)
23163				if err != nil {
23164					return err
23165				}
23166				pcr.ID = &ID
23167			}
23168		case "etag":
23169			if v != nil {
23170				var etag string
23171				err = json.Unmarshal(*v, &etag)
23172				if err != nil {
23173					return err
23174				}
23175				pcr.Etag = &etag
23176			}
23177		case "properties":
23178			if v != nil {
23179				var packetCaptureResultProperties PacketCaptureResultProperties
23180				err = json.Unmarshal(*v, &packetCaptureResultProperties)
23181				if err != nil {
23182					return err
23183				}
23184				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
23185			}
23186		}
23187	}
23188
23189	return nil
23190}
23191
23192// PacketCaptureResultProperties the properties of a packet capture session.
23193type PacketCaptureResultProperties struct {
23194	// ProvisioningState - READ-ONLY; The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23195	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23196	// Target - The ID of the targeted resource, only VM is currently supported.
23197	Target *string `json:"target,omitempty"`
23198	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
23199	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
23200	// TotalBytesPerSession - Maximum size of the capture output.
23201	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
23202	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
23203	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
23204	// StorageLocation - The storage location for a packet capture session.
23205	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
23206	// Filters - A list of packet capture filters.
23207	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
23208}
23209
23210// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
23211// operation.
23212type PacketCapturesCreateFuture struct {
23213	azure.Future
23214}
23215
23216// Result returns the result of the asynchronous operation.
23217// If the operation has not completed it will return an error.
23218func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
23219	var done bool
23220	done, err = future.DoneWithContext(context.Background(), client)
23221	if err != nil {
23222		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
23223		return
23224	}
23225	if !done {
23226		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
23227		return
23228	}
23229	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23230	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
23231		pcr, err = client.CreateResponder(pcr.Response.Response)
23232		if err != nil {
23233			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
23234		}
23235	}
23236	return
23237}
23238
23239// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23240// operation.
23241type PacketCapturesDeleteFuture struct {
23242	azure.Future
23243}
23244
23245// Result returns the result of the asynchronous operation.
23246// If the operation has not completed it will return an error.
23247func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
23248	var done bool
23249	done, err = future.DoneWithContext(context.Background(), client)
23250	if err != nil {
23251		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
23252		return
23253	}
23254	if !done {
23255		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
23256		return
23257	}
23258	ar.Response = future.Response()
23259	return
23260}
23261
23262// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
23263// operation.
23264type PacketCapturesGetStatusFuture struct {
23265	azure.Future
23266}
23267
23268// Result returns the result of the asynchronous operation.
23269// If the operation has not completed it will return an error.
23270func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
23271	var done bool
23272	done, err = future.DoneWithContext(context.Background(), client)
23273	if err != nil {
23274		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
23275		return
23276	}
23277	if !done {
23278		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
23279		return
23280	}
23281	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23282	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
23283		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
23284		if err != nil {
23285			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
23286		}
23287	}
23288	return
23289}
23290
23291// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
23292// operation.
23293type PacketCapturesStopFuture struct {
23294	azure.Future
23295}
23296
23297// Result returns the result of the asynchronous operation.
23298// If the operation has not completed it will return an error.
23299func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
23300	var done bool
23301	done, err = future.DoneWithContext(context.Background(), client)
23302	if err != nil {
23303		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
23304		return
23305	}
23306	if !done {
23307		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
23308		return
23309	}
23310	ar.Response = future.Response()
23311	return
23312}
23313
23314// PacketCaptureStorageLocation the storage location for a packet capture session.
23315type PacketCaptureStorageLocation struct {
23316	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
23317	StorageID *string `json:"storageId,omitempty"`
23318	// 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.
23319	StoragePath *string `json:"storagePath,omitempty"`
23320	// 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.
23321	FilePath *string `json:"filePath,omitempty"`
23322}
23323
23324// PatchRouteFilter route Filter Resource.
23325type PatchRouteFilter struct {
23326	// RouteFilterPropertiesFormat - Properties of the route filter.
23327	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
23328	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
23329	Name *string `json:"name,omitempty"`
23330	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23331	Etag *string `json:"etag,omitempty"`
23332	// Type - READ-ONLY; Resource type.
23333	Type *string `json:"type,omitempty"`
23334	// Tags - Resource tags.
23335	Tags map[string]*string `json:"tags"`
23336	// ID - Resource ID.
23337	ID *string `json:"id,omitempty"`
23338}
23339
23340// MarshalJSON is the custom marshaler for PatchRouteFilter.
23341func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
23342	objectMap := make(map[string]interface{})
23343	if prf.RouteFilterPropertiesFormat != nil {
23344		objectMap["properties"] = prf.RouteFilterPropertiesFormat
23345	}
23346	if prf.Tags != nil {
23347		objectMap["tags"] = prf.Tags
23348	}
23349	if prf.ID != nil {
23350		objectMap["id"] = prf.ID
23351	}
23352	return json.Marshal(objectMap)
23353}
23354
23355// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
23356func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
23357	var m map[string]*json.RawMessage
23358	err := json.Unmarshal(body, &m)
23359	if err != nil {
23360		return err
23361	}
23362	for k, v := range m {
23363		switch k {
23364		case "properties":
23365			if v != nil {
23366				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
23367				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
23368				if err != nil {
23369					return err
23370				}
23371				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
23372			}
23373		case "name":
23374			if v != nil {
23375				var name string
23376				err = json.Unmarshal(*v, &name)
23377				if err != nil {
23378					return err
23379				}
23380				prf.Name = &name
23381			}
23382		case "etag":
23383			if v != nil {
23384				var etag string
23385				err = json.Unmarshal(*v, &etag)
23386				if err != nil {
23387					return err
23388				}
23389				prf.Etag = &etag
23390			}
23391		case "type":
23392			if v != nil {
23393				var typeVar string
23394				err = json.Unmarshal(*v, &typeVar)
23395				if err != nil {
23396					return err
23397				}
23398				prf.Type = &typeVar
23399			}
23400		case "tags":
23401			if v != nil {
23402				var tags map[string]*string
23403				err = json.Unmarshal(*v, &tags)
23404				if err != nil {
23405					return err
23406				}
23407				prf.Tags = tags
23408			}
23409		case "id":
23410			if v != nil {
23411				var ID string
23412				err = json.Unmarshal(*v, &ID)
23413				if err != nil {
23414					return err
23415				}
23416				prf.ID = &ID
23417			}
23418		}
23419	}
23420
23421	return nil
23422}
23423
23424// PatchRouteFilterRule route Filter Rule Resource.
23425type PatchRouteFilterRule struct {
23426	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
23427	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
23428	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
23429	Name *string `json:"name,omitempty"`
23430	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23431	Etag *string `json:"etag,omitempty"`
23432	// ID - Resource ID.
23433	ID *string `json:"id,omitempty"`
23434}
23435
23436// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
23437func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
23438	objectMap := make(map[string]interface{})
23439	if prfr.RouteFilterRulePropertiesFormat != nil {
23440		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
23441	}
23442	if prfr.ID != nil {
23443		objectMap["id"] = prfr.ID
23444	}
23445	return json.Marshal(objectMap)
23446}
23447
23448// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
23449func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
23450	var m map[string]*json.RawMessage
23451	err := json.Unmarshal(body, &m)
23452	if err != nil {
23453		return err
23454	}
23455	for k, v := range m {
23456		switch k {
23457		case "properties":
23458			if v != nil {
23459				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
23460				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
23461				if err != nil {
23462					return err
23463				}
23464				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
23465			}
23466		case "name":
23467			if v != nil {
23468				var name string
23469				err = json.Unmarshal(*v, &name)
23470				if err != nil {
23471					return err
23472				}
23473				prfr.Name = &name
23474			}
23475		case "etag":
23476			if v != nil {
23477				var etag string
23478				err = json.Unmarshal(*v, &etag)
23479				if err != nil {
23480					return err
23481				}
23482				prfr.Etag = &etag
23483			}
23484		case "id":
23485			if v != nil {
23486				var ID string
23487				err = json.Unmarshal(*v, &ID)
23488				if err != nil {
23489					return err
23490				}
23491				prfr.ID = &ID
23492			}
23493		}
23494	}
23495
23496	return nil
23497}
23498
23499// PeerExpressRouteCircuitConnection peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
23500// resource.
23501type PeerExpressRouteCircuitConnection struct {
23502	autorest.Response `json:"-"`
23503	// PeerExpressRouteCircuitConnectionPropertiesFormat - Properties of the peer express route circuit connection.
23504	*PeerExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
23505	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23506	Name *string `json:"name,omitempty"`
23507	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23508	Etag *string `json:"etag,omitempty"`
23509	// Type - READ-ONLY; Type of the resource.
23510	Type *string `json:"type,omitempty"`
23511	// ID - Resource ID.
23512	ID *string `json:"id,omitempty"`
23513}
23514
23515// MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnection.
23516func (percc PeerExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
23517	objectMap := make(map[string]interface{})
23518	if percc.PeerExpressRouteCircuitConnectionPropertiesFormat != nil {
23519		objectMap["properties"] = percc.PeerExpressRouteCircuitConnectionPropertiesFormat
23520	}
23521	if percc.Name != nil {
23522		objectMap["name"] = percc.Name
23523	}
23524	if percc.ID != nil {
23525		objectMap["id"] = percc.ID
23526	}
23527	return json.Marshal(objectMap)
23528}
23529
23530// UnmarshalJSON is the custom unmarshaler for PeerExpressRouteCircuitConnection struct.
23531func (percc *PeerExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
23532	var m map[string]*json.RawMessage
23533	err := json.Unmarshal(body, &m)
23534	if err != nil {
23535		return err
23536	}
23537	for k, v := range m {
23538		switch k {
23539		case "properties":
23540			if v != nil {
23541				var peerExpressRouteCircuitConnectionPropertiesFormat PeerExpressRouteCircuitConnectionPropertiesFormat
23542				err = json.Unmarshal(*v, &peerExpressRouteCircuitConnectionPropertiesFormat)
23543				if err != nil {
23544					return err
23545				}
23546				percc.PeerExpressRouteCircuitConnectionPropertiesFormat = &peerExpressRouteCircuitConnectionPropertiesFormat
23547			}
23548		case "name":
23549			if v != nil {
23550				var name string
23551				err = json.Unmarshal(*v, &name)
23552				if err != nil {
23553					return err
23554				}
23555				percc.Name = &name
23556			}
23557		case "etag":
23558			if v != nil {
23559				var etag string
23560				err = json.Unmarshal(*v, &etag)
23561				if err != nil {
23562					return err
23563				}
23564				percc.Etag = &etag
23565			}
23566		case "type":
23567			if v != nil {
23568				var typeVar string
23569				err = json.Unmarshal(*v, &typeVar)
23570				if err != nil {
23571					return err
23572				}
23573				percc.Type = &typeVar
23574			}
23575		case "id":
23576			if v != nil {
23577				var ID string
23578				err = json.Unmarshal(*v, &ID)
23579				if err != nil {
23580					return err
23581				}
23582				percc.ID = &ID
23583			}
23584		}
23585	}
23586
23587	return nil
23588}
23589
23590// PeerExpressRouteCircuitConnectionListResult response for ListPeeredConnections API service call
23591// retrieves all global reach peer circuit connections that belongs to a Private Peering for an
23592// ExpressRouteCircuit.
23593type PeerExpressRouteCircuitConnectionListResult struct {
23594	autorest.Response `json:"-"`
23595	// Value - The global reach peer circuit connection associated with Private Peering in an ExpressRoute Circuit.
23596	Value *[]PeerExpressRouteCircuitConnection `json:"value,omitempty"`
23597	// NextLink - The URL to get the next set of results.
23598	NextLink *string `json:"nextLink,omitempty"`
23599}
23600
23601// PeerExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
23602// PeerExpressRouteCircuitConnection values.
23603type PeerExpressRouteCircuitConnectionListResultIterator struct {
23604	i    int
23605	page PeerExpressRouteCircuitConnectionListResultPage
23606}
23607
23608// NextWithContext advances to the next value.  If there was an error making
23609// the request the iterator does not advance and the error is returned.
23610func (iter *PeerExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
23611	if tracing.IsEnabled() {
23612		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultIterator.NextWithContext")
23613		defer func() {
23614			sc := -1
23615			if iter.Response().Response.Response != nil {
23616				sc = iter.Response().Response.Response.StatusCode
23617			}
23618			tracing.EndSpan(ctx, sc, err)
23619		}()
23620	}
23621	iter.i++
23622	if iter.i < len(iter.page.Values()) {
23623		return nil
23624	}
23625	err = iter.page.NextWithContext(ctx)
23626	if err != nil {
23627		iter.i--
23628		return err
23629	}
23630	iter.i = 0
23631	return nil
23632}
23633
23634// Next advances to the next value.  If there was an error making
23635// the request the iterator does not advance and the error is returned.
23636// Deprecated: Use NextWithContext() instead.
23637func (iter *PeerExpressRouteCircuitConnectionListResultIterator) Next() error {
23638	return iter.NextWithContext(context.Background())
23639}
23640
23641// NotDone returns true if the enumeration should be started or is not yet complete.
23642func (iter PeerExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
23643	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23644}
23645
23646// Response returns the raw server response from the last page request.
23647func (iter PeerExpressRouteCircuitConnectionListResultIterator) Response() PeerExpressRouteCircuitConnectionListResult {
23648	return iter.page.Response()
23649}
23650
23651// Value returns the current value or a zero-initialized value if the
23652// iterator has advanced beyond the end of the collection.
23653func (iter PeerExpressRouteCircuitConnectionListResultIterator) Value() PeerExpressRouteCircuitConnection {
23654	if !iter.page.NotDone() {
23655		return PeerExpressRouteCircuitConnection{}
23656	}
23657	return iter.page.Values()[iter.i]
23658}
23659
23660// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultIterator type.
23661func NewPeerExpressRouteCircuitConnectionListResultIterator(page PeerExpressRouteCircuitConnectionListResultPage) PeerExpressRouteCircuitConnectionListResultIterator {
23662	return PeerExpressRouteCircuitConnectionListResultIterator{page: page}
23663}
23664
23665// IsEmpty returns true if the ListResult contains no values.
23666func (percclr PeerExpressRouteCircuitConnectionListResult) IsEmpty() bool {
23667	return percclr.Value == nil || len(*percclr.Value) == 0
23668}
23669
23670// peerExpressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
23671// It returns nil if no more results exist.
23672func (percclr PeerExpressRouteCircuitConnectionListResult) peerExpressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
23673	if percclr.NextLink == nil || len(to.String(percclr.NextLink)) < 1 {
23674		return nil, nil
23675	}
23676	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23677		autorest.AsJSON(),
23678		autorest.AsGet(),
23679		autorest.WithBaseURL(to.String(percclr.NextLink)))
23680}
23681
23682// PeerExpressRouteCircuitConnectionListResultPage contains a page of PeerExpressRouteCircuitConnection
23683// values.
23684type PeerExpressRouteCircuitConnectionListResultPage struct {
23685	fn      func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)
23686	percclr PeerExpressRouteCircuitConnectionListResult
23687}
23688
23689// NextWithContext advances to the next page of values.  If there was an error making
23690// the request the page does not advance and the error is returned.
23691func (page *PeerExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
23692	if tracing.IsEnabled() {
23693		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultPage.NextWithContext")
23694		defer func() {
23695			sc := -1
23696			if page.Response().Response.Response != nil {
23697				sc = page.Response().Response.Response.StatusCode
23698			}
23699			tracing.EndSpan(ctx, sc, err)
23700		}()
23701	}
23702	next, err := page.fn(ctx, page.percclr)
23703	if err != nil {
23704		return err
23705	}
23706	page.percclr = next
23707	return nil
23708}
23709
23710// Next advances to the next page of values.  If there was an error making
23711// the request the page does not advance and the error is returned.
23712// Deprecated: Use NextWithContext() instead.
23713func (page *PeerExpressRouteCircuitConnectionListResultPage) Next() error {
23714	return page.NextWithContext(context.Background())
23715}
23716
23717// NotDone returns true if the page enumeration should be started or is not yet complete.
23718func (page PeerExpressRouteCircuitConnectionListResultPage) NotDone() bool {
23719	return !page.percclr.IsEmpty()
23720}
23721
23722// Response returns the raw server response from the last page request.
23723func (page PeerExpressRouteCircuitConnectionListResultPage) Response() PeerExpressRouteCircuitConnectionListResult {
23724	return page.percclr
23725}
23726
23727// Values returns the slice of values for the current page or nil if there are no values.
23728func (page PeerExpressRouteCircuitConnectionListResultPage) Values() []PeerExpressRouteCircuitConnection {
23729	if page.percclr.IsEmpty() {
23730		return nil
23731	}
23732	return *page.percclr.Value
23733}
23734
23735// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultPage type.
23736func NewPeerExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)) PeerExpressRouteCircuitConnectionListResultPage {
23737	return PeerExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
23738}
23739
23740// PeerExpressRouteCircuitConnectionPropertiesFormat properties of the peer express route circuit
23741// connection.
23742type PeerExpressRouteCircuitConnectionPropertiesFormat struct {
23743	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit.
23744	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
23745	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
23746	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
23747	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
23748	AddressPrefix *string `json:"addressPrefix,omitempty"`
23749	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
23750	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
23751	// ConnectionName - The name of the express route circuit connection resource.
23752	ConnectionName *string `json:"connectionName,omitempty"`
23753	// AuthResourceGUID - The resource guid of the authorization used for the express route circuit connection.
23754	AuthResourceGUID *string `json:"authResourceGuid,omitempty"`
23755	// ProvisioningState - READ-ONLY; The provisioning state of the peer express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23756	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23757}
23758
23759// PolicySettings defines contents of a web application firewall global configuration.
23760type PolicySettings struct {
23761	// State - The state of the policy. Possible values include: 'WebApplicationFirewallEnabledStateDisabled', 'WebApplicationFirewallEnabledStateEnabled'
23762	State WebApplicationFirewallEnabledState `json:"state,omitempty"`
23763	// Mode - The mode of the policy. Possible values include: 'WebApplicationFirewallModePrevention', 'WebApplicationFirewallModeDetection'
23764	Mode WebApplicationFirewallMode `json:"mode,omitempty"`
23765	// RequestBodyCheck - Whether to allow WAF to check request Body.
23766	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
23767	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
23768	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
23769	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
23770	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
23771}
23772
23773// PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet.
23774type PrepareNetworkPoliciesRequest struct {
23775	// ServiceName - The name of the service for which subnet is being prepared for.
23776	ServiceName *string `json:"serviceName,omitempty"`
23777	// NetworkIntentPolicyConfigurations - A list of NetworkIntentPolicyConfiguration.
23778	NetworkIntentPolicyConfigurations *[]IntentPolicyConfiguration `json:"networkIntentPolicyConfigurations,omitempty"`
23779}
23780
23781// PrivateEndpoint private endpoint resource.
23782type PrivateEndpoint struct {
23783	autorest.Response `json:"-"`
23784	// PrivateEndpointProperties - Properties of the private endpoint.
23785	*PrivateEndpointProperties `json:"properties,omitempty"`
23786	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23787	Etag *string `json:"etag,omitempty"`
23788	// ID - Resource ID.
23789	ID *string `json:"id,omitempty"`
23790	// Name - READ-ONLY; Resource name.
23791	Name *string `json:"name,omitempty"`
23792	// Type - READ-ONLY; Resource type.
23793	Type *string `json:"type,omitempty"`
23794	// Location - Resource location.
23795	Location *string `json:"location,omitempty"`
23796	// Tags - Resource tags.
23797	Tags map[string]*string `json:"tags"`
23798}
23799
23800// MarshalJSON is the custom marshaler for PrivateEndpoint.
23801func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) {
23802	objectMap := make(map[string]interface{})
23803	if peVar.PrivateEndpointProperties != nil {
23804		objectMap["properties"] = peVar.PrivateEndpointProperties
23805	}
23806	if peVar.ID != nil {
23807		objectMap["id"] = peVar.ID
23808	}
23809	if peVar.Location != nil {
23810		objectMap["location"] = peVar.Location
23811	}
23812	if peVar.Tags != nil {
23813		objectMap["tags"] = peVar.Tags
23814	}
23815	return json.Marshal(objectMap)
23816}
23817
23818// UnmarshalJSON is the custom unmarshaler for PrivateEndpoint struct.
23819func (peVar *PrivateEndpoint) UnmarshalJSON(body []byte) error {
23820	var m map[string]*json.RawMessage
23821	err := json.Unmarshal(body, &m)
23822	if err != nil {
23823		return err
23824	}
23825	for k, v := range m {
23826		switch k {
23827		case "properties":
23828			if v != nil {
23829				var privateEndpointProperties PrivateEndpointProperties
23830				err = json.Unmarshal(*v, &privateEndpointProperties)
23831				if err != nil {
23832					return err
23833				}
23834				peVar.PrivateEndpointProperties = &privateEndpointProperties
23835			}
23836		case "etag":
23837			if v != nil {
23838				var etag string
23839				err = json.Unmarshal(*v, &etag)
23840				if err != nil {
23841					return err
23842				}
23843				peVar.Etag = &etag
23844			}
23845		case "id":
23846			if v != nil {
23847				var ID string
23848				err = json.Unmarshal(*v, &ID)
23849				if err != nil {
23850					return err
23851				}
23852				peVar.ID = &ID
23853			}
23854		case "name":
23855			if v != nil {
23856				var name string
23857				err = json.Unmarshal(*v, &name)
23858				if err != nil {
23859					return err
23860				}
23861				peVar.Name = &name
23862			}
23863		case "type":
23864			if v != nil {
23865				var typeVar string
23866				err = json.Unmarshal(*v, &typeVar)
23867				if err != nil {
23868					return err
23869				}
23870				peVar.Type = &typeVar
23871			}
23872		case "location":
23873			if v != nil {
23874				var location string
23875				err = json.Unmarshal(*v, &location)
23876				if err != nil {
23877					return err
23878				}
23879				peVar.Location = &location
23880			}
23881		case "tags":
23882			if v != nil {
23883				var tags map[string]*string
23884				err = json.Unmarshal(*v, &tags)
23885				if err != nil {
23886					return err
23887				}
23888				peVar.Tags = tags
23889			}
23890		}
23891	}
23892
23893	return nil
23894}
23895
23896// PrivateEndpointConnection privateEndpointConnection resource.
23897type PrivateEndpointConnection struct {
23898	autorest.Response `json:"-"`
23899	// PrivateEndpointConnectionProperties - Properties of the private end point connection.
23900	*PrivateEndpointConnectionProperties `json:"properties,omitempty"`
23901	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23902	Name *string `json:"name,omitempty"`
23903	// Type - READ-ONLY; The resource type.
23904	Type *string `json:"type,omitempty"`
23905	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23906	Etag *string `json:"etag,omitempty"`
23907	// ID - Resource ID.
23908	ID *string `json:"id,omitempty"`
23909}
23910
23911// MarshalJSON is the custom marshaler for PrivateEndpointConnection.
23912func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) {
23913	objectMap := make(map[string]interface{})
23914	if pec.PrivateEndpointConnectionProperties != nil {
23915		objectMap["properties"] = pec.PrivateEndpointConnectionProperties
23916	}
23917	if pec.Name != nil {
23918		objectMap["name"] = pec.Name
23919	}
23920	if pec.ID != nil {
23921		objectMap["id"] = pec.ID
23922	}
23923	return json.Marshal(objectMap)
23924}
23925
23926// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct.
23927func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error {
23928	var m map[string]*json.RawMessage
23929	err := json.Unmarshal(body, &m)
23930	if err != nil {
23931		return err
23932	}
23933	for k, v := range m {
23934		switch k {
23935		case "properties":
23936			if v != nil {
23937				var privateEndpointConnectionProperties PrivateEndpointConnectionProperties
23938				err = json.Unmarshal(*v, &privateEndpointConnectionProperties)
23939				if err != nil {
23940					return err
23941				}
23942				pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties
23943			}
23944		case "name":
23945			if v != nil {
23946				var name string
23947				err = json.Unmarshal(*v, &name)
23948				if err != nil {
23949					return err
23950				}
23951				pec.Name = &name
23952			}
23953		case "type":
23954			if v != nil {
23955				var typeVar string
23956				err = json.Unmarshal(*v, &typeVar)
23957				if err != nil {
23958					return err
23959				}
23960				pec.Type = &typeVar
23961			}
23962		case "etag":
23963			if v != nil {
23964				var etag string
23965				err = json.Unmarshal(*v, &etag)
23966				if err != nil {
23967					return err
23968				}
23969				pec.Etag = &etag
23970			}
23971		case "id":
23972			if v != nil {
23973				var ID string
23974				err = json.Unmarshal(*v, &ID)
23975				if err != nil {
23976					return err
23977				}
23978				pec.ID = &ID
23979			}
23980		}
23981	}
23982
23983	return nil
23984}
23985
23986// PrivateEndpointConnectionListResult response for the ListPrivateEndpointConnection API service call.
23987type PrivateEndpointConnectionListResult struct {
23988	autorest.Response `json:"-"`
23989	// Value - A list of PrivateEndpointConnection resources for a specific private link service.
23990	Value *[]PrivateEndpointConnection `json:"value,omitempty"`
23991	// NextLink - READ-ONLY; The URL to get the next set of results.
23992	NextLink *string `json:"nextLink,omitempty"`
23993}
23994
23995// PrivateEndpointConnectionListResultIterator provides access to a complete listing of
23996// PrivateEndpointConnection values.
23997type PrivateEndpointConnectionListResultIterator struct {
23998	i    int
23999	page PrivateEndpointConnectionListResultPage
24000}
24001
24002// NextWithContext advances to the next value.  If there was an error making
24003// the request the iterator does not advance and the error is returned.
24004func (iter *PrivateEndpointConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
24005	if tracing.IsEnabled() {
24006		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultIterator.NextWithContext")
24007		defer func() {
24008			sc := -1
24009			if iter.Response().Response.Response != nil {
24010				sc = iter.Response().Response.Response.StatusCode
24011			}
24012			tracing.EndSpan(ctx, sc, err)
24013		}()
24014	}
24015	iter.i++
24016	if iter.i < len(iter.page.Values()) {
24017		return nil
24018	}
24019	err = iter.page.NextWithContext(ctx)
24020	if err != nil {
24021		iter.i--
24022		return err
24023	}
24024	iter.i = 0
24025	return nil
24026}
24027
24028// Next advances to the next value.  If there was an error making
24029// the request the iterator does not advance and the error is returned.
24030// Deprecated: Use NextWithContext() instead.
24031func (iter *PrivateEndpointConnectionListResultIterator) Next() error {
24032	return iter.NextWithContext(context.Background())
24033}
24034
24035// NotDone returns true if the enumeration should be started or is not yet complete.
24036func (iter PrivateEndpointConnectionListResultIterator) NotDone() bool {
24037	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24038}
24039
24040// Response returns the raw server response from the last page request.
24041func (iter PrivateEndpointConnectionListResultIterator) Response() PrivateEndpointConnectionListResult {
24042	return iter.page.Response()
24043}
24044
24045// Value returns the current value or a zero-initialized value if the
24046// iterator has advanced beyond the end of the collection.
24047func (iter PrivateEndpointConnectionListResultIterator) Value() PrivateEndpointConnection {
24048	if !iter.page.NotDone() {
24049		return PrivateEndpointConnection{}
24050	}
24051	return iter.page.Values()[iter.i]
24052}
24053
24054// Creates a new instance of the PrivateEndpointConnectionListResultIterator type.
24055func NewPrivateEndpointConnectionListResultIterator(page PrivateEndpointConnectionListResultPage) PrivateEndpointConnectionListResultIterator {
24056	return PrivateEndpointConnectionListResultIterator{page: page}
24057}
24058
24059// IsEmpty returns true if the ListResult contains no values.
24060func (peclr PrivateEndpointConnectionListResult) IsEmpty() bool {
24061	return peclr.Value == nil || len(*peclr.Value) == 0
24062}
24063
24064// privateEndpointConnectionListResultPreparer prepares a request to retrieve the next set of results.
24065// It returns nil if no more results exist.
24066func (peclr PrivateEndpointConnectionListResult) privateEndpointConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
24067	if peclr.NextLink == nil || len(to.String(peclr.NextLink)) < 1 {
24068		return nil, nil
24069	}
24070	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24071		autorest.AsJSON(),
24072		autorest.AsGet(),
24073		autorest.WithBaseURL(to.String(peclr.NextLink)))
24074}
24075
24076// PrivateEndpointConnectionListResultPage contains a page of PrivateEndpointConnection values.
24077type PrivateEndpointConnectionListResultPage struct {
24078	fn    func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)
24079	peclr PrivateEndpointConnectionListResult
24080}
24081
24082// NextWithContext advances to the next page of values.  If there was an error making
24083// the request the page does not advance and the error is returned.
24084func (page *PrivateEndpointConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
24085	if tracing.IsEnabled() {
24086		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultPage.NextWithContext")
24087		defer func() {
24088			sc := -1
24089			if page.Response().Response.Response != nil {
24090				sc = page.Response().Response.Response.StatusCode
24091			}
24092			tracing.EndSpan(ctx, sc, err)
24093		}()
24094	}
24095	next, err := page.fn(ctx, page.peclr)
24096	if err != nil {
24097		return err
24098	}
24099	page.peclr = next
24100	return nil
24101}
24102
24103// Next advances to the next page of values.  If there was an error making
24104// the request the page does not advance and the error is returned.
24105// Deprecated: Use NextWithContext() instead.
24106func (page *PrivateEndpointConnectionListResultPage) Next() error {
24107	return page.NextWithContext(context.Background())
24108}
24109
24110// NotDone returns true if the page enumeration should be started or is not yet complete.
24111func (page PrivateEndpointConnectionListResultPage) NotDone() bool {
24112	return !page.peclr.IsEmpty()
24113}
24114
24115// Response returns the raw server response from the last page request.
24116func (page PrivateEndpointConnectionListResultPage) Response() PrivateEndpointConnectionListResult {
24117	return page.peclr
24118}
24119
24120// Values returns the slice of values for the current page or nil if there are no values.
24121func (page PrivateEndpointConnectionListResultPage) Values() []PrivateEndpointConnection {
24122	if page.peclr.IsEmpty() {
24123		return nil
24124	}
24125	return *page.peclr.Value
24126}
24127
24128// Creates a new instance of the PrivateEndpointConnectionListResultPage type.
24129func NewPrivateEndpointConnectionListResultPage(getNextPage func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)) PrivateEndpointConnectionListResultPage {
24130	return PrivateEndpointConnectionListResultPage{fn: getNextPage}
24131}
24132
24133// PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties.
24134type PrivateEndpointConnectionProperties struct {
24135	// PrivateEndpoint - READ-ONLY; The resource of private end point.
24136	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
24137	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
24138	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
24139	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24140	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24141	// LinkIdentifier - READ-ONLY; The consumer link id.
24142	LinkIdentifier *string `json:"linkIdentifier,omitempty"`
24143}
24144
24145// PrivateEndpointListResult response for the ListPrivateEndpoints API service call.
24146type PrivateEndpointListResult struct {
24147	autorest.Response `json:"-"`
24148	// Value - A list of private endpoint resources in a resource group.
24149	Value *[]PrivateEndpoint `json:"value,omitempty"`
24150	// NextLink - READ-ONLY; The URL to get the next set of results.
24151	NextLink *string `json:"nextLink,omitempty"`
24152}
24153
24154// PrivateEndpointListResultIterator provides access to a complete listing of PrivateEndpoint values.
24155type PrivateEndpointListResultIterator struct {
24156	i    int
24157	page PrivateEndpointListResultPage
24158}
24159
24160// NextWithContext advances to the next value.  If there was an error making
24161// the request the iterator does not advance and the error is returned.
24162func (iter *PrivateEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
24163	if tracing.IsEnabled() {
24164		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultIterator.NextWithContext")
24165		defer func() {
24166			sc := -1
24167			if iter.Response().Response.Response != nil {
24168				sc = iter.Response().Response.Response.StatusCode
24169			}
24170			tracing.EndSpan(ctx, sc, err)
24171		}()
24172	}
24173	iter.i++
24174	if iter.i < len(iter.page.Values()) {
24175		return nil
24176	}
24177	err = iter.page.NextWithContext(ctx)
24178	if err != nil {
24179		iter.i--
24180		return err
24181	}
24182	iter.i = 0
24183	return nil
24184}
24185
24186// Next advances to the next value.  If there was an error making
24187// the request the iterator does not advance and the error is returned.
24188// Deprecated: Use NextWithContext() instead.
24189func (iter *PrivateEndpointListResultIterator) Next() error {
24190	return iter.NextWithContext(context.Background())
24191}
24192
24193// NotDone returns true if the enumeration should be started or is not yet complete.
24194func (iter PrivateEndpointListResultIterator) NotDone() bool {
24195	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24196}
24197
24198// Response returns the raw server response from the last page request.
24199func (iter PrivateEndpointListResultIterator) Response() PrivateEndpointListResult {
24200	return iter.page.Response()
24201}
24202
24203// Value returns the current value or a zero-initialized value if the
24204// iterator has advanced beyond the end of the collection.
24205func (iter PrivateEndpointListResultIterator) Value() PrivateEndpoint {
24206	if !iter.page.NotDone() {
24207		return PrivateEndpoint{}
24208	}
24209	return iter.page.Values()[iter.i]
24210}
24211
24212// Creates a new instance of the PrivateEndpointListResultIterator type.
24213func NewPrivateEndpointListResultIterator(page PrivateEndpointListResultPage) PrivateEndpointListResultIterator {
24214	return PrivateEndpointListResultIterator{page: page}
24215}
24216
24217// IsEmpty returns true if the ListResult contains no values.
24218func (pelr PrivateEndpointListResult) IsEmpty() bool {
24219	return pelr.Value == nil || len(*pelr.Value) == 0
24220}
24221
24222// privateEndpointListResultPreparer prepares a request to retrieve the next set of results.
24223// It returns nil if no more results exist.
24224func (pelr PrivateEndpointListResult) privateEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
24225	if pelr.NextLink == nil || len(to.String(pelr.NextLink)) < 1 {
24226		return nil, nil
24227	}
24228	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24229		autorest.AsJSON(),
24230		autorest.AsGet(),
24231		autorest.WithBaseURL(to.String(pelr.NextLink)))
24232}
24233
24234// PrivateEndpointListResultPage contains a page of PrivateEndpoint values.
24235type PrivateEndpointListResultPage struct {
24236	fn   func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)
24237	pelr PrivateEndpointListResult
24238}
24239
24240// NextWithContext advances to the next page of values.  If there was an error making
24241// the request the page does not advance and the error is returned.
24242func (page *PrivateEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
24243	if tracing.IsEnabled() {
24244		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultPage.NextWithContext")
24245		defer func() {
24246			sc := -1
24247			if page.Response().Response.Response != nil {
24248				sc = page.Response().Response.Response.StatusCode
24249			}
24250			tracing.EndSpan(ctx, sc, err)
24251		}()
24252	}
24253	next, err := page.fn(ctx, page.pelr)
24254	if err != nil {
24255		return err
24256	}
24257	page.pelr = next
24258	return nil
24259}
24260
24261// Next advances to the next page of values.  If there was an error making
24262// the request the page does not advance and the error is returned.
24263// Deprecated: Use NextWithContext() instead.
24264func (page *PrivateEndpointListResultPage) Next() error {
24265	return page.NextWithContext(context.Background())
24266}
24267
24268// NotDone returns true if the page enumeration should be started or is not yet complete.
24269func (page PrivateEndpointListResultPage) NotDone() bool {
24270	return !page.pelr.IsEmpty()
24271}
24272
24273// Response returns the raw server response from the last page request.
24274func (page PrivateEndpointListResultPage) Response() PrivateEndpointListResult {
24275	return page.pelr
24276}
24277
24278// Values returns the slice of values for the current page or nil if there are no values.
24279func (page PrivateEndpointListResultPage) Values() []PrivateEndpoint {
24280	if page.pelr.IsEmpty() {
24281		return nil
24282	}
24283	return *page.pelr.Value
24284}
24285
24286// Creates a new instance of the PrivateEndpointListResultPage type.
24287func NewPrivateEndpointListResultPage(getNextPage func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)) PrivateEndpointListResultPage {
24288	return PrivateEndpointListResultPage{fn: getNextPage}
24289}
24290
24291// PrivateEndpointProperties properties of the private endpoint.
24292type PrivateEndpointProperties struct {
24293	// Subnet - The ID of the subnet from which the private IP will be allocated.
24294	Subnet *Subnet `json:"subnet,omitempty"`
24295	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private endpoint.
24296	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
24297	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24298	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24299	// PrivateLinkServiceConnections - A grouping of information about the connection to the remote resource.
24300	PrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"privateLinkServiceConnections,omitempty"`
24301	// ManualPrivateLinkServiceConnections - A grouping of information about the connection to the remote resource. Used when the network admin does not have access to approve connections to the remote resource.
24302	ManualPrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"manualPrivateLinkServiceConnections,omitempty"`
24303}
24304
24305// PrivateEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24306// long-running operation.
24307type PrivateEndpointsCreateOrUpdateFuture struct {
24308	azure.Future
24309}
24310
24311// Result returns the result of the asynchronous operation.
24312// If the operation has not completed it will return an error.
24313func (future *PrivateEndpointsCreateOrUpdateFuture) Result(client PrivateEndpointsClient) (peVar PrivateEndpoint, err error) {
24314	var done bool
24315	done, err = future.DoneWithContext(context.Background(), client)
24316	if err != nil {
24317		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24318		return
24319	}
24320	if !done {
24321		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsCreateOrUpdateFuture")
24322		return
24323	}
24324	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24325	if peVar.Response.Response, err = future.GetResult(sender); err == nil && peVar.Response.Response.StatusCode != http.StatusNoContent {
24326		peVar, err = client.CreateOrUpdateResponder(peVar.Response.Response)
24327		if err != nil {
24328			err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", peVar.Response.Response, "Failure responding to request")
24329		}
24330	}
24331	return
24332}
24333
24334// PrivateEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24335// operation.
24336type PrivateEndpointsDeleteFuture struct {
24337	azure.Future
24338}
24339
24340// Result returns the result of the asynchronous operation.
24341// If the operation has not completed it will return an error.
24342func (future *PrivateEndpointsDeleteFuture) Result(client PrivateEndpointsClient) (ar autorest.Response, err error) {
24343	var done bool
24344	done, err = future.DoneWithContext(context.Background(), client)
24345	if err != nil {
24346		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
24347		return
24348	}
24349	if !done {
24350		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsDeleteFuture")
24351		return
24352	}
24353	ar.Response = future.Response()
24354	return
24355}
24356
24357// PrivateLinkService private link service resource.
24358type PrivateLinkService struct {
24359	autorest.Response `json:"-"`
24360	// PrivateLinkServiceProperties - Properties of the private link service.
24361	*PrivateLinkServiceProperties `json:"properties,omitempty"`
24362	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
24363	Etag *string `json:"etag,omitempty"`
24364	// ID - Resource ID.
24365	ID *string `json:"id,omitempty"`
24366	// Name - READ-ONLY; Resource name.
24367	Name *string `json:"name,omitempty"`
24368	// Type - READ-ONLY; Resource type.
24369	Type *string `json:"type,omitempty"`
24370	// Location - Resource location.
24371	Location *string `json:"location,omitempty"`
24372	// Tags - Resource tags.
24373	Tags map[string]*string `json:"tags"`
24374}
24375
24376// MarshalJSON is the custom marshaler for PrivateLinkService.
24377func (pls PrivateLinkService) MarshalJSON() ([]byte, error) {
24378	objectMap := make(map[string]interface{})
24379	if pls.PrivateLinkServiceProperties != nil {
24380		objectMap["properties"] = pls.PrivateLinkServiceProperties
24381	}
24382	if pls.ID != nil {
24383		objectMap["id"] = pls.ID
24384	}
24385	if pls.Location != nil {
24386		objectMap["location"] = pls.Location
24387	}
24388	if pls.Tags != nil {
24389		objectMap["tags"] = pls.Tags
24390	}
24391	return json.Marshal(objectMap)
24392}
24393
24394// UnmarshalJSON is the custom unmarshaler for PrivateLinkService struct.
24395func (pls *PrivateLinkService) UnmarshalJSON(body []byte) error {
24396	var m map[string]*json.RawMessage
24397	err := json.Unmarshal(body, &m)
24398	if err != nil {
24399		return err
24400	}
24401	for k, v := range m {
24402		switch k {
24403		case "properties":
24404			if v != nil {
24405				var privateLinkServiceProperties PrivateLinkServiceProperties
24406				err = json.Unmarshal(*v, &privateLinkServiceProperties)
24407				if err != nil {
24408					return err
24409				}
24410				pls.PrivateLinkServiceProperties = &privateLinkServiceProperties
24411			}
24412		case "etag":
24413			if v != nil {
24414				var etag string
24415				err = json.Unmarshal(*v, &etag)
24416				if err != nil {
24417					return err
24418				}
24419				pls.Etag = &etag
24420			}
24421		case "id":
24422			if v != nil {
24423				var ID string
24424				err = json.Unmarshal(*v, &ID)
24425				if err != nil {
24426					return err
24427				}
24428				pls.ID = &ID
24429			}
24430		case "name":
24431			if v != nil {
24432				var name string
24433				err = json.Unmarshal(*v, &name)
24434				if err != nil {
24435					return err
24436				}
24437				pls.Name = &name
24438			}
24439		case "type":
24440			if v != nil {
24441				var typeVar string
24442				err = json.Unmarshal(*v, &typeVar)
24443				if err != nil {
24444					return err
24445				}
24446				pls.Type = &typeVar
24447			}
24448		case "location":
24449			if v != nil {
24450				var location string
24451				err = json.Unmarshal(*v, &location)
24452				if err != nil {
24453					return err
24454				}
24455				pls.Location = &location
24456			}
24457		case "tags":
24458			if v != nil {
24459				var tags map[string]*string
24460				err = json.Unmarshal(*v, &tags)
24461				if err != nil {
24462					return err
24463				}
24464				pls.Tags = tags
24465			}
24466		}
24467	}
24468
24469	return nil
24470}
24471
24472// PrivateLinkServiceConnection privateLinkServiceConnection resource.
24473type PrivateLinkServiceConnection struct {
24474	// PrivateLinkServiceConnectionProperties - Properties of the private link service connection.
24475	*PrivateLinkServiceConnectionProperties `json:"properties,omitempty"`
24476	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
24477	Name *string `json:"name,omitempty"`
24478	// Type - READ-ONLY; The resource type.
24479	Type *string `json:"type,omitempty"`
24480	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
24481	Etag *string `json:"etag,omitempty"`
24482	// ID - Resource ID.
24483	ID *string `json:"id,omitempty"`
24484}
24485
24486// MarshalJSON is the custom marshaler for PrivateLinkServiceConnection.
24487func (plsc PrivateLinkServiceConnection) MarshalJSON() ([]byte, error) {
24488	objectMap := make(map[string]interface{})
24489	if plsc.PrivateLinkServiceConnectionProperties != nil {
24490		objectMap["properties"] = plsc.PrivateLinkServiceConnectionProperties
24491	}
24492	if plsc.Name != nil {
24493		objectMap["name"] = plsc.Name
24494	}
24495	if plsc.ID != nil {
24496		objectMap["id"] = plsc.ID
24497	}
24498	return json.Marshal(objectMap)
24499}
24500
24501// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceConnection struct.
24502func (plsc *PrivateLinkServiceConnection) UnmarshalJSON(body []byte) error {
24503	var m map[string]*json.RawMessage
24504	err := json.Unmarshal(body, &m)
24505	if err != nil {
24506		return err
24507	}
24508	for k, v := range m {
24509		switch k {
24510		case "properties":
24511			if v != nil {
24512				var privateLinkServiceConnectionProperties PrivateLinkServiceConnectionProperties
24513				err = json.Unmarshal(*v, &privateLinkServiceConnectionProperties)
24514				if err != nil {
24515					return err
24516				}
24517				plsc.PrivateLinkServiceConnectionProperties = &privateLinkServiceConnectionProperties
24518			}
24519		case "name":
24520			if v != nil {
24521				var name string
24522				err = json.Unmarshal(*v, &name)
24523				if err != nil {
24524					return err
24525				}
24526				plsc.Name = &name
24527			}
24528		case "type":
24529			if v != nil {
24530				var typeVar string
24531				err = json.Unmarshal(*v, &typeVar)
24532				if err != nil {
24533					return err
24534				}
24535				plsc.Type = &typeVar
24536			}
24537		case "etag":
24538			if v != nil {
24539				var etag string
24540				err = json.Unmarshal(*v, &etag)
24541				if err != nil {
24542					return err
24543				}
24544				plsc.Etag = &etag
24545			}
24546		case "id":
24547			if v != nil {
24548				var ID string
24549				err = json.Unmarshal(*v, &ID)
24550				if err != nil {
24551					return err
24552				}
24553				plsc.ID = &ID
24554			}
24555		}
24556	}
24557
24558	return nil
24559}
24560
24561// PrivateLinkServiceConnectionProperties properties of the PrivateLinkServiceConnection.
24562type PrivateLinkServiceConnectionProperties struct {
24563	// ProvisioningState - READ-ONLY; The provisioning state of the private link service connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24564	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24565	// PrivateLinkServiceID - The resource id of private link service.
24566	PrivateLinkServiceID *string `json:"privateLinkServiceId,omitempty"`
24567	// GroupIds - The ID(s) of the group(s) obtained from the remote resource that this private endpoint should connect to.
24568	GroupIds *[]string `json:"groupIds,omitempty"`
24569	// RequestMessage - A message passed to the owner of the remote resource with this connection request. Restricted to 140 chars.
24570	RequestMessage *string `json:"requestMessage,omitempty"`
24571	// PrivateLinkServiceConnectionState - A collection of read-only information about the state of the connection to the remote resource.
24572	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
24573}
24574
24575// PrivateLinkServiceConnectionState a collection of information about the state of the connection between
24576// service consumer and provider.
24577type PrivateLinkServiceConnectionState struct {
24578	// Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.
24579	Status *string `json:"status,omitempty"`
24580	// Description - The reason for approval/rejection of the connection.
24581	Description *string `json:"description,omitempty"`
24582	// ActionsRequired - A message indicating if changes on the service provider require any updates on the consumer.
24583	ActionsRequired *string `json:"actionsRequired,omitempty"`
24584}
24585
24586// PrivateLinkServiceIPConfiguration the private link service ip configuration.
24587type PrivateLinkServiceIPConfiguration struct {
24588	// PrivateLinkServiceIPConfigurationProperties - Properties of the private link service ip configuration.
24589	*PrivateLinkServiceIPConfigurationProperties `json:"properties,omitempty"`
24590	// Name - The name of private link service ip configuration.
24591	Name *string `json:"name,omitempty"`
24592	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
24593	Etag *string `json:"etag,omitempty"`
24594	// Type - READ-ONLY; The resource type.
24595	Type *string `json:"type,omitempty"`
24596	// ID - Resource ID.
24597	ID *string `json:"id,omitempty"`
24598}
24599
24600// MarshalJSON is the custom marshaler for PrivateLinkServiceIPConfiguration.
24601func (plsic PrivateLinkServiceIPConfiguration) MarshalJSON() ([]byte, error) {
24602	objectMap := make(map[string]interface{})
24603	if plsic.PrivateLinkServiceIPConfigurationProperties != nil {
24604		objectMap["properties"] = plsic.PrivateLinkServiceIPConfigurationProperties
24605	}
24606	if plsic.Name != nil {
24607		objectMap["name"] = plsic.Name
24608	}
24609	if plsic.ID != nil {
24610		objectMap["id"] = plsic.ID
24611	}
24612	return json.Marshal(objectMap)
24613}
24614
24615// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceIPConfiguration struct.
24616func (plsic *PrivateLinkServiceIPConfiguration) UnmarshalJSON(body []byte) error {
24617	var m map[string]*json.RawMessage
24618	err := json.Unmarshal(body, &m)
24619	if err != nil {
24620		return err
24621	}
24622	for k, v := range m {
24623		switch k {
24624		case "properties":
24625			if v != nil {
24626				var privateLinkServiceIPConfigurationProperties PrivateLinkServiceIPConfigurationProperties
24627				err = json.Unmarshal(*v, &privateLinkServiceIPConfigurationProperties)
24628				if err != nil {
24629					return err
24630				}
24631				plsic.PrivateLinkServiceIPConfigurationProperties = &privateLinkServiceIPConfigurationProperties
24632			}
24633		case "name":
24634			if v != nil {
24635				var name string
24636				err = json.Unmarshal(*v, &name)
24637				if err != nil {
24638					return err
24639				}
24640				plsic.Name = &name
24641			}
24642		case "etag":
24643			if v != nil {
24644				var etag string
24645				err = json.Unmarshal(*v, &etag)
24646				if err != nil {
24647					return err
24648				}
24649				plsic.Etag = &etag
24650			}
24651		case "type":
24652			if v != nil {
24653				var typeVar string
24654				err = json.Unmarshal(*v, &typeVar)
24655				if err != nil {
24656					return err
24657				}
24658				plsic.Type = &typeVar
24659			}
24660		case "id":
24661			if v != nil {
24662				var ID string
24663				err = json.Unmarshal(*v, &ID)
24664				if err != nil {
24665					return err
24666				}
24667				plsic.ID = &ID
24668			}
24669		}
24670	}
24671
24672	return nil
24673}
24674
24675// PrivateLinkServiceIPConfigurationProperties properties of private link service IP configuration.
24676type PrivateLinkServiceIPConfigurationProperties struct {
24677	// PrivateIPAddress - The private IP address of the IP configuration.
24678	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
24679	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
24680	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
24681	// Subnet - The reference to the subnet resource.
24682	Subnet *Subnet `json:"subnet,omitempty"`
24683	// Primary - Whether the ip configuration is primary or not.
24684	Primary *bool `json:"primary,omitempty"`
24685	// ProvisioningState - READ-ONLY; The provisioning state of the private link service IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24686	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24687	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
24688	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
24689}
24690
24691// PrivateLinkServiceListResult response for the ListPrivateLinkService API service call.
24692type PrivateLinkServiceListResult struct {
24693	autorest.Response `json:"-"`
24694	// Value - A list of PrivateLinkService resources in a resource group.
24695	Value *[]PrivateLinkService `json:"value,omitempty"`
24696	// NextLink - READ-ONLY; The URL to get the next set of results.
24697	NextLink *string `json:"nextLink,omitempty"`
24698}
24699
24700// PrivateLinkServiceListResultIterator provides access to a complete listing of PrivateLinkService values.
24701type PrivateLinkServiceListResultIterator struct {
24702	i    int
24703	page PrivateLinkServiceListResultPage
24704}
24705
24706// NextWithContext advances to the next value.  If there was an error making
24707// the request the iterator does not advance and the error is returned.
24708func (iter *PrivateLinkServiceListResultIterator) NextWithContext(ctx context.Context) (err error) {
24709	if tracing.IsEnabled() {
24710		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultIterator.NextWithContext")
24711		defer func() {
24712			sc := -1
24713			if iter.Response().Response.Response != nil {
24714				sc = iter.Response().Response.Response.StatusCode
24715			}
24716			tracing.EndSpan(ctx, sc, err)
24717		}()
24718	}
24719	iter.i++
24720	if iter.i < len(iter.page.Values()) {
24721		return nil
24722	}
24723	err = iter.page.NextWithContext(ctx)
24724	if err != nil {
24725		iter.i--
24726		return err
24727	}
24728	iter.i = 0
24729	return nil
24730}
24731
24732// Next advances to the next value.  If there was an error making
24733// the request the iterator does not advance and the error is returned.
24734// Deprecated: Use NextWithContext() instead.
24735func (iter *PrivateLinkServiceListResultIterator) Next() error {
24736	return iter.NextWithContext(context.Background())
24737}
24738
24739// NotDone returns true if the enumeration should be started or is not yet complete.
24740func (iter PrivateLinkServiceListResultIterator) NotDone() bool {
24741	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24742}
24743
24744// Response returns the raw server response from the last page request.
24745func (iter PrivateLinkServiceListResultIterator) Response() PrivateLinkServiceListResult {
24746	return iter.page.Response()
24747}
24748
24749// Value returns the current value or a zero-initialized value if the
24750// iterator has advanced beyond the end of the collection.
24751func (iter PrivateLinkServiceListResultIterator) Value() PrivateLinkService {
24752	if !iter.page.NotDone() {
24753		return PrivateLinkService{}
24754	}
24755	return iter.page.Values()[iter.i]
24756}
24757
24758// Creates a new instance of the PrivateLinkServiceListResultIterator type.
24759func NewPrivateLinkServiceListResultIterator(page PrivateLinkServiceListResultPage) PrivateLinkServiceListResultIterator {
24760	return PrivateLinkServiceListResultIterator{page: page}
24761}
24762
24763// IsEmpty returns true if the ListResult contains no values.
24764func (plslr PrivateLinkServiceListResult) IsEmpty() bool {
24765	return plslr.Value == nil || len(*plslr.Value) == 0
24766}
24767
24768// privateLinkServiceListResultPreparer prepares a request to retrieve the next set of results.
24769// It returns nil if no more results exist.
24770func (plslr PrivateLinkServiceListResult) privateLinkServiceListResultPreparer(ctx context.Context) (*http.Request, error) {
24771	if plslr.NextLink == nil || len(to.String(plslr.NextLink)) < 1 {
24772		return nil, nil
24773	}
24774	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24775		autorest.AsJSON(),
24776		autorest.AsGet(),
24777		autorest.WithBaseURL(to.String(plslr.NextLink)))
24778}
24779
24780// PrivateLinkServiceListResultPage contains a page of PrivateLinkService values.
24781type PrivateLinkServiceListResultPage struct {
24782	fn    func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)
24783	plslr PrivateLinkServiceListResult
24784}
24785
24786// NextWithContext advances to the next page of values.  If there was an error making
24787// the request the page does not advance and the error is returned.
24788func (page *PrivateLinkServiceListResultPage) NextWithContext(ctx context.Context) (err error) {
24789	if tracing.IsEnabled() {
24790		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultPage.NextWithContext")
24791		defer func() {
24792			sc := -1
24793			if page.Response().Response.Response != nil {
24794				sc = page.Response().Response.Response.StatusCode
24795			}
24796			tracing.EndSpan(ctx, sc, err)
24797		}()
24798	}
24799	next, err := page.fn(ctx, page.plslr)
24800	if err != nil {
24801		return err
24802	}
24803	page.plslr = next
24804	return nil
24805}
24806
24807// Next advances to the next page of values.  If there was an error making
24808// the request the page does not advance and the error is returned.
24809// Deprecated: Use NextWithContext() instead.
24810func (page *PrivateLinkServiceListResultPage) Next() error {
24811	return page.NextWithContext(context.Background())
24812}
24813
24814// NotDone returns true if the page enumeration should be started or is not yet complete.
24815func (page PrivateLinkServiceListResultPage) NotDone() bool {
24816	return !page.plslr.IsEmpty()
24817}
24818
24819// Response returns the raw server response from the last page request.
24820func (page PrivateLinkServiceListResultPage) Response() PrivateLinkServiceListResult {
24821	return page.plslr
24822}
24823
24824// Values returns the slice of values for the current page or nil if there are no values.
24825func (page PrivateLinkServiceListResultPage) Values() []PrivateLinkService {
24826	if page.plslr.IsEmpty() {
24827		return nil
24828	}
24829	return *page.plslr.Value
24830}
24831
24832// Creates a new instance of the PrivateLinkServiceListResultPage type.
24833func NewPrivateLinkServiceListResultPage(getNextPage func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)) PrivateLinkServiceListResultPage {
24834	return PrivateLinkServiceListResultPage{fn: getNextPage}
24835}
24836
24837// PrivateLinkServiceProperties properties of the private link service.
24838type PrivateLinkServiceProperties struct {
24839	// LoadBalancerFrontendIPConfigurations - An array of references to the load balancer IP configurations.
24840	LoadBalancerFrontendIPConfigurations *[]FrontendIPConfiguration `json:"loadBalancerFrontendIpConfigurations,omitempty"`
24841	// IPConfigurations - An array of private link service IP configurations.
24842	IPConfigurations *[]PrivateLinkServiceIPConfiguration `json:"ipConfigurations,omitempty"`
24843	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private link service.
24844	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
24845	// ProvisioningState - READ-ONLY; The provisioning state of the private link service resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24846	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24847	// PrivateEndpointConnections - READ-ONLY; An array of list about connections to the private endpoint.
24848	PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"`
24849	// Visibility - The visibility list of the private link service.
24850	Visibility *PrivateLinkServicePropertiesVisibility `json:"visibility,omitempty"`
24851	// AutoApproval - The auto-approval list of the private link service.
24852	AutoApproval *PrivateLinkServicePropertiesAutoApproval `json:"autoApproval,omitempty"`
24853	// Fqdns - The list of Fqdn.
24854	Fqdns *[]string `json:"fqdns,omitempty"`
24855	// Alias - READ-ONLY; The alias of the private link service.
24856	Alias *string `json:"alias,omitempty"`
24857	// EnableProxyProtocol - Whether the private link service is enabled for proxy protocol or not.
24858	EnableProxyProtocol *bool `json:"enableProxyProtocol,omitempty"`
24859}
24860
24861// PrivateLinkServicePropertiesAutoApproval the auto-approval list of the private link service.
24862type PrivateLinkServicePropertiesAutoApproval struct {
24863	// Subscriptions - The list of subscriptions.
24864	Subscriptions *[]string `json:"subscriptions,omitempty"`
24865}
24866
24867// PrivateLinkServicePropertiesVisibility the visibility list of the private link service.
24868type PrivateLinkServicePropertiesVisibility struct {
24869	// Subscriptions - The list of subscriptions.
24870	Subscriptions *[]string `json:"subscriptions,omitempty"`
24871}
24872
24873// PrivateLinkServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24874// long-running operation.
24875type PrivateLinkServicesCreateOrUpdateFuture struct {
24876	azure.Future
24877}
24878
24879// Result returns the result of the asynchronous operation.
24880// If the operation has not completed it will return an error.
24881func (future *PrivateLinkServicesCreateOrUpdateFuture) Result(client PrivateLinkServicesClient) (pls PrivateLinkService, err error) {
24882	var done bool
24883	done, err = future.DoneWithContext(context.Background(), client)
24884	if err != nil {
24885		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24886		return
24887	}
24888	if !done {
24889		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCreateOrUpdateFuture")
24890		return
24891	}
24892	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24893	if pls.Response.Response, err = future.GetResult(sender); err == nil && pls.Response.Response.StatusCode != http.StatusNoContent {
24894		pls, err = client.CreateOrUpdateResponder(pls.Response.Response)
24895		if err != nil {
24896			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", pls.Response.Response, "Failure responding to request")
24897		}
24898	}
24899	return
24900}
24901
24902// PrivateLinkServicesDeleteFuture an abstraction for monitoring and retrieving the results of a
24903// long-running operation.
24904type PrivateLinkServicesDeleteFuture struct {
24905	azure.Future
24906}
24907
24908// Result returns the result of the asynchronous operation.
24909// If the operation has not completed it will return an error.
24910func (future *PrivateLinkServicesDeleteFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
24911	var done bool
24912	done, err = future.DoneWithContext(context.Background(), client)
24913	if err != nil {
24914		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeleteFuture", "Result", future.Response(), "Polling failure")
24915		return
24916	}
24917	if !done {
24918		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeleteFuture")
24919		return
24920	}
24921	ar.Response = future.Response()
24922	return
24923}
24924
24925// PrivateLinkServicesDeletePrivateEndpointConnectionFuture an abstraction for monitoring and retrieving
24926// the results of a long-running operation.
24927type PrivateLinkServicesDeletePrivateEndpointConnectionFuture struct {
24928	azure.Future
24929}
24930
24931// Result returns the result of the asynchronous operation.
24932// If the operation has not completed it will return an error.
24933func (future *PrivateLinkServicesDeletePrivateEndpointConnectionFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
24934	var done bool
24935	done, err = future.DoneWithContext(context.Background(), client)
24936	if err != nil {
24937		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure")
24938		return
24939	}
24940	if !done {
24941		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture")
24942		return
24943	}
24944	ar.Response = future.Response()
24945	return
24946}
24947
24948// PrivateLinkServiceVisibility response for the CheckPrivateLinkServiceVisibility API service call.
24949type PrivateLinkServiceVisibility struct {
24950	autorest.Response `json:"-"`
24951	// Visible - Private Link Service Visibility (True/False).
24952	Visible *bool `json:"visible,omitempty"`
24953}
24954
24955// Probe a load balancer probe.
24956type Probe struct {
24957	autorest.Response `json:"-"`
24958	// ProbePropertiesFormat - Properties of load balancer probe.
24959	*ProbePropertiesFormat `json:"properties,omitempty"`
24960	// Name - The name of the resource that is unique within the set of probes used by the load balancer. This name can be used to access the resource.
24961	Name *string `json:"name,omitempty"`
24962	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
24963	Etag *string `json:"etag,omitempty"`
24964	// Type - READ-ONLY; Type of the resource.
24965	Type *string `json:"type,omitempty"`
24966	// ID - Resource ID.
24967	ID *string `json:"id,omitempty"`
24968}
24969
24970// MarshalJSON is the custom marshaler for Probe.
24971func (p Probe) MarshalJSON() ([]byte, error) {
24972	objectMap := make(map[string]interface{})
24973	if p.ProbePropertiesFormat != nil {
24974		objectMap["properties"] = p.ProbePropertiesFormat
24975	}
24976	if p.Name != nil {
24977		objectMap["name"] = p.Name
24978	}
24979	if p.ID != nil {
24980		objectMap["id"] = p.ID
24981	}
24982	return json.Marshal(objectMap)
24983}
24984
24985// UnmarshalJSON is the custom unmarshaler for Probe struct.
24986func (p *Probe) UnmarshalJSON(body []byte) error {
24987	var m map[string]*json.RawMessage
24988	err := json.Unmarshal(body, &m)
24989	if err != nil {
24990		return err
24991	}
24992	for k, v := range m {
24993		switch k {
24994		case "properties":
24995			if v != nil {
24996				var probePropertiesFormat ProbePropertiesFormat
24997				err = json.Unmarshal(*v, &probePropertiesFormat)
24998				if err != nil {
24999					return err
25000				}
25001				p.ProbePropertiesFormat = &probePropertiesFormat
25002			}
25003		case "name":
25004			if v != nil {
25005				var name string
25006				err = json.Unmarshal(*v, &name)
25007				if err != nil {
25008					return err
25009				}
25010				p.Name = &name
25011			}
25012		case "etag":
25013			if v != nil {
25014				var etag string
25015				err = json.Unmarshal(*v, &etag)
25016				if err != nil {
25017					return err
25018				}
25019				p.Etag = &etag
25020			}
25021		case "type":
25022			if v != nil {
25023				var typeVar string
25024				err = json.Unmarshal(*v, &typeVar)
25025				if err != nil {
25026					return err
25027				}
25028				p.Type = &typeVar
25029			}
25030		case "id":
25031			if v != nil {
25032				var ID string
25033				err = json.Unmarshal(*v, &ID)
25034				if err != nil {
25035					return err
25036				}
25037				p.ID = &ID
25038			}
25039		}
25040	}
25041
25042	return nil
25043}
25044
25045// ProbePropertiesFormat load balancer probe resource.
25046type ProbePropertiesFormat struct {
25047	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
25048	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
25049	// Protocol - The protocol of the end point. If 'Tcp' is specified, a received ACK is required for the probe to be successful. If 'Http' or 'Https' is specified, a 200 OK response from the specifies URI is required for the probe to be successful. Possible values include: 'ProbeProtocolHTTP', 'ProbeProtocolTCP', 'ProbeProtocolHTTPS'
25050	Protocol ProbeProtocol `json:"protocol,omitempty"`
25051	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
25052	Port *int32 `json:"port,omitempty"`
25053	// 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.
25054	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
25055	// 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.
25056	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
25057	// 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.
25058	RequestPath *string `json:"requestPath,omitempty"`
25059	// ProvisioningState - READ-ONLY; The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25060	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25061}
25062
25063// Profile network profile resource.
25064type Profile struct {
25065	autorest.Response `json:"-"`
25066	// ProfilePropertiesFormat - Network profile properties.
25067	*ProfilePropertiesFormat `json:"properties,omitempty"`
25068	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25069	Etag *string `json:"etag,omitempty"`
25070	// ID - Resource ID.
25071	ID *string `json:"id,omitempty"`
25072	// Name - READ-ONLY; Resource name.
25073	Name *string `json:"name,omitempty"`
25074	// Type - READ-ONLY; Resource type.
25075	Type *string `json:"type,omitempty"`
25076	// Location - Resource location.
25077	Location *string `json:"location,omitempty"`
25078	// Tags - Resource tags.
25079	Tags map[string]*string `json:"tags"`
25080}
25081
25082// MarshalJSON is the custom marshaler for Profile.
25083func (p Profile) MarshalJSON() ([]byte, error) {
25084	objectMap := make(map[string]interface{})
25085	if p.ProfilePropertiesFormat != nil {
25086		objectMap["properties"] = p.ProfilePropertiesFormat
25087	}
25088	if p.ID != nil {
25089		objectMap["id"] = p.ID
25090	}
25091	if p.Location != nil {
25092		objectMap["location"] = p.Location
25093	}
25094	if p.Tags != nil {
25095		objectMap["tags"] = p.Tags
25096	}
25097	return json.Marshal(objectMap)
25098}
25099
25100// UnmarshalJSON is the custom unmarshaler for Profile struct.
25101func (p *Profile) UnmarshalJSON(body []byte) error {
25102	var m map[string]*json.RawMessage
25103	err := json.Unmarshal(body, &m)
25104	if err != nil {
25105		return err
25106	}
25107	for k, v := range m {
25108		switch k {
25109		case "properties":
25110			if v != nil {
25111				var profilePropertiesFormat ProfilePropertiesFormat
25112				err = json.Unmarshal(*v, &profilePropertiesFormat)
25113				if err != nil {
25114					return err
25115				}
25116				p.ProfilePropertiesFormat = &profilePropertiesFormat
25117			}
25118		case "etag":
25119			if v != nil {
25120				var etag string
25121				err = json.Unmarshal(*v, &etag)
25122				if err != nil {
25123					return err
25124				}
25125				p.Etag = &etag
25126			}
25127		case "id":
25128			if v != nil {
25129				var ID string
25130				err = json.Unmarshal(*v, &ID)
25131				if err != nil {
25132					return err
25133				}
25134				p.ID = &ID
25135			}
25136		case "name":
25137			if v != nil {
25138				var name string
25139				err = json.Unmarshal(*v, &name)
25140				if err != nil {
25141					return err
25142				}
25143				p.Name = &name
25144			}
25145		case "type":
25146			if v != nil {
25147				var typeVar string
25148				err = json.Unmarshal(*v, &typeVar)
25149				if err != nil {
25150					return err
25151				}
25152				p.Type = &typeVar
25153			}
25154		case "location":
25155			if v != nil {
25156				var location string
25157				err = json.Unmarshal(*v, &location)
25158				if err != nil {
25159					return err
25160				}
25161				p.Location = &location
25162			}
25163		case "tags":
25164			if v != nil {
25165				var tags map[string]*string
25166				err = json.Unmarshal(*v, &tags)
25167				if err != nil {
25168					return err
25169				}
25170				p.Tags = tags
25171			}
25172		}
25173	}
25174
25175	return nil
25176}
25177
25178// ProfileListResult response for ListNetworkProfiles API service call.
25179type ProfileListResult struct {
25180	autorest.Response `json:"-"`
25181	// Value - A list of network profiles that exist in a resource group.
25182	Value *[]Profile `json:"value,omitempty"`
25183	// NextLink - The URL to get the next set of results.
25184	NextLink *string `json:"nextLink,omitempty"`
25185}
25186
25187// ProfileListResultIterator provides access to a complete listing of Profile values.
25188type ProfileListResultIterator struct {
25189	i    int
25190	page ProfileListResultPage
25191}
25192
25193// NextWithContext advances to the next value.  If there was an error making
25194// the request the iterator does not advance and the error is returned.
25195func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
25196	if tracing.IsEnabled() {
25197		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
25198		defer func() {
25199			sc := -1
25200			if iter.Response().Response.Response != nil {
25201				sc = iter.Response().Response.Response.StatusCode
25202			}
25203			tracing.EndSpan(ctx, sc, err)
25204		}()
25205	}
25206	iter.i++
25207	if iter.i < len(iter.page.Values()) {
25208		return nil
25209	}
25210	err = iter.page.NextWithContext(ctx)
25211	if err != nil {
25212		iter.i--
25213		return err
25214	}
25215	iter.i = 0
25216	return nil
25217}
25218
25219// Next advances to the next value.  If there was an error making
25220// the request the iterator does not advance and the error is returned.
25221// Deprecated: Use NextWithContext() instead.
25222func (iter *ProfileListResultIterator) Next() error {
25223	return iter.NextWithContext(context.Background())
25224}
25225
25226// NotDone returns true if the enumeration should be started or is not yet complete.
25227func (iter ProfileListResultIterator) NotDone() bool {
25228	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25229}
25230
25231// Response returns the raw server response from the last page request.
25232func (iter ProfileListResultIterator) Response() ProfileListResult {
25233	return iter.page.Response()
25234}
25235
25236// Value returns the current value or a zero-initialized value if the
25237// iterator has advanced beyond the end of the collection.
25238func (iter ProfileListResultIterator) Value() Profile {
25239	if !iter.page.NotDone() {
25240		return Profile{}
25241	}
25242	return iter.page.Values()[iter.i]
25243}
25244
25245// Creates a new instance of the ProfileListResultIterator type.
25246func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
25247	return ProfileListResultIterator{page: page}
25248}
25249
25250// IsEmpty returns true if the ListResult contains no values.
25251func (plr ProfileListResult) IsEmpty() bool {
25252	return plr.Value == nil || len(*plr.Value) == 0
25253}
25254
25255// profileListResultPreparer prepares a request to retrieve the next set of results.
25256// It returns nil if no more results exist.
25257func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
25258	if plr.NextLink == nil || len(to.String(plr.NextLink)) < 1 {
25259		return nil, nil
25260	}
25261	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25262		autorest.AsJSON(),
25263		autorest.AsGet(),
25264		autorest.WithBaseURL(to.String(plr.NextLink)))
25265}
25266
25267// ProfileListResultPage contains a page of Profile values.
25268type ProfileListResultPage struct {
25269	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
25270	plr ProfileListResult
25271}
25272
25273// NextWithContext advances to the next page of values.  If there was an error making
25274// the request the page does not advance and the error is returned.
25275func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
25276	if tracing.IsEnabled() {
25277		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
25278		defer func() {
25279			sc := -1
25280			if page.Response().Response.Response != nil {
25281				sc = page.Response().Response.Response.StatusCode
25282			}
25283			tracing.EndSpan(ctx, sc, err)
25284		}()
25285	}
25286	next, err := page.fn(ctx, page.plr)
25287	if err != nil {
25288		return err
25289	}
25290	page.plr = next
25291	return nil
25292}
25293
25294// Next advances to the next page of values.  If there was an error making
25295// the request the page does not advance and the error is returned.
25296// Deprecated: Use NextWithContext() instead.
25297func (page *ProfileListResultPage) Next() error {
25298	return page.NextWithContext(context.Background())
25299}
25300
25301// NotDone returns true if the page enumeration should be started or is not yet complete.
25302func (page ProfileListResultPage) NotDone() bool {
25303	return !page.plr.IsEmpty()
25304}
25305
25306// Response returns the raw server response from the last page request.
25307func (page ProfileListResultPage) Response() ProfileListResult {
25308	return page.plr
25309}
25310
25311// Values returns the slice of values for the current page or nil if there are no values.
25312func (page ProfileListResultPage) Values() []Profile {
25313	if page.plr.IsEmpty() {
25314		return nil
25315	}
25316	return *page.plr.Value
25317}
25318
25319// Creates a new instance of the ProfileListResultPage type.
25320func NewProfileListResultPage(getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
25321	return ProfileListResultPage{fn: getNextPage}
25322}
25323
25324// ProfilePropertiesFormat network profile properties.
25325type ProfilePropertiesFormat struct {
25326	// ContainerNetworkInterfaces - READ-ONLY; List of child container network interfaces.
25327	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
25328	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
25329	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
25330	// ResourceGUID - READ-ONLY; The resource GUID property of the network profile resource.
25331	ResourceGUID *string `json:"resourceGuid,omitempty"`
25332	// ProvisioningState - READ-ONLY; The provisioning state of the network profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25333	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25334}
25335
25336// ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25337// operation.
25338type ProfilesDeleteFuture struct {
25339	azure.Future
25340}
25341
25342// Result returns the result of the asynchronous operation.
25343// If the operation has not completed it will return an error.
25344func (future *ProfilesDeleteFuture) Result(client ProfilesClient) (ar autorest.Response, err error) {
25345	var done bool
25346	done, err = future.DoneWithContext(context.Background(), client)
25347	if err != nil {
25348		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
25349		return
25350	}
25351	if !done {
25352		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
25353		return
25354	}
25355	ar.Response = future.Response()
25356	return
25357}
25358
25359// ProtocolConfiguration configuration of the protocol.
25360type ProtocolConfiguration struct {
25361	// HTTPConfiguration - HTTP configuration of the connectivity check.
25362	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
25363}
25364
25365// ProtocolCustomSettingsFormat dDoS custom policy properties.
25366type ProtocolCustomSettingsFormat struct {
25367	// Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn'
25368	Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"`
25369	// TriggerRateOverride - The customized DDoS protection trigger rate.
25370	TriggerRateOverride *string `json:"triggerRateOverride,omitempty"`
25371	// SourceRateOverride - The customized DDoS protection source rate.
25372	SourceRateOverride *string `json:"sourceRateOverride,omitempty"`
25373	// 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'
25374	TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"`
25375}
25376
25377// PublicIPAddress public IP address resource.
25378type PublicIPAddress struct {
25379	autorest.Response `json:"-"`
25380	// Sku - The public IP address SKU.
25381	Sku *PublicIPAddressSku `json:"sku,omitempty"`
25382	// PublicIPAddressPropertiesFormat - Public IP address properties.
25383	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
25384	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25385	Etag *string `json:"etag,omitempty"`
25386	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
25387	Zones *[]string `json:"zones,omitempty"`
25388	// ID - Resource ID.
25389	ID *string `json:"id,omitempty"`
25390	// Name - READ-ONLY; Resource name.
25391	Name *string `json:"name,omitempty"`
25392	// Type - READ-ONLY; Resource type.
25393	Type *string `json:"type,omitempty"`
25394	// Location - Resource location.
25395	Location *string `json:"location,omitempty"`
25396	// Tags - Resource tags.
25397	Tags map[string]*string `json:"tags"`
25398}
25399
25400// MarshalJSON is the custom marshaler for PublicIPAddress.
25401func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
25402	objectMap := make(map[string]interface{})
25403	if pia.Sku != nil {
25404		objectMap["sku"] = pia.Sku
25405	}
25406	if pia.PublicIPAddressPropertiesFormat != nil {
25407		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
25408	}
25409	if pia.Zones != nil {
25410		objectMap["zones"] = pia.Zones
25411	}
25412	if pia.ID != nil {
25413		objectMap["id"] = pia.ID
25414	}
25415	if pia.Location != nil {
25416		objectMap["location"] = pia.Location
25417	}
25418	if pia.Tags != nil {
25419		objectMap["tags"] = pia.Tags
25420	}
25421	return json.Marshal(objectMap)
25422}
25423
25424// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
25425func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
25426	var m map[string]*json.RawMessage
25427	err := json.Unmarshal(body, &m)
25428	if err != nil {
25429		return err
25430	}
25431	for k, v := range m {
25432		switch k {
25433		case "sku":
25434			if v != nil {
25435				var sku PublicIPAddressSku
25436				err = json.Unmarshal(*v, &sku)
25437				if err != nil {
25438					return err
25439				}
25440				pia.Sku = &sku
25441			}
25442		case "properties":
25443			if v != nil {
25444				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
25445				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
25446				if err != nil {
25447					return err
25448				}
25449				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
25450			}
25451		case "etag":
25452			if v != nil {
25453				var etag string
25454				err = json.Unmarshal(*v, &etag)
25455				if err != nil {
25456					return err
25457				}
25458				pia.Etag = &etag
25459			}
25460		case "zones":
25461			if v != nil {
25462				var zones []string
25463				err = json.Unmarshal(*v, &zones)
25464				if err != nil {
25465					return err
25466				}
25467				pia.Zones = &zones
25468			}
25469		case "id":
25470			if v != nil {
25471				var ID string
25472				err = json.Unmarshal(*v, &ID)
25473				if err != nil {
25474					return err
25475				}
25476				pia.ID = &ID
25477			}
25478		case "name":
25479			if v != nil {
25480				var name string
25481				err = json.Unmarshal(*v, &name)
25482				if err != nil {
25483					return err
25484				}
25485				pia.Name = &name
25486			}
25487		case "type":
25488			if v != nil {
25489				var typeVar string
25490				err = json.Unmarshal(*v, &typeVar)
25491				if err != nil {
25492					return err
25493				}
25494				pia.Type = &typeVar
25495			}
25496		case "location":
25497			if v != nil {
25498				var location string
25499				err = json.Unmarshal(*v, &location)
25500				if err != nil {
25501					return err
25502				}
25503				pia.Location = &location
25504			}
25505		case "tags":
25506			if v != nil {
25507				var tags map[string]*string
25508				err = json.Unmarshal(*v, &tags)
25509				if err != nil {
25510					return err
25511				}
25512				pia.Tags = tags
25513			}
25514		}
25515	}
25516
25517	return nil
25518}
25519
25520// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address.
25521type PublicIPAddressDNSSettings struct {
25522	// DomainNameLabel - The domain name label. The concatenation of the domain name label and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address. If a domain name label is specified, an A DNS record is created for the public IP in the Microsoft Azure DNS system.
25523	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
25524	// Fqdn - The Fully Qualified Domain Name of the A DNS record associated with the public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone.
25525	Fqdn *string `json:"fqdn,omitempty"`
25526	// ReverseFqdn - The reverse FQDN. A user-visible, fully qualified domain name that resolves to this public IP address. If the reverseFqdn is specified, then a PTR DNS record is created pointing from the IP address in the in-addr.arpa domain to the reverse FQDN.
25527	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
25528}
25529
25530// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25531// long-running operation.
25532type PublicIPAddressesCreateOrUpdateFuture struct {
25533	azure.Future
25534}
25535
25536// Result returns the result of the asynchronous operation.
25537// If the operation has not completed it will return an error.
25538func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
25539	var done bool
25540	done, err = future.DoneWithContext(context.Background(), client)
25541	if err != nil {
25542		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25543		return
25544	}
25545	if !done {
25546		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
25547		return
25548	}
25549	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25550	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
25551		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
25552		if err != nil {
25553			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
25554		}
25555	}
25556	return
25557}
25558
25559// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25560// operation.
25561type PublicIPAddressesDeleteFuture struct {
25562	azure.Future
25563}
25564
25565// Result returns the result of the asynchronous operation.
25566// If the operation has not completed it will return an error.
25567func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
25568	var done bool
25569	done, err = future.DoneWithContext(context.Background(), client)
25570	if err != nil {
25571		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
25572		return
25573	}
25574	if !done {
25575		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
25576		return
25577	}
25578	ar.Response = future.Response()
25579	return
25580}
25581
25582// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
25583type PublicIPAddressListResult struct {
25584	autorest.Response `json:"-"`
25585	// Value - A list of public IP addresses that exists in a resource group.
25586	Value *[]PublicIPAddress `json:"value,omitempty"`
25587	// NextLink - The URL to get the next set of results.
25588	NextLink *string `json:"nextLink,omitempty"`
25589}
25590
25591// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
25592type PublicIPAddressListResultIterator struct {
25593	i    int
25594	page PublicIPAddressListResultPage
25595}
25596
25597// NextWithContext advances to the next value.  If there was an error making
25598// the request the iterator does not advance and the error is returned.
25599func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
25600	if tracing.IsEnabled() {
25601		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
25602		defer func() {
25603			sc := -1
25604			if iter.Response().Response.Response != nil {
25605				sc = iter.Response().Response.Response.StatusCode
25606			}
25607			tracing.EndSpan(ctx, sc, err)
25608		}()
25609	}
25610	iter.i++
25611	if iter.i < len(iter.page.Values()) {
25612		return nil
25613	}
25614	err = iter.page.NextWithContext(ctx)
25615	if err != nil {
25616		iter.i--
25617		return err
25618	}
25619	iter.i = 0
25620	return nil
25621}
25622
25623// Next advances to the next value.  If there was an error making
25624// the request the iterator does not advance and the error is returned.
25625// Deprecated: Use NextWithContext() instead.
25626func (iter *PublicIPAddressListResultIterator) Next() error {
25627	return iter.NextWithContext(context.Background())
25628}
25629
25630// NotDone returns true if the enumeration should be started or is not yet complete.
25631func (iter PublicIPAddressListResultIterator) NotDone() bool {
25632	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25633}
25634
25635// Response returns the raw server response from the last page request.
25636func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
25637	return iter.page.Response()
25638}
25639
25640// Value returns the current value or a zero-initialized value if the
25641// iterator has advanced beyond the end of the collection.
25642func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
25643	if !iter.page.NotDone() {
25644		return PublicIPAddress{}
25645	}
25646	return iter.page.Values()[iter.i]
25647}
25648
25649// Creates a new instance of the PublicIPAddressListResultIterator type.
25650func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
25651	return PublicIPAddressListResultIterator{page: page}
25652}
25653
25654// IsEmpty returns true if the ListResult contains no values.
25655func (pialr PublicIPAddressListResult) IsEmpty() bool {
25656	return pialr.Value == nil || len(*pialr.Value) == 0
25657}
25658
25659// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
25660// It returns nil if no more results exist.
25661func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
25662	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
25663		return nil, nil
25664	}
25665	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25666		autorest.AsJSON(),
25667		autorest.AsGet(),
25668		autorest.WithBaseURL(to.String(pialr.NextLink)))
25669}
25670
25671// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
25672type PublicIPAddressListResultPage struct {
25673	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
25674	pialr PublicIPAddressListResult
25675}
25676
25677// NextWithContext advances to the next page of values.  If there was an error making
25678// the request the page does not advance and the error is returned.
25679func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
25680	if tracing.IsEnabled() {
25681		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
25682		defer func() {
25683			sc := -1
25684			if page.Response().Response.Response != nil {
25685				sc = page.Response().Response.Response.StatusCode
25686			}
25687			tracing.EndSpan(ctx, sc, err)
25688		}()
25689	}
25690	next, err := page.fn(ctx, page.pialr)
25691	if err != nil {
25692		return err
25693	}
25694	page.pialr = next
25695	return nil
25696}
25697
25698// Next advances to the next page of values.  If there was an error making
25699// the request the page does not advance and the error is returned.
25700// Deprecated: Use NextWithContext() instead.
25701func (page *PublicIPAddressListResultPage) Next() error {
25702	return page.NextWithContext(context.Background())
25703}
25704
25705// NotDone returns true if the page enumeration should be started or is not yet complete.
25706func (page PublicIPAddressListResultPage) NotDone() bool {
25707	return !page.pialr.IsEmpty()
25708}
25709
25710// Response returns the raw server response from the last page request.
25711func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
25712	return page.pialr
25713}
25714
25715// Values returns the slice of values for the current page or nil if there are no values.
25716func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
25717	if page.pialr.IsEmpty() {
25718		return nil
25719	}
25720	return *page.pialr.Value
25721}
25722
25723// Creates a new instance of the PublicIPAddressListResultPage type.
25724func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
25725	return PublicIPAddressListResultPage{fn: getNextPage}
25726}
25727
25728// PublicIPAddressPropertiesFormat public IP address properties.
25729type PublicIPAddressPropertiesFormat struct {
25730	// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
25731	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
25732	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
25733	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
25734	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
25735	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
25736	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
25737	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
25738	// DdosSettings - The DDoS protection custom policy associated with the public IP address.
25739	DdosSettings *DdosSettings `json:"ddosSettings,omitempty"`
25740	// IPTags - The list of tags associated with the public IP address.
25741	IPTags *[]IPTag `json:"ipTags,omitempty"`
25742	// IPAddress - The IP address associated with the public IP address resource.
25743	IPAddress *string `json:"ipAddress,omitempty"`
25744	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
25745	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
25746	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
25747	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
25748	// ResourceGUID - READ-ONLY; The resource GUID property of the public IP address resource.
25749	ResourceGUID *string `json:"resourceGuid,omitempty"`
25750	// ProvisioningState - READ-ONLY; The provisioning state of the public IP address resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25751	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25752}
25753
25754// PublicIPAddressSku SKU of a public IP address.
25755type PublicIPAddressSku struct {
25756	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
25757	Name PublicIPAddressSkuName `json:"name,omitempty"`
25758}
25759
25760// PublicIPPrefix public IP prefix resource.
25761type PublicIPPrefix struct {
25762	autorest.Response `json:"-"`
25763	// Sku - The public IP prefix SKU.
25764	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
25765	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
25766	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
25767	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25768	Etag *string `json:"etag,omitempty"`
25769	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
25770	Zones *[]string `json:"zones,omitempty"`
25771	// ID - Resource ID.
25772	ID *string `json:"id,omitempty"`
25773	// Name - READ-ONLY; Resource name.
25774	Name *string `json:"name,omitempty"`
25775	// Type - READ-ONLY; Resource type.
25776	Type *string `json:"type,omitempty"`
25777	// Location - Resource location.
25778	Location *string `json:"location,omitempty"`
25779	// Tags - Resource tags.
25780	Tags map[string]*string `json:"tags"`
25781}
25782
25783// MarshalJSON is the custom marshaler for PublicIPPrefix.
25784func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
25785	objectMap := make(map[string]interface{})
25786	if pip.Sku != nil {
25787		objectMap["sku"] = pip.Sku
25788	}
25789	if pip.PublicIPPrefixPropertiesFormat != nil {
25790		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
25791	}
25792	if pip.Zones != nil {
25793		objectMap["zones"] = pip.Zones
25794	}
25795	if pip.ID != nil {
25796		objectMap["id"] = pip.ID
25797	}
25798	if pip.Location != nil {
25799		objectMap["location"] = pip.Location
25800	}
25801	if pip.Tags != nil {
25802		objectMap["tags"] = pip.Tags
25803	}
25804	return json.Marshal(objectMap)
25805}
25806
25807// UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
25808func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
25809	var m map[string]*json.RawMessage
25810	err := json.Unmarshal(body, &m)
25811	if err != nil {
25812		return err
25813	}
25814	for k, v := range m {
25815		switch k {
25816		case "sku":
25817			if v != nil {
25818				var sku PublicIPPrefixSku
25819				err = json.Unmarshal(*v, &sku)
25820				if err != nil {
25821					return err
25822				}
25823				pip.Sku = &sku
25824			}
25825		case "properties":
25826			if v != nil {
25827				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
25828				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
25829				if err != nil {
25830					return err
25831				}
25832				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
25833			}
25834		case "etag":
25835			if v != nil {
25836				var etag string
25837				err = json.Unmarshal(*v, &etag)
25838				if err != nil {
25839					return err
25840				}
25841				pip.Etag = &etag
25842			}
25843		case "zones":
25844			if v != nil {
25845				var zones []string
25846				err = json.Unmarshal(*v, &zones)
25847				if err != nil {
25848					return err
25849				}
25850				pip.Zones = &zones
25851			}
25852		case "id":
25853			if v != nil {
25854				var ID string
25855				err = json.Unmarshal(*v, &ID)
25856				if err != nil {
25857					return err
25858				}
25859				pip.ID = &ID
25860			}
25861		case "name":
25862			if v != nil {
25863				var name string
25864				err = json.Unmarshal(*v, &name)
25865				if err != nil {
25866					return err
25867				}
25868				pip.Name = &name
25869			}
25870		case "type":
25871			if v != nil {
25872				var typeVar string
25873				err = json.Unmarshal(*v, &typeVar)
25874				if err != nil {
25875					return err
25876				}
25877				pip.Type = &typeVar
25878			}
25879		case "location":
25880			if v != nil {
25881				var location string
25882				err = json.Unmarshal(*v, &location)
25883				if err != nil {
25884					return err
25885				}
25886				pip.Location = &location
25887			}
25888		case "tags":
25889			if v != nil {
25890				var tags map[string]*string
25891				err = json.Unmarshal(*v, &tags)
25892				if err != nil {
25893					return err
25894				}
25895				pip.Tags = tags
25896			}
25897		}
25898	}
25899
25900	return nil
25901}
25902
25903// PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25904// long-running operation.
25905type PublicIPPrefixesCreateOrUpdateFuture struct {
25906	azure.Future
25907}
25908
25909// Result returns the result of the asynchronous operation.
25910// If the operation has not completed it will return an error.
25911func (future *PublicIPPrefixesCreateOrUpdateFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
25912	var done bool
25913	done, err = future.DoneWithContext(context.Background(), client)
25914	if err != nil {
25915		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25916		return
25917	}
25918	if !done {
25919		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
25920		return
25921	}
25922	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25923	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
25924		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
25925		if err != nil {
25926			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
25927		}
25928	}
25929	return
25930}
25931
25932// PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25933// operation.
25934type PublicIPPrefixesDeleteFuture struct {
25935	azure.Future
25936}
25937
25938// Result returns the result of the asynchronous operation.
25939// If the operation has not completed it will return an error.
25940func (future *PublicIPPrefixesDeleteFuture) Result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
25941	var done bool
25942	done, err = future.DoneWithContext(context.Background(), client)
25943	if err != nil {
25944		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
25945		return
25946	}
25947	if !done {
25948		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
25949		return
25950	}
25951	ar.Response = future.Response()
25952	return
25953}
25954
25955// PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
25956type PublicIPPrefixListResult struct {
25957	autorest.Response `json:"-"`
25958	// Value - A list of public IP prefixes that exists in a resource group.
25959	Value *[]PublicIPPrefix `json:"value,omitempty"`
25960	// NextLink - The URL to get the next set of results.
25961	NextLink *string `json:"nextLink,omitempty"`
25962}
25963
25964// PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
25965type PublicIPPrefixListResultIterator struct {
25966	i    int
25967	page PublicIPPrefixListResultPage
25968}
25969
25970// NextWithContext advances to the next value.  If there was an error making
25971// the request the iterator does not advance and the error is returned.
25972func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
25973	if tracing.IsEnabled() {
25974		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
25975		defer func() {
25976			sc := -1
25977			if iter.Response().Response.Response != nil {
25978				sc = iter.Response().Response.Response.StatusCode
25979			}
25980			tracing.EndSpan(ctx, sc, err)
25981		}()
25982	}
25983	iter.i++
25984	if iter.i < len(iter.page.Values()) {
25985		return nil
25986	}
25987	err = iter.page.NextWithContext(ctx)
25988	if err != nil {
25989		iter.i--
25990		return err
25991	}
25992	iter.i = 0
25993	return nil
25994}
25995
25996// Next advances to the next value.  If there was an error making
25997// the request the iterator does not advance and the error is returned.
25998// Deprecated: Use NextWithContext() instead.
25999func (iter *PublicIPPrefixListResultIterator) Next() error {
26000	return iter.NextWithContext(context.Background())
26001}
26002
26003// NotDone returns true if the enumeration should be started or is not yet complete.
26004func (iter PublicIPPrefixListResultIterator) NotDone() bool {
26005	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26006}
26007
26008// Response returns the raw server response from the last page request.
26009func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
26010	return iter.page.Response()
26011}
26012
26013// Value returns the current value or a zero-initialized value if the
26014// iterator has advanced beyond the end of the collection.
26015func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
26016	if !iter.page.NotDone() {
26017		return PublicIPPrefix{}
26018	}
26019	return iter.page.Values()[iter.i]
26020}
26021
26022// Creates a new instance of the PublicIPPrefixListResultIterator type.
26023func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
26024	return PublicIPPrefixListResultIterator{page: page}
26025}
26026
26027// IsEmpty returns true if the ListResult contains no values.
26028func (piplr PublicIPPrefixListResult) IsEmpty() bool {
26029	return piplr.Value == nil || len(*piplr.Value) == 0
26030}
26031
26032// publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
26033// It returns nil if no more results exist.
26034func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
26035	if piplr.NextLink == nil || len(to.String(piplr.NextLink)) < 1 {
26036		return nil, nil
26037	}
26038	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26039		autorest.AsJSON(),
26040		autorest.AsGet(),
26041		autorest.WithBaseURL(to.String(piplr.NextLink)))
26042}
26043
26044// PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
26045type PublicIPPrefixListResultPage struct {
26046	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
26047	piplr PublicIPPrefixListResult
26048}
26049
26050// NextWithContext advances to the next page of values.  If there was an error making
26051// the request the page does not advance and the error is returned.
26052func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
26053	if tracing.IsEnabled() {
26054		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
26055		defer func() {
26056			sc := -1
26057			if page.Response().Response.Response != nil {
26058				sc = page.Response().Response.Response.StatusCode
26059			}
26060			tracing.EndSpan(ctx, sc, err)
26061		}()
26062	}
26063	next, err := page.fn(ctx, page.piplr)
26064	if err != nil {
26065		return err
26066	}
26067	page.piplr = next
26068	return nil
26069}
26070
26071// Next advances to the next page of values.  If there was an error making
26072// the request the page does not advance and the error is returned.
26073// Deprecated: Use NextWithContext() instead.
26074func (page *PublicIPPrefixListResultPage) Next() error {
26075	return page.NextWithContext(context.Background())
26076}
26077
26078// NotDone returns true if the page enumeration should be started or is not yet complete.
26079func (page PublicIPPrefixListResultPage) NotDone() bool {
26080	return !page.piplr.IsEmpty()
26081}
26082
26083// Response returns the raw server response from the last page request.
26084func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
26085	return page.piplr
26086}
26087
26088// Values returns the slice of values for the current page or nil if there are no values.
26089func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
26090	if page.piplr.IsEmpty() {
26091		return nil
26092	}
26093	return *page.piplr.Value
26094}
26095
26096// Creates a new instance of the PublicIPPrefixListResultPage type.
26097func NewPublicIPPrefixListResultPage(getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
26098	return PublicIPPrefixListResultPage{fn: getNextPage}
26099}
26100
26101// PublicIPPrefixPropertiesFormat public IP prefix properties.
26102type PublicIPPrefixPropertiesFormat struct {
26103	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
26104	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
26105	// IPTags - The list of tags associated with the public IP prefix.
26106	IPTags *[]IPTag `json:"ipTags,omitempty"`
26107	// PrefixLength - The Length of the Public IP Prefix.
26108	PrefixLength *int32 `json:"prefixLength,omitempty"`
26109	// IPPrefix - READ-ONLY; The allocated Prefix.
26110	IPPrefix *string `json:"ipPrefix,omitempty"`
26111	// PublicIPAddresses - READ-ONLY; The list of all referenced PublicIPAddresses.
26112	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
26113	// LoadBalancerFrontendIPConfiguration - READ-ONLY; The reference to load balancer frontend IP configuration associated with the public IP prefix.
26114	LoadBalancerFrontendIPConfiguration *SubResource `json:"loadBalancerFrontendIpConfiguration,omitempty"`
26115	// ResourceGUID - READ-ONLY; The resource GUID property of the public IP prefix resource.
26116	ResourceGUID *string `json:"resourceGuid,omitempty"`
26117	// ProvisioningState - READ-ONLY; The provisioning state of the public IP prefix resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26118	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26119}
26120
26121// PublicIPPrefixSku SKU of a public IP prefix.
26122type PublicIPPrefixSku struct {
26123	// Name - Name of a public IP prefix SKU. Possible values include: 'PublicIPPrefixSkuNameStandard'
26124	Name PublicIPPrefixSkuName `json:"name,omitempty"`
26125}
26126
26127// PutBastionShareableLinkAllFuture an abstraction for monitoring and retrieving the results of a
26128// long-running operation.
26129type PutBastionShareableLinkAllFuture struct {
26130	azure.Future
26131}
26132
26133// Result returns the result of the asynchronous operation.
26134// If the operation has not completed it will return an error.
26135func (future *PutBastionShareableLinkAllFuture) Result(client BaseClient) (bsllrp BastionShareableLinkListResultPage, err error) {
26136	var done bool
26137	done, err = future.DoneWithContext(context.Background(), client)
26138	if err != nil {
26139		err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkAllFuture", "Result", future.Response(), "Polling failure")
26140		return
26141	}
26142	if !done {
26143		err = azure.NewAsyncOpIncompleteError("network.PutBastionShareableLinkAllFuture")
26144		return
26145	}
26146	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26147	if bsllrp.bsllr.Response.Response, err = future.GetResult(sender); err == nil && bsllrp.bsllr.Response.Response.StatusCode != http.StatusNoContent {
26148		bsllrp, err = client.PutBastionShareableLinkResponder(bsllrp.bsllr.Response.Response)
26149		if err != nil {
26150			err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkAllFuture", "Result", bsllrp.bsllr.Response.Response, "Failure responding to request")
26151		}
26152	}
26153	return
26154}
26155
26156// PutBastionShareableLinkFuture an abstraction for monitoring and retrieving the results of a long-running
26157// operation.
26158type PutBastionShareableLinkFuture struct {
26159	azure.Future
26160}
26161
26162// Result returns the result of the asynchronous operation.
26163// If the operation has not completed it will return an error.
26164func (future *PutBastionShareableLinkFuture) Result(client BaseClient) (bsllrp BastionShareableLinkListResultPage, err error) {
26165	var done bool
26166	done, err = future.DoneWithContext(context.Background(), client)
26167	if err != nil {
26168		err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkFuture", "Result", future.Response(), "Polling failure")
26169		return
26170	}
26171	if !done {
26172		err = azure.NewAsyncOpIncompleteError("network.PutBastionShareableLinkFuture")
26173		return
26174	}
26175	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26176	if bsllrp.bsllr.Response.Response, err = future.GetResult(sender); err == nil && bsllrp.bsllr.Response.Response.StatusCode != http.StatusNoContent {
26177		bsllrp, err = client.PutBastionShareableLinkResponder(bsllrp.bsllr.Response.Response)
26178		if err != nil {
26179			err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkFuture", "Result", bsllrp.bsllr.Response.Response, "Failure responding to request")
26180		}
26181	}
26182	return
26183}
26184
26185// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
26186type QueryTroubleshootingParameters struct {
26187	// TargetResourceID - The target resource ID to query the troubleshooting result.
26188	TargetResourceID *string `json:"targetResourceId,omitempty"`
26189}
26190
26191// ReferencedPublicIPAddress reference to a public IP address.
26192type ReferencedPublicIPAddress struct {
26193	// ID - The PublicIPAddress Reference.
26194	ID *string `json:"id,omitempty"`
26195}
26196
26197// Resource common resource representation.
26198type Resource struct {
26199	// ID - Resource ID.
26200	ID *string `json:"id,omitempty"`
26201	// Name - READ-ONLY; Resource name.
26202	Name *string `json:"name,omitempty"`
26203	// Type - READ-ONLY; Resource type.
26204	Type *string `json:"type,omitempty"`
26205	// Location - Resource location.
26206	Location *string `json:"location,omitempty"`
26207	// Tags - Resource tags.
26208	Tags map[string]*string `json:"tags"`
26209}
26210
26211// MarshalJSON is the custom marshaler for Resource.
26212func (r Resource) MarshalJSON() ([]byte, error) {
26213	objectMap := make(map[string]interface{})
26214	if r.ID != nil {
26215		objectMap["id"] = r.ID
26216	}
26217	if r.Location != nil {
26218		objectMap["location"] = r.Location
26219	}
26220	if r.Tags != nil {
26221		objectMap["tags"] = r.Tags
26222	}
26223	return json.Marshal(objectMap)
26224}
26225
26226// ResourceNavigationLink resourceNavigationLink resource.
26227type ResourceNavigationLink struct {
26228	// ResourceNavigationLinkFormat - Resource navigation link properties format.
26229	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
26230	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
26231	Name *string `json:"name,omitempty"`
26232	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26233	Etag *string `json:"etag,omitempty"`
26234	// Type - READ-ONLY; Resource type.
26235	Type *string `json:"type,omitempty"`
26236	// ID - Resource ID.
26237	ID *string `json:"id,omitempty"`
26238}
26239
26240// MarshalJSON is the custom marshaler for ResourceNavigationLink.
26241func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
26242	objectMap := make(map[string]interface{})
26243	if rnl.ResourceNavigationLinkFormat != nil {
26244		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
26245	}
26246	if rnl.Name != nil {
26247		objectMap["name"] = rnl.Name
26248	}
26249	if rnl.ID != nil {
26250		objectMap["id"] = rnl.ID
26251	}
26252	return json.Marshal(objectMap)
26253}
26254
26255// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
26256func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
26257	var m map[string]*json.RawMessage
26258	err := json.Unmarshal(body, &m)
26259	if err != nil {
26260		return err
26261	}
26262	for k, v := range m {
26263		switch k {
26264		case "properties":
26265			if v != nil {
26266				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
26267				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
26268				if err != nil {
26269					return err
26270				}
26271				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
26272			}
26273		case "name":
26274			if v != nil {
26275				var name string
26276				err = json.Unmarshal(*v, &name)
26277				if err != nil {
26278					return err
26279				}
26280				rnl.Name = &name
26281			}
26282		case "etag":
26283			if v != nil {
26284				var etag string
26285				err = json.Unmarshal(*v, &etag)
26286				if err != nil {
26287					return err
26288				}
26289				rnl.Etag = &etag
26290			}
26291		case "type":
26292			if v != nil {
26293				var typeVar string
26294				err = json.Unmarshal(*v, &typeVar)
26295				if err != nil {
26296					return err
26297				}
26298				rnl.Type = &typeVar
26299			}
26300		case "id":
26301			if v != nil {
26302				var ID string
26303				err = json.Unmarshal(*v, &ID)
26304				if err != nil {
26305					return err
26306				}
26307				rnl.ID = &ID
26308			}
26309		}
26310	}
26311
26312	return nil
26313}
26314
26315// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
26316type ResourceNavigationLinkFormat struct {
26317	// LinkedResourceType - Resource type of the linked resource.
26318	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
26319	// Link - Link to the external resource.
26320	Link *string `json:"link,omitempty"`
26321	// ProvisioningState - READ-ONLY; The provisioning state of the resource navigation link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26322	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26323}
26324
26325// ResourceNavigationLinksListResult response for ResourceNavigationLinks_List operation.
26326type ResourceNavigationLinksListResult struct {
26327	autorest.Response `json:"-"`
26328	// Value - The resource navigation links in a subnet.
26329	Value *[]ResourceNavigationLink `json:"value,omitempty"`
26330	// NextLink - READ-ONLY; The URL to get the next set of results.
26331	NextLink *string `json:"nextLink,omitempty"`
26332}
26333
26334// ResourceSet the base resource set for visibility and auto-approval.
26335type ResourceSet struct {
26336	// Subscriptions - The list of subscriptions.
26337	Subscriptions *[]string `json:"subscriptions,omitempty"`
26338}
26339
26340// RetentionPolicyParameters parameters that define the retention policy for flow log.
26341type RetentionPolicyParameters struct {
26342	// Days - Number of days to retain flow log records.
26343	Days *int32 `json:"days,omitempty"`
26344	// Enabled - Flag to enable/disable retention.
26345	Enabled *bool `json:"enabled,omitempty"`
26346}
26347
26348// Route route resource.
26349type Route struct {
26350	autorest.Response `json:"-"`
26351	// RoutePropertiesFormat - Properties of the route.
26352	*RoutePropertiesFormat `json:"properties,omitempty"`
26353	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26354	Name *string `json:"name,omitempty"`
26355	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26356	Etag *string `json:"etag,omitempty"`
26357	// ID - Resource ID.
26358	ID *string `json:"id,omitempty"`
26359}
26360
26361// MarshalJSON is the custom marshaler for Route.
26362func (r Route) MarshalJSON() ([]byte, error) {
26363	objectMap := make(map[string]interface{})
26364	if r.RoutePropertiesFormat != nil {
26365		objectMap["properties"] = r.RoutePropertiesFormat
26366	}
26367	if r.Name != nil {
26368		objectMap["name"] = r.Name
26369	}
26370	if r.ID != nil {
26371		objectMap["id"] = r.ID
26372	}
26373	return json.Marshal(objectMap)
26374}
26375
26376// UnmarshalJSON is the custom unmarshaler for Route struct.
26377func (r *Route) UnmarshalJSON(body []byte) error {
26378	var m map[string]*json.RawMessage
26379	err := json.Unmarshal(body, &m)
26380	if err != nil {
26381		return err
26382	}
26383	for k, v := range m {
26384		switch k {
26385		case "properties":
26386			if v != nil {
26387				var routePropertiesFormat RoutePropertiesFormat
26388				err = json.Unmarshal(*v, &routePropertiesFormat)
26389				if err != nil {
26390					return err
26391				}
26392				r.RoutePropertiesFormat = &routePropertiesFormat
26393			}
26394		case "name":
26395			if v != nil {
26396				var name string
26397				err = json.Unmarshal(*v, &name)
26398				if err != nil {
26399					return err
26400				}
26401				r.Name = &name
26402			}
26403		case "etag":
26404			if v != nil {
26405				var etag string
26406				err = json.Unmarshal(*v, &etag)
26407				if err != nil {
26408					return err
26409				}
26410				r.Etag = &etag
26411			}
26412		case "id":
26413			if v != nil {
26414				var ID string
26415				err = json.Unmarshal(*v, &ID)
26416				if err != nil {
26417					return err
26418				}
26419				r.ID = &ID
26420			}
26421		}
26422	}
26423
26424	return nil
26425}
26426
26427// RouteFilter route Filter Resource.
26428type RouteFilter struct {
26429	autorest.Response `json:"-"`
26430	// RouteFilterPropertiesFormat - Properties of the route filter.
26431	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
26432	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26433	Etag *string `json:"etag,omitempty"`
26434	// ID - Resource ID.
26435	ID *string `json:"id,omitempty"`
26436	// Name - READ-ONLY; Resource name.
26437	Name *string `json:"name,omitempty"`
26438	// Type - READ-ONLY; Resource type.
26439	Type *string `json:"type,omitempty"`
26440	// Location - Resource location.
26441	Location *string `json:"location,omitempty"`
26442	// Tags - Resource tags.
26443	Tags map[string]*string `json:"tags"`
26444}
26445
26446// MarshalJSON is the custom marshaler for RouteFilter.
26447func (rf RouteFilter) MarshalJSON() ([]byte, error) {
26448	objectMap := make(map[string]interface{})
26449	if rf.RouteFilterPropertiesFormat != nil {
26450		objectMap["properties"] = rf.RouteFilterPropertiesFormat
26451	}
26452	if rf.ID != nil {
26453		objectMap["id"] = rf.ID
26454	}
26455	if rf.Location != nil {
26456		objectMap["location"] = rf.Location
26457	}
26458	if rf.Tags != nil {
26459		objectMap["tags"] = rf.Tags
26460	}
26461	return json.Marshal(objectMap)
26462}
26463
26464// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
26465func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
26466	var m map[string]*json.RawMessage
26467	err := json.Unmarshal(body, &m)
26468	if err != nil {
26469		return err
26470	}
26471	for k, v := range m {
26472		switch k {
26473		case "properties":
26474			if v != nil {
26475				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
26476				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
26477				if err != nil {
26478					return err
26479				}
26480				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
26481			}
26482		case "etag":
26483			if v != nil {
26484				var etag string
26485				err = json.Unmarshal(*v, &etag)
26486				if err != nil {
26487					return err
26488				}
26489				rf.Etag = &etag
26490			}
26491		case "id":
26492			if v != nil {
26493				var ID string
26494				err = json.Unmarshal(*v, &ID)
26495				if err != nil {
26496					return err
26497				}
26498				rf.ID = &ID
26499			}
26500		case "name":
26501			if v != nil {
26502				var name string
26503				err = json.Unmarshal(*v, &name)
26504				if err != nil {
26505					return err
26506				}
26507				rf.Name = &name
26508			}
26509		case "type":
26510			if v != nil {
26511				var typeVar string
26512				err = json.Unmarshal(*v, &typeVar)
26513				if err != nil {
26514					return err
26515				}
26516				rf.Type = &typeVar
26517			}
26518		case "location":
26519			if v != nil {
26520				var location string
26521				err = json.Unmarshal(*v, &location)
26522				if err != nil {
26523					return err
26524				}
26525				rf.Location = &location
26526			}
26527		case "tags":
26528			if v != nil {
26529				var tags map[string]*string
26530				err = json.Unmarshal(*v, &tags)
26531				if err != nil {
26532					return err
26533				}
26534				rf.Tags = tags
26535			}
26536		}
26537	}
26538
26539	return nil
26540}
26541
26542// RouteFilterListResult response for the ListRouteFilters API service call.
26543type RouteFilterListResult struct {
26544	autorest.Response `json:"-"`
26545	// Value - A list of route filters in a resource group.
26546	Value *[]RouteFilter `json:"value,omitempty"`
26547	// NextLink - The URL to get the next set of results.
26548	NextLink *string `json:"nextLink,omitempty"`
26549}
26550
26551// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
26552type RouteFilterListResultIterator struct {
26553	i    int
26554	page RouteFilterListResultPage
26555}
26556
26557// NextWithContext advances to the next value.  If there was an error making
26558// the request the iterator does not advance and the error is returned.
26559func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
26560	if tracing.IsEnabled() {
26561		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
26562		defer func() {
26563			sc := -1
26564			if iter.Response().Response.Response != nil {
26565				sc = iter.Response().Response.Response.StatusCode
26566			}
26567			tracing.EndSpan(ctx, sc, err)
26568		}()
26569	}
26570	iter.i++
26571	if iter.i < len(iter.page.Values()) {
26572		return nil
26573	}
26574	err = iter.page.NextWithContext(ctx)
26575	if err != nil {
26576		iter.i--
26577		return err
26578	}
26579	iter.i = 0
26580	return nil
26581}
26582
26583// Next advances to the next value.  If there was an error making
26584// the request the iterator does not advance and the error is returned.
26585// Deprecated: Use NextWithContext() instead.
26586func (iter *RouteFilterListResultIterator) Next() error {
26587	return iter.NextWithContext(context.Background())
26588}
26589
26590// NotDone returns true if the enumeration should be started or is not yet complete.
26591func (iter RouteFilterListResultIterator) NotDone() bool {
26592	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26593}
26594
26595// Response returns the raw server response from the last page request.
26596func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
26597	return iter.page.Response()
26598}
26599
26600// Value returns the current value or a zero-initialized value if the
26601// iterator has advanced beyond the end of the collection.
26602func (iter RouteFilterListResultIterator) Value() RouteFilter {
26603	if !iter.page.NotDone() {
26604		return RouteFilter{}
26605	}
26606	return iter.page.Values()[iter.i]
26607}
26608
26609// Creates a new instance of the RouteFilterListResultIterator type.
26610func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
26611	return RouteFilterListResultIterator{page: page}
26612}
26613
26614// IsEmpty returns true if the ListResult contains no values.
26615func (rflr RouteFilterListResult) IsEmpty() bool {
26616	return rflr.Value == nil || len(*rflr.Value) == 0
26617}
26618
26619// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
26620// It returns nil if no more results exist.
26621func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
26622	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
26623		return nil, nil
26624	}
26625	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26626		autorest.AsJSON(),
26627		autorest.AsGet(),
26628		autorest.WithBaseURL(to.String(rflr.NextLink)))
26629}
26630
26631// RouteFilterListResultPage contains a page of RouteFilter values.
26632type RouteFilterListResultPage struct {
26633	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
26634	rflr RouteFilterListResult
26635}
26636
26637// NextWithContext advances to the next page of values.  If there was an error making
26638// the request the page does not advance and the error is returned.
26639func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
26640	if tracing.IsEnabled() {
26641		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
26642		defer func() {
26643			sc := -1
26644			if page.Response().Response.Response != nil {
26645				sc = page.Response().Response.Response.StatusCode
26646			}
26647			tracing.EndSpan(ctx, sc, err)
26648		}()
26649	}
26650	next, err := page.fn(ctx, page.rflr)
26651	if err != nil {
26652		return err
26653	}
26654	page.rflr = next
26655	return nil
26656}
26657
26658// Next advances to the next page of values.  If there was an error making
26659// the request the page does not advance and the error is returned.
26660// Deprecated: Use NextWithContext() instead.
26661func (page *RouteFilterListResultPage) Next() error {
26662	return page.NextWithContext(context.Background())
26663}
26664
26665// NotDone returns true if the page enumeration should be started or is not yet complete.
26666func (page RouteFilterListResultPage) NotDone() bool {
26667	return !page.rflr.IsEmpty()
26668}
26669
26670// Response returns the raw server response from the last page request.
26671func (page RouteFilterListResultPage) Response() RouteFilterListResult {
26672	return page.rflr
26673}
26674
26675// Values returns the slice of values for the current page or nil if there are no values.
26676func (page RouteFilterListResultPage) Values() []RouteFilter {
26677	if page.rflr.IsEmpty() {
26678		return nil
26679	}
26680	return *page.rflr.Value
26681}
26682
26683// Creates a new instance of the RouteFilterListResultPage type.
26684func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
26685	return RouteFilterListResultPage{fn: getNextPage}
26686}
26687
26688// RouteFilterPropertiesFormat route Filter Resource.
26689type RouteFilterPropertiesFormat struct {
26690	// Rules - Collection of RouteFilterRules contained within a route filter.
26691	Rules *[]RouteFilterRule `json:"rules,omitempty"`
26692	// Peerings - READ-ONLY; A collection of references to express route circuit peerings.
26693	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
26694	// Ipv6Peerings - READ-ONLY; A collection of references to express route circuit ipv6 peerings.
26695	Ipv6Peerings *[]ExpressRouteCircuitPeering `json:"ipv6Peerings,omitempty"`
26696	// ProvisioningState - READ-ONLY; The provisioning state of the route filter resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26697	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26698}
26699
26700// RouteFilterRule route Filter Rule Resource.
26701type RouteFilterRule struct {
26702	autorest.Response `json:"-"`
26703	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
26704	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
26705	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26706	Name *string `json:"name,omitempty"`
26707	// Location - Resource location.
26708	Location *string `json:"location,omitempty"`
26709	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26710	Etag *string `json:"etag,omitempty"`
26711	// ID - Resource ID.
26712	ID *string `json:"id,omitempty"`
26713}
26714
26715// MarshalJSON is the custom marshaler for RouteFilterRule.
26716func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
26717	objectMap := make(map[string]interface{})
26718	if rfr.RouteFilterRulePropertiesFormat != nil {
26719		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
26720	}
26721	if rfr.Name != nil {
26722		objectMap["name"] = rfr.Name
26723	}
26724	if rfr.Location != nil {
26725		objectMap["location"] = rfr.Location
26726	}
26727	if rfr.ID != nil {
26728		objectMap["id"] = rfr.ID
26729	}
26730	return json.Marshal(objectMap)
26731}
26732
26733// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
26734func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
26735	var m map[string]*json.RawMessage
26736	err := json.Unmarshal(body, &m)
26737	if err != nil {
26738		return err
26739	}
26740	for k, v := range m {
26741		switch k {
26742		case "properties":
26743			if v != nil {
26744				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
26745				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
26746				if err != nil {
26747					return err
26748				}
26749				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
26750			}
26751		case "name":
26752			if v != nil {
26753				var name string
26754				err = json.Unmarshal(*v, &name)
26755				if err != nil {
26756					return err
26757				}
26758				rfr.Name = &name
26759			}
26760		case "location":
26761			if v != nil {
26762				var location string
26763				err = json.Unmarshal(*v, &location)
26764				if err != nil {
26765					return err
26766				}
26767				rfr.Location = &location
26768			}
26769		case "etag":
26770			if v != nil {
26771				var etag string
26772				err = json.Unmarshal(*v, &etag)
26773				if err != nil {
26774					return err
26775				}
26776				rfr.Etag = &etag
26777			}
26778		case "id":
26779			if v != nil {
26780				var ID string
26781				err = json.Unmarshal(*v, &ID)
26782				if err != nil {
26783					return err
26784				}
26785				rfr.ID = &ID
26786			}
26787		}
26788	}
26789
26790	return nil
26791}
26792
26793// RouteFilterRuleListResult response for the ListRouteFilterRules API service call.
26794type RouteFilterRuleListResult struct {
26795	autorest.Response `json:"-"`
26796	// Value - A list of RouteFilterRules in a resource group.
26797	Value *[]RouteFilterRule `json:"value,omitempty"`
26798	// NextLink - The URL to get the next set of results.
26799	NextLink *string `json:"nextLink,omitempty"`
26800}
26801
26802// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
26803type RouteFilterRuleListResultIterator struct {
26804	i    int
26805	page RouteFilterRuleListResultPage
26806}
26807
26808// NextWithContext advances to the next value.  If there was an error making
26809// the request the iterator does not advance and the error is returned.
26810func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
26811	if tracing.IsEnabled() {
26812		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
26813		defer func() {
26814			sc := -1
26815			if iter.Response().Response.Response != nil {
26816				sc = iter.Response().Response.Response.StatusCode
26817			}
26818			tracing.EndSpan(ctx, sc, err)
26819		}()
26820	}
26821	iter.i++
26822	if iter.i < len(iter.page.Values()) {
26823		return nil
26824	}
26825	err = iter.page.NextWithContext(ctx)
26826	if err != nil {
26827		iter.i--
26828		return err
26829	}
26830	iter.i = 0
26831	return nil
26832}
26833
26834// Next advances to the next value.  If there was an error making
26835// the request the iterator does not advance and the error is returned.
26836// Deprecated: Use NextWithContext() instead.
26837func (iter *RouteFilterRuleListResultIterator) Next() error {
26838	return iter.NextWithContext(context.Background())
26839}
26840
26841// NotDone returns true if the enumeration should be started or is not yet complete.
26842func (iter RouteFilterRuleListResultIterator) NotDone() bool {
26843	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26844}
26845
26846// Response returns the raw server response from the last page request.
26847func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
26848	return iter.page.Response()
26849}
26850
26851// Value returns the current value or a zero-initialized value if the
26852// iterator has advanced beyond the end of the collection.
26853func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
26854	if !iter.page.NotDone() {
26855		return RouteFilterRule{}
26856	}
26857	return iter.page.Values()[iter.i]
26858}
26859
26860// Creates a new instance of the RouteFilterRuleListResultIterator type.
26861func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
26862	return RouteFilterRuleListResultIterator{page: page}
26863}
26864
26865// IsEmpty returns true if the ListResult contains no values.
26866func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
26867	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
26868}
26869
26870// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
26871// It returns nil if no more results exist.
26872func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
26873	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
26874		return nil, nil
26875	}
26876	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26877		autorest.AsJSON(),
26878		autorest.AsGet(),
26879		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
26880}
26881
26882// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
26883type RouteFilterRuleListResultPage struct {
26884	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
26885	rfrlr RouteFilterRuleListResult
26886}
26887
26888// NextWithContext advances to the next page of values.  If there was an error making
26889// the request the page does not advance and the error is returned.
26890func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
26891	if tracing.IsEnabled() {
26892		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
26893		defer func() {
26894			sc := -1
26895			if page.Response().Response.Response != nil {
26896				sc = page.Response().Response.Response.StatusCode
26897			}
26898			tracing.EndSpan(ctx, sc, err)
26899		}()
26900	}
26901	next, err := page.fn(ctx, page.rfrlr)
26902	if err != nil {
26903		return err
26904	}
26905	page.rfrlr = next
26906	return nil
26907}
26908
26909// Next advances to the next page of values.  If there was an error making
26910// the request the page does not advance and the error is returned.
26911// Deprecated: Use NextWithContext() instead.
26912func (page *RouteFilterRuleListResultPage) Next() error {
26913	return page.NextWithContext(context.Background())
26914}
26915
26916// NotDone returns true if the page enumeration should be started or is not yet complete.
26917func (page RouteFilterRuleListResultPage) NotDone() bool {
26918	return !page.rfrlr.IsEmpty()
26919}
26920
26921// Response returns the raw server response from the last page request.
26922func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
26923	return page.rfrlr
26924}
26925
26926// Values returns the slice of values for the current page or nil if there are no values.
26927func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
26928	if page.rfrlr.IsEmpty() {
26929		return nil
26930	}
26931	return *page.rfrlr.Value
26932}
26933
26934// Creates a new instance of the RouteFilterRuleListResultPage type.
26935func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
26936	return RouteFilterRuleListResultPage{fn: getNextPage}
26937}
26938
26939// RouteFilterRulePropertiesFormat route Filter Rule Resource.
26940type RouteFilterRulePropertiesFormat struct {
26941	// Access - The access type of the rule. Possible values include: 'Allow', 'Deny'
26942	Access Access `json:"access,omitempty"`
26943	// RouteFilterRuleType - The rule type of the rule.
26944	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
26945	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
26946	Communities *[]string `json:"communities,omitempty"`
26947	// ProvisioningState - READ-ONLY; The provisioning state of the route filter rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26948	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26949}
26950
26951// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26952// long-running operation.
26953type RouteFilterRulesCreateOrUpdateFuture struct {
26954	azure.Future
26955}
26956
26957// Result returns the result of the asynchronous operation.
26958// If the operation has not completed it will return an error.
26959func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
26960	var done bool
26961	done, err = future.DoneWithContext(context.Background(), client)
26962	if err != nil {
26963		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26964		return
26965	}
26966	if !done {
26967		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
26968		return
26969	}
26970	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26971	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
26972		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
26973		if err != nil {
26974			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
26975		}
26976	}
26977	return
26978}
26979
26980// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26981// operation.
26982type RouteFilterRulesDeleteFuture struct {
26983	azure.Future
26984}
26985
26986// Result returns the result of the asynchronous operation.
26987// If the operation has not completed it will return an error.
26988func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
26989	var done bool
26990	done, err = future.DoneWithContext(context.Background(), client)
26991	if err != nil {
26992		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
26993		return
26994	}
26995	if !done {
26996		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
26997		return
26998	}
26999	ar.Response = future.Response()
27000	return
27001}
27002
27003// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27004// long-running operation.
27005type RouteFiltersCreateOrUpdateFuture struct {
27006	azure.Future
27007}
27008
27009// Result returns the result of the asynchronous operation.
27010// If the operation has not completed it will return an error.
27011func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
27012	var done bool
27013	done, err = future.DoneWithContext(context.Background(), client)
27014	if err != nil {
27015		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27016		return
27017	}
27018	if !done {
27019		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
27020		return
27021	}
27022	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27023	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
27024		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
27025		if err != nil {
27026			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
27027		}
27028	}
27029	return
27030}
27031
27032// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27033// operation.
27034type RouteFiltersDeleteFuture struct {
27035	azure.Future
27036}
27037
27038// Result returns the result of the asynchronous operation.
27039// If the operation has not completed it will return an error.
27040func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
27041	var done bool
27042	done, err = future.DoneWithContext(context.Background(), client)
27043	if err != nil {
27044		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
27045		return
27046	}
27047	if !done {
27048		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
27049		return
27050	}
27051	ar.Response = future.Response()
27052	return
27053}
27054
27055// RouteListResult response for the ListRoute API service call.
27056type RouteListResult struct {
27057	autorest.Response `json:"-"`
27058	// Value - A list of routes in a resource group.
27059	Value *[]Route `json:"value,omitempty"`
27060	// NextLink - The URL to get the next set of results.
27061	NextLink *string `json:"nextLink,omitempty"`
27062}
27063
27064// RouteListResultIterator provides access to a complete listing of Route values.
27065type RouteListResultIterator struct {
27066	i    int
27067	page RouteListResultPage
27068}
27069
27070// NextWithContext advances to the next value.  If there was an error making
27071// the request the iterator does not advance and the error is returned.
27072func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
27073	if tracing.IsEnabled() {
27074		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
27075		defer func() {
27076			sc := -1
27077			if iter.Response().Response.Response != nil {
27078				sc = iter.Response().Response.Response.StatusCode
27079			}
27080			tracing.EndSpan(ctx, sc, err)
27081		}()
27082	}
27083	iter.i++
27084	if iter.i < len(iter.page.Values()) {
27085		return nil
27086	}
27087	err = iter.page.NextWithContext(ctx)
27088	if err != nil {
27089		iter.i--
27090		return err
27091	}
27092	iter.i = 0
27093	return nil
27094}
27095
27096// Next advances to the next value.  If there was an error making
27097// the request the iterator does not advance and the error is returned.
27098// Deprecated: Use NextWithContext() instead.
27099func (iter *RouteListResultIterator) Next() error {
27100	return iter.NextWithContext(context.Background())
27101}
27102
27103// NotDone returns true if the enumeration should be started or is not yet complete.
27104func (iter RouteListResultIterator) NotDone() bool {
27105	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27106}
27107
27108// Response returns the raw server response from the last page request.
27109func (iter RouteListResultIterator) Response() RouteListResult {
27110	return iter.page.Response()
27111}
27112
27113// Value returns the current value or a zero-initialized value if the
27114// iterator has advanced beyond the end of the collection.
27115func (iter RouteListResultIterator) Value() Route {
27116	if !iter.page.NotDone() {
27117		return Route{}
27118	}
27119	return iter.page.Values()[iter.i]
27120}
27121
27122// Creates a new instance of the RouteListResultIterator type.
27123func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
27124	return RouteListResultIterator{page: page}
27125}
27126
27127// IsEmpty returns true if the ListResult contains no values.
27128func (rlr RouteListResult) IsEmpty() bool {
27129	return rlr.Value == nil || len(*rlr.Value) == 0
27130}
27131
27132// routeListResultPreparer prepares a request to retrieve the next set of results.
27133// It returns nil if no more results exist.
27134func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
27135	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
27136		return nil, nil
27137	}
27138	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27139		autorest.AsJSON(),
27140		autorest.AsGet(),
27141		autorest.WithBaseURL(to.String(rlr.NextLink)))
27142}
27143
27144// RouteListResultPage contains a page of Route values.
27145type RouteListResultPage struct {
27146	fn  func(context.Context, RouteListResult) (RouteListResult, error)
27147	rlr RouteListResult
27148}
27149
27150// NextWithContext advances to the next page of values.  If there was an error making
27151// the request the page does not advance and the error is returned.
27152func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
27153	if tracing.IsEnabled() {
27154		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
27155		defer func() {
27156			sc := -1
27157			if page.Response().Response.Response != nil {
27158				sc = page.Response().Response.Response.StatusCode
27159			}
27160			tracing.EndSpan(ctx, sc, err)
27161		}()
27162	}
27163	next, err := page.fn(ctx, page.rlr)
27164	if err != nil {
27165		return err
27166	}
27167	page.rlr = next
27168	return nil
27169}
27170
27171// Next advances to the next page of values.  If there was an error making
27172// the request the page does not advance and the error is returned.
27173// Deprecated: Use NextWithContext() instead.
27174func (page *RouteListResultPage) Next() error {
27175	return page.NextWithContext(context.Background())
27176}
27177
27178// NotDone returns true if the page enumeration should be started or is not yet complete.
27179func (page RouteListResultPage) NotDone() bool {
27180	return !page.rlr.IsEmpty()
27181}
27182
27183// Response returns the raw server response from the last page request.
27184func (page RouteListResultPage) Response() RouteListResult {
27185	return page.rlr
27186}
27187
27188// Values returns the slice of values for the current page or nil if there are no values.
27189func (page RouteListResultPage) Values() []Route {
27190	if page.rlr.IsEmpty() {
27191		return nil
27192	}
27193	return *page.rlr.Value
27194}
27195
27196// Creates a new instance of the RouteListResultPage type.
27197func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
27198	return RouteListResultPage{fn: getNextPage}
27199}
27200
27201// RoutePropertiesFormat route resource.
27202type RoutePropertiesFormat struct {
27203	// AddressPrefix - The destination CIDR to which the route applies.
27204	AddressPrefix *string `json:"addressPrefix,omitempty"`
27205	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
27206	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
27207	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
27208	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
27209	// ProvisioningState - READ-ONLY; The provisioning state of the route resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27210	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27211}
27212
27213// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
27214// operation.
27215type RoutesCreateOrUpdateFuture struct {
27216	azure.Future
27217}
27218
27219// Result returns the result of the asynchronous operation.
27220// If the operation has not completed it will return an error.
27221func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
27222	var done bool
27223	done, err = future.DoneWithContext(context.Background(), client)
27224	if err != nil {
27225		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27226		return
27227	}
27228	if !done {
27229		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
27230		return
27231	}
27232	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27233	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
27234		r, err = client.CreateOrUpdateResponder(r.Response.Response)
27235		if err != nil {
27236			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
27237		}
27238	}
27239	return
27240}
27241
27242// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
27243type RoutesDeleteFuture struct {
27244	azure.Future
27245}
27246
27247// Result returns the result of the asynchronous operation.
27248// If the operation has not completed it will return an error.
27249func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
27250	var done bool
27251	done, err = future.DoneWithContext(context.Background(), client)
27252	if err != nil {
27253		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
27254		return
27255	}
27256	if !done {
27257		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
27258		return
27259	}
27260	ar.Response = future.Response()
27261	return
27262}
27263
27264// RouteTable route table resource.
27265type RouteTable struct {
27266	autorest.Response `json:"-"`
27267	// RouteTablePropertiesFormat - Properties of the route table.
27268	*RouteTablePropertiesFormat `json:"properties,omitempty"`
27269	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
27270	Etag *string `json:"etag,omitempty"`
27271	// ID - Resource ID.
27272	ID *string `json:"id,omitempty"`
27273	// Name - READ-ONLY; Resource name.
27274	Name *string `json:"name,omitempty"`
27275	// Type - READ-ONLY; Resource type.
27276	Type *string `json:"type,omitempty"`
27277	// Location - Resource location.
27278	Location *string `json:"location,omitempty"`
27279	// Tags - Resource tags.
27280	Tags map[string]*string `json:"tags"`
27281}
27282
27283// MarshalJSON is the custom marshaler for RouteTable.
27284func (rt RouteTable) MarshalJSON() ([]byte, error) {
27285	objectMap := make(map[string]interface{})
27286	if rt.RouteTablePropertiesFormat != nil {
27287		objectMap["properties"] = rt.RouteTablePropertiesFormat
27288	}
27289	if rt.ID != nil {
27290		objectMap["id"] = rt.ID
27291	}
27292	if rt.Location != nil {
27293		objectMap["location"] = rt.Location
27294	}
27295	if rt.Tags != nil {
27296		objectMap["tags"] = rt.Tags
27297	}
27298	return json.Marshal(objectMap)
27299}
27300
27301// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
27302func (rt *RouteTable) UnmarshalJSON(body []byte) error {
27303	var m map[string]*json.RawMessage
27304	err := json.Unmarshal(body, &m)
27305	if err != nil {
27306		return err
27307	}
27308	for k, v := range m {
27309		switch k {
27310		case "properties":
27311			if v != nil {
27312				var routeTablePropertiesFormat RouteTablePropertiesFormat
27313				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
27314				if err != nil {
27315					return err
27316				}
27317				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
27318			}
27319		case "etag":
27320			if v != nil {
27321				var etag string
27322				err = json.Unmarshal(*v, &etag)
27323				if err != nil {
27324					return err
27325				}
27326				rt.Etag = &etag
27327			}
27328		case "id":
27329			if v != nil {
27330				var ID string
27331				err = json.Unmarshal(*v, &ID)
27332				if err != nil {
27333					return err
27334				}
27335				rt.ID = &ID
27336			}
27337		case "name":
27338			if v != nil {
27339				var name string
27340				err = json.Unmarshal(*v, &name)
27341				if err != nil {
27342					return err
27343				}
27344				rt.Name = &name
27345			}
27346		case "type":
27347			if v != nil {
27348				var typeVar string
27349				err = json.Unmarshal(*v, &typeVar)
27350				if err != nil {
27351					return err
27352				}
27353				rt.Type = &typeVar
27354			}
27355		case "location":
27356			if v != nil {
27357				var location string
27358				err = json.Unmarshal(*v, &location)
27359				if err != nil {
27360					return err
27361				}
27362				rt.Location = &location
27363			}
27364		case "tags":
27365			if v != nil {
27366				var tags map[string]*string
27367				err = json.Unmarshal(*v, &tags)
27368				if err != nil {
27369					return err
27370				}
27371				rt.Tags = tags
27372			}
27373		}
27374	}
27375
27376	return nil
27377}
27378
27379// RouteTableListResult response for the ListRouteTable API service call.
27380type RouteTableListResult struct {
27381	autorest.Response `json:"-"`
27382	// Value - A list of route tables in a resource group.
27383	Value *[]RouteTable `json:"value,omitempty"`
27384	// NextLink - The URL to get the next set of results.
27385	NextLink *string `json:"nextLink,omitempty"`
27386}
27387
27388// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
27389type RouteTableListResultIterator struct {
27390	i    int
27391	page RouteTableListResultPage
27392}
27393
27394// NextWithContext advances to the next value.  If there was an error making
27395// the request the iterator does not advance and the error is returned.
27396func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
27397	if tracing.IsEnabled() {
27398		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
27399		defer func() {
27400			sc := -1
27401			if iter.Response().Response.Response != nil {
27402				sc = iter.Response().Response.Response.StatusCode
27403			}
27404			tracing.EndSpan(ctx, sc, err)
27405		}()
27406	}
27407	iter.i++
27408	if iter.i < len(iter.page.Values()) {
27409		return nil
27410	}
27411	err = iter.page.NextWithContext(ctx)
27412	if err != nil {
27413		iter.i--
27414		return err
27415	}
27416	iter.i = 0
27417	return nil
27418}
27419
27420// Next advances to the next value.  If there was an error making
27421// the request the iterator does not advance and the error is returned.
27422// Deprecated: Use NextWithContext() instead.
27423func (iter *RouteTableListResultIterator) Next() error {
27424	return iter.NextWithContext(context.Background())
27425}
27426
27427// NotDone returns true if the enumeration should be started or is not yet complete.
27428func (iter RouteTableListResultIterator) NotDone() bool {
27429	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27430}
27431
27432// Response returns the raw server response from the last page request.
27433func (iter RouteTableListResultIterator) Response() RouteTableListResult {
27434	return iter.page.Response()
27435}
27436
27437// Value returns the current value or a zero-initialized value if the
27438// iterator has advanced beyond the end of the collection.
27439func (iter RouteTableListResultIterator) Value() RouteTable {
27440	if !iter.page.NotDone() {
27441		return RouteTable{}
27442	}
27443	return iter.page.Values()[iter.i]
27444}
27445
27446// Creates a new instance of the RouteTableListResultIterator type.
27447func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
27448	return RouteTableListResultIterator{page: page}
27449}
27450
27451// IsEmpty returns true if the ListResult contains no values.
27452func (rtlr RouteTableListResult) IsEmpty() bool {
27453	return rtlr.Value == nil || len(*rtlr.Value) == 0
27454}
27455
27456// routeTableListResultPreparer prepares a request to retrieve the next set of results.
27457// It returns nil if no more results exist.
27458func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
27459	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
27460		return nil, nil
27461	}
27462	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27463		autorest.AsJSON(),
27464		autorest.AsGet(),
27465		autorest.WithBaseURL(to.String(rtlr.NextLink)))
27466}
27467
27468// RouteTableListResultPage contains a page of RouteTable values.
27469type RouteTableListResultPage struct {
27470	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
27471	rtlr RouteTableListResult
27472}
27473
27474// NextWithContext advances to the next page of values.  If there was an error making
27475// the request the page does not advance and the error is returned.
27476func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
27477	if tracing.IsEnabled() {
27478		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
27479		defer func() {
27480			sc := -1
27481			if page.Response().Response.Response != nil {
27482				sc = page.Response().Response.Response.StatusCode
27483			}
27484			tracing.EndSpan(ctx, sc, err)
27485		}()
27486	}
27487	next, err := page.fn(ctx, page.rtlr)
27488	if err != nil {
27489		return err
27490	}
27491	page.rtlr = next
27492	return nil
27493}
27494
27495// Next advances to the next page of values.  If there was an error making
27496// the request the page does not advance and the error is returned.
27497// Deprecated: Use NextWithContext() instead.
27498func (page *RouteTableListResultPage) Next() error {
27499	return page.NextWithContext(context.Background())
27500}
27501
27502// NotDone returns true if the page enumeration should be started or is not yet complete.
27503func (page RouteTableListResultPage) NotDone() bool {
27504	return !page.rtlr.IsEmpty()
27505}
27506
27507// Response returns the raw server response from the last page request.
27508func (page RouteTableListResultPage) Response() RouteTableListResult {
27509	return page.rtlr
27510}
27511
27512// Values returns the slice of values for the current page or nil if there are no values.
27513func (page RouteTableListResultPage) Values() []RouteTable {
27514	if page.rtlr.IsEmpty() {
27515		return nil
27516	}
27517	return *page.rtlr.Value
27518}
27519
27520// Creates a new instance of the RouteTableListResultPage type.
27521func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
27522	return RouteTableListResultPage{fn: getNextPage}
27523}
27524
27525// RouteTablePropertiesFormat route Table resource.
27526type RouteTablePropertiesFormat struct {
27527	// Routes - Collection of routes contained within a route table.
27528	Routes *[]Route `json:"routes,omitempty"`
27529	// Subnets - READ-ONLY; A collection of references to subnets.
27530	Subnets *[]Subnet `json:"subnets,omitempty"`
27531	// DisableBgpRoutePropagation - Whether to disable the routes learned by BGP on that route table. True means disable.
27532	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
27533	// ProvisioningState - READ-ONLY; The provisioning state of the route table resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27534	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27535}
27536
27537// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27538// long-running operation.
27539type RouteTablesCreateOrUpdateFuture struct {
27540	azure.Future
27541}
27542
27543// Result returns the result of the asynchronous operation.
27544// If the operation has not completed it will return an error.
27545func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
27546	var done bool
27547	done, err = future.DoneWithContext(context.Background(), client)
27548	if err != nil {
27549		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27550		return
27551	}
27552	if !done {
27553		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
27554		return
27555	}
27556	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27557	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
27558		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
27559		if err != nil {
27560			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
27561		}
27562	}
27563	return
27564}
27565
27566// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27567// operation.
27568type RouteTablesDeleteFuture struct {
27569	azure.Future
27570}
27571
27572// Result returns the result of the asynchronous operation.
27573// If the operation has not completed it will return an error.
27574func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
27575	var done bool
27576	done, err = future.DoneWithContext(context.Background(), client)
27577	if err != nil {
27578		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
27579		return
27580	}
27581	if !done {
27582		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
27583		return
27584	}
27585	ar.Response = future.Response()
27586	return
27587}
27588
27589// RuleCondition rule condition of type network.
27590type RuleCondition struct {
27591	// IPProtocols - Array of FirewallPolicyRuleConditionNetworkProtocols.
27592	IPProtocols *[]FirewallPolicyRuleConditionNetworkProtocol `json:"ipProtocols,omitempty"`
27593	// SourceAddresses - List of source IP addresses for this rule.
27594	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
27595	// DestinationAddresses - List of destination IP addresses or Service Tags.
27596	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
27597	// DestinationPorts - List of destination ports.
27598	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
27599	// Name - Name of the rule condition.
27600	Name *string `json:"name,omitempty"`
27601	// Description - Description of the rule condition.
27602	Description *string `json:"description,omitempty"`
27603	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
27604	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
27605}
27606
27607// MarshalJSON is the custom marshaler for RuleCondition.
27608func (rc RuleCondition) MarshalJSON() ([]byte, error) {
27609	rc.RuleConditionType = RuleConditionTypeNetworkRuleCondition
27610	objectMap := make(map[string]interface{})
27611	if rc.IPProtocols != nil {
27612		objectMap["ipProtocols"] = rc.IPProtocols
27613	}
27614	if rc.SourceAddresses != nil {
27615		objectMap["sourceAddresses"] = rc.SourceAddresses
27616	}
27617	if rc.DestinationAddresses != nil {
27618		objectMap["destinationAddresses"] = rc.DestinationAddresses
27619	}
27620	if rc.DestinationPorts != nil {
27621		objectMap["destinationPorts"] = rc.DestinationPorts
27622	}
27623	if rc.Name != nil {
27624		objectMap["name"] = rc.Name
27625	}
27626	if rc.Description != nil {
27627		objectMap["description"] = rc.Description
27628	}
27629	if rc.RuleConditionType != "" {
27630		objectMap["ruleConditionType"] = rc.RuleConditionType
27631	}
27632	return json.Marshal(objectMap)
27633}
27634
27635// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
27636func (rc RuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
27637	return nil, false
27638}
27639
27640// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
27641func (rc RuleCondition) AsRuleCondition() (*RuleCondition, bool) {
27642	return &rc, true
27643}
27644
27645// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
27646func (rc RuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
27647	return nil, false
27648}
27649
27650// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
27651func (rc RuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
27652	return &rc, true
27653}
27654
27655// SecurityGroup networkSecurityGroup resource.
27656type SecurityGroup struct {
27657	autorest.Response `json:"-"`
27658	// SecurityGroupPropertiesFormat - Properties of the network security group.
27659	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
27660	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
27661	Etag *string `json:"etag,omitempty"`
27662	// ID - Resource ID.
27663	ID *string `json:"id,omitempty"`
27664	// Name - READ-ONLY; Resource name.
27665	Name *string `json:"name,omitempty"`
27666	// Type - READ-ONLY; Resource type.
27667	Type *string `json:"type,omitempty"`
27668	// Location - Resource location.
27669	Location *string `json:"location,omitempty"`
27670	// Tags - Resource tags.
27671	Tags map[string]*string `json:"tags"`
27672}
27673
27674// MarshalJSON is the custom marshaler for SecurityGroup.
27675func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
27676	objectMap := make(map[string]interface{})
27677	if sg.SecurityGroupPropertiesFormat != nil {
27678		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
27679	}
27680	if sg.ID != nil {
27681		objectMap["id"] = sg.ID
27682	}
27683	if sg.Location != nil {
27684		objectMap["location"] = sg.Location
27685	}
27686	if sg.Tags != nil {
27687		objectMap["tags"] = sg.Tags
27688	}
27689	return json.Marshal(objectMap)
27690}
27691
27692// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
27693func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
27694	var m map[string]*json.RawMessage
27695	err := json.Unmarshal(body, &m)
27696	if err != nil {
27697		return err
27698	}
27699	for k, v := range m {
27700		switch k {
27701		case "properties":
27702			if v != nil {
27703				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
27704				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
27705				if err != nil {
27706					return err
27707				}
27708				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
27709			}
27710		case "etag":
27711			if v != nil {
27712				var etag string
27713				err = json.Unmarshal(*v, &etag)
27714				if err != nil {
27715					return err
27716				}
27717				sg.Etag = &etag
27718			}
27719		case "id":
27720			if v != nil {
27721				var ID string
27722				err = json.Unmarshal(*v, &ID)
27723				if err != nil {
27724					return err
27725				}
27726				sg.ID = &ID
27727			}
27728		case "name":
27729			if v != nil {
27730				var name string
27731				err = json.Unmarshal(*v, &name)
27732				if err != nil {
27733					return err
27734				}
27735				sg.Name = &name
27736			}
27737		case "type":
27738			if v != nil {
27739				var typeVar string
27740				err = json.Unmarshal(*v, &typeVar)
27741				if err != nil {
27742					return err
27743				}
27744				sg.Type = &typeVar
27745			}
27746		case "location":
27747			if v != nil {
27748				var location string
27749				err = json.Unmarshal(*v, &location)
27750				if err != nil {
27751					return err
27752				}
27753				sg.Location = &location
27754			}
27755		case "tags":
27756			if v != nil {
27757				var tags map[string]*string
27758				err = json.Unmarshal(*v, &tags)
27759				if err != nil {
27760					return err
27761				}
27762				sg.Tags = tags
27763			}
27764		}
27765	}
27766
27767	return nil
27768}
27769
27770// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
27771type SecurityGroupListResult struct {
27772	autorest.Response `json:"-"`
27773	// Value - A list of NetworkSecurityGroup resources.
27774	Value *[]SecurityGroup `json:"value,omitempty"`
27775	// NextLink - The URL to get the next set of results.
27776	NextLink *string `json:"nextLink,omitempty"`
27777}
27778
27779// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
27780type SecurityGroupListResultIterator struct {
27781	i    int
27782	page SecurityGroupListResultPage
27783}
27784
27785// NextWithContext advances to the next value.  If there was an error making
27786// the request the iterator does not advance and the error is returned.
27787func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
27788	if tracing.IsEnabled() {
27789		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
27790		defer func() {
27791			sc := -1
27792			if iter.Response().Response.Response != nil {
27793				sc = iter.Response().Response.Response.StatusCode
27794			}
27795			tracing.EndSpan(ctx, sc, err)
27796		}()
27797	}
27798	iter.i++
27799	if iter.i < len(iter.page.Values()) {
27800		return nil
27801	}
27802	err = iter.page.NextWithContext(ctx)
27803	if err != nil {
27804		iter.i--
27805		return err
27806	}
27807	iter.i = 0
27808	return nil
27809}
27810
27811// Next advances to the next value.  If there was an error making
27812// the request the iterator does not advance and the error is returned.
27813// Deprecated: Use NextWithContext() instead.
27814func (iter *SecurityGroupListResultIterator) Next() error {
27815	return iter.NextWithContext(context.Background())
27816}
27817
27818// NotDone returns true if the enumeration should be started or is not yet complete.
27819func (iter SecurityGroupListResultIterator) NotDone() bool {
27820	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27821}
27822
27823// Response returns the raw server response from the last page request.
27824func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
27825	return iter.page.Response()
27826}
27827
27828// Value returns the current value or a zero-initialized value if the
27829// iterator has advanced beyond the end of the collection.
27830func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
27831	if !iter.page.NotDone() {
27832		return SecurityGroup{}
27833	}
27834	return iter.page.Values()[iter.i]
27835}
27836
27837// Creates a new instance of the SecurityGroupListResultIterator type.
27838func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
27839	return SecurityGroupListResultIterator{page: page}
27840}
27841
27842// IsEmpty returns true if the ListResult contains no values.
27843func (sglr SecurityGroupListResult) IsEmpty() bool {
27844	return sglr.Value == nil || len(*sglr.Value) == 0
27845}
27846
27847// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
27848// It returns nil if no more results exist.
27849func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
27850	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
27851		return nil, nil
27852	}
27853	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27854		autorest.AsJSON(),
27855		autorest.AsGet(),
27856		autorest.WithBaseURL(to.String(sglr.NextLink)))
27857}
27858
27859// SecurityGroupListResultPage contains a page of SecurityGroup values.
27860type SecurityGroupListResultPage struct {
27861	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
27862	sglr SecurityGroupListResult
27863}
27864
27865// NextWithContext advances to the next page of values.  If there was an error making
27866// the request the page does not advance and the error is returned.
27867func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
27868	if tracing.IsEnabled() {
27869		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
27870		defer func() {
27871			sc := -1
27872			if page.Response().Response.Response != nil {
27873				sc = page.Response().Response.Response.StatusCode
27874			}
27875			tracing.EndSpan(ctx, sc, err)
27876		}()
27877	}
27878	next, err := page.fn(ctx, page.sglr)
27879	if err != nil {
27880		return err
27881	}
27882	page.sglr = next
27883	return nil
27884}
27885
27886// Next advances to the next page of values.  If there was an error making
27887// the request the page does not advance and the error is returned.
27888// Deprecated: Use NextWithContext() instead.
27889func (page *SecurityGroupListResultPage) Next() error {
27890	return page.NextWithContext(context.Background())
27891}
27892
27893// NotDone returns true if the page enumeration should be started or is not yet complete.
27894func (page SecurityGroupListResultPage) NotDone() bool {
27895	return !page.sglr.IsEmpty()
27896}
27897
27898// Response returns the raw server response from the last page request.
27899func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
27900	return page.sglr
27901}
27902
27903// Values returns the slice of values for the current page or nil if there are no values.
27904func (page SecurityGroupListResultPage) Values() []SecurityGroup {
27905	if page.sglr.IsEmpty() {
27906		return nil
27907	}
27908	return *page.sglr.Value
27909}
27910
27911// Creates a new instance of the SecurityGroupListResultPage type.
27912func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
27913	return SecurityGroupListResultPage{fn: getNextPage}
27914}
27915
27916// SecurityGroupNetworkInterface network interface and all its associated security rules.
27917type SecurityGroupNetworkInterface struct {
27918	// ID - ID of the network interface.
27919	ID *string `json:"id,omitempty"`
27920	// SecurityRuleAssociations - All security rules associated with the network interface.
27921	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
27922}
27923
27924// SecurityGroupPropertiesFormat network Security Group resource.
27925type SecurityGroupPropertiesFormat struct {
27926	// SecurityRules - A collection of security rules of the network security group.
27927	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
27928	// DefaultSecurityRules - READ-ONLY; The default security rules of network security group.
27929	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
27930	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
27931	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
27932	// Subnets - READ-ONLY; A collection of references to subnets.
27933	Subnets *[]Subnet `json:"subnets,omitempty"`
27934	// ResourceGUID - READ-ONLY; The resource GUID property of the network security group resource.
27935	ResourceGUID *string `json:"resourceGuid,omitempty"`
27936	// ProvisioningState - READ-ONLY; The provisioning state of the network security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27937	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27938}
27939
27940// SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
27941type SecurityGroupResult struct {
27942	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
27943	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
27944	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
27945	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
27946}
27947
27948// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27949// long-running operation.
27950type SecurityGroupsCreateOrUpdateFuture struct {
27951	azure.Future
27952}
27953
27954// Result returns the result of the asynchronous operation.
27955// If the operation has not completed it will return an error.
27956func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
27957	var done bool
27958	done, err = future.DoneWithContext(context.Background(), client)
27959	if err != nil {
27960		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27961		return
27962	}
27963	if !done {
27964		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
27965		return
27966	}
27967	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27968	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
27969		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
27970		if err != nil {
27971			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
27972		}
27973	}
27974	return
27975}
27976
27977// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27978// operation.
27979type SecurityGroupsDeleteFuture struct {
27980	azure.Future
27981}
27982
27983// Result returns the result of the asynchronous operation.
27984// If the operation has not completed it will return an error.
27985func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
27986	var done bool
27987	done, err = future.DoneWithContext(context.Background(), client)
27988	if err != nil {
27989		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
27990		return
27991	}
27992	if !done {
27993		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
27994		return
27995	}
27996	ar.Response = future.Response()
27997	return
27998}
27999
28000// SecurityGroupViewParameters parameters that define the VM to check security groups for.
28001type SecurityGroupViewParameters struct {
28002	// TargetResourceID - ID of the target VM.
28003	TargetResourceID *string `json:"targetResourceId,omitempty"`
28004}
28005
28006// SecurityGroupViewResult the information about security rules applied to the specified VM.
28007type SecurityGroupViewResult struct {
28008	autorest.Response `json:"-"`
28009	// NetworkInterfaces - List of network interfaces on the specified VM.
28010	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
28011}
28012
28013// SecurityRule network security rule.
28014type SecurityRule struct {
28015	autorest.Response `json:"-"`
28016	// SecurityRulePropertiesFormat - Properties of the security rule.
28017	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
28018	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
28019	Name *string `json:"name,omitempty"`
28020	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28021	Etag *string `json:"etag,omitempty"`
28022	// ID - Resource ID.
28023	ID *string `json:"id,omitempty"`
28024}
28025
28026// MarshalJSON is the custom marshaler for SecurityRule.
28027func (sr SecurityRule) MarshalJSON() ([]byte, error) {
28028	objectMap := make(map[string]interface{})
28029	if sr.SecurityRulePropertiesFormat != nil {
28030		objectMap["properties"] = sr.SecurityRulePropertiesFormat
28031	}
28032	if sr.Name != nil {
28033		objectMap["name"] = sr.Name
28034	}
28035	if sr.ID != nil {
28036		objectMap["id"] = sr.ID
28037	}
28038	return json.Marshal(objectMap)
28039}
28040
28041// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
28042func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
28043	var m map[string]*json.RawMessage
28044	err := json.Unmarshal(body, &m)
28045	if err != nil {
28046		return err
28047	}
28048	for k, v := range m {
28049		switch k {
28050		case "properties":
28051			if v != nil {
28052				var securityRulePropertiesFormat SecurityRulePropertiesFormat
28053				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
28054				if err != nil {
28055					return err
28056				}
28057				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
28058			}
28059		case "name":
28060			if v != nil {
28061				var name string
28062				err = json.Unmarshal(*v, &name)
28063				if err != nil {
28064					return err
28065				}
28066				sr.Name = &name
28067			}
28068		case "etag":
28069			if v != nil {
28070				var etag string
28071				err = json.Unmarshal(*v, &etag)
28072				if err != nil {
28073					return err
28074				}
28075				sr.Etag = &etag
28076			}
28077		case "id":
28078			if v != nil {
28079				var ID string
28080				err = json.Unmarshal(*v, &ID)
28081				if err != nil {
28082					return err
28083				}
28084				sr.ID = &ID
28085			}
28086		}
28087	}
28088
28089	return nil
28090}
28091
28092// SecurityRuleAssociations all security rules associated with the network interface.
28093type SecurityRuleAssociations struct {
28094	// NetworkInterfaceAssociation - Network interface and it's custom security rules.
28095	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
28096	// SubnetAssociation - Subnet and it's custom security rules.
28097	SubnetAssociation *SubnetAssociation `json:"subnetAssociation,omitempty"`
28098	// DefaultSecurityRules - Collection of default security rules of the network security group.
28099	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
28100	// EffectiveSecurityRules - Collection of effective security rules.
28101	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
28102}
28103
28104// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
28105// belongs to a network security group.
28106type SecurityRuleListResult struct {
28107	autorest.Response `json:"-"`
28108	// Value - The security rules in a network security group.
28109	Value *[]SecurityRule `json:"value,omitempty"`
28110	// NextLink - The URL to get the next set of results.
28111	NextLink *string `json:"nextLink,omitempty"`
28112}
28113
28114// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
28115type SecurityRuleListResultIterator struct {
28116	i    int
28117	page SecurityRuleListResultPage
28118}
28119
28120// NextWithContext advances to the next value.  If there was an error making
28121// the request the iterator does not advance and the error is returned.
28122func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
28123	if tracing.IsEnabled() {
28124		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
28125		defer func() {
28126			sc := -1
28127			if iter.Response().Response.Response != nil {
28128				sc = iter.Response().Response.Response.StatusCode
28129			}
28130			tracing.EndSpan(ctx, sc, err)
28131		}()
28132	}
28133	iter.i++
28134	if iter.i < len(iter.page.Values()) {
28135		return nil
28136	}
28137	err = iter.page.NextWithContext(ctx)
28138	if err != nil {
28139		iter.i--
28140		return err
28141	}
28142	iter.i = 0
28143	return nil
28144}
28145
28146// Next advances to the next value.  If there was an error making
28147// the request the iterator does not advance and the error is returned.
28148// Deprecated: Use NextWithContext() instead.
28149func (iter *SecurityRuleListResultIterator) Next() error {
28150	return iter.NextWithContext(context.Background())
28151}
28152
28153// NotDone returns true if the enumeration should be started or is not yet complete.
28154func (iter SecurityRuleListResultIterator) NotDone() bool {
28155	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28156}
28157
28158// Response returns the raw server response from the last page request.
28159func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
28160	return iter.page.Response()
28161}
28162
28163// Value returns the current value or a zero-initialized value if the
28164// iterator has advanced beyond the end of the collection.
28165func (iter SecurityRuleListResultIterator) Value() SecurityRule {
28166	if !iter.page.NotDone() {
28167		return SecurityRule{}
28168	}
28169	return iter.page.Values()[iter.i]
28170}
28171
28172// Creates a new instance of the SecurityRuleListResultIterator type.
28173func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
28174	return SecurityRuleListResultIterator{page: page}
28175}
28176
28177// IsEmpty returns true if the ListResult contains no values.
28178func (srlr SecurityRuleListResult) IsEmpty() bool {
28179	return srlr.Value == nil || len(*srlr.Value) == 0
28180}
28181
28182// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
28183// It returns nil if no more results exist.
28184func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
28185	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
28186		return nil, nil
28187	}
28188	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28189		autorest.AsJSON(),
28190		autorest.AsGet(),
28191		autorest.WithBaseURL(to.String(srlr.NextLink)))
28192}
28193
28194// SecurityRuleListResultPage contains a page of SecurityRule values.
28195type SecurityRuleListResultPage struct {
28196	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
28197	srlr SecurityRuleListResult
28198}
28199
28200// NextWithContext advances to the next page of values.  If there was an error making
28201// the request the page does not advance and the error is returned.
28202func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
28203	if tracing.IsEnabled() {
28204		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
28205		defer func() {
28206			sc := -1
28207			if page.Response().Response.Response != nil {
28208				sc = page.Response().Response.Response.StatusCode
28209			}
28210			tracing.EndSpan(ctx, sc, err)
28211		}()
28212	}
28213	next, err := page.fn(ctx, page.srlr)
28214	if err != nil {
28215		return err
28216	}
28217	page.srlr = next
28218	return nil
28219}
28220
28221// Next advances to the next page of values.  If there was an error making
28222// the request the page does not advance and the error is returned.
28223// Deprecated: Use NextWithContext() instead.
28224func (page *SecurityRuleListResultPage) Next() error {
28225	return page.NextWithContext(context.Background())
28226}
28227
28228// NotDone returns true if the page enumeration should be started or is not yet complete.
28229func (page SecurityRuleListResultPage) NotDone() bool {
28230	return !page.srlr.IsEmpty()
28231}
28232
28233// Response returns the raw server response from the last page request.
28234func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
28235	return page.srlr
28236}
28237
28238// Values returns the slice of values for the current page or nil if there are no values.
28239func (page SecurityRuleListResultPage) Values() []SecurityRule {
28240	if page.srlr.IsEmpty() {
28241		return nil
28242	}
28243	return *page.srlr.Value
28244}
28245
28246// Creates a new instance of the SecurityRuleListResultPage type.
28247func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
28248	return SecurityRuleListResultPage{fn: getNextPage}
28249}
28250
28251// SecurityRulePropertiesFormat security rule resource.
28252type SecurityRulePropertiesFormat struct {
28253	// Description - A description for this rule. Restricted to 140 chars.
28254	Description *string `json:"description,omitempty"`
28255	// Protocol - Network protocol this rule applies to. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolIcmp', 'SecurityRuleProtocolEsp', 'SecurityRuleProtocolAsterisk', 'SecurityRuleProtocolAh'
28256	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
28257	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
28258	SourcePortRange *string `json:"sourcePortRange,omitempty"`
28259	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
28260	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
28261	// 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.
28262	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
28263	// SourceAddressPrefixes - The CIDR or source IP ranges.
28264	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
28265	// SourceApplicationSecurityGroups - The application security group specified as source.
28266	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
28267	// 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.
28268	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
28269	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
28270	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
28271	// DestinationApplicationSecurityGroups - The application security group specified as destination.
28272	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
28273	// SourcePortRanges - The source port ranges.
28274	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
28275	// DestinationPortRanges - The destination port ranges.
28276	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
28277	// Access - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
28278	Access SecurityRuleAccess `json:"access,omitempty"`
28279	// 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.
28280	Priority *int32 `json:"priority,omitempty"`
28281	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
28282	Direction SecurityRuleDirection `json:"direction,omitempty"`
28283	// ProvisioningState - READ-ONLY; The provisioning state of the security rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28284	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28285}
28286
28287// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28288// long-running operation.
28289type SecurityRulesCreateOrUpdateFuture struct {
28290	azure.Future
28291}
28292
28293// Result returns the result of the asynchronous operation.
28294// If the operation has not completed it will return an error.
28295func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
28296	var done bool
28297	done, err = future.DoneWithContext(context.Background(), client)
28298	if err != nil {
28299		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28300		return
28301	}
28302	if !done {
28303		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
28304		return
28305	}
28306	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28307	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
28308		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
28309		if err != nil {
28310			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
28311		}
28312	}
28313	return
28314}
28315
28316// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28317// operation.
28318type SecurityRulesDeleteFuture struct {
28319	azure.Future
28320}
28321
28322// Result returns the result of the asynchronous operation.
28323// If the operation has not completed it will return an error.
28324func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
28325	var done bool
28326	done, err = future.DoneWithContext(context.Background(), client)
28327	if err != nil {
28328		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
28329		return
28330	}
28331	if !done {
28332		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
28333		return
28334	}
28335	ar.Response = future.Response()
28336	return
28337}
28338
28339// SecurityRulesEvaluationResult network security rules evaluation result.
28340type SecurityRulesEvaluationResult struct {
28341	// Name - Name of the network security rule.
28342	Name *string `json:"name,omitempty"`
28343	// ProtocolMatched - Value indicating whether protocol is matched.
28344	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
28345	// SourceMatched - Value indicating whether source is matched.
28346	SourceMatched *bool `json:"sourceMatched,omitempty"`
28347	// SourcePortMatched - Value indicating whether source port is matched.
28348	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
28349	// DestinationMatched - Value indicating whether destination is matched.
28350	DestinationMatched *bool `json:"destinationMatched,omitempty"`
28351	// DestinationPortMatched - Value indicating whether destination port is matched.
28352	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
28353}
28354
28355// ServiceAssociationLink serviceAssociationLink resource.
28356type ServiceAssociationLink struct {
28357	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
28358	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
28359	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
28360	Name *string `json:"name,omitempty"`
28361	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28362	Etag *string `json:"etag,omitempty"`
28363	// Type - READ-ONLY; Resource type.
28364	Type *string `json:"type,omitempty"`
28365	// ID - Resource ID.
28366	ID *string `json:"id,omitempty"`
28367}
28368
28369// MarshalJSON is the custom marshaler for ServiceAssociationLink.
28370func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
28371	objectMap := make(map[string]interface{})
28372	if sal.ServiceAssociationLinkPropertiesFormat != nil {
28373		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
28374	}
28375	if sal.Name != nil {
28376		objectMap["name"] = sal.Name
28377	}
28378	if sal.ID != nil {
28379		objectMap["id"] = sal.ID
28380	}
28381	return json.Marshal(objectMap)
28382}
28383
28384// UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
28385func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
28386	var m map[string]*json.RawMessage
28387	err := json.Unmarshal(body, &m)
28388	if err != nil {
28389		return err
28390	}
28391	for k, v := range m {
28392		switch k {
28393		case "properties":
28394			if v != nil {
28395				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
28396				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
28397				if err != nil {
28398					return err
28399				}
28400				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
28401			}
28402		case "name":
28403			if v != nil {
28404				var name string
28405				err = json.Unmarshal(*v, &name)
28406				if err != nil {
28407					return err
28408				}
28409				sal.Name = &name
28410			}
28411		case "etag":
28412			if v != nil {
28413				var etag string
28414				err = json.Unmarshal(*v, &etag)
28415				if err != nil {
28416					return err
28417				}
28418				sal.Etag = &etag
28419			}
28420		case "type":
28421			if v != nil {
28422				var typeVar string
28423				err = json.Unmarshal(*v, &typeVar)
28424				if err != nil {
28425					return err
28426				}
28427				sal.Type = &typeVar
28428			}
28429		case "id":
28430			if v != nil {
28431				var ID string
28432				err = json.Unmarshal(*v, &ID)
28433				if err != nil {
28434					return err
28435				}
28436				sal.ID = &ID
28437			}
28438		}
28439	}
28440
28441	return nil
28442}
28443
28444// ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
28445type ServiceAssociationLinkPropertiesFormat struct {
28446	// LinkedResourceType - Resource type of the linked resource.
28447	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
28448	// Link - Link to the external resource.
28449	Link *string `json:"link,omitempty"`
28450	// ProvisioningState - READ-ONLY; The provisioning state of the service association link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28451	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28452	// AllowDelete - If true, the resource can be deleted.
28453	AllowDelete *bool `json:"allowDelete,omitempty"`
28454	// Locations - A list of locations.
28455	Locations *[]string `json:"locations,omitempty"`
28456}
28457
28458// ServiceAssociationLinksListResult response for ServiceAssociationLinks_List operation.
28459type ServiceAssociationLinksListResult struct {
28460	autorest.Response `json:"-"`
28461	// Value - The service association links in a subnet.
28462	Value *[]ServiceAssociationLink `json:"value,omitempty"`
28463	// NextLink - READ-ONLY; The URL to get the next set of results.
28464	NextLink *string `json:"nextLink,omitempty"`
28465}
28466
28467// ServiceDelegationPropertiesFormat properties of a service delegation.
28468type ServiceDelegationPropertiesFormat struct {
28469	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers).
28470	ServiceName *string `json:"serviceName,omitempty"`
28471	// Actions - READ-ONLY; The actions permitted to the service upon delegation.
28472	Actions *[]string `json:"actions,omitempty"`
28473	// ProvisioningState - READ-ONLY; The provisioning state of the service delegation resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28474	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28475}
28476
28477// ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
28478// a long-running operation.
28479type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
28480	azure.Future
28481}
28482
28483// Result returns the result of the asynchronous operation.
28484// If the operation has not completed it will return an error.
28485func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
28486	var done bool
28487	done, err = future.DoneWithContext(context.Background(), client)
28488	if err != nil {
28489		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28490		return
28491	}
28492	if !done {
28493		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
28494		return
28495	}
28496	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28497	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
28498		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
28499		if err != nil {
28500			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
28501		}
28502	}
28503	return
28504}
28505
28506// ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
28507// long-running operation.
28508type ServiceEndpointPoliciesDeleteFuture struct {
28509	azure.Future
28510}
28511
28512// Result returns the result of the asynchronous operation.
28513// If the operation has not completed it will return an error.
28514func (future *ServiceEndpointPoliciesDeleteFuture) Result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
28515	var done bool
28516	done, err = future.DoneWithContext(context.Background(), client)
28517	if err != nil {
28518		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
28519		return
28520	}
28521	if !done {
28522		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
28523		return
28524	}
28525	ar.Response = future.Response()
28526	return
28527}
28528
28529// ServiceEndpointPolicy service End point policy resource.
28530type ServiceEndpointPolicy struct {
28531	autorest.Response `json:"-"`
28532	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy.
28533	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
28534	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28535	Etag *string `json:"etag,omitempty"`
28536	// ID - Resource ID.
28537	ID *string `json:"id,omitempty"`
28538	// Name - READ-ONLY; Resource name.
28539	Name *string `json:"name,omitempty"`
28540	// Type - READ-ONLY; Resource type.
28541	Type *string `json:"type,omitempty"`
28542	// Location - Resource location.
28543	Location *string `json:"location,omitempty"`
28544	// Tags - Resource tags.
28545	Tags map[string]*string `json:"tags"`
28546}
28547
28548// MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
28549func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
28550	objectMap := make(map[string]interface{})
28551	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
28552		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
28553	}
28554	if sep.ID != nil {
28555		objectMap["id"] = sep.ID
28556	}
28557	if sep.Location != nil {
28558		objectMap["location"] = sep.Location
28559	}
28560	if sep.Tags != nil {
28561		objectMap["tags"] = sep.Tags
28562	}
28563	return json.Marshal(objectMap)
28564}
28565
28566// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
28567func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
28568	var m map[string]*json.RawMessage
28569	err := json.Unmarshal(body, &m)
28570	if err != nil {
28571		return err
28572	}
28573	for k, v := range m {
28574		switch k {
28575		case "properties":
28576			if v != nil {
28577				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
28578				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
28579				if err != nil {
28580					return err
28581				}
28582				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
28583			}
28584		case "etag":
28585			if v != nil {
28586				var etag string
28587				err = json.Unmarshal(*v, &etag)
28588				if err != nil {
28589					return err
28590				}
28591				sep.Etag = &etag
28592			}
28593		case "id":
28594			if v != nil {
28595				var ID string
28596				err = json.Unmarshal(*v, &ID)
28597				if err != nil {
28598					return err
28599				}
28600				sep.ID = &ID
28601			}
28602		case "name":
28603			if v != nil {
28604				var name string
28605				err = json.Unmarshal(*v, &name)
28606				if err != nil {
28607					return err
28608				}
28609				sep.Name = &name
28610			}
28611		case "type":
28612			if v != nil {
28613				var typeVar string
28614				err = json.Unmarshal(*v, &typeVar)
28615				if err != nil {
28616					return err
28617				}
28618				sep.Type = &typeVar
28619			}
28620		case "location":
28621			if v != nil {
28622				var location string
28623				err = json.Unmarshal(*v, &location)
28624				if err != nil {
28625					return err
28626				}
28627				sep.Location = &location
28628			}
28629		case "tags":
28630			if v != nil {
28631				var tags map[string]*string
28632				err = json.Unmarshal(*v, &tags)
28633				if err != nil {
28634					return err
28635				}
28636				sep.Tags = tags
28637			}
28638		}
28639	}
28640
28641	return nil
28642}
28643
28644// ServiceEndpointPolicyDefinition service Endpoint policy definitions.
28645type ServiceEndpointPolicyDefinition struct {
28646	autorest.Response `json:"-"`
28647	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition.
28648	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
28649	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
28650	Name *string `json:"name,omitempty"`
28651	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28652	Etag *string `json:"etag,omitempty"`
28653	// ID - Resource ID.
28654	ID *string `json:"id,omitempty"`
28655}
28656
28657// MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
28658func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
28659	objectMap := make(map[string]interface{})
28660	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
28661		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
28662	}
28663	if sepd.Name != nil {
28664		objectMap["name"] = sepd.Name
28665	}
28666	if sepd.ID != nil {
28667		objectMap["id"] = sepd.ID
28668	}
28669	return json.Marshal(objectMap)
28670}
28671
28672// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
28673func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
28674	var m map[string]*json.RawMessage
28675	err := json.Unmarshal(body, &m)
28676	if err != nil {
28677		return err
28678	}
28679	for k, v := range m {
28680		switch k {
28681		case "properties":
28682			if v != nil {
28683				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
28684				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
28685				if err != nil {
28686					return err
28687				}
28688				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
28689			}
28690		case "name":
28691			if v != nil {
28692				var name string
28693				err = json.Unmarshal(*v, &name)
28694				if err != nil {
28695					return err
28696				}
28697				sepd.Name = &name
28698			}
28699		case "etag":
28700			if v != nil {
28701				var etag string
28702				err = json.Unmarshal(*v, &etag)
28703				if err != nil {
28704					return err
28705				}
28706				sepd.Etag = &etag
28707			}
28708		case "id":
28709			if v != nil {
28710				var ID string
28711				err = json.Unmarshal(*v, &ID)
28712				if err != nil {
28713					return err
28714				}
28715				sepd.ID = &ID
28716			}
28717		}
28718	}
28719
28720	return nil
28721}
28722
28723// ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
28724// call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
28725type ServiceEndpointPolicyDefinitionListResult struct {
28726	autorest.Response `json:"-"`
28727	// Value - The service endpoint policy definition in a service endpoint policy.
28728	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
28729	// NextLink - The URL to get the next set of results.
28730	NextLink *string `json:"nextLink,omitempty"`
28731}
28732
28733// ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
28734// ServiceEndpointPolicyDefinition values.
28735type ServiceEndpointPolicyDefinitionListResultIterator struct {
28736	i    int
28737	page ServiceEndpointPolicyDefinitionListResultPage
28738}
28739
28740// NextWithContext advances to the next value.  If there was an error making
28741// the request the iterator does not advance and the error is returned.
28742func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
28743	if tracing.IsEnabled() {
28744		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
28745		defer func() {
28746			sc := -1
28747			if iter.Response().Response.Response != nil {
28748				sc = iter.Response().Response.Response.StatusCode
28749			}
28750			tracing.EndSpan(ctx, sc, err)
28751		}()
28752	}
28753	iter.i++
28754	if iter.i < len(iter.page.Values()) {
28755		return nil
28756	}
28757	err = iter.page.NextWithContext(ctx)
28758	if err != nil {
28759		iter.i--
28760		return err
28761	}
28762	iter.i = 0
28763	return nil
28764}
28765
28766// Next advances to the next value.  If there was an error making
28767// the request the iterator does not advance and the error is returned.
28768// Deprecated: Use NextWithContext() instead.
28769func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
28770	return iter.NextWithContext(context.Background())
28771}
28772
28773// NotDone returns true if the enumeration should be started or is not yet complete.
28774func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
28775	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28776}
28777
28778// Response returns the raw server response from the last page request.
28779func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
28780	return iter.page.Response()
28781}
28782
28783// Value returns the current value or a zero-initialized value if the
28784// iterator has advanced beyond the end of the collection.
28785func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
28786	if !iter.page.NotDone() {
28787		return ServiceEndpointPolicyDefinition{}
28788	}
28789	return iter.page.Values()[iter.i]
28790}
28791
28792// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
28793func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
28794	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
28795}
28796
28797// IsEmpty returns true if the ListResult contains no values.
28798func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
28799	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
28800}
28801
28802// serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
28803// It returns nil if no more results exist.
28804func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
28805	if sepdlr.NextLink == nil || len(to.String(sepdlr.NextLink)) < 1 {
28806		return nil, nil
28807	}
28808	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28809		autorest.AsJSON(),
28810		autorest.AsGet(),
28811		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
28812}
28813
28814// ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
28815type ServiceEndpointPolicyDefinitionListResultPage struct {
28816	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
28817	sepdlr ServiceEndpointPolicyDefinitionListResult
28818}
28819
28820// NextWithContext advances to the next page of values.  If there was an error making
28821// the request the page does not advance and the error is returned.
28822func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
28823	if tracing.IsEnabled() {
28824		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
28825		defer func() {
28826			sc := -1
28827			if page.Response().Response.Response != nil {
28828				sc = page.Response().Response.Response.StatusCode
28829			}
28830			tracing.EndSpan(ctx, sc, err)
28831		}()
28832	}
28833	next, err := page.fn(ctx, page.sepdlr)
28834	if err != nil {
28835		return err
28836	}
28837	page.sepdlr = next
28838	return nil
28839}
28840
28841// Next advances to the next page of values.  If there was an error making
28842// the request the page does not advance and the error is returned.
28843// Deprecated: Use NextWithContext() instead.
28844func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
28845	return page.NextWithContext(context.Background())
28846}
28847
28848// NotDone returns true if the page enumeration should be started or is not yet complete.
28849func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
28850	return !page.sepdlr.IsEmpty()
28851}
28852
28853// Response returns the raw server response from the last page request.
28854func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
28855	return page.sepdlr
28856}
28857
28858// Values returns the slice of values for the current page or nil if there are no values.
28859func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
28860	if page.sepdlr.IsEmpty() {
28861		return nil
28862	}
28863	return *page.sepdlr.Value
28864}
28865
28866// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
28867func NewServiceEndpointPolicyDefinitionListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
28868	return ServiceEndpointPolicyDefinitionListResultPage{fn: getNextPage}
28869}
28870
28871// ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
28872type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
28873	// Description - A description for this rule. Restricted to 140 chars.
28874	Description *string `json:"description,omitempty"`
28875	// Service - Service endpoint name.
28876	Service *string `json:"service,omitempty"`
28877	// ServiceResources - A list of service resources.
28878	ServiceResources *[]string `json:"serviceResources,omitempty"`
28879	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy definition resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28880	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28881}
28882
28883// ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
28884// results of a long-running operation.
28885type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
28886	azure.Future
28887}
28888
28889// Result returns the result of the asynchronous operation.
28890// If the operation has not completed it will return an error.
28891func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
28892	var done bool
28893	done, err = future.DoneWithContext(context.Background(), client)
28894	if err != nil {
28895		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28896		return
28897	}
28898	if !done {
28899		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
28900		return
28901	}
28902	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28903	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
28904		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
28905		if err != nil {
28906			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
28907		}
28908	}
28909	return
28910}
28911
28912// ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
28913// a long-running operation.
28914type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
28915	azure.Future
28916}
28917
28918// Result returns the result of the asynchronous operation.
28919// If the operation has not completed it will return an error.
28920func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
28921	var done bool
28922	done, err = future.DoneWithContext(context.Background(), client)
28923	if err != nil {
28924		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
28925		return
28926	}
28927	if !done {
28928		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
28929		return
28930	}
28931	ar.Response = future.Response()
28932	return
28933}
28934
28935// ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
28936type ServiceEndpointPolicyListResult struct {
28937	autorest.Response `json:"-"`
28938	// Value - A list of ServiceEndpointPolicy resources.
28939	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
28940	// NextLink - READ-ONLY; The URL to get the next set of results.
28941	NextLink *string `json:"nextLink,omitempty"`
28942}
28943
28944// ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
28945// values.
28946type ServiceEndpointPolicyListResultIterator struct {
28947	i    int
28948	page ServiceEndpointPolicyListResultPage
28949}
28950
28951// NextWithContext advances to the next value.  If there was an error making
28952// the request the iterator does not advance and the error is returned.
28953func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
28954	if tracing.IsEnabled() {
28955		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
28956		defer func() {
28957			sc := -1
28958			if iter.Response().Response.Response != nil {
28959				sc = iter.Response().Response.Response.StatusCode
28960			}
28961			tracing.EndSpan(ctx, sc, err)
28962		}()
28963	}
28964	iter.i++
28965	if iter.i < len(iter.page.Values()) {
28966		return nil
28967	}
28968	err = iter.page.NextWithContext(ctx)
28969	if err != nil {
28970		iter.i--
28971		return err
28972	}
28973	iter.i = 0
28974	return nil
28975}
28976
28977// Next advances to the next value.  If there was an error making
28978// the request the iterator does not advance and the error is returned.
28979// Deprecated: Use NextWithContext() instead.
28980func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
28981	return iter.NextWithContext(context.Background())
28982}
28983
28984// NotDone returns true if the enumeration should be started or is not yet complete.
28985func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
28986	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28987}
28988
28989// Response returns the raw server response from the last page request.
28990func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
28991	return iter.page.Response()
28992}
28993
28994// Value returns the current value or a zero-initialized value if the
28995// iterator has advanced beyond the end of the collection.
28996func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
28997	if !iter.page.NotDone() {
28998		return ServiceEndpointPolicy{}
28999	}
29000	return iter.page.Values()[iter.i]
29001}
29002
29003// Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
29004func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
29005	return ServiceEndpointPolicyListResultIterator{page: page}
29006}
29007
29008// IsEmpty returns true if the ListResult contains no values.
29009func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
29010	return seplr.Value == nil || len(*seplr.Value) == 0
29011}
29012
29013// serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
29014// It returns nil if no more results exist.
29015func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
29016	if seplr.NextLink == nil || len(to.String(seplr.NextLink)) < 1 {
29017		return nil, nil
29018	}
29019	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29020		autorest.AsJSON(),
29021		autorest.AsGet(),
29022		autorest.WithBaseURL(to.String(seplr.NextLink)))
29023}
29024
29025// ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
29026type ServiceEndpointPolicyListResultPage struct {
29027	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
29028	seplr ServiceEndpointPolicyListResult
29029}
29030
29031// NextWithContext advances to the next page of values.  If there was an error making
29032// the request the page does not advance and the error is returned.
29033func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
29034	if tracing.IsEnabled() {
29035		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
29036		defer func() {
29037			sc := -1
29038			if page.Response().Response.Response != nil {
29039				sc = page.Response().Response.Response.StatusCode
29040			}
29041			tracing.EndSpan(ctx, sc, err)
29042		}()
29043	}
29044	next, err := page.fn(ctx, page.seplr)
29045	if err != nil {
29046		return err
29047	}
29048	page.seplr = next
29049	return nil
29050}
29051
29052// Next advances to the next page of values.  If there was an error making
29053// the request the page does not advance and the error is returned.
29054// Deprecated: Use NextWithContext() instead.
29055func (page *ServiceEndpointPolicyListResultPage) Next() error {
29056	return page.NextWithContext(context.Background())
29057}
29058
29059// NotDone returns true if the page enumeration should be started or is not yet complete.
29060func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
29061	return !page.seplr.IsEmpty()
29062}
29063
29064// Response returns the raw server response from the last page request.
29065func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
29066	return page.seplr
29067}
29068
29069// Values returns the slice of values for the current page or nil if there are no values.
29070func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
29071	if page.seplr.IsEmpty() {
29072		return nil
29073	}
29074	return *page.seplr.Value
29075}
29076
29077// Creates a new instance of the ServiceEndpointPolicyListResultPage type.
29078func NewServiceEndpointPolicyListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
29079	return ServiceEndpointPolicyListResultPage{fn: getNextPage}
29080}
29081
29082// ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
29083type ServiceEndpointPolicyPropertiesFormat struct {
29084	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
29085	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
29086	// Subnets - READ-ONLY; A collection of references to subnets.
29087	Subnets *[]Subnet `json:"subnets,omitempty"`
29088	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
29089	ResourceGUID *string `json:"resourceGuid,omitempty"`
29090	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29091	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29092}
29093
29094// ServiceEndpointPropertiesFormat the service endpoint properties.
29095type ServiceEndpointPropertiesFormat struct {
29096	// Service - The type of the endpoint service.
29097	Service *string `json:"service,omitempty"`
29098	// Locations - A list of locations.
29099	Locations *[]string `json:"locations,omitempty"`
29100	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29101	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29102}
29103
29104// ServiceTagInformation the service tag information.
29105type ServiceTagInformation struct {
29106	// Properties - READ-ONLY; Properties of the service tag information.
29107	Properties *ServiceTagInformationPropertiesFormat `json:"properties,omitempty"`
29108	// Name - READ-ONLY; The name of service tag.
29109	Name *string `json:"name,omitempty"`
29110	// ID - READ-ONLY; The ID of service tag.
29111	ID *string `json:"id,omitempty"`
29112}
29113
29114// ServiceTagInformationPropertiesFormat properties of the service tag information.
29115type ServiceTagInformationPropertiesFormat struct {
29116	// ChangeNumber - READ-ONLY; The iteration number of service tag.
29117	ChangeNumber *string `json:"changeNumber,omitempty"`
29118	// Region - READ-ONLY; The region of service tag.
29119	Region *string `json:"region,omitempty"`
29120	// SystemService - READ-ONLY; The name of system service.
29121	SystemService *string `json:"systemService,omitempty"`
29122	// AddressPrefixes - READ-ONLY; The list of IP address prefixes.
29123	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
29124}
29125
29126// ServiceTagsListResult response for the ListServiceTags API service call.
29127type ServiceTagsListResult struct {
29128	autorest.Response `json:"-"`
29129	// Name - READ-ONLY; The name of the cloud.
29130	Name *string `json:"name,omitempty"`
29131	// ID - READ-ONLY; The ID of the cloud.
29132	ID *string `json:"id,omitempty"`
29133	// Type - READ-ONLY; The azure resource type.
29134	Type *string `json:"type,omitempty"`
29135	// ChangeNumber - READ-ONLY; The iteration number.
29136	ChangeNumber *string `json:"changeNumber,omitempty"`
29137	// Cloud - READ-ONLY; The name of the cloud.
29138	Cloud *string `json:"cloud,omitempty"`
29139	// Values - READ-ONLY; The list of service tag information resources.
29140	Values *[]ServiceTagInformation `json:"values,omitempty"`
29141}
29142
29143// SessionIds list of session IDs.
29144type SessionIds struct {
29145	// SessionIds - List of session IDs.
29146	SessionIds *[]string `json:"sessionIds,omitempty"`
29147}
29148
29149// String ...
29150type String struct {
29151	autorest.Response `json:"-"`
29152	Value             *string `json:"value,omitempty"`
29153}
29154
29155// Subnet subnet in a virtual network resource.
29156type Subnet struct {
29157	autorest.Response `json:"-"`
29158	// SubnetPropertiesFormat - Properties of the subnet.
29159	*SubnetPropertiesFormat `json:"properties,omitempty"`
29160	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
29161	Name *string `json:"name,omitempty"`
29162	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
29163	Etag *string `json:"etag,omitempty"`
29164	// ID - Resource ID.
29165	ID *string `json:"id,omitempty"`
29166}
29167
29168// MarshalJSON is the custom marshaler for Subnet.
29169func (s Subnet) MarshalJSON() ([]byte, error) {
29170	objectMap := make(map[string]interface{})
29171	if s.SubnetPropertiesFormat != nil {
29172		objectMap["properties"] = s.SubnetPropertiesFormat
29173	}
29174	if s.Name != nil {
29175		objectMap["name"] = s.Name
29176	}
29177	if s.ID != nil {
29178		objectMap["id"] = s.ID
29179	}
29180	return json.Marshal(objectMap)
29181}
29182
29183// UnmarshalJSON is the custom unmarshaler for Subnet struct.
29184func (s *Subnet) UnmarshalJSON(body []byte) error {
29185	var m map[string]*json.RawMessage
29186	err := json.Unmarshal(body, &m)
29187	if err != nil {
29188		return err
29189	}
29190	for k, v := range m {
29191		switch k {
29192		case "properties":
29193			if v != nil {
29194				var subnetPropertiesFormat SubnetPropertiesFormat
29195				err = json.Unmarshal(*v, &subnetPropertiesFormat)
29196				if err != nil {
29197					return err
29198				}
29199				s.SubnetPropertiesFormat = &subnetPropertiesFormat
29200			}
29201		case "name":
29202			if v != nil {
29203				var name string
29204				err = json.Unmarshal(*v, &name)
29205				if err != nil {
29206					return err
29207				}
29208				s.Name = &name
29209			}
29210		case "etag":
29211			if v != nil {
29212				var etag string
29213				err = json.Unmarshal(*v, &etag)
29214				if err != nil {
29215					return err
29216				}
29217				s.Etag = &etag
29218			}
29219		case "id":
29220			if v != nil {
29221				var ID string
29222				err = json.Unmarshal(*v, &ID)
29223				if err != nil {
29224					return err
29225				}
29226				s.ID = &ID
29227			}
29228		}
29229	}
29230
29231	return nil
29232}
29233
29234// SubnetAssociation subnet and it's custom security rules.
29235type SubnetAssociation struct {
29236	// ID - READ-ONLY; Subnet ID.
29237	ID *string `json:"id,omitempty"`
29238	// SecurityRules - Collection of custom security rules.
29239	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
29240}
29241
29242// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
29243// network.
29244type SubnetListResult struct {
29245	autorest.Response `json:"-"`
29246	// Value - The subnets in a virtual network.
29247	Value *[]Subnet `json:"value,omitempty"`
29248	// NextLink - The URL to get the next set of results.
29249	NextLink *string `json:"nextLink,omitempty"`
29250}
29251
29252// SubnetListResultIterator provides access to a complete listing of Subnet values.
29253type SubnetListResultIterator struct {
29254	i    int
29255	page SubnetListResultPage
29256}
29257
29258// NextWithContext advances to the next value.  If there was an error making
29259// the request the iterator does not advance and the error is returned.
29260func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
29261	if tracing.IsEnabled() {
29262		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
29263		defer func() {
29264			sc := -1
29265			if iter.Response().Response.Response != nil {
29266				sc = iter.Response().Response.Response.StatusCode
29267			}
29268			tracing.EndSpan(ctx, sc, err)
29269		}()
29270	}
29271	iter.i++
29272	if iter.i < len(iter.page.Values()) {
29273		return nil
29274	}
29275	err = iter.page.NextWithContext(ctx)
29276	if err != nil {
29277		iter.i--
29278		return err
29279	}
29280	iter.i = 0
29281	return nil
29282}
29283
29284// Next advances to the next value.  If there was an error making
29285// the request the iterator does not advance and the error is returned.
29286// Deprecated: Use NextWithContext() instead.
29287func (iter *SubnetListResultIterator) Next() error {
29288	return iter.NextWithContext(context.Background())
29289}
29290
29291// NotDone returns true if the enumeration should be started or is not yet complete.
29292func (iter SubnetListResultIterator) NotDone() bool {
29293	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29294}
29295
29296// Response returns the raw server response from the last page request.
29297func (iter SubnetListResultIterator) Response() SubnetListResult {
29298	return iter.page.Response()
29299}
29300
29301// Value returns the current value or a zero-initialized value if the
29302// iterator has advanced beyond the end of the collection.
29303func (iter SubnetListResultIterator) Value() Subnet {
29304	if !iter.page.NotDone() {
29305		return Subnet{}
29306	}
29307	return iter.page.Values()[iter.i]
29308}
29309
29310// Creates a new instance of the SubnetListResultIterator type.
29311func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
29312	return SubnetListResultIterator{page: page}
29313}
29314
29315// IsEmpty returns true if the ListResult contains no values.
29316func (slr SubnetListResult) IsEmpty() bool {
29317	return slr.Value == nil || len(*slr.Value) == 0
29318}
29319
29320// subnetListResultPreparer prepares a request to retrieve the next set of results.
29321// It returns nil if no more results exist.
29322func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
29323	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
29324		return nil, nil
29325	}
29326	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29327		autorest.AsJSON(),
29328		autorest.AsGet(),
29329		autorest.WithBaseURL(to.String(slr.NextLink)))
29330}
29331
29332// SubnetListResultPage contains a page of Subnet values.
29333type SubnetListResultPage struct {
29334	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
29335	slr SubnetListResult
29336}
29337
29338// NextWithContext advances to the next page of values.  If there was an error making
29339// the request the page does not advance and the error is returned.
29340func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
29341	if tracing.IsEnabled() {
29342		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
29343		defer func() {
29344			sc := -1
29345			if page.Response().Response.Response != nil {
29346				sc = page.Response().Response.Response.StatusCode
29347			}
29348			tracing.EndSpan(ctx, sc, err)
29349		}()
29350	}
29351	next, err := page.fn(ctx, page.slr)
29352	if err != nil {
29353		return err
29354	}
29355	page.slr = next
29356	return nil
29357}
29358
29359// Next advances to the next page of values.  If there was an error making
29360// the request the page does not advance and the error is returned.
29361// Deprecated: Use NextWithContext() instead.
29362func (page *SubnetListResultPage) Next() error {
29363	return page.NextWithContext(context.Background())
29364}
29365
29366// NotDone returns true if the page enumeration should be started or is not yet complete.
29367func (page SubnetListResultPage) NotDone() bool {
29368	return !page.slr.IsEmpty()
29369}
29370
29371// Response returns the raw server response from the last page request.
29372func (page SubnetListResultPage) Response() SubnetListResult {
29373	return page.slr
29374}
29375
29376// Values returns the slice of values for the current page or nil if there are no values.
29377func (page SubnetListResultPage) Values() []Subnet {
29378	if page.slr.IsEmpty() {
29379		return nil
29380	}
29381	return *page.slr.Value
29382}
29383
29384// Creates a new instance of the SubnetListResultPage type.
29385func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
29386	return SubnetListResultPage{fn: getNextPage}
29387}
29388
29389// SubnetPropertiesFormat properties of the subnet.
29390type SubnetPropertiesFormat struct {
29391	// AddressPrefix - The address prefix for the subnet.
29392	AddressPrefix *string `json:"addressPrefix,omitempty"`
29393	// AddressPrefixes - List of address prefixes for the subnet.
29394	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
29395	// NetworkSecurityGroup - The reference to the NetworkSecurityGroup resource.
29396	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
29397	// RouteTable - The reference to the RouteTable resource.
29398	RouteTable *RouteTable `json:"routeTable,omitempty"`
29399	// NatGateway - Nat gateway associated with this subnet.
29400	NatGateway *SubResource `json:"natGateway,omitempty"`
29401	// ServiceEndpoints - An array of service endpoints.
29402	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
29403	// ServiceEndpointPolicies - An array of service endpoint policies.
29404	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
29405	// PrivateEndpoints - READ-ONLY; An array of references to private endpoints.
29406	PrivateEndpoints *[]PrivateEndpoint `json:"privateEndpoints,omitempty"`
29407	// IPConfigurations - READ-ONLY; An array of references to the network interface IP configurations using subnet.
29408	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
29409	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
29410	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
29411	// ResourceNavigationLinks - READ-ONLY; An array of references to the external resources using subnet.
29412	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
29413	// ServiceAssociationLinks - READ-ONLY; An array of references to services injecting into this subnet.
29414	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
29415	// Delegations - An array of references to the delegations on the subnet.
29416	Delegations *[]Delegation `json:"delegations,omitempty"`
29417	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
29418	Purpose *string `json:"purpose,omitempty"`
29419	// ProvisioningState - READ-ONLY; The provisioning state of the subnet resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29420	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29421	// PrivateEndpointNetworkPolicies - Enable or Disable apply network policies on private end point in the subnet.
29422	PrivateEndpointNetworkPolicies *string `json:"privateEndpointNetworkPolicies,omitempty"`
29423	// PrivateLinkServiceNetworkPolicies - Enable or Disable apply network policies on private link service in the subnet.
29424	PrivateLinkServiceNetworkPolicies *string `json:"privateLinkServiceNetworkPolicies,omitempty"`
29425}
29426
29427// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
29428// operation.
29429type SubnetsCreateOrUpdateFuture struct {
29430	azure.Future
29431}
29432
29433// Result returns the result of the asynchronous operation.
29434// If the operation has not completed it will return an error.
29435func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
29436	var done bool
29437	done, err = future.DoneWithContext(context.Background(), client)
29438	if err != nil {
29439		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29440		return
29441	}
29442	if !done {
29443		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
29444		return
29445	}
29446	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29447	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
29448		s, err = client.CreateOrUpdateResponder(s.Response.Response)
29449		if err != nil {
29450			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
29451		}
29452	}
29453	return
29454}
29455
29456// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
29457// operation.
29458type SubnetsDeleteFuture struct {
29459	azure.Future
29460}
29461
29462// Result returns the result of the asynchronous operation.
29463// If the operation has not completed it will return an error.
29464func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
29465	var done bool
29466	done, err = future.DoneWithContext(context.Background(), client)
29467	if err != nil {
29468		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
29469		return
29470	}
29471	if !done {
29472		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
29473		return
29474	}
29475	ar.Response = future.Response()
29476	return
29477}
29478
29479// SubnetsPrepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
29480// long-running operation.
29481type SubnetsPrepareNetworkPoliciesFuture struct {
29482	azure.Future
29483}
29484
29485// Result returns the result of the asynchronous operation.
29486// If the operation has not completed it will return an error.
29487func (future *SubnetsPrepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
29488	var done bool
29489	done, err = future.DoneWithContext(context.Background(), client)
29490	if err != nil {
29491		err = autorest.NewErrorWithError(err, "network.SubnetsPrepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
29492		return
29493	}
29494	if !done {
29495		err = azure.NewAsyncOpIncompleteError("network.SubnetsPrepareNetworkPoliciesFuture")
29496		return
29497	}
29498	ar.Response = future.Response()
29499	return
29500}
29501
29502// SubnetsUnprepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
29503// long-running operation.
29504type SubnetsUnprepareNetworkPoliciesFuture struct {
29505	azure.Future
29506}
29507
29508// Result returns the result of the asynchronous operation.
29509// If the operation has not completed it will return an error.
29510func (future *SubnetsUnprepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
29511	var done bool
29512	done, err = future.DoneWithContext(context.Background(), client)
29513	if err != nil {
29514		err = autorest.NewErrorWithError(err, "network.SubnetsUnprepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
29515		return
29516	}
29517	if !done {
29518		err = azure.NewAsyncOpIncompleteError("network.SubnetsUnprepareNetworkPoliciesFuture")
29519		return
29520	}
29521	ar.Response = future.Response()
29522	return
29523}
29524
29525// SubResource reference to another subresource.
29526type SubResource struct {
29527	// ID - Resource ID.
29528	ID *string `json:"id,omitempty"`
29529}
29530
29531// TagsObject tags object for patch operations.
29532type TagsObject struct {
29533	// Tags - Resource tags.
29534	Tags map[string]*string `json:"tags"`
29535}
29536
29537// MarshalJSON is the custom marshaler for TagsObject.
29538func (toVar TagsObject) MarshalJSON() ([]byte, error) {
29539	objectMap := make(map[string]interface{})
29540	if toVar.Tags != nil {
29541		objectMap["tags"] = toVar.Tags
29542	}
29543	return json.Marshal(objectMap)
29544}
29545
29546// Topology topology of the specified resource group.
29547type Topology struct {
29548	autorest.Response `json:"-"`
29549	// ID - READ-ONLY; GUID representing the operation id.
29550	ID *string `json:"id,omitempty"`
29551	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
29552	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
29553	// LastModified - READ-ONLY; The datetime when the topology was last modified.
29554	LastModified *date.Time `json:"lastModified,omitempty"`
29555	// Resources - A list of topology resources.
29556	Resources *[]TopologyResource `json:"resources,omitempty"`
29557}
29558
29559// TopologyAssociation resources that have an association with the parent resource.
29560type TopologyAssociation struct {
29561	// Name - The name of the resource that is associated with the parent resource.
29562	Name *string `json:"name,omitempty"`
29563	// ResourceID - The ID of the resource that is associated with the parent resource.
29564	ResourceID *string `json:"resourceId,omitempty"`
29565	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
29566	AssociationType AssociationType `json:"associationType,omitempty"`
29567}
29568
29569// TopologyParameters parameters that define the representation of topology.
29570type TopologyParameters struct {
29571	// TargetResourceGroupName - The name of the target resource group to perform topology on.
29572	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
29573	// TargetVirtualNetwork - The reference to the Virtual Network resource.
29574	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
29575	// TargetSubnet - The reference to the Subnet resource.
29576	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
29577}
29578
29579// TopologyResource the network resource topology information for the given resource group.
29580type TopologyResource struct {
29581	// Name - Name of the resource.
29582	Name *string `json:"name,omitempty"`
29583	// ID - ID of the resource.
29584	ID *string `json:"id,omitempty"`
29585	// Location - Resource location.
29586	Location *string `json:"location,omitempty"`
29587	// Associations - Holds the associations the resource has with other resources in the resource group.
29588	Associations *[]TopologyAssociation `json:"associations,omitempty"`
29589}
29590
29591// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
29592type TrafficAnalyticsConfigurationProperties struct {
29593	// Enabled - Flag to enable/disable traffic analytics.
29594	Enabled *bool `json:"enabled,omitempty"`
29595	// WorkspaceID - The resource guid of the attached workspace.
29596	WorkspaceID *string `json:"workspaceId,omitempty"`
29597	// WorkspaceRegion - The location of the attached workspace.
29598	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
29599	// WorkspaceResourceID - Resource Id of the attached workspace.
29600	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
29601	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics.
29602	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
29603}
29604
29605// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
29606type TrafficAnalyticsProperties struct {
29607	// NetworkWatcherFlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
29608	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
29609}
29610
29611// TrafficSelectorPolicy an traffic selector policy for a virtual network gateway connection.
29612type TrafficSelectorPolicy struct {
29613	// LocalAddressRanges - A collection of local address spaces in CIDR format.
29614	LocalAddressRanges *[]string `json:"localAddressRanges,omitempty"`
29615	// RemoteAddressRanges - A collection of remote address spaces in CIDR format.
29616	RemoteAddressRanges *[]string `json:"remoteAddressRanges,omitempty"`
29617}
29618
29619// TroubleshootingDetails information gained from troubleshooting of specified resource.
29620type TroubleshootingDetails struct {
29621	// ID - The id of the get troubleshoot operation.
29622	ID *string `json:"id,omitempty"`
29623	// ReasonType - Reason type of failure.
29624	ReasonType *string `json:"reasonType,omitempty"`
29625	// Summary - A summary of troubleshooting.
29626	Summary *string `json:"summary,omitempty"`
29627	// Detail - Details on troubleshooting results.
29628	Detail *string `json:"detail,omitempty"`
29629	// RecommendedActions - List of recommended actions.
29630	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
29631}
29632
29633// TroubleshootingParameters parameters that define the resource to troubleshoot.
29634type TroubleshootingParameters struct {
29635	// TargetResourceID - The target resource to troubleshoot.
29636	TargetResourceID *string `json:"targetResourceId,omitempty"`
29637	// TroubleshootingProperties - Properties of the troubleshooting resource.
29638	*TroubleshootingProperties `json:"properties,omitempty"`
29639}
29640
29641// MarshalJSON is the custom marshaler for TroubleshootingParameters.
29642func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
29643	objectMap := make(map[string]interface{})
29644	if tp.TargetResourceID != nil {
29645		objectMap["targetResourceId"] = tp.TargetResourceID
29646	}
29647	if tp.TroubleshootingProperties != nil {
29648		objectMap["properties"] = tp.TroubleshootingProperties
29649	}
29650	return json.Marshal(objectMap)
29651}
29652
29653// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
29654func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
29655	var m map[string]*json.RawMessage
29656	err := json.Unmarshal(body, &m)
29657	if err != nil {
29658		return err
29659	}
29660	for k, v := range m {
29661		switch k {
29662		case "targetResourceId":
29663			if v != nil {
29664				var targetResourceID string
29665				err = json.Unmarshal(*v, &targetResourceID)
29666				if err != nil {
29667					return err
29668				}
29669				tp.TargetResourceID = &targetResourceID
29670			}
29671		case "properties":
29672			if v != nil {
29673				var troubleshootingProperties TroubleshootingProperties
29674				err = json.Unmarshal(*v, &troubleshootingProperties)
29675				if err != nil {
29676					return err
29677				}
29678				tp.TroubleshootingProperties = &troubleshootingProperties
29679			}
29680		}
29681	}
29682
29683	return nil
29684}
29685
29686// TroubleshootingProperties storage location provided for troubleshoot.
29687type TroubleshootingProperties struct {
29688	// StorageID - The ID for the storage account to save the troubleshoot result.
29689	StorageID *string `json:"storageId,omitempty"`
29690	// StoragePath - The path to the blob to save the troubleshoot result in.
29691	StoragePath *string `json:"storagePath,omitempty"`
29692}
29693
29694// TroubleshootingRecommendedActions recommended actions based on discovered issues.
29695type TroubleshootingRecommendedActions struct {
29696	// ActionID - ID of the recommended action.
29697	ActionID *string `json:"actionId,omitempty"`
29698	// ActionText - Description of recommended actions.
29699	ActionText *string `json:"actionText,omitempty"`
29700	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
29701	ActionURI *string `json:"actionUri,omitempty"`
29702	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
29703	ActionURIText *string `json:"actionUriText,omitempty"`
29704}
29705
29706// TroubleshootingResult troubleshooting information gained from specified resource.
29707type TroubleshootingResult struct {
29708	autorest.Response `json:"-"`
29709	// StartTime - The start time of the troubleshooting.
29710	StartTime *date.Time `json:"startTime,omitempty"`
29711	// EndTime - The end time of the troubleshooting.
29712	EndTime *date.Time `json:"endTime,omitempty"`
29713	// Code - The result code of the troubleshooting.
29714	Code *string `json:"code,omitempty"`
29715	// Results - Information from troubleshooting.
29716	Results *[]TroubleshootingDetails `json:"results,omitempty"`
29717}
29718
29719// TunnelConnectionHealth virtualNetworkGatewayConnection properties.
29720type TunnelConnectionHealth struct {
29721	// Tunnel - READ-ONLY; Tunnel name.
29722	Tunnel *string `json:"tunnel,omitempty"`
29723	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
29724	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
29725	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection.
29726	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
29727	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection.
29728	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
29729	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
29730	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
29731}
29732
29733// UnprepareNetworkPoliciesRequest details of UnprepareNetworkPolicies for Subnet.
29734type UnprepareNetworkPoliciesRequest struct {
29735	// ServiceName - The name of the service for which subnet is being unprepared for.
29736	ServiceName *string `json:"serviceName,omitempty"`
29737}
29738
29739// Usage the network resource usage.
29740type Usage struct {
29741	// ID - READ-ONLY; Resource identifier.
29742	ID *string `json:"id,omitempty"`
29743	// Unit - An enum describing the unit of measurement.
29744	Unit *string `json:"unit,omitempty"`
29745	// CurrentValue - The current value of the usage.
29746	CurrentValue *int64 `json:"currentValue,omitempty"`
29747	// Limit - The limit of usage.
29748	Limit *int64 `json:"limit,omitempty"`
29749	// Name - The name of the type of usage.
29750	Name *UsageName `json:"name,omitempty"`
29751}
29752
29753// UsageName the usage names.
29754type UsageName struct {
29755	// Value - A string describing the resource name.
29756	Value *string `json:"value,omitempty"`
29757	// LocalizedValue - A localized string describing the resource name.
29758	LocalizedValue *string `json:"localizedValue,omitempty"`
29759}
29760
29761// UsagesListResult the list usages operation response.
29762type UsagesListResult struct {
29763	autorest.Response `json:"-"`
29764	// Value - The list network resource usages.
29765	Value *[]Usage `json:"value,omitempty"`
29766	// NextLink - URL to get the next set of results.
29767	NextLink *string `json:"nextLink,omitempty"`
29768}
29769
29770// UsagesListResultIterator provides access to a complete listing of Usage values.
29771type UsagesListResultIterator struct {
29772	i    int
29773	page UsagesListResultPage
29774}
29775
29776// NextWithContext advances to the next value.  If there was an error making
29777// the request the iterator does not advance and the error is returned.
29778func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
29779	if tracing.IsEnabled() {
29780		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
29781		defer func() {
29782			sc := -1
29783			if iter.Response().Response.Response != nil {
29784				sc = iter.Response().Response.Response.StatusCode
29785			}
29786			tracing.EndSpan(ctx, sc, err)
29787		}()
29788	}
29789	iter.i++
29790	if iter.i < len(iter.page.Values()) {
29791		return nil
29792	}
29793	err = iter.page.NextWithContext(ctx)
29794	if err != nil {
29795		iter.i--
29796		return err
29797	}
29798	iter.i = 0
29799	return nil
29800}
29801
29802// Next advances to the next value.  If there was an error making
29803// the request the iterator does not advance and the error is returned.
29804// Deprecated: Use NextWithContext() instead.
29805func (iter *UsagesListResultIterator) Next() error {
29806	return iter.NextWithContext(context.Background())
29807}
29808
29809// NotDone returns true if the enumeration should be started or is not yet complete.
29810func (iter UsagesListResultIterator) NotDone() bool {
29811	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29812}
29813
29814// Response returns the raw server response from the last page request.
29815func (iter UsagesListResultIterator) Response() UsagesListResult {
29816	return iter.page.Response()
29817}
29818
29819// Value returns the current value or a zero-initialized value if the
29820// iterator has advanced beyond the end of the collection.
29821func (iter UsagesListResultIterator) Value() Usage {
29822	if !iter.page.NotDone() {
29823		return Usage{}
29824	}
29825	return iter.page.Values()[iter.i]
29826}
29827
29828// Creates a new instance of the UsagesListResultIterator type.
29829func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
29830	return UsagesListResultIterator{page: page}
29831}
29832
29833// IsEmpty returns true if the ListResult contains no values.
29834func (ulr UsagesListResult) IsEmpty() bool {
29835	return ulr.Value == nil || len(*ulr.Value) == 0
29836}
29837
29838// usagesListResultPreparer prepares a request to retrieve the next set of results.
29839// It returns nil if no more results exist.
29840func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
29841	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
29842		return nil, nil
29843	}
29844	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29845		autorest.AsJSON(),
29846		autorest.AsGet(),
29847		autorest.WithBaseURL(to.String(ulr.NextLink)))
29848}
29849
29850// UsagesListResultPage contains a page of Usage values.
29851type UsagesListResultPage struct {
29852	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
29853	ulr UsagesListResult
29854}
29855
29856// NextWithContext advances to the next page of values.  If there was an error making
29857// the request the page does not advance and the error is returned.
29858func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
29859	if tracing.IsEnabled() {
29860		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
29861		defer func() {
29862			sc := -1
29863			if page.Response().Response.Response != nil {
29864				sc = page.Response().Response.Response.StatusCode
29865			}
29866			tracing.EndSpan(ctx, sc, err)
29867		}()
29868	}
29869	next, err := page.fn(ctx, page.ulr)
29870	if err != nil {
29871		return err
29872	}
29873	page.ulr = next
29874	return nil
29875}
29876
29877// Next advances to the next page of values.  If there was an error making
29878// the request the page does not advance and the error is returned.
29879// Deprecated: Use NextWithContext() instead.
29880func (page *UsagesListResultPage) Next() error {
29881	return page.NextWithContext(context.Background())
29882}
29883
29884// NotDone returns true if the page enumeration should be started or is not yet complete.
29885func (page UsagesListResultPage) NotDone() bool {
29886	return !page.ulr.IsEmpty()
29887}
29888
29889// Response returns the raw server response from the last page request.
29890func (page UsagesListResultPage) Response() UsagesListResult {
29891	return page.ulr
29892}
29893
29894// Values returns the slice of values for the current page or nil if there are no values.
29895func (page UsagesListResultPage) Values() []Usage {
29896	if page.ulr.IsEmpty() {
29897		return nil
29898	}
29899	return *page.ulr.Value
29900}
29901
29902// Creates a new instance of the UsagesListResultPage type.
29903func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
29904	return UsagesListResultPage{fn: getNextPage}
29905}
29906
29907// VerificationIPFlowParameters parameters that define the IP flow to be verified.
29908type VerificationIPFlowParameters struct {
29909	// TargetResourceID - The ID of the target resource to perform next-hop on.
29910	TargetResourceID *string `json:"targetResourceId,omitempty"`
29911	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
29912	Direction Direction `json:"direction,omitempty"`
29913	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
29914	Protocol IPFlowProtocol `json:"protocol,omitempty"`
29915	// 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.
29916	LocalPort *string `json:"localPort,omitempty"`
29917	// 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.
29918	RemotePort *string `json:"remotePort,omitempty"`
29919	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
29920	LocalIPAddress *string `json:"localIPAddress,omitempty"`
29921	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
29922	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
29923	// 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).
29924	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
29925}
29926
29927// VerificationIPFlowResult results of IP flow verification on the target resource.
29928type VerificationIPFlowResult struct {
29929	autorest.Response `json:"-"`
29930	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
29931	Access Access `json:"access,omitempty"`
29932	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
29933	RuleName *string `json:"ruleName,omitempty"`
29934}
29935
29936// VirtualHub virtualHub Resource.
29937type VirtualHub struct {
29938	autorest.Response `json:"-"`
29939	// VirtualHubProperties - Properties of the virtual hub.
29940	*VirtualHubProperties `json:"properties,omitempty"`
29941	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
29942	Etag *string `json:"etag,omitempty"`
29943	// ID - Resource ID.
29944	ID *string `json:"id,omitempty"`
29945	// Name - READ-ONLY; Resource name.
29946	Name *string `json:"name,omitempty"`
29947	// Type - READ-ONLY; Resource type.
29948	Type *string `json:"type,omitempty"`
29949	// Location - Resource location.
29950	Location *string `json:"location,omitempty"`
29951	// Tags - Resource tags.
29952	Tags map[string]*string `json:"tags"`
29953}
29954
29955// MarshalJSON is the custom marshaler for VirtualHub.
29956func (vh VirtualHub) MarshalJSON() ([]byte, error) {
29957	objectMap := make(map[string]interface{})
29958	if vh.VirtualHubProperties != nil {
29959		objectMap["properties"] = vh.VirtualHubProperties
29960	}
29961	if vh.ID != nil {
29962		objectMap["id"] = vh.ID
29963	}
29964	if vh.Location != nil {
29965		objectMap["location"] = vh.Location
29966	}
29967	if vh.Tags != nil {
29968		objectMap["tags"] = vh.Tags
29969	}
29970	return json.Marshal(objectMap)
29971}
29972
29973// UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
29974func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
29975	var m map[string]*json.RawMessage
29976	err := json.Unmarshal(body, &m)
29977	if err != nil {
29978		return err
29979	}
29980	for k, v := range m {
29981		switch k {
29982		case "properties":
29983			if v != nil {
29984				var virtualHubProperties VirtualHubProperties
29985				err = json.Unmarshal(*v, &virtualHubProperties)
29986				if err != nil {
29987					return err
29988				}
29989				vh.VirtualHubProperties = &virtualHubProperties
29990			}
29991		case "etag":
29992			if v != nil {
29993				var etag string
29994				err = json.Unmarshal(*v, &etag)
29995				if err != nil {
29996					return err
29997				}
29998				vh.Etag = &etag
29999			}
30000		case "id":
30001			if v != nil {
30002				var ID string
30003				err = json.Unmarshal(*v, &ID)
30004				if err != nil {
30005					return err
30006				}
30007				vh.ID = &ID
30008			}
30009		case "name":
30010			if v != nil {
30011				var name string
30012				err = json.Unmarshal(*v, &name)
30013				if err != nil {
30014					return err
30015				}
30016				vh.Name = &name
30017			}
30018		case "type":
30019			if v != nil {
30020				var typeVar string
30021				err = json.Unmarshal(*v, &typeVar)
30022				if err != nil {
30023					return err
30024				}
30025				vh.Type = &typeVar
30026			}
30027		case "location":
30028			if v != nil {
30029				var location string
30030				err = json.Unmarshal(*v, &location)
30031				if err != nil {
30032					return err
30033				}
30034				vh.Location = &location
30035			}
30036		case "tags":
30037			if v != nil {
30038				var tags map[string]*string
30039				err = json.Unmarshal(*v, &tags)
30040				if err != nil {
30041					return err
30042				}
30043				vh.Tags = tags
30044			}
30045		}
30046	}
30047
30048	return nil
30049}
30050
30051// VirtualHubID virtual Hub identifier.
30052type VirtualHubID struct {
30053	// 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.
30054	ID *string `json:"id,omitempty"`
30055}
30056
30057// VirtualHubProperties parameters for VirtualHub.
30058type VirtualHubProperties struct {
30059	// VirtualWan - The VirtualWAN to which the VirtualHub belongs.
30060	VirtualWan *SubResource `json:"virtualWan,omitempty"`
30061	// VpnGateway - The VpnGateway associated with this VirtualHub.
30062	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
30063	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub.
30064	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
30065	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub.
30066	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
30067	// AzureFirewall - The azureFirewall associated with this VirtualHub.
30068	AzureFirewall *SubResource `json:"azureFirewall,omitempty"`
30069	// VirtualNetworkConnections - List of all vnet connections with this VirtualHub.
30070	VirtualNetworkConnections *[]HubVirtualNetworkConnection `json:"virtualNetworkConnections,omitempty"`
30071	// AddressPrefix - Address-prefix for this VirtualHub.
30072	AddressPrefix *string `json:"addressPrefix,omitempty"`
30073	// RouteTable - The routeTable associated with this virtual hub.
30074	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
30075	// ProvisioningState - READ-ONLY; The provisioning state of the virtual hub resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30076	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30077	// SecurityProviderName - The Security Provider name.
30078	SecurityProviderName *string `json:"securityProviderName,omitempty"`
30079	// VirtualHubRouteTableV2s - List of all virtual hub route table v2s associated with this VirtualHub.
30080	VirtualHubRouteTableV2s *[]VirtualHubRouteTableV2 `json:"virtualHubRouteTableV2s,omitempty"`
30081	// Sku - The sku of this VirtualHub.
30082	Sku *string `json:"sku,omitempty"`
30083}
30084
30085// VirtualHubRoute virtualHub route.
30086type VirtualHubRoute struct {
30087	// AddressPrefixes - List of all addressPrefixes.
30088	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
30089	// NextHopIPAddress - NextHop ip address.
30090	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
30091}
30092
30093// VirtualHubRouteTable virtualHub route table.
30094type VirtualHubRouteTable struct {
30095	// Routes - List of all routes.
30096	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
30097}
30098
30099// VirtualHubRouteTableV2 virtualHubRouteTableV2 Resource.
30100type VirtualHubRouteTableV2 struct {
30101	autorest.Response `json:"-"`
30102	// VirtualHubRouteTableV2Properties - Properties of the virtual hub route table v2.
30103	*VirtualHubRouteTableV2Properties `json:"properties,omitempty"`
30104	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
30105	Name *string `json:"name,omitempty"`
30106	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
30107	Etag *string `json:"etag,omitempty"`
30108	// ID - Resource ID.
30109	ID *string `json:"id,omitempty"`
30110}
30111
30112// MarshalJSON is the custom marshaler for VirtualHubRouteTableV2.
30113func (vhrtv VirtualHubRouteTableV2) MarshalJSON() ([]byte, error) {
30114	objectMap := make(map[string]interface{})
30115	if vhrtv.VirtualHubRouteTableV2Properties != nil {
30116		objectMap["properties"] = vhrtv.VirtualHubRouteTableV2Properties
30117	}
30118	if vhrtv.Name != nil {
30119		objectMap["name"] = vhrtv.Name
30120	}
30121	if vhrtv.ID != nil {
30122		objectMap["id"] = vhrtv.ID
30123	}
30124	return json.Marshal(objectMap)
30125}
30126
30127// UnmarshalJSON is the custom unmarshaler for VirtualHubRouteTableV2 struct.
30128func (vhrtv *VirtualHubRouteTableV2) UnmarshalJSON(body []byte) error {
30129	var m map[string]*json.RawMessage
30130	err := json.Unmarshal(body, &m)
30131	if err != nil {
30132		return err
30133	}
30134	for k, v := range m {
30135		switch k {
30136		case "properties":
30137			if v != nil {
30138				var virtualHubRouteTableV2Properties VirtualHubRouteTableV2Properties
30139				err = json.Unmarshal(*v, &virtualHubRouteTableV2Properties)
30140				if err != nil {
30141					return err
30142				}
30143				vhrtv.VirtualHubRouteTableV2Properties = &virtualHubRouteTableV2Properties
30144			}
30145		case "name":
30146			if v != nil {
30147				var name string
30148				err = json.Unmarshal(*v, &name)
30149				if err != nil {
30150					return err
30151				}
30152				vhrtv.Name = &name
30153			}
30154		case "etag":
30155			if v != nil {
30156				var etag string
30157				err = json.Unmarshal(*v, &etag)
30158				if err != nil {
30159					return err
30160				}
30161				vhrtv.Etag = &etag
30162			}
30163		case "id":
30164			if v != nil {
30165				var ID string
30166				err = json.Unmarshal(*v, &ID)
30167				if err != nil {
30168					return err
30169				}
30170				vhrtv.ID = &ID
30171			}
30172		}
30173	}
30174
30175	return nil
30176}
30177
30178// VirtualHubRouteTableV2Properties parameters for VirtualHubRouteTableV2.
30179type VirtualHubRouteTableV2Properties struct {
30180	// Routes - List of all routes.
30181	Routes *[]VirtualHubRouteV2 `json:"routes,omitempty"`
30182	// AttachedConnections - List of all connections attached to this route table v2.
30183	AttachedConnections *[]string `json:"attachedConnections,omitempty"`
30184	// ProvisioningState - READ-ONLY; The provisioning state of the virtual hub route table v2 resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30185	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30186}
30187
30188// VirtualHubRouteTableV2sCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
30189// a long-running operation.
30190type VirtualHubRouteTableV2sCreateOrUpdateFuture struct {
30191	azure.Future
30192}
30193
30194// Result returns the result of the asynchronous operation.
30195// If the operation has not completed it will return an error.
30196func (future *VirtualHubRouteTableV2sCreateOrUpdateFuture) Result(client VirtualHubRouteTableV2sClient) (vhrtv VirtualHubRouteTableV2, err error) {
30197	var done bool
30198	done, err = future.DoneWithContext(context.Background(), client)
30199	if err != nil {
30200		err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30201		return
30202	}
30203	if !done {
30204		err = azure.NewAsyncOpIncompleteError("network.VirtualHubRouteTableV2sCreateOrUpdateFuture")
30205		return
30206	}
30207	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30208	if vhrtv.Response.Response, err = future.GetResult(sender); err == nil && vhrtv.Response.Response.StatusCode != http.StatusNoContent {
30209		vhrtv, err = client.CreateOrUpdateResponder(vhrtv.Response.Response)
30210		if err != nil {
30211			err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sCreateOrUpdateFuture", "Result", vhrtv.Response.Response, "Failure responding to request")
30212		}
30213	}
30214	return
30215}
30216
30217// VirtualHubRouteTableV2sDeleteFuture an abstraction for monitoring and retrieving the results of a
30218// long-running operation.
30219type VirtualHubRouteTableV2sDeleteFuture struct {
30220	azure.Future
30221}
30222
30223// Result returns the result of the asynchronous operation.
30224// If the operation has not completed it will return an error.
30225func (future *VirtualHubRouteTableV2sDeleteFuture) Result(client VirtualHubRouteTableV2sClient) (ar autorest.Response, err error) {
30226	var done bool
30227	done, err = future.DoneWithContext(context.Background(), client)
30228	if err != nil {
30229		err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sDeleteFuture", "Result", future.Response(), "Polling failure")
30230		return
30231	}
30232	if !done {
30233		err = azure.NewAsyncOpIncompleteError("network.VirtualHubRouteTableV2sDeleteFuture")
30234		return
30235	}
30236	ar.Response = future.Response()
30237	return
30238}
30239
30240// VirtualHubRouteV2 virtualHubRouteTableV2 route.
30241type VirtualHubRouteV2 struct {
30242	// DestinationType - The type of destinations.
30243	DestinationType *string `json:"destinationType,omitempty"`
30244	// Destinations - List of all destinations.
30245	Destinations *[]string `json:"destinations,omitempty"`
30246	// NextHopType - The type of next hops.
30247	NextHopType *string `json:"nextHopType,omitempty"`
30248	// NextHops - NextHops ip address.
30249	NextHops *[]string `json:"nextHops,omitempty"`
30250}
30251
30252// VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30253// long-running operation.
30254type VirtualHubsCreateOrUpdateFuture struct {
30255	azure.Future
30256}
30257
30258// Result returns the result of the asynchronous operation.
30259// If the operation has not completed it will return an error.
30260func (future *VirtualHubsCreateOrUpdateFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
30261	var done bool
30262	done, err = future.DoneWithContext(context.Background(), client)
30263	if err != nil {
30264		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30265		return
30266	}
30267	if !done {
30268		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
30269		return
30270	}
30271	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30272	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
30273		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
30274		if err != nil {
30275			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
30276		}
30277	}
30278	return
30279}
30280
30281// VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
30282// operation.
30283type VirtualHubsDeleteFuture struct {
30284	azure.Future
30285}
30286
30287// Result returns the result of the asynchronous operation.
30288// If the operation has not completed it will return an error.
30289func (future *VirtualHubsDeleteFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
30290	var done bool
30291	done, err = future.DoneWithContext(context.Background(), client)
30292	if err != nil {
30293		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
30294		return
30295	}
30296	if !done {
30297		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
30298		return
30299	}
30300	ar.Response = future.Response()
30301	return
30302}
30303
30304// VirtualNetwork virtual Network resource.
30305type VirtualNetwork struct {
30306	autorest.Response `json:"-"`
30307	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
30308	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
30309	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
30310	Etag *string `json:"etag,omitempty"`
30311	// ID - Resource ID.
30312	ID *string `json:"id,omitempty"`
30313	// Name - READ-ONLY; Resource name.
30314	Name *string `json:"name,omitempty"`
30315	// Type - READ-ONLY; Resource type.
30316	Type *string `json:"type,omitempty"`
30317	// Location - Resource location.
30318	Location *string `json:"location,omitempty"`
30319	// Tags - Resource tags.
30320	Tags map[string]*string `json:"tags"`
30321}
30322
30323// MarshalJSON is the custom marshaler for VirtualNetwork.
30324func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
30325	objectMap := make(map[string]interface{})
30326	if vn.VirtualNetworkPropertiesFormat != nil {
30327		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
30328	}
30329	if vn.ID != nil {
30330		objectMap["id"] = vn.ID
30331	}
30332	if vn.Location != nil {
30333		objectMap["location"] = vn.Location
30334	}
30335	if vn.Tags != nil {
30336		objectMap["tags"] = vn.Tags
30337	}
30338	return json.Marshal(objectMap)
30339}
30340
30341// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
30342func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
30343	var m map[string]*json.RawMessage
30344	err := json.Unmarshal(body, &m)
30345	if err != nil {
30346		return err
30347	}
30348	for k, v := range m {
30349		switch k {
30350		case "properties":
30351			if v != nil {
30352				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
30353				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
30354				if err != nil {
30355					return err
30356				}
30357				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
30358			}
30359		case "etag":
30360			if v != nil {
30361				var etag string
30362				err = json.Unmarshal(*v, &etag)
30363				if err != nil {
30364					return err
30365				}
30366				vn.Etag = &etag
30367			}
30368		case "id":
30369			if v != nil {
30370				var ID string
30371				err = json.Unmarshal(*v, &ID)
30372				if err != nil {
30373					return err
30374				}
30375				vn.ID = &ID
30376			}
30377		case "name":
30378			if v != nil {
30379				var name string
30380				err = json.Unmarshal(*v, &name)
30381				if err != nil {
30382					return err
30383				}
30384				vn.Name = &name
30385			}
30386		case "type":
30387			if v != nil {
30388				var typeVar string
30389				err = json.Unmarshal(*v, &typeVar)
30390				if err != nil {
30391					return err
30392				}
30393				vn.Type = &typeVar
30394			}
30395		case "location":
30396			if v != nil {
30397				var location string
30398				err = json.Unmarshal(*v, &location)
30399				if err != nil {
30400					return err
30401				}
30402				vn.Location = &location
30403			}
30404		case "tags":
30405			if v != nil {
30406				var tags map[string]*string
30407				err = json.Unmarshal(*v, &tags)
30408				if err != nil {
30409					return err
30410				}
30411				vn.Tags = tags
30412			}
30413		}
30414	}
30415
30416	return nil
30417}
30418
30419// VirtualNetworkBgpCommunities bgp Communities sent over ExpressRoute with each route corresponding to a
30420// prefix in this VNET.
30421type VirtualNetworkBgpCommunities struct {
30422	// VirtualNetworkCommunity - The BGP community associated with the virtual network.
30423	VirtualNetworkCommunity *string `json:"virtualNetworkCommunity,omitempty"`
30424	// RegionalCommunity - READ-ONLY; The BGP community associated with the region of the virtual network.
30425	RegionalCommunity *string `json:"regionalCommunity,omitempty"`
30426}
30427
30428// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
30429// resource.
30430type VirtualNetworkConnectionGatewayReference struct {
30431	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
30432	ID *string `json:"id,omitempty"`
30433}
30434
30435// VirtualNetworkGateway a common class for general resource information.
30436type VirtualNetworkGateway struct {
30437	autorest.Response `json:"-"`
30438	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
30439	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
30440	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
30441	Etag *string `json:"etag,omitempty"`
30442	// ID - Resource ID.
30443	ID *string `json:"id,omitempty"`
30444	// Name - READ-ONLY; Resource name.
30445	Name *string `json:"name,omitempty"`
30446	// Type - READ-ONLY; Resource type.
30447	Type *string `json:"type,omitempty"`
30448	// Location - Resource location.
30449	Location *string `json:"location,omitempty"`
30450	// Tags - Resource tags.
30451	Tags map[string]*string `json:"tags"`
30452}
30453
30454// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
30455func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
30456	objectMap := make(map[string]interface{})
30457	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
30458		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
30459	}
30460	if vng.ID != nil {
30461		objectMap["id"] = vng.ID
30462	}
30463	if vng.Location != nil {
30464		objectMap["location"] = vng.Location
30465	}
30466	if vng.Tags != nil {
30467		objectMap["tags"] = vng.Tags
30468	}
30469	return json.Marshal(objectMap)
30470}
30471
30472// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
30473func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
30474	var m map[string]*json.RawMessage
30475	err := json.Unmarshal(body, &m)
30476	if err != nil {
30477		return err
30478	}
30479	for k, v := range m {
30480		switch k {
30481		case "properties":
30482			if v != nil {
30483				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
30484				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
30485				if err != nil {
30486					return err
30487				}
30488				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
30489			}
30490		case "etag":
30491			if v != nil {
30492				var etag string
30493				err = json.Unmarshal(*v, &etag)
30494				if err != nil {
30495					return err
30496				}
30497				vng.Etag = &etag
30498			}
30499		case "id":
30500			if v != nil {
30501				var ID string
30502				err = json.Unmarshal(*v, &ID)
30503				if err != nil {
30504					return err
30505				}
30506				vng.ID = &ID
30507			}
30508		case "name":
30509			if v != nil {
30510				var name string
30511				err = json.Unmarshal(*v, &name)
30512				if err != nil {
30513					return err
30514				}
30515				vng.Name = &name
30516			}
30517		case "type":
30518			if v != nil {
30519				var typeVar string
30520				err = json.Unmarshal(*v, &typeVar)
30521				if err != nil {
30522					return err
30523				}
30524				vng.Type = &typeVar
30525			}
30526		case "location":
30527			if v != nil {
30528				var location string
30529				err = json.Unmarshal(*v, &location)
30530				if err != nil {
30531					return err
30532				}
30533				vng.Location = &location
30534			}
30535		case "tags":
30536			if v != nil {
30537				var tags map[string]*string
30538				err = json.Unmarshal(*v, &tags)
30539				if err != nil {
30540					return err
30541				}
30542				vng.Tags = tags
30543			}
30544		}
30545	}
30546
30547	return nil
30548}
30549
30550// VirtualNetworkGatewayConnection a common class for general resource information.
30551type VirtualNetworkGatewayConnection struct {
30552	autorest.Response `json:"-"`
30553	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
30554	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
30555	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
30556	Etag *string `json:"etag,omitempty"`
30557	// ID - Resource ID.
30558	ID *string `json:"id,omitempty"`
30559	// Name - READ-ONLY; Resource name.
30560	Name *string `json:"name,omitempty"`
30561	// Type - READ-ONLY; Resource type.
30562	Type *string `json:"type,omitempty"`
30563	// Location - Resource location.
30564	Location *string `json:"location,omitempty"`
30565	// Tags - Resource tags.
30566	Tags map[string]*string `json:"tags"`
30567}
30568
30569// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
30570func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
30571	objectMap := make(map[string]interface{})
30572	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
30573		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
30574	}
30575	if vngc.ID != nil {
30576		objectMap["id"] = vngc.ID
30577	}
30578	if vngc.Location != nil {
30579		objectMap["location"] = vngc.Location
30580	}
30581	if vngc.Tags != nil {
30582		objectMap["tags"] = vngc.Tags
30583	}
30584	return json.Marshal(objectMap)
30585}
30586
30587// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
30588func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
30589	var m map[string]*json.RawMessage
30590	err := json.Unmarshal(body, &m)
30591	if err != nil {
30592		return err
30593	}
30594	for k, v := range m {
30595		switch k {
30596		case "properties":
30597			if v != nil {
30598				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
30599				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
30600				if err != nil {
30601					return err
30602				}
30603				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
30604			}
30605		case "etag":
30606			if v != nil {
30607				var etag string
30608				err = json.Unmarshal(*v, &etag)
30609				if err != nil {
30610					return err
30611				}
30612				vngc.Etag = &etag
30613			}
30614		case "id":
30615			if v != nil {
30616				var ID string
30617				err = json.Unmarshal(*v, &ID)
30618				if err != nil {
30619					return err
30620				}
30621				vngc.ID = &ID
30622			}
30623		case "name":
30624			if v != nil {
30625				var name string
30626				err = json.Unmarshal(*v, &name)
30627				if err != nil {
30628					return err
30629				}
30630				vngc.Name = &name
30631			}
30632		case "type":
30633			if v != nil {
30634				var typeVar string
30635				err = json.Unmarshal(*v, &typeVar)
30636				if err != nil {
30637					return err
30638				}
30639				vngc.Type = &typeVar
30640			}
30641		case "location":
30642			if v != nil {
30643				var location string
30644				err = json.Unmarshal(*v, &location)
30645				if err != nil {
30646					return err
30647				}
30648				vngc.Location = &location
30649			}
30650		case "tags":
30651			if v != nil {
30652				var tags map[string]*string
30653				err = json.Unmarshal(*v, &tags)
30654				if err != nil {
30655					return err
30656				}
30657				vngc.Tags = tags
30658			}
30659		}
30660	}
30661
30662	return nil
30663}
30664
30665// VirtualNetworkGatewayConnectionListEntity a common class for general resource information.
30666type VirtualNetworkGatewayConnectionListEntity struct {
30667	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
30668	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
30669	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
30670	Etag *string `json:"etag,omitempty"`
30671	// ID - Resource ID.
30672	ID *string `json:"id,omitempty"`
30673	// Name - READ-ONLY; Resource name.
30674	Name *string `json:"name,omitempty"`
30675	// Type - READ-ONLY; Resource type.
30676	Type *string `json:"type,omitempty"`
30677	// Location - Resource location.
30678	Location *string `json:"location,omitempty"`
30679	// Tags - Resource tags.
30680	Tags map[string]*string `json:"tags"`
30681}
30682
30683// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
30684func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
30685	objectMap := make(map[string]interface{})
30686	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
30687		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
30688	}
30689	if vngcle.ID != nil {
30690		objectMap["id"] = vngcle.ID
30691	}
30692	if vngcle.Location != nil {
30693		objectMap["location"] = vngcle.Location
30694	}
30695	if vngcle.Tags != nil {
30696		objectMap["tags"] = vngcle.Tags
30697	}
30698	return json.Marshal(objectMap)
30699}
30700
30701// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
30702func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
30703	var m map[string]*json.RawMessage
30704	err := json.Unmarshal(body, &m)
30705	if err != nil {
30706		return err
30707	}
30708	for k, v := range m {
30709		switch k {
30710		case "properties":
30711			if v != nil {
30712				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
30713				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
30714				if err != nil {
30715					return err
30716				}
30717				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
30718			}
30719		case "etag":
30720			if v != nil {
30721				var etag string
30722				err = json.Unmarshal(*v, &etag)
30723				if err != nil {
30724					return err
30725				}
30726				vngcle.Etag = &etag
30727			}
30728		case "id":
30729			if v != nil {
30730				var ID string
30731				err = json.Unmarshal(*v, &ID)
30732				if err != nil {
30733					return err
30734				}
30735				vngcle.ID = &ID
30736			}
30737		case "name":
30738			if v != nil {
30739				var name string
30740				err = json.Unmarshal(*v, &name)
30741				if err != nil {
30742					return err
30743				}
30744				vngcle.Name = &name
30745			}
30746		case "type":
30747			if v != nil {
30748				var typeVar string
30749				err = json.Unmarshal(*v, &typeVar)
30750				if err != nil {
30751					return err
30752				}
30753				vngcle.Type = &typeVar
30754			}
30755		case "location":
30756			if v != nil {
30757				var location string
30758				err = json.Unmarshal(*v, &location)
30759				if err != nil {
30760					return err
30761				}
30762				vngcle.Location = &location
30763			}
30764		case "tags":
30765			if v != nil {
30766				var tags map[string]*string
30767				err = json.Unmarshal(*v, &tags)
30768				if err != nil {
30769					return err
30770				}
30771				vngcle.Tags = tags
30772			}
30773		}
30774	}
30775
30776	return nil
30777}
30778
30779// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties.
30780type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
30781	// AuthorizationKey - The authorizationKey.
30782	AuthorizationKey *string `json:"authorizationKey,omitempty"`
30783	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
30784	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
30785	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
30786	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
30787	// LocalNetworkGateway2 - The reference to local network gateway resource.
30788	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
30789	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
30790	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
30791	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
30792	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
30793	// RoutingWeight - The routing weight.
30794	RoutingWeight *int32 `json:"routingWeight,omitempty"`
30795	// SharedKey - The IPSec shared key.
30796	SharedKey *string `json:"sharedKey,omitempty"`
30797	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
30798	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
30799	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
30800	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
30801	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
30802	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
30803	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
30804	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
30805	// Peer - The reference to peerings resource.
30806	Peer *SubResource `json:"peer,omitempty"`
30807	// EnableBgp - EnableBgp flag.
30808	EnableBgp *bool `json:"enableBgp,omitempty"`
30809	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
30810	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
30811	// IpsecPolicies - The IPSec Policies to be considered by this connection.
30812	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
30813	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
30814	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
30815	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway connection resource.
30816	ResourceGUID *string `json:"resourceGuid,omitempty"`
30817	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30818	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30819	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
30820	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
30821}
30822
30823// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
30824// service call.
30825type VirtualNetworkGatewayConnectionListResult struct {
30826	autorest.Response `json:"-"`
30827	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
30828	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
30829	// NextLink - READ-ONLY; The URL to get the next set of results.
30830	NextLink *string `json:"nextLink,omitempty"`
30831}
30832
30833// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
30834// VirtualNetworkGatewayConnection values.
30835type VirtualNetworkGatewayConnectionListResultIterator struct {
30836	i    int
30837	page VirtualNetworkGatewayConnectionListResultPage
30838}
30839
30840// NextWithContext advances to the next value.  If there was an error making
30841// the request the iterator does not advance and the error is returned.
30842func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
30843	if tracing.IsEnabled() {
30844		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
30845		defer func() {
30846			sc := -1
30847			if iter.Response().Response.Response != nil {
30848				sc = iter.Response().Response.Response.StatusCode
30849			}
30850			tracing.EndSpan(ctx, sc, err)
30851		}()
30852	}
30853	iter.i++
30854	if iter.i < len(iter.page.Values()) {
30855		return nil
30856	}
30857	err = iter.page.NextWithContext(ctx)
30858	if err != nil {
30859		iter.i--
30860		return err
30861	}
30862	iter.i = 0
30863	return nil
30864}
30865
30866// Next advances to the next value.  If there was an error making
30867// the request the iterator does not advance and the error is returned.
30868// Deprecated: Use NextWithContext() instead.
30869func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
30870	return iter.NextWithContext(context.Background())
30871}
30872
30873// NotDone returns true if the enumeration should be started or is not yet complete.
30874func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
30875	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30876}
30877
30878// Response returns the raw server response from the last page request.
30879func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
30880	return iter.page.Response()
30881}
30882
30883// Value returns the current value or a zero-initialized value if the
30884// iterator has advanced beyond the end of the collection.
30885func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
30886	if !iter.page.NotDone() {
30887		return VirtualNetworkGatewayConnection{}
30888	}
30889	return iter.page.Values()[iter.i]
30890}
30891
30892// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
30893func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
30894	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
30895}
30896
30897// IsEmpty returns true if the ListResult contains no values.
30898func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
30899	return vngclr.Value == nil || len(*vngclr.Value) == 0
30900}
30901
30902// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
30903// It returns nil if no more results exist.
30904func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
30905	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
30906		return nil, nil
30907	}
30908	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30909		autorest.AsJSON(),
30910		autorest.AsGet(),
30911		autorest.WithBaseURL(to.String(vngclr.NextLink)))
30912}
30913
30914// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
30915type VirtualNetworkGatewayConnectionListResultPage struct {
30916	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
30917	vngclr VirtualNetworkGatewayConnectionListResult
30918}
30919
30920// NextWithContext advances to the next page of values.  If there was an error making
30921// the request the page does not advance and the error is returned.
30922func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
30923	if tracing.IsEnabled() {
30924		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
30925		defer func() {
30926			sc := -1
30927			if page.Response().Response.Response != nil {
30928				sc = page.Response().Response.Response.StatusCode
30929			}
30930			tracing.EndSpan(ctx, sc, err)
30931		}()
30932	}
30933	next, err := page.fn(ctx, page.vngclr)
30934	if err != nil {
30935		return err
30936	}
30937	page.vngclr = next
30938	return nil
30939}
30940
30941// Next advances to the next page of values.  If there was an error making
30942// the request the page does not advance and the error is returned.
30943// Deprecated: Use NextWithContext() instead.
30944func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
30945	return page.NextWithContext(context.Background())
30946}
30947
30948// NotDone returns true if the page enumeration should be started or is not yet complete.
30949func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
30950	return !page.vngclr.IsEmpty()
30951}
30952
30953// Response returns the raw server response from the last page request.
30954func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
30955	return page.vngclr
30956}
30957
30958// Values returns the slice of values for the current page or nil if there are no values.
30959func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
30960	if page.vngclr.IsEmpty() {
30961		return nil
30962	}
30963	return *page.vngclr.Value
30964}
30965
30966// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
30967func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
30968	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
30969}
30970
30971// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties.
30972type VirtualNetworkGatewayConnectionPropertiesFormat struct {
30973	// AuthorizationKey - The authorizationKey.
30974	AuthorizationKey *string `json:"authorizationKey,omitempty"`
30975	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
30976	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
30977	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
30978	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
30979	// LocalNetworkGateway2 - The reference to local network gateway resource.
30980	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
30981	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
30982	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
30983	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
30984	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
30985	// RoutingWeight - The routing weight.
30986	RoutingWeight *int32 `json:"routingWeight,omitempty"`
30987	// SharedKey - The IPSec shared key.
30988	SharedKey *string `json:"sharedKey,omitempty"`
30989	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
30990	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
30991	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
30992	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
30993	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
30994	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
30995	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
30996	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
30997	// Peer - The reference to peerings resource.
30998	Peer *SubResource `json:"peer,omitempty"`
30999	// EnableBgp - EnableBgp flag.
31000	EnableBgp *bool `json:"enableBgp,omitempty"`
31001	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
31002	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
31003	// IpsecPolicies - The IPSec Policies to be considered by this connection.
31004	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
31005	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
31006	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
31007	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway connection resource.
31008	ResourceGUID *string `json:"resourceGuid,omitempty"`
31009	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31010	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31011	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
31012	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
31013}
31014
31015// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
31016// results of a long-running operation.
31017type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
31018	azure.Future
31019}
31020
31021// Result returns the result of the asynchronous operation.
31022// If the operation has not completed it will return an error.
31023func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
31024	var done bool
31025	done, err = future.DoneWithContext(context.Background(), client)
31026	if err != nil {
31027		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31028		return
31029	}
31030	if !done {
31031		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
31032		return
31033	}
31034	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31035	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
31036		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
31037		if err != nil {
31038			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
31039		}
31040	}
31041	return
31042}
31043
31044// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
31045// a long-running operation.
31046type VirtualNetworkGatewayConnectionsDeleteFuture struct {
31047	azure.Future
31048}
31049
31050// Result returns the result of the asynchronous operation.
31051// If the operation has not completed it will return an error.
31052func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
31053	var done bool
31054	done, err = future.DoneWithContext(context.Background(), client)
31055	if err != nil {
31056		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
31057		return
31058	}
31059	if !done {
31060		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
31061		return
31062	}
31063	ar.Response = future.Response()
31064	return
31065}
31066
31067// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
31068// results of a long-running operation.
31069type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
31070	azure.Future
31071}
31072
31073// Result returns the result of the asynchronous operation.
31074// If the operation has not completed it will return an error.
31075func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
31076	var done bool
31077	done, err = future.DoneWithContext(context.Background(), client)
31078	if err != nil {
31079		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
31080		return
31081	}
31082	if !done {
31083		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
31084		return
31085	}
31086	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31087	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
31088		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
31089		if err != nil {
31090			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
31091		}
31092	}
31093	return
31094}
31095
31096// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
31097// results of a long-running operation.
31098type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
31099	azure.Future
31100}
31101
31102// Result returns the result of the asynchronous operation.
31103// If the operation has not completed it will return an error.
31104func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
31105	var done bool
31106	done, err = future.DoneWithContext(context.Background(), client)
31107	if err != nil {
31108		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
31109		return
31110	}
31111	if !done {
31112		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
31113		return
31114	}
31115	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31116	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
31117		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
31118		if err != nil {
31119			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
31120		}
31121	}
31122	return
31123}
31124
31125// VirtualNetworkGatewayConnectionsStartPacketCaptureFuture an abstraction for monitoring and retrieving
31126// the results of a long-running operation.
31127type VirtualNetworkGatewayConnectionsStartPacketCaptureFuture struct {
31128	azure.Future
31129}
31130
31131// Result returns the result of the asynchronous operation.
31132// If the operation has not completed it will return an error.
31133func (future *VirtualNetworkGatewayConnectionsStartPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
31134	var done bool
31135	done, err = future.DoneWithContext(context.Background(), client)
31136	if err != nil {
31137		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
31138		return
31139	}
31140	if !done {
31141		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture")
31142		return
31143	}
31144	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31145	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
31146		s, err = client.StartPacketCaptureResponder(s.Response.Response)
31147		if err != nil {
31148			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
31149		}
31150	}
31151	return
31152}
31153
31154// VirtualNetworkGatewayConnectionsStopPacketCaptureFuture an abstraction for monitoring and retrieving the
31155// results of a long-running operation.
31156type VirtualNetworkGatewayConnectionsStopPacketCaptureFuture struct {
31157	azure.Future
31158}
31159
31160// Result returns the result of the asynchronous operation.
31161// If the operation has not completed it will return an error.
31162func (future *VirtualNetworkGatewayConnectionsStopPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
31163	var done bool
31164	done, err = future.DoneWithContext(context.Background(), client)
31165	if err != nil {
31166		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
31167		return
31168	}
31169	if !done {
31170		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture")
31171		return
31172	}
31173	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31174	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
31175		s, err = client.StopPacketCaptureResponder(s.Response.Response)
31176		if err != nil {
31177			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
31178		}
31179	}
31180	return
31181}
31182
31183// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
31184// results of a long-running operation.
31185type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
31186	azure.Future
31187}
31188
31189// Result returns the result of the asynchronous operation.
31190// If the operation has not completed it will return an error.
31191func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
31192	var done bool
31193	done, err = future.DoneWithContext(context.Background(), client)
31194	if err != nil {
31195		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
31196		return
31197	}
31198	if !done {
31199		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
31200		return
31201	}
31202	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31203	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
31204		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
31205		if err != nil {
31206			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
31207		}
31208	}
31209	return
31210}
31211
31212// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway.
31213type VirtualNetworkGatewayIPConfiguration struct {
31214	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
31215	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
31216	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
31217	Name *string `json:"name,omitempty"`
31218	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
31219	Etag *string `json:"etag,omitempty"`
31220	// ID - Resource ID.
31221	ID *string `json:"id,omitempty"`
31222}
31223
31224// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
31225func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
31226	objectMap := make(map[string]interface{})
31227	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
31228		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
31229	}
31230	if vngic.Name != nil {
31231		objectMap["name"] = vngic.Name
31232	}
31233	if vngic.ID != nil {
31234		objectMap["id"] = vngic.ID
31235	}
31236	return json.Marshal(objectMap)
31237}
31238
31239// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
31240func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
31241	var m map[string]*json.RawMessage
31242	err := json.Unmarshal(body, &m)
31243	if err != nil {
31244		return err
31245	}
31246	for k, v := range m {
31247		switch k {
31248		case "properties":
31249			if v != nil {
31250				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
31251				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
31252				if err != nil {
31253					return err
31254				}
31255				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
31256			}
31257		case "name":
31258			if v != nil {
31259				var name string
31260				err = json.Unmarshal(*v, &name)
31261				if err != nil {
31262					return err
31263				}
31264				vngic.Name = &name
31265			}
31266		case "etag":
31267			if v != nil {
31268				var etag string
31269				err = json.Unmarshal(*v, &etag)
31270				if err != nil {
31271					return err
31272				}
31273				vngic.Etag = &etag
31274			}
31275		case "id":
31276			if v != nil {
31277				var ID string
31278				err = json.Unmarshal(*v, &ID)
31279				if err != nil {
31280					return err
31281				}
31282				vngic.ID = &ID
31283			}
31284		}
31285	}
31286
31287	return nil
31288}
31289
31290// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration.
31291type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
31292	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
31293	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
31294	// Subnet - The reference to the subnet resource.
31295	Subnet *SubResource `json:"subnet,omitempty"`
31296	// PublicIPAddress - The reference to the public IP resource.
31297	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
31298	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31299	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31300}
31301
31302// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
31303// service call.
31304type VirtualNetworkGatewayListConnectionsResult struct {
31305	autorest.Response `json:"-"`
31306	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
31307	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
31308	// NextLink - READ-ONLY; The URL to get the next set of results.
31309	NextLink *string `json:"nextLink,omitempty"`
31310}
31311
31312// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
31313// VirtualNetworkGatewayConnectionListEntity values.
31314type VirtualNetworkGatewayListConnectionsResultIterator struct {
31315	i    int
31316	page VirtualNetworkGatewayListConnectionsResultPage
31317}
31318
31319// NextWithContext advances to the next value.  If there was an error making
31320// the request the iterator does not advance and the error is returned.
31321func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
31322	if tracing.IsEnabled() {
31323		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
31324		defer func() {
31325			sc := -1
31326			if iter.Response().Response.Response != nil {
31327				sc = iter.Response().Response.Response.StatusCode
31328			}
31329			tracing.EndSpan(ctx, sc, err)
31330		}()
31331	}
31332	iter.i++
31333	if iter.i < len(iter.page.Values()) {
31334		return nil
31335	}
31336	err = iter.page.NextWithContext(ctx)
31337	if err != nil {
31338		iter.i--
31339		return err
31340	}
31341	iter.i = 0
31342	return nil
31343}
31344
31345// Next advances to the next value.  If there was an error making
31346// the request the iterator does not advance and the error is returned.
31347// Deprecated: Use NextWithContext() instead.
31348func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
31349	return iter.NextWithContext(context.Background())
31350}
31351
31352// NotDone returns true if the enumeration should be started or is not yet complete.
31353func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
31354	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31355}
31356
31357// Response returns the raw server response from the last page request.
31358func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
31359	return iter.page.Response()
31360}
31361
31362// Value returns the current value or a zero-initialized value if the
31363// iterator has advanced beyond the end of the collection.
31364func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
31365	if !iter.page.NotDone() {
31366		return VirtualNetworkGatewayConnectionListEntity{}
31367	}
31368	return iter.page.Values()[iter.i]
31369}
31370
31371// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
31372func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
31373	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
31374}
31375
31376// IsEmpty returns true if the ListResult contains no values.
31377func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
31378	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
31379}
31380
31381// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
31382// It returns nil if no more results exist.
31383func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
31384	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
31385		return nil, nil
31386	}
31387	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31388		autorest.AsJSON(),
31389		autorest.AsGet(),
31390		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
31391}
31392
31393// VirtualNetworkGatewayListConnectionsResultPage contains a page of
31394// VirtualNetworkGatewayConnectionListEntity values.
31395type VirtualNetworkGatewayListConnectionsResultPage struct {
31396	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
31397	vnglcr VirtualNetworkGatewayListConnectionsResult
31398}
31399
31400// NextWithContext advances to the next page of values.  If there was an error making
31401// the request the page does not advance and the error is returned.
31402func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
31403	if tracing.IsEnabled() {
31404		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
31405		defer func() {
31406			sc := -1
31407			if page.Response().Response.Response != nil {
31408				sc = page.Response().Response.Response.StatusCode
31409			}
31410			tracing.EndSpan(ctx, sc, err)
31411		}()
31412	}
31413	next, err := page.fn(ctx, page.vnglcr)
31414	if err != nil {
31415		return err
31416	}
31417	page.vnglcr = next
31418	return nil
31419}
31420
31421// Next advances to the next page of values.  If there was an error making
31422// the request the page does not advance and the error is returned.
31423// Deprecated: Use NextWithContext() instead.
31424func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
31425	return page.NextWithContext(context.Background())
31426}
31427
31428// NotDone returns true if the page enumeration should be started or is not yet complete.
31429func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
31430	return !page.vnglcr.IsEmpty()
31431}
31432
31433// Response returns the raw server response from the last page request.
31434func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
31435	return page.vnglcr
31436}
31437
31438// Values returns the slice of values for the current page or nil if there are no values.
31439func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
31440	if page.vnglcr.IsEmpty() {
31441		return nil
31442	}
31443	return *page.vnglcr.Value
31444}
31445
31446// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
31447func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
31448	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
31449}
31450
31451// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
31452type VirtualNetworkGatewayListResult struct {
31453	autorest.Response `json:"-"`
31454	// Value - A list of VirtualNetworkGateway resources that exists in a resource group.
31455	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
31456	// NextLink - READ-ONLY; The URL to get the next set of results.
31457	NextLink *string `json:"nextLink,omitempty"`
31458}
31459
31460// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
31461// values.
31462type VirtualNetworkGatewayListResultIterator struct {
31463	i    int
31464	page VirtualNetworkGatewayListResultPage
31465}
31466
31467// NextWithContext advances to the next value.  If there was an error making
31468// the request the iterator does not advance and the error is returned.
31469func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
31470	if tracing.IsEnabled() {
31471		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
31472		defer func() {
31473			sc := -1
31474			if iter.Response().Response.Response != nil {
31475				sc = iter.Response().Response.Response.StatusCode
31476			}
31477			tracing.EndSpan(ctx, sc, err)
31478		}()
31479	}
31480	iter.i++
31481	if iter.i < len(iter.page.Values()) {
31482		return nil
31483	}
31484	err = iter.page.NextWithContext(ctx)
31485	if err != nil {
31486		iter.i--
31487		return err
31488	}
31489	iter.i = 0
31490	return nil
31491}
31492
31493// Next advances to the next value.  If there was an error making
31494// the request the iterator does not advance and the error is returned.
31495// Deprecated: Use NextWithContext() instead.
31496func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
31497	return iter.NextWithContext(context.Background())
31498}
31499
31500// NotDone returns true if the enumeration should be started or is not yet complete.
31501func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
31502	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31503}
31504
31505// Response returns the raw server response from the last page request.
31506func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
31507	return iter.page.Response()
31508}
31509
31510// Value returns the current value or a zero-initialized value if the
31511// iterator has advanced beyond the end of the collection.
31512func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
31513	if !iter.page.NotDone() {
31514		return VirtualNetworkGateway{}
31515	}
31516	return iter.page.Values()[iter.i]
31517}
31518
31519// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
31520func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
31521	return VirtualNetworkGatewayListResultIterator{page: page}
31522}
31523
31524// IsEmpty returns true if the ListResult contains no values.
31525func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
31526	return vnglr.Value == nil || len(*vnglr.Value) == 0
31527}
31528
31529// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
31530// It returns nil if no more results exist.
31531func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
31532	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
31533		return nil, nil
31534	}
31535	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31536		autorest.AsJSON(),
31537		autorest.AsGet(),
31538		autorest.WithBaseURL(to.String(vnglr.NextLink)))
31539}
31540
31541// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
31542type VirtualNetworkGatewayListResultPage struct {
31543	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
31544	vnglr VirtualNetworkGatewayListResult
31545}
31546
31547// NextWithContext advances to the next page of values.  If there was an error making
31548// the request the page does not advance and the error is returned.
31549func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
31550	if tracing.IsEnabled() {
31551		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
31552		defer func() {
31553			sc := -1
31554			if page.Response().Response.Response != nil {
31555				sc = page.Response().Response.Response.StatusCode
31556			}
31557			tracing.EndSpan(ctx, sc, err)
31558		}()
31559	}
31560	next, err := page.fn(ctx, page.vnglr)
31561	if err != nil {
31562		return err
31563	}
31564	page.vnglr = next
31565	return nil
31566}
31567
31568// Next advances to the next page of values.  If there was an error making
31569// the request the page does not advance and the error is returned.
31570// Deprecated: Use NextWithContext() instead.
31571func (page *VirtualNetworkGatewayListResultPage) Next() error {
31572	return page.NextWithContext(context.Background())
31573}
31574
31575// NotDone returns true if the page enumeration should be started or is not yet complete.
31576func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
31577	return !page.vnglr.IsEmpty()
31578}
31579
31580// Response returns the raw server response from the last page request.
31581func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
31582	return page.vnglr
31583}
31584
31585// Values returns the slice of values for the current page or nil if there are no values.
31586func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
31587	if page.vnglr.IsEmpty() {
31588		return nil
31589	}
31590	return *page.vnglr.Value
31591}
31592
31593// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
31594func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
31595	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
31596}
31597
31598// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties.
31599type VirtualNetworkGatewayPropertiesFormat struct {
31600	// IPConfigurations - IP configurations for virtual network gateway.
31601	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
31602	// GatewayType - The type of this virtual network gateway. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
31603	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
31604	// VpnType - The type of this virtual network gateway. Possible values include: 'PolicyBased', 'RouteBased'
31605	VpnType VpnType `json:"vpnType,omitempty"`
31606	// VpnGatewayGeneration - The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN. Possible values include: 'VpnGatewayGenerationNone', 'VpnGatewayGenerationGeneration1', 'VpnGatewayGenerationGeneration2'
31607	VpnGatewayGeneration VpnGatewayGeneration `json:"vpnGatewayGeneration,omitempty"`
31608	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
31609	EnableBgp *bool `json:"enableBgp,omitempty"`
31610	// ActiveActive - ActiveActive flag.
31611	ActiveActive *bool `json:"activeActive,omitempty"`
31612	// GatewayDefaultSite - The reference to the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.
31613	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
31614	// Sku - The reference to the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
31615	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
31616	// VpnClientConfiguration - The reference to the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
31617	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
31618	// BgpSettings - Virtual network gateway's BGP speaker settings.
31619	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
31620	// CustomRoutes - The reference to the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.
31621	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
31622	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway resource.
31623	ResourceGUID *string `json:"resourceGuid,omitempty"`
31624	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31625	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31626	// EnableDNSForwarding - Whether dns forwarding is enabled or not.
31627	EnableDNSForwarding *bool `json:"enableDnsForwarding,omitempty"`
31628	// InboundDNSForwardingEndpoint - READ-ONLY; The IP address allocated by the gateway to which dns requests can be sent.
31629	InboundDNSForwardingEndpoint *string `json:"inboundDnsForwardingEndpoint,omitempty"`
31630}
31631
31632// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31633// long-running operation.
31634type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
31635	azure.Future
31636}
31637
31638// Result returns the result of the asynchronous operation.
31639// If the operation has not completed it will return an error.
31640func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
31641	var done bool
31642	done, err = future.DoneWithContext(context.Background(), client)
31643	if err != nil {
31644		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31645		return
31646	}
31647	if !done {
31648		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
31649		return
31650	}
31651	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31652	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
31653		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
31654		if err != nil {
31655			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
31656		}
31657	}
31658	return
31659}
31660
31661// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
31662// long-running operation.
31663type VirtualNetworkGatewaysDeleteFuture struct {
31664	azure.Future
31665}
31666
31667// Result returns the result of the asynchronous operation.
31668// If the operation has not completed it will return an error.
31669func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
31670	var done bool
31671	done, err = future.DoneWithContext(context.Background(), client)
31672	if err != nil {
31673		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
31674		return
31675	}
31676	if !done {
31677		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
31678		return
31679	}
31680	ar.Response = future.Response()
31681	return
31682}
31683
31684// VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture an abstraction for monitoring
31685// and retrieving the results of a long-running operation.
31686type VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture struct {
31687	azure.Future
31688}
31689
31690// Result returns the result of the asynchronous operation.
31691// If the operation has not completed it will return an error.
31692func (future *VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
31693	var done bool
31694	done, err = future.DoneWithContext(context.Background(), client)
31695	if err != nil {
31696		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture", "Result", future.Response(), "Polling failure")
31697		return
31698	}
31699	if !done {
31700		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture")
31701		return
31702	}
31703	ar.Response = future.Response()
31704	return
31705}
31706
31707// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
31708// results of a long-running operation.
31709type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
31710	azure.Future
31711}
31712
31713// Result returns the result of the asynchronous operation.
31714// If the operation has not completed it will return an error.
31715func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
31716	var done bool
31717	done, err = future.DoneWithContext(context.Background(), client)
31718	if err != nil {
31719		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
31720		return
31721	}
31722	if !done {
31723		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
31724		return
31725	}
31726	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31727	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
31728		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
31729		if err != nil {
31730			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
31731		}
31732	}
31733	return
31734}
31735
31736// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
31737// of a long-running operation.
31738type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
31739	azure.Future
31740}
31741
31742// Result returns the result of the asynchronous operation.
31743// If the operation has not completed it will return an error.
31744func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
31745	var done bool
31746	done, err = future.DoneWithContext(context.Background(), client)
31747	if err != nil {
31748		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
31749		return
31750	}
31751	if !done {
31752		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
31753		return
31754	}
31755	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31756	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
31757		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
31758		if err != nil {
31759			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
31760		}
31761	}
31762	return
31763}
31764
31765// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
31766// of a long-running operation.
31767type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
31768	azure.Future
31769}
31770
31771// Result returns the result of the asynchronous operation.
31772// If the operation has not completed it will return an error.
31773func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
31774	var done bool
31775	done, err = future.DoneWithContext(context.Background(), client)
31776	if err != nil {
31777		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
31778		return
31779	}
31780	if !done {
31781		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
31782		return
31783	}
31784	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31785	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
31786		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
31787		if err != nil {
31788			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
31789		}
31790	}
31791	return
31792}
31793
31794// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
31795// a long-running operation.
31796type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
31797	azure.Future
31798}
31799
31800// Result returns the result of the asynchronous operation.
31801// If the operation has not completed it will return an error.
31802func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
31803	var done bool
31804	done, err = future.DoneWithContext(context.Background(), client)
31805	if err != nil {
31806		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
31807		return
31808	}
31809	if !done {
31810		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
31811		return
31812	}
31813	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31814	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
31815		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
31816		if err != nil {
31817			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
31818		}
31819	}
31820	return
31821}
31822
31823// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
31824// a long-running operation.
31825type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
31826	azure.Future
31827}
31828
31829// Result returns the result of the asynchronous operation.
31830// If the operation has not completed it will return an error.
31831func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
31832	var done bool
31833	done, err = future.DoneWithContext(context.Background(), client)
31834	if err != nil {
31835		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
31836		return
31837	}
31838	if !done {
31839		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
31840		return
31841	}
31842	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31843	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
31844		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
31845		if err != nil {
31846			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
31847		}
31848	}
31849	return
31850}
31851
31852// VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture an abstraction for monitoring and retrieving
31853// the results of a long-running operation.
31854type VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture struct {
31855	azure.Future
31856}
31857
31858// Result returns the result of the asynchronous operation.
31859// If the operation has not completed it will return an error.
31860func (future *VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture) Result(client VirtualNetworkGatewaysClient) (vcchdlr VpnClientConnectionHealthDetailListResult, err error) {
31861	var done bool
31862	done, err = future.DoneWithContext(context.Background(), client)
31863	if err != nil {
31864		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", future.Response(), "Polling failure")
31865		return
31866	}
31867	if !done {
31868		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture")
31869		return
31870	}
31871	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31872	if vcchdlr.Response.Response, err = future.GetResult(sender); err == nil && vcchdlr.Response.Response.StatusCode != http.StatusNoContent {
31873		vcchdlr, err = client.GetVpnclientConnectionHealthResponder(vcchdlr.Response.Response)
31874		if err != nil {
31875			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", vcchdlr.Response.Response, "Failure responding to request")
31876		}
31877	}
31878	return
31879}
31880
31881// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
31882// results of a long-running operation.
31883type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
31884	azure.Future
31885}
31886
31887// Result returns the result of the asynchronous operation.
31888// If the operation has not completed it will return an error.
31889func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
31890	var done bool
31891	done, err = future.DoneWithContext(context.Background(), client)
31892	if err != nil {
31893		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
31894		return
31895	}
31896	if !done {
31897		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
31898		return
31899	}
31900	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31901	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
31902		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
31903		if err != nil {
31904			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
31905		}
31906	}
31907	return
31908}
31909
31910// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
31911// results of a long-running operation.
31912type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
31913	azure.Future
31914}
31915
31916// Result returns the result of the asynchronous operation.
31917// If the operation has not completed it will return an error.
31918func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
31919	var done bool
31920	done, err = future.DoneWithContext(context.Background(), client)
31921	if err != nil {
31922		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
31923		return
31924	}
31925	if !done {
31926		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
31927		return
31928	}
31929	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31930	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
31931		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
31932		if err != nil {
31933			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
31934		}
31935	}
31936	return
31937}
31938
31939// VirtualNetworkGatewaySku virtualNetworkGatewaySku details.
31940type VirtualNetworkGatewaySku struct {
31941	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw4', 'VirtualNetworkGatewaySkuNameVpnGw5', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameVpnGw4AZ', 'VirtualNetworkGatewaySkuNameVpnGw5AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
31942	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
31943	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw4', 'VirtualNetworkGatewaySkuTierVpnGw5', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierVpnGw4AZ', 'VirtualNetworkGatewaySkuTierVpnGw5AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
31944	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
31945	// Capacity - READ-ONLY; The capacity.
31946	Capacity *int32 `json:"capacity,omitempty"`
31947}
31948
31949// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
31950// long-running operation.
31951type VirtualNetworkGatewaysResetFuture struct {
31952	azure.Future
31953}
31954
31955// Result returns the result of the asynchronous operation.
31956// If the operation has not completed it will return an error.
31957func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
31958	var done bool
31959	done, err = future.DoneWithContext(context.Background(), client)
31960	if err != nil {
31961		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
31962		return
31963	}
31964	if !done {
31965		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
31966		return
31967	}
31968	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31969	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
31970		vng, err = client.ResetResponder(vng.Response.Response)
31971		if err != nil {
31972			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
31973		}
31974	}
31975	return
31976}
31977
31978// VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
31979// results of a long-running operation.
31980type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
31981	azure.Future
31982}
31983
31984// Result returns the result of the asynchronous operation.
31985// If the operation has not completed it will return an error.
31986func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
31987	var done bool
31988	done, err = future.DoneWithContext(context.Background(), client)
31989	if err != nil {
31990		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
31991		return
31992	}
31993	if !done {
31994		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
31995		return
31996	}
31997	ar.Response = future.Response()
31998	return
31999}
32000
32001// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
32002// results of a long-running operation.
32003type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
32004	azure.Future
32005}
32006
32007// Result returns the result of the asynchronous operation.
32008// If the operation has not completed it will return an error.
32009func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
32010	var done bool
32011	done, err = future.DoneWithContext(context.Background(), client)
32012	if err != nil {
32013		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
32014		return
32015	}
32016	if !done {
32017		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
32018		return
32019	}
32020	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32021	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
32022		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
32023		if err != nil {
32024			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
32025		}
32026	}
32027	return
32028}
32029
32030// VirtualNetworkGatewaysStartPacketCaptureFuture an abstraction for monitoring and retrieving the results
32031// of a long-running operation.
32032type VirtualNetworkGatewaysStartPacketCaptureFuture struct {
32033	azure.Future
32034}
32035
32036// Result returns the result of the asynchronous operation.
32037// If the operation has not completed it will return an error.
32038func (future *VirtualNetworkGatewaysStartPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
32039	var done bool
32040	done, err = future.DoneWithContext(context.Background(), client)
32041	if err != nil {
32042		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
32043		return
32044	}
32045	if !done {
32046		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStartPacketCaptureFuture")
32047		return
32048	}
32049	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32050	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
32051		s, err = client.StartPacketCaptureResponder(s.Response.Response)
32052		if err != nil {
32053			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
32054		}
32055	}
32056	return
32057}
32058
32059// VirtualNetworkGatewaysStopPacketCaptureFuture an abstraction for monitoring and retrieving the results
32060// of a long-running operation.
32061type VirtualNetworkGatewaysStopPacketCaptureFuture struct {
32062	azure.Future
32063}
32064
32065// Result returns the result of the asynchronous operation.
32066// If the operation has not completed it will return an error.
32067func (future *VirtualNetworkGatewaysStopPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
32068	var done bool
32069	done, err = future.DoneWithContext(context.Background(), client)
32070	if err != nil {
32071		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
32072		return
32073	}
32074	if !done {
32075		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStopPacketCaptureFuture")
32076		return
32077	}
32078	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32079	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
32080		s, err = client.StopPacketCaptureResponder(s.Response.Response)
32081		if err != nil {
32082			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
32083		}
32084	}
32085	return
32086}
32087
32088// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
32089// long-running operation.
32090type VirtualNetworkGatewaysUpdateTagsFuture struct {
32091	azure.Future
32092}
32093
32094// Result returns the result of the asynchronous operation.
32095// If the operation has not completed it will return an error.
32096func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
32097	var done bool
32098	done, err = future.DoneWithContext(context.Background(), client)
32099	if err != nil {
32100		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
32101		return
32102	}
32103	if !done {
32104		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
32105		return
32106	}
32107	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32108	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
32109		vng, err = client.UpdateTagsResponder(vng.Response.Response)
32110		if err != nil {
32111			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
32112		}
32113	}
32114	return
32115}
32116
32117// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
32118type VirtualNetworkListResult struct {
32119	autorest.Response `json:"-"`
32120	// Value - A list of VirtualNetwork resources in a resource group.
32121	Value *[]VirtualNetwork `json:"value,omitempty"`
32122	// NextLink - The URL to get the next set of results.
32123	NextLink *string `json:"nextLink,omitempty"`
32124}
32125
32126// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
32127type VirtualNetworkListResultIterator struct {
32128	i    int
32129	page VirtualNetworkListResultPage
32130}
32131
32132// NextWithContext advances to the next value.  If there was an error making
32133// the request the iterator does not advance and the error is returned.
32134func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
32135	if tracing.IsEnabled() {
32136		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
32137		defer func() {
32138			sc := -1
32139			if iter.Response().Response.Response != nil {
32140				sc = iter.Response().Response.Response.StatusCode
32141			}
32142			tracing.EndSpan(ctx, sc, err)
32143		}()
32144	}
32145	iter.i++
32146	if iter.i < len(iter.page.Values()) {
32147		return nil
32148	}
32149	err = iter.page.NextWithContext(ctx)
32150	if err != nil {
32151		iter.i--
32152		return err
32153	}
32154	iter.i = 0
32155	return nil
32156}
32157
32158// Next advances to the next value.  If there was an error making
32159// the request the iterator does not advance and the error is returned.
32160// Deprecated: Use NextWithContext() instead.
32161func (iter *VirtualNetworkListResultIterator) Next() error {
32162	return iter.NextWithContext(context.Background())
32163}
32164
32165// NotDone returns true if the enumeration should be started or is not yet complete.
32166func (iter VirtualNetworkListResultIterator) NotDone() bool {
32167	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32168}
32169
32170// Response returns the raw server response from the last page request.
32171func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
32172	return iter.page.Response()
32173}
32174
32175// Value returns the current value or a zero-initialized value if the
32176// iterator has advanced beyond the end of the collection.
32177func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
32178	if !iter.page.NotDone() {
32179		return VirtualNetwork{}
32180	}
32181	return iter.page.Values()[iter.i]
32182}
32183
32184// Creates a new instance of the VirtualNetworkListResultIterator type.
32185func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
32186	return VirtualNetworkListResultIterator{page: page}
32187}
32188
32189// IsEmpty returns true if the ListResult contains no values.
32190func (vnlr VirtualNetworkListResult) IsEmpty() bool {
32191	return vnlr.Value == nil || len(*vnlr.Value) == 0
32192}
32193
32194// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
32195// It returns nil if no more results exist.
32196func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
32197	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
32198		return nil, nil
32199	}
32200	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32201		autorest.AsJSON(),
32202		autorest.AsGet(),
32203		autorest.WithBaseURL(to.String(vnlr.NextLink)))
32204}
32205
32206// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
32207type VirtualNetworkListResultPage struct {
32208	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
32209	vnlr VirtualNetworkListResult
32210}
32211
32212// NextWithContext advances to the next page of values.  If there was an error making
32213// the request the page does not advance and the error is returned.
32214func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
32215	if tracing.IsEnabled() {
32216		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
32217		defer func() {
32218			sc := -1
32219			if page.Response().Response.Response != nil {
32220				sc = page.Response().Response.Response.StatusCode
32221			}
32222			tracing.EndSpan(ctx, sc, err)
32223		}()
32224	}
32225	next, err := page.fn(ctx, page.vnlr)
32226	if err != nil {
32227		return err
32228	}
32229	page.vnlr = next
32230	return nil
32231}
32232
32233// Next advances to the next page of values.  If there was an error making
32234// the request the page does not advance and the error is returned.
32235// Deprecated: Use NextWithContext() instead.
32236func (page *VirtualNetworkListResultPage) Next() error {
32237	return page.NextWithContext(context.Background())
32238}
32239
32240// NotDone returns true if the page enumeration should be started or is not yet complete.
32241func (page VirtualNetworkListResultPage) NotDone() bool {
32242	return !page.vnlr.IsEmpty()
32243}
32244
32245// Response returns the raw server response from the last page request.
32246func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
32247	return page.vnlr
32248}
32249
32250// Values returns the slice of values for the current page or nil if there are no values.
32251func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
32252	if page.vnlr.IsEmpty() {
32253		return nil
32254	}
32255	return *page.vnlr.Value
32256}
32257
32258// Creates a new instance of the VirtualNetworkListResultPage type.
32259func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
32260	return VirtualNetworkListResultPage{fn: getNextPage}
32261}
32262
32263// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
32264type VirtualNetworkListUsageResult struct {
32265	autorest.Response `json:"-"`
32266	// Value - READ-ONLY; VirtualNetwork usage stats.
32267	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
32268	// NextLink - The URL to get the next set of results.
32269	NextLink *string `json:"nextLink,omitempty"`
32270}
32271
32272// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
32273// values.
32274type VirtualNetworkListUsageResultIterator struct {
32275	i    int
32276	page VirtualNetworkListUsageResultPage
32277}
32278
32279// NextWithContext advances to the next value.  If there was an error making
32280// the request the iterator does not advance and the error is returned.
32281func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
32282	if tracing.IsEnabled() {
32283		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
32284		defer func() {
32285			sc := -1
32286			if iter.Response().Response.Response != nil {
32287				sc = iter.Response().Response.Response.StatusCode
32288			}
32289			tracing.EndSpan(ctx, sc, err)
32290		}()
32291	}
32292	iter.i++
32293	if iter.i < len(iter.page.Values()) {
32294		return nil
32295	}
32296	err = iter.page.NextWithContext(ctx)
32297	if err != nil {
32298		iter.i--
32299		return err
32300	}
32301	iter.i = 0
32302	return nil
32303}
32304
32305// Next advances to the next value.  If there was an error making
32306// the request the iterator does not advance and the error is returned.
32307// Deprecated: Use NextWithContext() instead.
32308func (iter *VirtualNetworkListUsageResultIterator) Next() error {
32309	return iter.NextWithContext(context.Background())
32310}
32311
32312// NotDone returns true if the enumeration should be started or is not yet complete.
32313func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
32314	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32315}
32316
32317// Response returns the raw server response from the last page request.
32318func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
32319	return iter.page.Response()
32320}
32321
32322// Value returns the current value or a zero-initialized value if the
32323// iterator has advanced beyond the end of the collection.
32324func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
32325	if !iter.page.NotDone() {
32326		return VirtualNetworkUsage{}
32327	}
32328	return iter.page.Values()[iter.i]
32329}
32330
32331// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
32332func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
32333	return VirtualNetworkListUsageResultIterator{page: page}
32334}
32335
32336// IsEmpty returns true if the ListResult contains no values.
32337func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
32338	return vnlur.Value == nil || len(*vnlur.Value) == 0
32339}
32340
32341// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
32342// It returns nil if no more results exist.
32343func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
32344	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
32345		return nil, nil
32346	}
32347	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32348		autorest.AsJSON(),
32349		autorest.AsGet(),
32350		autorest.WithBaseURL(to.String(vnlur.NextLink)))
32351}
32352
32353// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
32354type VirtualNetworkListUsageResultPage struct {
32355	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
32356	vnlur VirtualNetworkListUsageResult
32357}
32358
32359// NextWithContext advances to the next page of values.  If there was an error making
32360// the request the page does not advance and the error is returned.
32361func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
32362	if tracing.IsEnabled() {
32363		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
32364		defer func() {
32365			sc := -1
32366			if page.Response().Response.Response != nil {
32367				sc = page.Response().Response.Response.StatusCode
32368			}
32369			tracing.EndSpan(ctx, sc, err)
32370		}()
32371	}
32372	next, err := page.fn(ctx, page.vnlur)
32373	if err != nil {
32374		return err
32375	}
32376	page.vnlur = next
32377	return nil
32378}
32379
32380// Next advances to the next page of values.  If there was an error making
32381// the request the page does not advance and the error is returned.
32382// Deprecated: Use NextWithContext() instead.
32383func (page *VirtualNetworkListUsageResultPage) Next() error {
32384	return page.NextWithContext(context.Background())
32385}
32386
32387// NotDone returns true if the page enumeration should be started or is not yet complete.
32388func (page VirtualNetworkListUsageResultPage) NotDone() bool {
32389	return !page.vnlur.IsEmpty()
32390}
32391
32392// Response returns the raw server response from the last page request.
32393func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
32394	return page.vnlur
32395}
32396
32397// Values returns the slice of values for the current page or nil if there are no values.
32398func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
32399	if page.vnlur.IsEmpty() {
32400		return nil
32401	}
32402	return *page.vnlur.Value
32403}
32404
32405// Creates a new instance of the VirtualNetworkListUsageResultPage type.
32406func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
32407	return VirtualNetworkListUsageResultPage{fn: getNextPage}
32408}
32409
32410// VirtualNetworkPeering peerings in a virtual network resource.
32411type VirtualNetworkPeering struct {
32412	autorest.Response `json:"-"`
32413	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
32414	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
32415	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32416	Name *string `json:"name,omitempty"`
32417	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32418	Etag *string `json:"etag,omitempty"`
32419	// ID - Resource ID.
32420	ID *string `json:"id,omitempty"`
32421}
32422
32423// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
32424func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
32425	objectMap := make(map[string]interface{})
32426	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
32427		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
32428	}
32429	if vnp.Name != nil {
32430		objectMap["name"] = vnp.Name
32431	}
32432	if vnp.ID != nil {
32433		objectMap["id"] = vnp.ID
32434	}
32435	return json.Marshal(objectMap)
32436}
32437
32438// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
32439func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
32440	var m map[string]*json.RawMessage
32441	err := json.Unmarshal(body, &m)
32442	if err != nil {
32443		return err
32444	}
32445	for k, v := range m {
32446		switch k {
32447		case "properties":
32448			if v != nil {
32449				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
32450				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
32451				if err != nil {
32452					return err
32453				}
32454				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
32455			}
32456		case "name":
32457			if v != nil {
32458				var name string
32459				err = json.Unmarshal(*v, &name)
32460				if err != nil {
32461					return err
32462				}
32463				vnp.Name = &name
32464			}
32465		case "etag":
32466			if v != nil {
32467				var etag string
32468				err = json.Unmarshal(*v, &etag)
32469				if err != nil {
32470					return err
32471				}
32472				vnp.Etag = &etag
32473			}
32474		case "id":
32475			if v != nil {
32476				var ID string
32477				err = json.Unmarshal(*v, &ID)
32478				if err != nil {
32479					return err
32480				}
32481				vnp.ID = &ID
32482			}
32483		}
32484	}
32485
32486	return nil
32487}
32488
32489// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
32490// belong to a virtual network.
32491type VirtualNetworkPeeringListResult struct {
32492	autorest.Response `json:"-"`
32493	// Value - The peerings in a virtual network.
32494	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
32495	// NextLink - The URL to get the next set of results.
32496	NextLink *string `json:"nextLink,omitempty"`
32497}
32498
32499// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
32500// values.
32501type VirtualNetworkPeeringListResultIterator struct {
32502	i    int
32503	page VirtualNetworkPeeringListResultPage
32504}
32505
32506// NextWithContext advances to the next value.  If there was an error making
32507// the request the iterator does not advance and the error is returned.
32508func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
32509	if tracing.IsEnabled() {
32510		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
32511		defer func() {
32512			sc := -1
32513			if iter.Response().Response.Response != nil {
32514				sc = iter.Response().Response.Response.StatusCode
32515			}
32516			tracing.EndSpan(ctx, sc, err)
32517		}()
32518	}
32519	iter.i++
32520	if iter.i < len(iter.page.Values()) {
32521		return nil
32522	}
32523	err = iter.page.NextWithContext(ctx)
32524	if err != nil {
32525		iter.i--
32526		return err
32527	}
32528	iter.i = 0
32529	return nil
32530}
32531
32532// Next advances to the next value.  If there was an error making
32533// the request the iterator does not advance and the error is returned.
32534// Deprecated: Use NextWithContext() instead.
32535func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
32536	return iter.NextWithContext(context.Background())
32537}
32538
32539// NotDone returns true if the enumeration should be started or is not yet complete.
32540func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
32541	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32542}
32543
32544// Response returns the raw server response from the last page request.
32545func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
32546	return iter.page.Response()
32547}
32548
32549// Value returns the current value or a zero-initialized value if the
32550// iterator has advanced beyond the end of the collection.
32551func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
32552	if !iter.page.NotDone() {
32553		return VirtualNetworkPeering{}
32554	}
32555	return iter.page.Values()[iter.i]
32556}
32557
32558// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
32559func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
32560	return VirtualNetworkPeeringListResultIterator{page: page}
32561}
32562
32563// IsEmpty returns true if the ListResult contains no values.
32564func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
32565	return vnplr.Value == nil || len(*vnplr.Value) == 0
32566}
32567
32568// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
32569// It returns nil if no more results exist.
32570func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
32571	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
32572		return nil, nil
32573	}
32574	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32575		autorest.AsJSON(),
32576		autorest.AsGet(),
32577		autorest.WithBaseURL(to.String(vnplr.NextLink)))
32578}
32579
32580// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
32581type VirtualNetworkPeeringListResultPage struct {
32582	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
32583	vnplr VirtualNetworkPeeringListResult
32584}
32585
32586// NextWithContext advances to the next page of values.  If there was an error making
32587// the request the page does not advance and the error is returned.
32588func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
32589	if tracing.IsEnabled() {
32590		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
32591		defer func() {
32592			sc := -1
32593			if page.Response().Response.Response != nil {
32594				sc = page.Response().Response.Response.StatusCode
32595			}
32596			tracing.EndSpan(ctx, sc, err)
32597		}()
32598	}
32599	next, err := page.fn(ctx, page.vnplr)
32600	if err != nil {
32601		return err
32602	}
32603	page.vnplr = next
32604	return nil
32605}
32606
32607// Next advances to the next page of values.  If there was an error making
32608// the request the page does not advance and the error is returned.
32609// Deprecated: Use NextWithContext() instead.
32610func (page *VirtualNetworkPeeringListResultPage) Next() error {
32611	return page.NextWithContext(context.Background())
32612}
32613
32614// NotDone returns true if the page enumeration should be started or is not yet complete.
32615func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
32616	return !page.vnplr.IsEmpty()
32617}
32618
32619// Response returns the raw server response from the last page request.
32620func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
32621	return page.vnplr
32622}
32623
32624// Values returns the slice of values for the current page or nil if there are no values.
32625func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
32626	if page.vnplr.IsEmpty() {
32627		return nil
32628	}
32629	return *page.vnplr.Value
32630}
32631
32632// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
32633func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
32634	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
32635}
32636
32637// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
32638type VirtualNetworkPeeringPropertiesFormat struct {
32639	// AllowVirtualNetworkAccess - Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.
32640	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
32641	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.
32642	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
32643	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
32644	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
32645	// 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.
32646	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
32647	// RemoteVirtualNetwork - The reference to 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).
32648	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
32649	// RemoteAddressSpace - The reference to the remote virtual network address space.
32650	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
32651	// PeeringState - The status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
32652	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
32653	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32654	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32655}
32656
32657// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32658// long-running operation.
32659type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
32660	azure.Future
32661}
32662
32663// Result returns the result of the asynchronous operation.
32664// If the operation has not completed it will return an error.
32665func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
32666	var done bool
32667	done, err = future.DoneWithContext(context.Background(), client)
32668	if err != nil {
32669		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32670		return
32671	}
32672	if !done {
32673		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
32674		return
32675	}
32676	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32677	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
32678		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
32679		if err != nil {
32680			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
32681		}
32682	}
32683	return
32684}
32685
32686// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
32687// long-running operation.
32688type VirtualNetworkPeeringsDeleteFuture struct {
32689	azure.Future
32690}
32691
32692// Result returns the result of the asynchronous operation.
32693// If the operation has not completed it will return an error.
32694func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
32695	var done bool
32696	done, err = future.DoneWithContext(context.Background(), client)
32697	if err != nil {
32698		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
32699		return
32700	}
32701	if !done {
32702		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
32703		return
32704	}
32705	ar.Response = future.Response()
32706	return
32707}
32708
32709// VirtualNetworkPropertiesFormat properties of the virtual network.
32710type VirtualNetworkPropertiesFormat struct {
32711	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
32712	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
32713	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
32714	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
32715	// Subnets - A list of subnets in a Virtual Network.
32716	Subnets *[]Subnet `json:"subnets,omitempty"`
32717	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
32718	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
32719	// ResourceGUID - READ-ONLY; The resourceGuid property of the Virtual Network resource.
32720	ResourceGUID *string `json:"resourceGuid,omitempty"`
32721	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32722	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32723	// 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.
32724	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
32725	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
32726	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
32727	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
32728	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
32729	// BgpCommunities - Bgp Communities sent over ExpressRoute with each route corresponding to a prefix in this VNET.
32730	BgpCommunities *VirtualNetworkBgpCommunities `json:"bgpCommunities,omitempty"`
32731}
32732
32733// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32734// long-running operation.
32735type VirtualNetworksCreateOrUpdateFuture struct {
32736	azure.Future
32737}
32738
32739// Result returns the result of the asynchronous operation.
32740// If the operation has not completed it will return an error.
32741func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
32742	var done bool
32743	done, err = future.DoneWithContext(context.Background(), client)
32744	if err != nil {
32745		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32746		return
32747	}
32748	if !done {
32749		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
32750		return
32751	}
32752	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32753	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
32754		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
32755		if err != nil {
32756			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
32757		}
32758	}
32759	return
32760}
32761
32762// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
32763// operation.
32764type VirtualNetworksDeleteFuture struct {
32765	azure.Future
32766}
32767
32768// Result returns the result of the asynchronous operation.
32769// If the operation has not completed it will return an error.
32770func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
32771	var done bool
32772	done, err = future.DoneWithContext(context.Background(), client)
32773	if err != nil {
32774		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
32775		return
32776	}
32777	if !done {
32778		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
32779		return
32780	}
32781	ar.Response = future.Response()
32782	return
32783}
32784
32785// VirtualNetworkTap virtual Network Tap resource.
32786type VirtualNetworkTap struct {
32787	autorest.Response `json:"-"`
32788	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
32789	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
32790	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32791	Etag *string `json:"etag,omitempty"`
32792	// ID - Resource ID.
32793	ID *string `json:"id,omitempty"`
32794	// Name - READ-ONLY; Resource name.
32795	Name *string `json:"name,omitempty"`
32796	// Type - READ-ONLY; Resource type.
32797	Type *string `json:"type,omitempty"`
32798	// Location - Resource location.
32799	Location *string `json:"location,omitempty"`
32800	// Tags - Resource tags.
32801	Tags map[string]*string `json:"tags"`
32802}
32803
32804// MarshalJSON is the custom marshaler for VirtualNetworkTap.
32805func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
32806	objectMap := make(map[string]interface{})
32807	if vnt.VirtualNetworkTapPropertiesFormat != nil {
32808		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
32809	}
32810	if vnt.ID != nil {
32811		objectMap["id"] = vnt.ID
32812	}
32813	if vnt.Location != nil {
32814		objectMap["location"] = vnt.Location
32815	}
32816	if vnt.Tags != nil {
32817		objectMap["tags"] = vnt.Tags
32818	}
32819	return json.Marshal(objectMap)
32820}
32821
32822// UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
32823func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
32824	var m map[string]*json.RawMessage
32825	err := json.Unmarshal(body, &m)
32826	if err != nil {
32827		return err
32828	}
32829	for k, v := range m {
32830		switch k {
32831		case "properties":
32832			if v != nil {
32833				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
32834				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
32835				if err != nil {
32836					return err
32837				}
32838				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
32839			}
32840		case "etag":
32841			if v != nil {
32842				var etag string
32843				err = json.Unmarshal(*v, &etag)
32844				if err != nil {
32845					return err
32846				}
32847				vnt.Etag = &etag
32848			}
32849		case "id":
32850			if v != nil {
32851				var ID string
32852				err = json.Unmarshal(*v, &ID)
32853				if err != nil {
32854					return err
32855				}
32856				vnt.ID = &ID
32857			}
32858		case "name":
32859			if v != nil {
32860				var name string
32861				err = json.Unmarshal(*v, &name)
32862				if err != nil {
32863					return err
32864				}
32865				vnt.Name = &name
32866			}
32867		case "type":
32868			if v != nil {
32869				var typeVar string
32870				err = json.Unmarshal(*v, &typeVar)
32871				if err != nil {
32872					return err
32873				}
32874				vnt.Type = &typeVar
32875			}
32876		case "location":
32877			if v != nil {
32878				var location string
32879				err = json.Unmarshal(*v, &location)
32880				if err != nil {
32881					return err
32882				}
32883				vnt.Location = &location
32884			}
32885		case "tags":
32886			if v != nil {
32887				var tags map[string]*string
32888				err = json.Unmarshal(*v, &tags)
32889				if err != nil {
32890					return err
32891				}
32892				vnt.Tags = tags
32893			}
32894		}
32895	}
32896
32897	return nil
32898}
32899
32900// VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
32901type VirtualNetworkTapListResult struct {
32902	autorest.Response `json:"-"`
32903	// Value - A list of VirtualNetworkTaps in a resource group.
32904	Value *[]VirtualNetworkTap `json:"value,omitempty"`
32905	// NextLink - The URL to get the next set of results.
32906	NextLink *string `json:"nextLink,omitempty"`
32907}
32908
32909// VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
32910type VirtualNetworkTapListResultIterator struct {
32911	i    int
32912	page VirtualNetworkTapListResultPage
32913}
32914
32915// NextWithContext advances to the next value.  If there was an error making
32916// the request the iterator does not advance and the error is returned.
32917func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
32918	if tracing.IsEnabled() {
32919		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
32920		defer func() {
32921			sc := -1
32922			if iter.Response().Response.Response != nil {
32923				sc = iter.Response().Response.Response.StatusCode
32924			}
32925			tracing.EndSpan(ctx, sc, err)
32926		}()
32927	}
32928	iter.i++
32929	if iter.i < len(iter.page.Values()) {
32930		return nil
32931	}
32932	err = iter.page.NextWithContext(ctx)
32933	if err != nil {
32934		iter.i--
32935		return err
32936	}
32937	iter.i = 0
32938	return nil
32939}
32940
32941// Next advances to the next value.  If there was an error making
32942// the request the iterator does not advance and the error is returned.
32943// Deprecated: Use NextWithContext() instead.
32944func (iter *VirtualNetworkTapListResultIterator) Next() error {
32945	return iter.NextWithContext(context.Background())
32946}
32947
32948// NotDone returns true if the enumeration should be started or is not yet complete.
32949func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
32950	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32951}
32952
32953// Response returns the raw server response from the last page request.
32954func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
32955	return iter.page.Response()
32956}
32957
32958// Value returns the current value or a zero-initialized value if the
32959// iterator has advanced beyond the end of the collection.
32960func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
32961	if !iter.page.NotDone() {
32962		return VirtualNetworkTap{}
32963	}
32964	return iter.page.Values()[iter.i]
32965}
32966
32967// Creates a new instance of the VirtualNetworkTapListResultIterator type.
32968func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
32969	return VirtualNetworkTapListResultIterator{page: page}
32970}
32971
32972// IsEmpty returns true if the ListResult contains no values.
32973func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
32974	return vntlr.Value == nil || len(*vntlr.Value) == 0
32975}
32976
32977// virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
32978// It returns nil if no more results exist.
32979func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
32980	if vntlr.NextLink == nil || len(to.String(vntlr.NextLink)) < 1 {
32981		return nil, nil
32982	}
32983	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32984		autorest.AsJSON(),
32985		autorest.AsGet(),
32986		autorest.WithBaseURL(to.String(vntlr.NextLink)))
32987}
32988
32989// VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
32990type VirtualNetworkTapListResultPage struct {
32991	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
32992	vntlr VirtualNetworkTapListResult
32993}
32994
32995// NextWithContext advances to the next page of values.  If there was an error making
32996// the request the page does not advance and the error is returned.
32997func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
32998	if tracing.IsEnabled() {
32999		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
33000		defer func() {
33001			sc := -1
33002			if page.Response().Response.Response != nil {
33003				sc = page.Response().Response.Response.StatusCode
33004			}
33005			tracing.EndSpan(ctx, sc, err)
33006		}()
33007	}
33008	next, err := page.fn(ctx, page.vntlr)
33009	if err != nil {
33010		return err
33011	}
33012	page.vntlr = next
33013	return nil
33014}
33015
33016// Next advances to the next page of values.  If there was an error making
33017// the request the page does not advance and the error is returned.
33018// Deprecated: Use NextWithContext() instead.
33019func (page *VirtualNetworkTapListResultPage) Next() error {
33020	return page.NextWithContext(context.Background())
33021}
33022
33023// NotDone returns true if the page enumeration should be started or is not yet complete.
33024func (page VirtualNetworkTapListResultPage) NotDone() bool {
33025	return !page.vntlr.IsEmpty()
33026}
33027
33028// Response returns the raw server response from the last page request.
33029func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
33030	return page.vntlr
33031}
33032
33033// Values returns the slice of values for the current page or nil if there are no values.
33034func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
33035	if page.vntlr.IsEmpty() {
33036		return nil
33037	}
33038	return *page.vntlr.Value
33039}
33040
33041// Creates a new instance of the VirtualNetworkTapListResultPage type.
33042func NewVirtualNetworkTapListResultPage(getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
33043	return VirtualNetworkTapListResultPage{fn: getNextPage}
33044}
33045
33046// VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
33047type VirtualNetworkTapPropertiesFormat struct {
33048	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
33049	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
33050	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network tap resource.
33051	ResourceGUID *string `json:"resourceGuid,omitempty"`
33052	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33053	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33054	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap.
33055	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
33056	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap.
33057	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
33058	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
33059	DestinationPort *int32 `json:"destinationPort,omitempty"`
33060}
33061
33062// VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33063// long-running operation.
33064type VirtualNetworkTapsCreateOrUpdateFuture struct {
33065	azure.Future
33066}
33067
33068// Result returns the result of the asynchronous operation.
33069// If the operation has not completed it will return an error.
33070func (future *VirtualNetworkTapsCreateOrUpdateFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
33071	var done bool
33072	done, err = future.DoneWithContext(context.Background(), client)
33073	if err != nil {
33074		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33075		return
33076	}
33077	if !done {
33078		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
33079		return
33080	}
33081	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33082	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
33083		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
33084		if err != nil {
33085			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
33086		}
33087	}
33088	return
33089}
33090
33091// VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
33092// long-running operation.
33093type VirtualNetworkTapsDeleteFuture struct {
33094	azure.Future
33095}
33096
33097// Result returns the result of the asynchronous operation.
33098// If the operation has not completed it will return an error.
33099func (future *VirtualNetworkTapsDeleteFuture) Result(client VirtualNetworkTapsClient) (ar autorest.Response, err error) {
33100	var done bool
33101	done, err = future.DoneWithContext(context.Background(), client)
33102	if err != nil {
33103		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
33104		return
33105	}
33106	if !done {
33107		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
33108		return
33109	}
33110	ar.Response = future.Response()
33111	return
33112}
33113
33114// VirtualNetworkUsage usage details for subnet.
33115type VirtualNetworkUsage struct {
33116	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
33117	CurrentValue *float64 `json:"currentValue,omitempty"`
33118	// ID - READ-ONLY; Subnet identifier.
33119	ID *string `json:"id,omitempty"`
33120	// Limit - READ-ONLY; Indicates the size of the subnet.
33121	Limit *float64 `json:"limit,omitempty"`
33122	// Name - READ-ONLY; The name containing common and localized value for usage.
33123	Name *VirtualNetworkUsageName `json:"name,omitempty"`
33124	// Unit - READ-ONLY; Usage units. Returns 'Count'.
33125	Unit *string `json:"unit,omitempty"`
33126}
33127
33128// VirtualNetworkUsageName usage strings container.
33129type VirtualNetworkUsageName struct {
33130	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
33131	LocalizedValue *string `json:"localizedValue,omitempty"`
33132	// Value - READ-ONLY; Subnet size and usage string.
33133	Value *string `json:"value,omitempty"`
33134}
33135
33136// VirtualRouter virtualRouter Resource.
33137type VirtualRouter struct {
33138	autorest.Response `json:"-"`
33139	// VirtualRouterPropertiesFormat - Properties of the Virtual Router.
33140	*VirtualRouterPropertiesFormat `json:"properties,omitempty"`
33141	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33142	Etag *string `json:"etag,omitempty"`
33143	// ID - Resource ID.
33144	ID *string `json:"id,omitempty"`
33145	// Name - READ-ONLY; Resource name.
33146	Name *string `json:"name,omitempty"`
33147	// Type - READ-ONLY; Resource type.
33148	Type *string `json:"type,omitempty"`
33149	// Location - Resource location.
33150	Location *string `json:"location,omitempty"`
33151	// Tags - Resource tags.
33152	Tags map[string]*string `json:"tags"`
33153}
33154
33155// MarshalJSON is the custom marshaler for VirtualRouter.
33156func (vr VirtualRouter) MarshalJSON() ([]byte, error) {
33157	objectMap := make(map[string]interface{})
33158	if vr.VirtualRouterPropertiesFormat != nil {
33159		objectMap["properties"] = vr.VirtualRouterPropertiesFormat
33160	}
33161	if vr.ID != nil {
33162		objectMap["id"] = vr.ID
33163	}
33164	if vr.Location != nil {
33165		objectMap["location"] = vr.Location
33166	}
33167	if vr.Tags != nil {
33168		objectMap["tags"] = vr.Tags
33169	}
33170	return json.Marshal(objectMap)
33171}
33172
33173// UnmarshalJSON is the custom unmarshaler for VirtualRouter struct.
33174func (vr *VirtualRouter) UnmarshalJSON(body []byte) error {
33175	var m map[string]*json.RawMessage
33176	err := json.Unmarshal(body, &m)
33177	if err != nil {
33178		return err
33179	}
33180	for k, v := range m {
33181		switch k {
33182		case "properties":
33183			if v != nil {
33184				var virtualRouterPropertiesFormat VirtualRouterPropertiesFormat
33185				err = json.Unmarshal(*v, &virtualRouterPropertiesFormat)
33186				if err != nil {
33187					return err
33188				}
33189				vr.VirtualRouterPropertiesFormat = &virtualRouterPropertiesFormat
33190			}
33191		case "etag":
33192			if v != nil {
33193				var etag string
33194				err = json.Unmarshal(*v, &etag)
33195				if err != nil {
33196					return err
33197				}
33198				vr.Etag = &etag
33199			}
33200		case "id":
33201			if v != nil {
33202				var ID string
33203				err = json.Unmarshal(*v, &ID)
33204				if err != nil {
33205					return err
33206				}
33207				vr.ID = &ID
33208			}
33209		case "name":
33210			if v != nil {
33211				var name string
33212				err = json.Unmarshal(*v, &name)
33213				if err != nil {
33214					return err
33215				}
33216				vr.Name = &name
33217			}
33218		case "type":
33219			if v != nil {
33220				var typeVar string
33221				err = json.Unmarshal(*v, &typeVar)
33222				if err != nil {
33223					return err
33224				}
33225				vr.Type = &typeVar
33226			}
33227		case "location":
33228			if v != nil {
33229				var location string
33230				err = json.Unmarshal(*v, &location)
33231				if err != nil {
33232					return err
33233				}
33234				vr.Location = &location
33235			}
33236		case "tags":
33237			if v != nil {
33238				var tags map[string]*string
33239				err = json.Unmarshal(*v, &tags)
33240				if err != nil {
33241					return err
33242				}
33243				vr.Tags = tags
33244			}
33245		}
33246	}
33247
33248	return nil
33249}
33250
33251// VirtualRouterListResult response for ListVirtualRouters API service call.
33252type VirtualRouterListResult struct {
33253	autorest.Response `json:"-"`
33254	// Value - List of Virtual Routers.
33255	Value *[]VirtualRouter `json:"value,omitempty"`
33256	// NextLink - URL to get the next set of results.
33257	NextLink *string `json:"nextLink,omitempty"`
33258}
33259
33260// VirtualRouterListResultIterator provides access to a complete listing of VirtualRouter values.
33261type VirtualRouterListResultIterator struct {
33262	i    int
33263	page VirtualRouterListResultPage
33264}
33265
33266// NextWithContext advances to the next value.  If there was an error making
33267// the request the iterator does not advance and the error is returned.
33268func (iter *VirtualRouterListResultIterator) NextWithContext(ctx context.Context) (err error) {
33269	if tracing.IsEnabled() {
33270		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultIterator.NextWithContext")
33271		defer func() {
33272			sc := -1
33273			if iter.Response().Response.Response != nil {
33274				sc = iter.Response().Response.Response.StatusCode
33275			}
33276			tracing.EndSpan(ctx, sc, err)
33277		}()
33278	}
33279	iter.i++
33280	if iter.i < len(iter.page.Values()) {
33281		return nil
33282	}
33283	err = iter.page.NextWithContext(ctx)
33284	if err != nil {
33285		iter.i--
33286		return err
33287	}
33288	iter.i = 0
33289	return nil
33290}
33291
33292// Next advances to the next value.  If there was an error making
33293// the request the iterator does not advance and the error is returned.
33294// Deprecated: Use NextWithContext() instead.
33295func (iter *VirtualRouterListResultIterator) Next() error {
33296	return iter.NextWithContext(context.Background())
33297}
33298
33299// NotDone returns true if the enumeration should be started or is not yet complete.
33300func (iter VirtualRouterListResultIterator) NotDone() bool {
33301	return iter.page.NotDone() && iter.i < len(iter.page.Values())
33302}
33303
33304// Response returns the raw server response from the last page request.
33305func (iter VirtualRouterListResultIterator) Response() VirtualRouterListResult {
33306	return iter.page.Response()
33307}
33308
33309// Value returns the current value or a zero-initialized value if the
33310// iterator has advanced beyond the end of the collection.
33311func (iter VirtualRouterListResultIterator) Value() VirtualRouter {
33312	if !iter.page.NotDone() {
33313		return VirtualRouter{}
33314	}
33315	return iter.page.Values()[iter.i]
33316}
33317
33318// Creates a new instance of the VirtualRouterListResultIterator type.
33319func NewVirtualRouterListResultIterator(page VirtualRouterListResultPage) VirtualRouterListResultIterator {
33320	return VirtualRouterListResultIterator{page: page}
33321}
33322
33323// IsEmpty returns true if the ListResult contains no values.
33324func (vrlr VirtualRouterListResult) IsEmpty() bool {
33325	return vrlr.Value == nil || len(*vrlr.Value) == 0
33326}
33327
33328// virtualRouterListResultPreparer prepares a request to retrieve the next set of results.
33329// It returns nil if no more results exist.
33330func (vrlr VirtualRouterListResult) virtualRouterListResultPreparer(ctx context.Context) (*http.Request, error) {
33331	if vrlr.NextLink == nil || len(to.String(vrlr.NextLink)) < 1 {
33332		return nil, nil
33333	}
33334	return autorest.Prepare((&http.Request{}).WithContext(ctx),
33335		autorest.AsJSON(),
33336		autorest.AsGet(),
33337		autorest.WithBaseURL(to.String(vrlr.NextLink)))
33338}
33339
33340// VirtualRouterListResultPage contains a page of VirtualRouter values.
33341type VirtualRouterListResultPage struct {
33342	fn   func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)
33343	vrlr VirtualRouterListResult
33344}
33345
33346// NextWithContext advances to the next page of values.  If there was an error making
33347// the request the page does not advance and the error is returned.
33348func (page *VirtualRouterListResultPage) NextWithContext(ctx context.Context) (err error) {
33349	if tracing.IsEnabled() {
33350		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultPage.NextWithContext")
33351		defer func() {
33352			sc := -1
33353			if page.Response().Response.Response != nil {
33354				sc = page.Response().Response.Response.StatusCode
33355			}
33356			tracing.EndSpan(ctx, sc, err)
33357		}()
33358	}
33359	next, err := page.fn(ctx, page.vrlr)
33360	if err != nil {
33361		return err
33362	}
33363	page.vrlr = next
33364	return nil
33365}
33366
33367// Next advances to the next page of values.  If there was an error making
33368// the request the page does not advance and the error is returned.
33369// Deprecated: Use NextWithContext() instead.
33370func (page *VirtualRouterListResultPage) Next() error {
33371	return page.NextWithContext(context.Background())
33372}
33373
33374// NotDone returns true if the page enumeration should be started or is not yet complete.
33375func (page VirtualRouterListResultPage) NotDone() bool {
33376	return !page.vrlr.IsEmpty()
33377}
33378
33379// Response returns the raw server response from the last page request.
33380func (page VirtualRouterListResultPage) Response() VirtualRouterListResult {
33381	return page.vrlr
33382}
33383
33384// Values returns the slice of values for the current page or nil if there are no values.
33385func (page VirtualRouterListResultPage) Values() []VirtualRouter {
33386	if page.vrlr.IsEmpty() {
33387		return nil
33388	}
33389	return *page.vrlr.Value
33390}
33391
33392// Creates a new instance of the VirtualRouterListResultPage type.
33393func NewVirtualRouterListResultPage(getNextPage func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)) VirtualRouterListResultPage {
33394	return VirtualRouterListResultPage{fn: getNextPage}
33395}
33396
33397// VirtualRouterPeering virtual Router Peering resource.
33398type VirtualRouterPeering struct {
33399	autorest.Response `json:"-"`
33400	// VirtualRouterPeeringProperties - The properties of the Virtual Router Peering.
33401	*VirtualRouterPeeringProperties `json:"properties,omitempty"`
33402	// Name - Name of the virtual router peering that is unique within a virtual router.
33403	Name *string `json:"name,omitempty"`
33404	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33405	Etag *string `json:"etag,omitempty"`
33406	// Type - READ-ONLY; Peering type.
33407	Type *string `json:"type,omitempty"`
33408	// ID - Resource ID.
33409	ID *string `json:"id,omitempty"`
33410}
33411
33412// MarshalJSON is the custom marshaler for VirtualRouterPeering.
33413func (vrp VirtualRouterPeering) MarshalJSON() ([]byte, error) {
33414	objectMap := make(map[string]interface{})
33415	if vrp.VirtualRouterPeeringProperties != nil {
33416		objectMap["properties"] = vrp.VirtualRouterPeeringProperties
33417	}
33418	if vrp.Name != nil {
33419		objectMap["name"] = vrp.Name
33420	}
33421	if vrp.ID != nil {
33422		objectMap["id"] = vrp.ID
33423	}
33424	return json.Marshal(objectMap)
33425}
33426
33427// UnmarshalJSON is the custom unmarshaler for VirtualRouterPeering struct.
33428func (vrp *VirtualRouterPeering) UnmarshalJSON(body []byte) error {
33429	var m map[string]*json.RawMessage
33430	err := json.Unmarshal(body, &m)
33431	if err != nil {
33432		return err
33433	}
33434	for k, v := range m {
33435		switch k {
33436		case "properties":
33437			if v != nil {
33438				var virtualRouterPeeringProperties VirtualRouterPeeringProperties
33439				err = json.Unmarshal(*v, &virtualRouterPeeringProperties)
33440				if err != nil {
33441					return err
33442				}
33443				vrp.VirtualRouterPeeringProperties = &virtualRouterPeeringProperties
33444			}
33445		case "name":
33446			if v != nil {
33447				var name string
33448				err = json.Unmarshal(*v, &name)
33449				if err != nil {
33450					return err
33451				}
33452				vrp.Name = &name
33453			}
33454		case "etag":
33455			if v != nil {
33456				var etag string
33457				err = json.Unmarshal(*v, &etag)
33458				if err != nil {
33459					return err
33460				}
33461				vrp.Etag = &etag
33462			}
33463		case "type":
33464			if v != nil {
33465				var typeVar string
33466				err = json.Unmarshal(*v, &typeVar)
33467				if err != nil {
33468					return err
33469				}
33470				vrp.Type = &typeVar
33471			}
33472		case "id":
33473			if v != nil {
33474				var ID string
33475				err = json.Unmarshal(*v, &ID)
33476				if err != nil {
33477					return err
33478				}
33479				vrp.ID = &ID
33480			}
33481		}
33482	}
33483
33484	return nil
33485}
33486
33487// VirtualRouterPeeringListResult response for ListVirtualRouterPeerings API service call.
33488type VirtualRouterPeeringListResult struct {
33489	autorest.Response `json:"-"`
33490	// Value - List of VirtualRouterPeerings in a VirtualRouter.
33491	Value *[]VirtualRouterPeering `json:"value,omitempty"`
33492	// NextLink - URL to get the next set of results.
33493	NextLink *string `json:"nextLink,omitempty"`
33494}
33495
33496// VirtualRouterPeeringListResultIterator provides access to a complete listing of VirtualRouterPeering
33497// values.
33498type VirtualRouterPeeringListResultIterator struct {
33499	i    int
33500	page VirtualRouterPeeringListResultPage
33501}
33502
33503// NextWithContext advances to the next value.  If there was an error making
33504// the request the iterator does not advance and the error is returned.
33505func (iter *VirtualRouterPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
33506	if tracing.IsEnabled() {
33507		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultIterator.NextWithContext")
33508		defer func() {
33509			sc := -1
33510			if iter.Response().Response.Response != nil {
33511				sc = iter.Response().Response.Response.StatusCode
33512			}
33513			tracing.EndSpan(ctx, sc, err)
33514		}()
33515	}
33516	iter.i++
33517	if iter.i < len(iter.page.Values()) {
33518		return nil
33519	}
33520	err = iter.page.NextWithContext(ctx)
33521	if err != nil {
33522		iter.i--
33523		return err
33524	}
33525	iter.i = 0
33526	return nil
33527}
33528
33529// Next advances to the next value.  If there was an error making
33530// the request the iterator does not advance and the error is returned.
33531// Deprecated: Use NextWithContext() instead.
33532func (iter *VirtualRouterPeeringListResultIterator) Next() error {
33533	return iter.NextWithContext(context.Background())
33534}
33535
33536// NotDone returns true if the enumeration should be started or is not yet complete.
33537func (iter VirtualRouterPeeringListResultIterator) NotDone() bool {
33538	return iter.page.NotDone() && iter.i < len(iter.page.Values())
33539}
33540
33541// Response returns the raw server response from the last page request.
33542func (iter VirtualRouterPeeringListResultIterator) Response() VirtualRouterPeeringListResult {
33543	return iter.page.Response()
33544}
33545
33546// Value returns the current value or a zero-initialized value if the
33547// iterator has advanced beyond the end of the collection.
33548func (iter VirtualRouterPeeringListResultIterator) Value() VirtualRouterPeering {
33549	if !iter.page.NotDone() {
33550		return VirtualRouterPeering{}
33551	}
33552	return iter.page.Values()[iter.i]
33553}
33554
33555// Creates a new instance of the VirtualRouterPeeringListResultIterator type.
33556func NewVirtualRouterPeeringListResultIterator(page VirtualRouterPeeringListResultPage) VirtualRouterPeeringListResultIterator {
33557	return VirtualRouterPeeringListResultIterator{page: page}
33558}
33559
33560// IsEmpty returns true if the ListResult contains no values.
33561func (vrplr VirtualRouterPeeringListResult) IsEmpty() bool {
33562	return vrplr.Value == nil || len(*vrplr.Value) == 0
33563}
33564
33565// virtualRouterPeeringListResultPreparer prepares a request to retrieve the next set of results.
33566// It returns nil if no more results exist.
33567func (vrplr VirtualRouterPeeringListResult) virtualRouterPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
33568	if vrplr.NextLink == nil || len(to.String(vrplr.NextLink)) < 1 {
33569		return nil, nil
33570	}
33571	return autorest.Prepare((&http.Request{}).WithContext(ctx),
33572		autorest.AsJSON(),
33573		autorest.AsGet(),
33574		autorest.WithBaseURL(to.String(vrplr.NextLink)))
33575}
33576
33577// VirtualRouterPeeringListResultPage contains a page of VirtualRouterPeering values.
33578type VirtualRouterPeeringListResultPage struct {
33579	fn    func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)
33580	vrplr VirtualRouterPeeringListResult
33581}
33582
33583// NextWithContext advances to the next page of values.  If there was an error making
33584// the request the page does not advance and the error is returned.
33585func (page *VirtualRouterPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
33586	if tracing.IsEnabled() {
33587		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultPage.NextWithContext")
33588		defer func() {
33589			sc := -1
33590			if page.Response().Response.Response != nil {
33591				sc = page.Response().Response.Response.StatusCode
33592			}
33593			tracing.EndSpan(ctx, sc, err)
33594		}()
33595	}
33596	next, err := page.fn(ctx, page.vrplr)
33597	if err != nil {
33598		return err
33599	}
33600	page.vrplr = next
33601	return nil
33602}
33603
33604// Next advances to the next page of values.  If there was an error making
33605// the request the page does not advance and the error is returned.
33606// Deprecated: Use NextWithContext() instead.
33607func (page *VirtualRouterPeeringListResultPage) Next() error {
33608	return page.NextWithContext(context.Background())
33609}
33610
33611// NotDone returns true if the page enumeration should be started or is not yet complete.
33612func (page VirtualRouterPeeringListResultPage) NotDone() bool {
33613	return !page.vrplr.IsEmpty()
33614}
33615
33616// Response returns the raw server response from the last page request.
33617func (page VirtualRouterPeeringListResultPage) Response() VirtualRouterPeeringListResult {
33618	return page.vrplr
33619}
33620
33621// Values returns the slice of values for the current page or nil if there are no values.
33622func (page VirtualRouterPeeringListResultPage) Values() []VirtualRouterPeering {
33623	if page.vrplr.IsEmpty() {
33624		return nil
33625	}
33626	return *page.vrplr.Value
33627}
33628
33629// Creates a new instance of the VirtualRouterPeeringListResultPage type.
33630func NewVirtualRouterPeeringListResultPage(getNextPage func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)) VirtualRouterPeeringListResultPage {
33631	return VirtualRouterPeeringListResultPage{fn: getNextPage}
33632}
33633
33634// VirtualRouterPeeringProperties properties of the rule group.
33635type VirtualRouterPeeringProperties struct {
33636	// PeerAsn - Peer ASN.
33637	PeerAsn *int64 `json:"peerAsn,omitempty"`
33638	// PeerIP - Peer IP.
33639	PeerIP *string `json:"peerIp,omitempty"`
33640	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33641	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33642}
33643
33644// VirtualRouterPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33645// long-running operation.
33646type VirtualRouterPeeringsCreateOrUpdateFuture struct {
33647	azure.Future
33648}
33649
33650// Result returns the result of the asynchronous operation.
33651// If the operation has not completed it will return an error.
33652func (future *VirtualRouterPeeringsCreateOrUpdateFuture) Result(client VirtualRouterPeeringsClient) (vrp VirtualRouterPeering, err error) {
33653	var done bool
33654	done, err = future.DoneWithContext(context.Background(), client)
33655	if err != nil {
33656		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33657		return
33658	}
33659	if !done {
33660		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsCreateOrUpdateFuture")
33661		return
33662	}
33663	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33664	if vrp.Response.Response, err = future.GetResult(sender); err == nil && vrp.Response.Response.StatusCode != http.StatusNoContent {
33665		vrp, err = client.CreateOrUpdateResponder(vrp.Response.Response)
33666		if err != nil {
33667			err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", vrp.Response.Response, "Failure responding to request")
33668		}
33669	}
33670	return
33671}
33672
33673// VirtualRouterPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
33674// long-running operation.
33675type VirtualRouterPeeringsDeleteFuture struct {
33676	azure.Future
33677}
33678
33679// Result returns the result of the asynchronous operation.
33680// If the operation has not completed it will return an error.
33681func (future *VirtualRouterPeeringsDeleteFuture) Result(client VirtualRouterPeeringsClient) (ar autorest.Response, err error) {
33682	var done bool
33683	done, err = future.DoneWithContext(context.Background(), client)
33684	if err != nil {
33685		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
33686		return
33687	}
33688	if !done {
33689		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsDeleteFuture")
33690		return
33691	}
33692	ar.Response = future.Response()
33693	return
33694}
33695
33696// VirtualRouterPropertiesFormat virtual Router definition.
33697type VirtualRouterPropertiesFormat struct {
33698	// VirtualRouterAsn - VirtualRouter ASN.
33699	VirtualRouterAsn *int64 `json:"virtualRouterAsn,omitempty"`
33700	// VirtualRouterIps - VirtualRouter IPs.
33701	VirtualRouterIps *[]string `json:"virtualRouterIps,omitempty"`
33702	// HostedSubnet - The Subnet on which VirtualRouter is hosted.
33703	HostedSubnet *SubResource `json:"hostedSubnet,omitempty"`
33704	// HostedGateway - The Gateway on which VirtualRouter is hosted.
33705	HostedGateway *SubResource `json:"hostedGateway,omitempty"`
33706	// Peerings - READ-ONLY; List of references to VirtualRouterPeerings.
33707	Peerings *[]SubResource `json:"peerings,omitempty"`
33708	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33709	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33710}
33711
33712// VirtualRoutersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33713// long-running operation.
33714type VirtualRoutersCreateOrUpdateFuture struct {
33715	azure.Future
33716}
33717
33718// Result returns the result of the asynchronous operation.
33719// If the operation has not completed it will return an error.
33720func (future *VirtualRoutersCreateOrUpdateFuture) Result(client VirtualRoutersClient) (vr VirtualRouter, err error) {
33721	var done bool
33722	done, err = future.DoneWithContext(context.Background(), client)
33723	if err != nil {
33724		err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33725		return
33726	}
33727	if !done {
33728		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersCreateOrUpdateFuture")
33729		return
33730	}
33731	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33732	if vr.Response.Response, err = future.GetResult(sender); err == nil && vr.Response.Response.StatusCode != http.StatusNoContent {
33733		vr, err = client.CreateOrUpdateResponder(vr.Response.Response)
33734		if err != nil {
33735			err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", vr.Response.Response, "Failure responding to request")
33736		}
33737	}
33738	return
33739}
33740
33741// VirtualRoutersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33742// operation.
33743type VirtualRoutersDeleteFuture struct {
33744	azure.Future
33745}
33746
33747// Result returns the result of the asynchronous operation.
33748// If the operation has not completed it will return an error.
33749func (future *VirtualRoutersDeleteFuture) Result(client VirtualRoutersClient) (ar autorest.Response, err error) {
33750	var done bool
33751	done, err = future.DoneWithContext(context.Background(), client)
33752	if err != nil {
33753		err = autorest.NewErrorWithError(err, "network.VirtualRoutersDeleteFuture", "Result", future.Response(), "Polling failure")
33754		return
33755	}
33756	if !done {
33757		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersDeleteFuture")
33758		return
33759	}
33760	ar.Response = future.Response()
33761	return
33762}
33763
33764// VirtualWAN virtualWAN Resource.
33765type VirtualWAN struct {
33766	autorest.Response `json:"-"`
33767	// VirtualWanProperties - Properties of the virtual WAN.
33768	*VirtualWanProperties `json:"properties,omitempty"`
33769	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33770	Etag *string `json:"etag,omitempty"`
33771	// ID - Resource ID.
33772	ID *string `json:"id,omitempty"`
33773	// Name - READ-ONLY; Resource name.
33774	Name *string `json:"name,omitempty"`
33775	// Type - READ-ONLY; Resource type.
33776	Type *string `json:"type,omitempty"`
33777	// Location - Resource location.
33778	Location *string `json:"location,omitempty"`
33779	// Tags - Resource tags.
33780	Tags map[string]*string `json:"tags"`
33781}
33782
33783// MarshalJSON is the custom marshaler for VirtualWAN.
33784func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
33785	objectMap := make(map[string]interface{})
33786	if vw.VirtualWanProperties != nil {
33787		objectMap["properties"] = vw.VirtualWanProperties
33788	}
33789	if vw.ID != nil {
33790		objectMap["id"] = vw.ID
33791	}
33792	if vw.Location != nil {
33793		objectMap["location"] = vw.Location
33794	}
33795	if vw.Tags != nil {
33796		objectMap["tags"] = vw.Tags
33797	}
33798	return json.Marshal(objectMap)
33799}
33800
33801// UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
33802func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
33803	var m map[string]*json.RawMessage
33804	err := json.Unmarshal(body, &m)
33805	if err != nil {
33806		return err
33807	}
33808	for k, v := range m {
33809		switch k {
33810		case "properties":
33811			if v != nil {
33812				var virtualWanProperties VirtualWanProperties
33813				err = json.Unmarshal(*v, &virtualWanProperties)
33814				if err != nil {
33815					return err
33816				}
33817				vw.VirtualWanProperties = &virtualWanProperties
33818			}
33819		case "etag":
33820			if v != nil {
33821				var etag string
33822				err = json.Unmarshal(*v, &etag)
33823				if err != nil {
33824					return err
33825				}
33826				vw.Etag = &etag
33827			}
33828		case "id":
33829			if v != nil {
33830				var ID string
33831				err = json.Unmarshal(*v, &ID)
33832				if err != nil {
33833					return err
33834				}
33835				vw.ID = &ID
33836			}
33837		case "name":
33838			if v != nil {
33839				var name string
33840				err = json.Unmarshal(*v, &name)
33841				if err != nil {
33842					return err
33843				}
33844				vw.Name = &name
33845			}
33846		case "type":
33847			if v != nil {
33848				var typeVar string
33849				err = json.Unmarshal(*v, &typeVar)
33850				if err != nil {
33851					return err
33852				}
33853				vw.Type = &typeVar
33854			}
33855		case "location":
33856			if v != nil {
33857				var location string
33858				err = json.Unmarshal(*v, &location)
33859				if err != nil {
33860					return err
33861				}
33862				vw.Location = &location
33863			}
33864		case "tags":
33865			if v != nil {
33866				var tags map[string]*string
33867				err = json.Unmarshal(*v, &tags)
33868				if err != nil {
33869					return err
33870				}
33871				vw.Tags = tags
33872			}
33873		}
33874	}
33875
33876	return nil
33877}
33878
33879// VirtualWanProperties parameters for VirtualWAN.
33880type VirtualWanProperties struct {
33881	// DisableVpnEncryption - Vpn encryption to be disabled or not.
33882	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
33883	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
33884	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
33885	// VpnSites - READ-ONLY; List of VpnSites in the VirtualWAN.
33886	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
33887	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
33888	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
33889	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
33890	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
33891	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
33892	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
33893	// ProvisioningState - READ-ONLY; The provisioning state of the virtual WAN resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33894	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33895	// Type - The type of the VirtualWAN.
33896	Type *string `json:"type,omitempty"`
33897}
33898
33899// VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33900// long-running operation.
33901type VirtualWansCreateOrUpdateFuture struct {
33902	azure.Future
33903}
33904
33905// Result returns the result of the asynchronous operation.
33906// If the operation has not completed it will return an error.
33907func (future *VirtualWansCreateOrUpdateFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
33908	var done bool
33909	done, err = future.DoneWithContext(context.Background(), client)
33910	if err != nil {
33911		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33912		return
33913	}
33914	if !done {
33915		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
33916		return
33917	}
33918	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33919	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
33920		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
33921		if err != nil {
33922			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
33923		}
33924	}
33925	return
33926}
33927
33928// VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33929// operation.
33930type VirtualWansDeleteFuture struct {
33931	azure.Future
33932}
33933
33934// Result returns the result of the asynchronous operation.
33935// If the operation has not completed it will return an error.
33936func (future *VirtualWansDeleteFuture) Result(client VirtualWansClient) (ar autorest.Response, err error) {
33937	var done bool
33938	done, err = future.DoneWithContext(context.Background(), client)
33939	if err != nil {
33940		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
33941		return
33942	}
33943	if !done {
33944		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
33945		return
33946	}
33947	ar.Response = future.Response()
33948	return
33949}
33950
33951// VirtualWanSecurityProvider collection of SecurityProviders.
33952type VirtualWanSecurityProvider struct {
33953	// Name - Name of the security provider.
33954	Name *string `json:"name,omitempty"`
33955	// URL - Url of the security provider.
33956	URL *string `json:"url,omitempty"`
33957	// Type - Name of the security provider. Possible values include: 'External', 'Native'
33958	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
33959}
33960
33961// VirtualWanSecurityProviders collection of SecurityProviders.
33962type VirtualWanSecurityProviders struct {
33963	autorest.Response `json:"-"`
33964	// SupportedProviders - List of VirtualWAN security providers.
33965	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
33966}
33967
33968// VirtualWanVpnProfileParameters virtual Wan Vpn profile parameters Vpn profile generation.
33969type VirtualWanVpnProfileParameters struct {
33970	// VpnServerConfigurationResourceID - VpnServerConfiguration partial resource uri with which VirtualWan is associated to.
33971	VpnServerConfigurationResourceID *string `json:"vpnServerConfigurationResourceId,omitempty"`
33972	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
33973	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
33974}
33975
33976// VM describes a Virtual Machine.
33977type VM struct {
33978	// ID - Resource ID.
33979	ID *string `json:"id,omitempty"`
33980	// Name - READ-ONLY; Resource name.
33981	Name *string `json:"name,omitempty"`
33982	// Type - READ-ONLY; Resource type.
33983	Type *string `json:"type,omitempty"`
33984	// Location - Resource location.
33985	Location *string `json:"location,omitempty"`
33986	// Tags - Resource tags.
33987	Tags map[string]*string `json:"tags"`
33988}
33989
33990// MarshalJSON is the custom marshaler for VM.
33991func (vVar VM) MarshalJSON() ([]byte, error) {
33992	objectMap := make(map[string]interface{})
33993	if vVar.ID != nil {
33994		objectMap["id"] = vVar.ID
33995	}
33996	if vVar.Location != nil {
33997		objectMap["location"] = vVar.Location
33998	}
33999	if vVar.Tags != nil {
34000		objectMap["tags"] = vVar.Tags
34001	}
34002	return json.Marshal(objectMap)
34003}
34004
34005// VpnClientConfiguration vpnClientConfiguration for P2S client.
34006type VpnClientConfiguration struct {
34007	// VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient.
34008	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
34009	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
34010	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
34011	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
34012	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
34013	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
34014	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
34015	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
34016	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
34017	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
34018	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
34019	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
34020	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
34021	// AadTenant - The AADTenant property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
34022	AadTenant *string `json:"aadTenant,omitempty"`
34023	// AadAudience - The AADAudience property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
34024	AadAudience *string `json:"aadAudience,omitempty"`
34025	// AadIssuer - The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
34026	AadIssuer *string `json:"aadIssuer,omitempty"`
34027}
34028
34029// VpnClientConnectionHealth vpnClientConnectionHealth properties.
34030type VpnClientConnectionHealth struct {
34031	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection.
34032	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
34033	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection.
34034	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
34035	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
34036	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
34037	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
34038	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
34039}
34040
34041// VpnClientConnectionHealthDetail VPN client connection health detail.
34042type VpnClientConnectionHealthDetail struct {
34043	// VpnConnectionID - READ-ONLY; The vpn client Id.
34044	VpnConnectionID *string `json:"vpnConnectionId,omitempty"`
34045	// VpnConnectionDuration - READ-ONLY; The duration time of a connected vpn client.
34046	VpnConnectionDuration *int64 `json:"vpnConnectionDuration,omitempty"`
34047	// VpnConnectionTime - READ-ONLY; The start time of a connected vpn client.
34048	VpnConnectionTime *string `json:"vpnConnectionTime,omitempty"`
34049	// PublicIPAddress - READ-ONLY; The public Ip of a connected vpn client.
34050	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
34051	// PrivateIPAddress - READ-ONLY; The assigned private Ip of a connected vpn client.
34052	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
34053	// VpnUserName - READ-ONLY; The user name of a connected vpn client.
34054	VpnUserName *string `json:"vpnUserName,omitempty"`
34055	// MaxBandwidth - READ-ONLY; The max band width.
34056	MaxBandwidth *int64 `json:"maxBandwidth,omitempty"`
34057	// EgressPacketsTransferred - READ-ONLY; The egress packets per second.
34058	EgressPacketsTransferred *int64 `json:"egressPacketsTransferred,omitempty"`
34059	// EgressBytesTransferred - READ-ONLY; The egress bytes per second.
34060	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
34061	// IngressPacketsTransferred - READ-ONLY; The ingress packets per second.
34062	IngressPacketsTransferred *int64 `json:"ingressPacketsTransferred,omitempty"`
34063	// IngressBytesTransferred - READ-ONLY; The ingress bytes per second.
34064	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
34065	// MaxPacketsPerSecond - READ-ONLY; The max packets transferred per second.
34066	MaxPacketsPerSecond *int64 `json:"maxPacketsPerSecond,omitempty"`
34067}
34068
34069// VpnClientConnectionHealthDetailListResult list of virtual network gateway vpn client connection health.
34070type VpnClientConnectionHealthDetailListResult struct {
34071	autorest.Response `json:"-"`
34072	// Value - List of vpn client connection health.
34073	Value *[]VpnClientConnectionHealthDetail `json:"value,omitempty"`
34074}
34075
34076// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
34077type VpnClientIPsecParameters struct {
34078	autorest.Response `json:"-"`
34079	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
34080	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
34081	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
34082	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
34083	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
34084	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
34085	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
34086	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
34087	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
34088	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
34089	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
34090	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
34091	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
34092	DhGroup DhGroup `json:"dhGroup,omitempty"`
34093	// 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'
34094	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
34095}
34096
34097// VpnClientParameters vpn Client Parameters for package generation.
34098type VpnClientParameters struct {
34099	// ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'Amd64', 'X86'
34100	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
34101	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
34102	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
34103	// 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.
34104	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
34105	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
34106	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
34107}
34108
34109// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
34110type VpnClientRevokedCertificate struct {
34111	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
34112	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
34113	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
34114	Name *string `json:"name,omitempty"`
34115	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34116	Etag *string `json:"etag,omitempty"`
34117	// ID - Resource ID.
34118	ID *string `json:"id,omitempty"`
34119}
34120
34121// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
34122func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
34123	objectMap := make(map[string]interface{})
34124	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
34125		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
34126	}
34127	if vcrc.Name != nil {
34128		objectMap["name"] = vcrc.Name
34129	}
34130	if vcrc.ID != nil {
34131		objectMap["id"] = vcrc.ID
34132	}
34133	return json.Marshal(objectMap)
34134}
34135
34136// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
34137func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
34138	var m map[string]*json.RawMessage
34139	err := json.Unmarshal(body, &m)
34140	if err != nil {
34141		return err
34142	}
34143	for k, v := range m {
34144		switch k {
34145		case "properties":
34146			if v != nil {
34147				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
34148				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
34149				if err != nil {
34150					return err
34151				}
34152				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
34153			}
34154		case "name":
34155			if v != nil {
34156				var name string
34157				err = json.Unmarshal(*v, &name)
34158				if err != nil {
34159					return err
34160				}
34161				vcrc.Name = &name
34162			}
34163		case "etag":
34164			if v != nil {
34165				var etag string
34166				err = json.Unmarshal(*v, &etag)
34167				if err != nil {
34168					return err
34169				}
34170				vcrc.Etag = &etag
34171			}
34172		case "id":
34173			if v != nil {
34174				var ID string
34175				err = json.Unmarshal(*v, &ID)
34176				if err != nil {
34177					return err
34178				}
34179				vcrc.ID = &ID
34180			}
34181		}
34182	}
34183
34184	return nil
34185}
34186
34187// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
34188// network gateway.
34189type VpnClientRevokedCertificatePropertiesFormat struct {
34190	// Thumbprint - The revoked VPN client certificate thumbprint.
34191	Thumbprint *string `json:"thumbprint,omitempty"`
34192	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34193	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34194}
34195
34196// VpnClientRootCertificate VPN client root certificate of virtual network gateway.
34197type VpnClientRootCertificate struct {
34198	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
34199	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
34200	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
34201	Name *string `json:"name,omitempty"`
34202	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34203	Etag *string `json:"etag,omitempty"`
34204	// ID - Resource ID.
34205	ID *string `json:"id,omitempty"`
34206}
34207
34208// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
34209func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
34210	objectMap := make(map[string]interface{})
34211	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
34212		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
34213	}
34214	if vcrc.Name != nil {
34215		objectMap["name"] = vcrc.Name
34216	}
34217	if vcrc.ID != nil {
34218		objectMap["id"] = vcrc.ID
34219	}
34220	return json.Marshal(objectMap)
34221}
34222
34223// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
34224func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
34225	var m map[string]*json.RawMessage
34226	err := json.Unmarshal(body, &m)
34227	if err != nil {
34228		return err
34229	}
34230	for k, v := range m {
34231		switch k {
34232		case "properties":
34233			if v != nil {
34234				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
34235				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
34236				if err != nil {
34237					return err
34238				}
34239				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
34240			}
34241		case "name":
34242			if v != nil {
34243				var name string
34244				err = json.Unmarshal(*v, &name)
34245				if err != nil {
34246					return err
34247				}
34248				vcrc.Name = &name
34249			}
34250		case "etag":
34251			if v != nil {
34252				var etag string
34253				err = json.Unmarshal(*v, &etag)
34254				if err != nil {
34255					return err
34256				}
34257				vcrc.Etag = &etag
34258			}
34259		case "id":
34260			if v != nil {
34261				var ID string
34262				err = json.Unmarshal(*v, &ID)
34263				if err != nil {
34264					return err
34265				}
34266				vcrc.ID = &ID
34267			}
34268		}
34269	}
34270
34271	return nil
34272}
34273
34274// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway.
34275type VpnClientRootCertificatePropertiesFormat struct {
34276	// PublicCertData - The certificate public data.
34277	PublicCertData *string `json:"publicCertData,omitempty"`
34278	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34279	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34280}
34281
34282// VpnConnection vpnConnection Resource.
34283type VpnConnection struct {
34284	autorest.Response `json:"-"`
34285	// VpnConnectionProperties - Properties of the VPN connection.
34286	*VpnConnectionProperties `json:"properties,omitempty"`
34287	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
34288	Name *string `json:"name,omitempty"`
34289	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34290	Etag *string `json:"etag,omitempty"`
34291	// ID - Resource ID.
34292	ID *string `json:"id,omitempty"`
34293}
34294
34295// MarshalJSON is the custom marshaler for VpnConnection.
34296func (vc VpnConnection) MarshalJSON() ([]byte, error) {
34297	objectMap := make(map[string]interface{})
34298	if vc.VpnConnectionProperties != nil {
34299		objectMap["properties"] = vc.VpnConnectionProperties
34300	}
34301	if vc.Name != nil {
34302		objectMap["name"] = vc.Name
34303	}
34304	if vc.ID != nil {
34305		objectMap["id"] = vc.ID
34306	}
34307	return json.Marshal(objectMap)
34308}
34309
34310// UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
34311func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
34312	var m map[string]*json.RawMessage
34313	err := json.Unmarshal(body, &m)
34314	if err != nil {
34315		return err
34316	}
34317	for k, v := range m {
34318		switch k {
34319		case "properties":
34320			if v != nil {
34321				var vpnConnectionProperties VpnConnectionProperties
34322				err = json.Unmarshal(*v, &vpnConnectionProperties)
34323				if err != nil {
34324					return err
34325				}
34326				vc.VpnConnectionProperties = &vpnConnectionProperties
34327			}
34328		case "name":
34329			if v != nil {
34330				var name string
34331				err = json.Unmarshal(*v, &name)
34332				if err != nil {
34333					return err
34334				}
34335				vc.Name = &name
34336			}
34337		case "etag":
34338			if v != nil {
34339				var etag string
34340				err = json.Unmarshal(*v, &etag)
34341				if err != nil {
34342					return err
34343				}
34344				vc.Etag = &etag
34345			}
34346		case "id":
34347			if v != nil {
34348				var ID string
34349				err = json.Unmarshal(*v, &ID)
34350				if err != nil {
34351					return err
34352				}
34353				vc.ID = &ID
34354			}
34355		}
34356	}
34357
34358	return nil
34359}
34360
34361// VpnConnectionProperties parameters for VpnConnection.
34362type VpnConnectionProperties struct {
34363	// RemoteVpnSite - Id of the connected vpn site.
34364	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
34365	// RoutingWeight - Routing weight for vpn connection.
34366	RoutingWeight *int32 `json:"routingWeight,omitempty"`
34367	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
34368	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
34369	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
34370	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
34371	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
34372	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
34373	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
34374	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
34375	// ConnectionBandwidth - Expected bandwidth in MBPS.
34376	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
34377	// SharedKey - SharedKey for the vpn connection.
34378	SharedKey *string `json:"sharedKey,omitempty"`
34379	// EnableBgp - EnableBgp flag.
34380	EnableBgp *bool `json:"enableBgp,omitempty"`
34381	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
34382	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
34383	// IpsecPolicies - The IPSec Policies to be considered by this connection.
34384	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
34385	// EnableRateLimiting - EnableBgp flag.
34386	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
34387	// EnableInternetSecurity - Enable internet security.
34388	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
34389	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
34390	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
34391	// ProvisioningState - READ-ONLY; The provisioning state of the VPN connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34392	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34393	// VpnLinkConnections - List of all vpn site link connections to the gateway.
34394	VpnLinkConnections *[]VpnSiteLinkConnection `json:"vpnLinkConnections,omitempty"`
34395}
34396
34397// VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
34398// long-running operation.
34399type VpnConnectionsCreateOrUpdateFuture struct {
34400	azure.Future
34401}
34402
34403// Result returns the result of the asynchronous operation.
34404// If the operation has not completed it will return an error.
34405func (future *VpnConnectionsCreateOrUpdateFuture) Result(client VpnConnectionsClient) (vc VpnConnection, err error) {
34406	var done bool
34407	done, err = future.DoneWithContext(context.Background(), client)
34408	if err != nil {
34409		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34410		return
34411	}
34412	if !done {
34413		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
34414		return
34415	}
34416	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34417	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
34418		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
34419		if err != nil {
34420			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
34421		}
34422	}
34423	return
34424}
34425
34426// VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
34427// operation.
34428type VpnConnectionsDeleteFuture struct {
34429	azure.Future
34430}
34431
34432// Result returns the result of the asynchronous operation.
34433// If the operation has not completed it will return an error.
34434func (future *VpnConnectionsDeleteFuture) Result(client VpnConnectionsClient) (ar autorest.Response, err error) {
34435	var done bool
34436	done, err = future.DoneWithContext(context.Background(), client)
34437	if err != nil {
34438		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
34439		return
34440	}
34441	if !done {
34442		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
34443		return
34444	}
34445	ar.Response = future.Response()
34446	return
34447}
34448
34449// VpnDeviceScriptParameters vpn device configuration script generation parameters.
34450type VpnDeviceScriptParameters struct {
34451	// Vendor - The vendor for the vpn device.
34452	Vendor *string `json:"vendor,omitempty"`
34453	// DeviceFamily - The device family for the vpn device.
34454	DeviceFamily *string `json:"deviceFamily,omitempty"`
34455	// FirmwareVersion - The firmware version for the vpn device.
34456	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
34457}
34458
34459// VpnGateway vpnGateway Resource.
34460type VpnGateway struct {
34461	autorest.Response `json:"-"`
34462	// VpnGatewayProperties - Properties of the VPN gateway.
34463	*VpnGatewayProperties `json:"properties,omitempty"`
34464	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34465	Etag *string `json:"etag,omitempty"`
34466	// ID - Resource ID.
34467	ID *string `json:"id,omitempty"`
34468	// Name - READ-ONLY; Resource name.
34469	Name *string `json:"name,omitempty"`
34470	// Type - READ-ONLY; Resource type.
34471	Type *string `json:"type,omitempty"`
34472	// Location - Resource location.
34473	Location *string `json:"location,omitempty"`
34474	// Tags - Resource tags.
34475	Tags map[string]*string `json:"tags"`
34476}
34477
34478// MarshalJSON is the custom marshaler for VpnGateway.
34479func (vg VpnGateway) MarshalJSON() ([]byte, error) {
34480	objectMap := make(map[string]interface{})
34481	if vg.VpnGatewayProperties != nil {
34482		objectMap["properties"] = vg.VpnGatewayProperties
34483	}
34484	if vg.ID != nil {
34485		objectMap["id"] = vg.ID
34486	}
34487	if vg.Location != nil {
34488		objectMap["location"] = vg.Location
34489	}
34490	if vg.Tags != nil {
34491		objectMap["tags"] = vg.Tags
34492	}
34493	return json.Marshal(objectMap)
34494}
34495
34496// UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
34497func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
34498	var m map[string]*json.RawMessage
34499	err := json.Unmarshal(body, &m)
34500	if err != nil {
34501		return err
34502	}
34503	for k, v := range m {
34504		switch k {
34505		case "properties":
34506			if v != nil {
34507				var vpnGatewayProperties VpnGatewayProperties
34508				err = json.Unmarshal(*v, &vpnGatewayProperties)
34509				if err != nil {
34510					return err
34511				}
34512				vg.VpnGatewayProperties = &vpnGatewayProperties
34513			}
34514		case "etag":
34515			if v != nil {
34516				var etag string
34517				err = json.Unmarshal(*v, &etag)
34518				if err != nil {
34519					return err
34520				}
34521				vg.Etag = &etag
34522			}
34523		case "id":
34524			if v != nil {
34525				var ID string
34526				err = json.Unmarshal(*v, &ID)
34527				if err != nil {
34528					return err
34529				}
34530				vg.ID = &ID
34531			}
34532		case "name":
34533			if v != nil {
34534				var name string
34535				err = json.Unmarshal(*v, &name)
34536				if err != nil {
34537					return err
34538				}
34539				vg.Name = &name
34540			}
34541		case "type":
34542			if v != nil {
34543				var typeVar string
34544				err = json.Unmarshal(*v, &typeVar)
34545				if err != nil {
34546					return err
34547				}
34548				vg.Type = &typeVar
34549			}
34550		case "location":
34551			if v != nil {
34552				var location string
34553				err = json.Unmarshal(*v, &location)
34554				if err != nil {
34555					return err
34556				}
34557				vg.Location = &location
34558			}
34559		case "tags":
34560			if v != nil {
34561				var tags map[string]*string
34562				err = json.Unmarshal(*v, &tags)
34563				if err != nil {
34564					return err
34565				}
34566				vg.Tags = tags
34567			}
34568		}
34569	}
34570
34571	return nil
34572}
34573
34574// VpnGatewayProperties parameters for VpnGateway.
34575type VpnGatewayProperties struct {
34576	// VirtualHub - The VirtualHub to which the gateway belongs.
34577	VirtualHub *SubResource `json:"virtualHub,omitempty"`
34578	// Connections - List of all vpn connections to the gateway.
34579	Connections *[]VpnConnection `json:"connections,omitempty"`
34580	// BgpSettings - Local network gateway's BGP speaker settings.
34581	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
34582	// ProvisioningState - READ-ONLY; The provisioning state of the VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34583	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34584	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
34585	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
34586}
34587
34588// VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
34589// long-running operation.
34590type VpnGatewaysCreateOrUpdateFuture struct {
34591	azure.Future
34592}
34593
34594// Result returns the result of the asynchronous operation.
34595// If the operation has not completed it will return an error.
34596func (future *VpnGatewaysCreateOrUpdateFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
34597	var done bool
34598	done, err = future.DoneWithContext(context.Background(), client)
34599	if err != nil {
34600		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34601		return
34602	}
34603	if !done {
34604		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
34605		return
34606	}
34607	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34608	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
34609		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
34610		if err != nil {
34611			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
34612		}
34613	}
34614	return
34615}
34616
34617// VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
34618// operation.
34619type VpnGatewaysDeleteFuture struct {
34620	azure.Future
34621}
34622
34623// Result returns the result of the asynchronous operation.
34624// If the operation has not completed it will return an error.
34625func (future *VpnGatewaysDeleteFuture) Result(client VpnGatewaysClient) (ar autorest.Response, err error) {
34626	var done bool
34627	done, err = future.DoneWithContext(context.Background(), client)
34628	if err != nil {
34629		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
34630		return
34631	}
34632	if !done {
34633		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
34634		return
34635	}
34636	ar.Response = future.Response()
34637	return
34638}
34639
34640// VpnGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running
34641// operation.
34642type VpnGatewaysResetFuture struct {
34643	azure.Future
34644}
34645
34646// Result returns the result of the asynchronous operation.
34647// If the operation has not completed it will return an error.
34648func (future *VpnGatewaysResetFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
34649	var done bool
34650	done, err = future.DoneWithContext(context.Background(), client)
34651	if err != nil {
34652		err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", future.Response(), "Polling failure")
34653		return
34654	}
34655	if !done {
34656		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysResetFuture")
34657		return
34658	}
34659	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34660	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
34661		vg, err = client.ResetResponder(vg.Response.Response)
34662		if err != nil {
34663			err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", vg.Response.Response, "Failure responding to request")
34664		}
34665	}
34666	return
34667}
34668
34669// VpnLinkBgpSettings BGP settings details for a link.
34670type VpnLinkBgpSettings struct {
34671	// Asn - The BGP speaker's ASN.
34672	Asn *int64 `json:"asn,omitempty"`
34673	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
34674	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
34675}
34676
34677// VpnLinkProviderProperties list of properties of a link provider.
34678type VpnLinkProviderProperties struct {
34679	// LinkProviderName - Name of the link provider.
34680	LinkProviderName *string `json:"linkProviderName,omitempty"`
34681	// LinkSpeedInMbps - Link speed.
34682	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
34683}
34684
34685// VpnPacketCaptureStartParameters start packet capture parameters on virtual network gateway.
34686type VpnPacketCaptureStartParameters struct {
34687	// FilterData - Start Packet capture parameters.
34688	FilterData *string `json:"filterData,omitempty"`
34689}
34690
34691// VpnPacketCaptureStopParameters stop packet capture parameters.
34692type VpnPacketCaptureStopParameters struct {
34693	// SasURL - SAS url for packet capture on virtual network gateway.
34694	SasURL *string `json:"sasUrl,omitempty"`
34695}
34696
34697// VpnProfileResponse vpn Profile Response for package generation.
34698type VpnProfileResponse struct {
34699	autorest.Response `json:"-"`
34700	// ProfileURL - URL to the VPN profile.
34701	ProfileURL *string `json:"profileUrl,omitempty"`
34702}
34703
34704// VpnServerConfigRadiusClientRootCertificate properties of the Radius client root certificate of
34705// VpnServerConfiguration.
34706type VpnServerConfigRadiusClientRootCertificate struct {
34707	// Name - The certificate name.
34708	Name *string `json:"name,omitempty"`
34709	// Thumbprint - The Radius client root certificate thumbprint.
34710	Thumbprint *string `json:"thumbprint,omitempty"`
34711}
34712
34713// VpnServerConfigRadiusServerRootCertificate properties of Radius Server root certificate of
34714// VpnServerConfiguration.
34715type VpnServerConfigRadiusServerRootCertificate struct {
34716	// Name - The certificate name.
34717	Name *string `json:"name,omitempty"`
34718	// PublicCertData - The certificate public data.
34719	PublicCertData *string `json:"publicCertData,omitempty"`
34720}
34721
34722// VpnServerConfiguration vpnServerConfiguration Resource.
34723type VpnServerConfiguration struct {
34724	autorest.Response `json:"-"`
34725	// VpnServerConfigurationProperties - Properties of the P2SVpnServer configuration.
34726	*VpnServerConfigurationProperties `json:"properties,omitempty"`
34727	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34728	Etag *string `json:"etag,omitempty"`
34729	// ID - Resource ID.
34730	ID *string `json:"id,omitempty"`
34731	// Name - READ-ONLY; Resource name.
34732	Name *string `json:"name,omitempty"`
34733	// Type - READ-ONLY; Resource type.
34734	Type *string `json:"type,omitempty"`
34735	// Location - Resource location.
34736	Location *string `json:"location,omitempty"`
34737	// Tags - Resource tags.
34738	Tags map[string]*string `json:"tags"`
34739}
34740
34741// MarshalJSON is the custom marshaler for VpnServerConfiguration.
34742func (vsc VpnServerConfiguration) MarshalJSON() ([]byte, error) {
34743	objectMap := make(map[string]interface{})
34744	if vsc.VpnServerConfigurationProperties != nil {
34745		objectMap["properties"] = vsc.VpnServerConfigurationProperties
34746	}
34747	if vsc.ID != nil {
34748		objectMap["id"] = vsc.ID
34749	}
34750	if vsc.Location != nil {
34751		objectMap["location"] = vsc.Location
34752	}
34753	if vsc.Tags != nil {
34754		objectMap["tags"] = vsc.Tags
34755	}
34756	return json.Marshal(objectMap)
34757}
34758
34759// UnmarshalJSON is the custom unmarshaler for VpnServerConfiguration struct.
34760func (vsc *VpnServerConfiguration) UnmarshalJSON(body []byte) error {
34761	var m map[string]*json.RawMessage
34762	err := json.Unmarshal(body, &m)
34763	if err != nil {
34764		return err
34765	}
34766	for k, v := range m {
34767		switch k {
34768		case "properties":
34769			if v != nil {
34770				var vpnServerConfigurationProperties VpnServerConfigurationProperties
34771				err = json.Unmarshal(*v, &vpnServerConfigurationProperties)
34772				if err != nil {
34773					return err
34774				}
34775				vsc.VpnServerConfigurationProperties = &vpnServerConfigurationProperties
34776			}
34777		case "etag":
34778			if v != nil {
34779				var etag string
34780				err = json.Unmarshal(*v, &etag)
34781				if err != nil {
34782					return err
34783				}
34784				vsc.Etag = &etag
34785			}
34786		case "id":
34787			if v != nil {
34788				var ID string
34789				err = json.Unmarshal(*v, &ID)
34790				if err != nil {
34791					return err
34792				}
34793				vsc.ID = &ID
34794			}
34795		case "name":
34796			if v != nil {
34797				var name string
34798				err = json.Unmarshal(*v, &name)
34799				if err != nil {
34800					return err
34801				}
34802				vsc.Name = &name
34803			}
34804		case "type":
34805			if v != nil {
34806				var typeVar string
34807				err = json.Unmarshal(*v, &typeVar)
34808				if err != nil {
34809					return err
34810				}
34811				vsc.Type = &typeVar
34812			}
34813		case "location":
34814			if v != nil {
34815				var location string
34816				err = json.Unmarshal(*v, &location)
34817				if err != nil {
34818					return err
34819				}
34820				vsc.Location = &location
34821			}
34822		case "tags":
34823			if v != nil {
34824				var tags map[string]*string
34825				err = json.Unmarshal(*v, &tags)
34826				if err != nil {
34827					return err
34828				}
34829				vsc.Tags = tags
34830			}
34831		}
34832	}
34833
34834	return nil
34835}
34836
34837// VpnServerConfigurationProperties parameters for VpnServerConfiguration.
34838type VpnServerConfigurationProperties struct {
34839	// Name - The name of the VpnServerConfiguration that is unique within a resource group.
34840	Name *string `json:"name,omitempty"`
34841	// VpnProtocols - VPN protocols for the VpnServerConfiguration.
34842	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
34843	// VpnAuthenticationTypes - VPN authentication types for the VpnServerConfiguration.
34844	VpnAuthenticationTypes *[]VpnAuthenticationType `json:"vpnAuthenticationTypes,omitempty"`
34845	// VpnClientRootCertificates - VPN client root certificate of VpnServerConfiguration.
34846	VpnClientRootCertificates *[]VpnServerConfigVpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
34847	// VpnClientRevokedCertificates - VPN client revoked certificate of VpnServerConfiguration.
34848	VpnClientRevokedCertificates *[]VpnServerConfigVpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
34849	// RadiusServerRootCertificates - Radius Server root certificate of VpnServerConfiguration.
34850	RadiusServerRootCertificates *[]VpnServerConfigRadiusServerRootCertificate `json:"radiusServerRootCertificates,omitempty"`
34851	// RadiusClientRootCertificates - Radius client root certificate of VpnServerConfiguration.
34852	RadiusClientRootCertificates *[]VpnServerConfigRadiusClientRootCertificate `json:"radiusClientRootCertificates,omitempty"`
34853	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for VpnServerConfiguration.
34854	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
34855	// RadiusServerAddress - The radius server address property of the VpnServerConfiguration resource for point to site client connection.
34856	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
34857	// RadiusServerSecret - The radius secret property of the VpnServerConfiguration resource for point to site client connection.
34858	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
34859	// AadAuthenticationParameters - The set of aad vpn authentication parameters.
34860	AadAuthenticationParameters *AadAuthenticationParameters `json:"aadAuthenticationParameters,omitempty"`
34861	// ProvisioningState - READ-ONLY; The provisioning state of the VpnServerConfiguration resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
34862	ProvisioningState *string `json:"provisioningState,omitempty"`
34863	// P2SVpnGateways - READ-ONLY; List of references to P2SVpnGateways.
34864	P2SVpnGateways *[]P2SVpnGateway `json:"p2SVpnGateways,omitempty"`
34865	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34866	Etag *string `json:"etag,omitempty"`
34867}
34868
34869// VpnServerConfigurationsAssociatedWithVirtualWanListFuture an abstraction for monitoring and retrieving
34870// the results of a long-running operation.
34871type VpnServerConfigurationsAssociatedWithVirtualWanListFuture struct {
34872	azure.Future
34873}
34874
34875// Result returns the result of the asynchronous operation.
34876// If the operation has not completed it will return an error.
34877func (future *VpnServerConfigurationsAssociatedWithVirtualWanListFuture) Result(client VpnServerConfigurationsAssociatedWithVirtualWanClient) (vscr VpnServerConfigurationsResponse, err error) {
34878	var done bool
34879	done, err = future.DoneWithContext(context.Background(), client)
34880	if err != nil {
34881		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", future.Response(), "Polling failure")
34882		return
34883	}
34884	if !done {
34885		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture")
34886		return
34887	}
34888	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34889	if vscr.Response.Response, err = future.GetResult(sender); err == nil && vscr.Response.Response.StatusCode != http.StatusNoContent {
34890		vscr, err = client.ListResponder(vscr.Response.Response)
34891		if err != nil {
34892			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", vscr.Response.Response, "Failure responding to request")
34893		}
34894	}
34895	return
34896}
34897
34898// VpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
34899// a long-running operation.
34900type VpnServerConfigurationsCreateOrUpdateFuture struct {
34901	azure.Future
34902}
34903
34904// Result returns the result of the asynchronous operation.
34905// If the operation has not completed it will return an error.
34906func (future *VpnServerConfigurationsCreateOrUpdateFuture) Result(client VpnServerConfigurationsClient) (vsc VpnServerConfiguration, err error) {
34907	var done bool
34908	done, err = future.DoneWithContext(context.Background(), client)
34909	if err != nil {
34910		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34911		return
34912	}
34913	if !done {
34914		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsCreateOrUpdateFuture")
34915		return
34916	}
34917	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34918	if vsc.Response.Response, err = future.GetResult(sender); err == nil && vsc.Response.Response.StatusCode != http.StatusNoContent {
34919		vsc, err = client.CreateOrUpdateResponder(vsc.Response.Response)
34920		if err != nil {
34921			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", vsc.Response.Response, "Failure responding to request")
34922		}
34923	}
34924	return
34925}
34926
34927// VpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
34928// long-running operation.
34929type VpnServerConfigurationsDeleteFuture struct {
34930	azure.Future
34931}
34932
34933// Result returns the result of the asynchronous operation.
34934// If the operation has not completed it will return an error.
34935func (future *VpnServerConfigurationsDeleteFuture) Result(client VpnServerConfigurationsClient) (ar autorest.Response, err error) {
34936	var done bool
34937	done, err = future.DoneWithContext(context.Background(), client)
34938	if err != nil {
34939		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
34940		return
34941	}
34942	if !done {
34943		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsDeleteFuture")
34944		return
34945	}
34946	ar.Response = future.Response()
34947	return
34948}
34949
34950// VpnServerConfigurationsResponse vpnServerConfigurations list associated with VirtualWan Response.
34951type VpnServerConfigurationsResponse struct {
34952	autorest.Response `json:"-"`
34953	// VpnServerConfigurationResourceIds - List of VpnServerConfigurations associated with VirtualWan.
34954	VpnServerConfigurationResourceIds *[]string `json:"vpnServerConfigurationResourceIds,omitempty"`
34955}
34956
34957// VpnServerConfigVpnClientRevokedCertificate properties of the revoked VPN client certificate of
34958// VpnServerConfiguration.
34959type VpnServerConfigVpnClientRevokedCertificate struct {
34960	// Name - The certificate name.
34961	Name *string `json:"name,omitempty"`
34962	// Thumbprint - The revoked VPN client certificate thumbprint.
34963	Thumbprint *string `json:"thumbprint,omitempty"`
34964}
34965
34966// VpnServerConfigVpnClientRootCertificate properties of VPN client root certificate of
34967// VpnServerConfiguration.
34968type VpnServerConfigVpnClientRootCertificate struct {
34969	// Name - The certificate name.
34970	Name *string `json:"name,omitempty"`
34971	// PublicCertData - The certificate public data.
34972	PublicCertData *string `json:"publicCertData,omitempty"`
34973}
34974
34975// VpnSite vpnSite Resource.
34976type VpnSite struct {
34977	autorest.Response `json:"-"`
34978	// VpnSiteProperties - Properties of the VPN site.
34979	*VpnSiteProperties `json:"properties,omitempty"`
34980	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34981	Etag *string `json:"etag,omitempty"`
34982	// ID - Resource ID.
34983	ID *string `json:"id,omitempty"`
34984	// Name - READ-ONLY; Resource name.
34985	Name *string `json:"name,omitempty"`
34986	// Type - READ-ONLY; Resource type.
34987	Type *string `json:"type,omitempty"`
34988	// Location - Resource location.
34989	Location *string `json:"location,omitempty"`
34990	// Tags - Resource tags.
34991	Tags map[string]*string `json:"tags"`
34992}
34993
34994// MarshalJSON is the custom marshaler for VpnSite.
34995func (vs VpnSite) MarshalJSON() ([]byte, error) {
34996	objectMap := make(map[string]interface{})
34997	if vs.VpnSiteProperties != nil {
34998		objectMap["properties"] = vs.VpnSiteProperties
34999	}
35000	if vs.ID != nil {
35001		objectMap["id"] = vs.ID
35002	}
35003	if vs.Location != nil {
35004		objectMap["location"] = vs.Location
35005	}
35006	if vs.Tags != nil {
35007		objectMap["tags"] = vs.Tags
35008	}
35009	return json.Marshal(objectMap)
35010}
35011
35012// UnmarshalJSON is the custom unmarshaler for VpnSite struct.
35013func (vs *VpnSite) UnmarshalJSON(body []byte) error {
35014	var m map[string]*json.RawMessage
35015	err := json.Unmarshal(body, &m)
35016	if err != nil {
35017		return err
35018	}
35019	for k, v := range m {
35020		switch k {
35021		case "properties":
35022			if v != nil {
35023				var vpnSiteProperties VpnSiteProperties
35024				err = json.Unmarshal(*v, &vpnSiteProperties)
35025				if err != nil {
35026					return err
35027				}
35028				vs.VpnSiteProperties = &vpnSiteProperties
35029			}
35030		case "etag":
35031			if v != nil {
35032				var etag string
35033				err = json.Unmarshal(*v, &etag)
35034				if err != nil {
35035					return err
35036				}
35037				vs.Etag = &etag
35038			}
35039		case "id":
35040			if v != nil {
35041				var ID string
35042				err = json.Unmarshal(*v, &ID)
35043				if err != nil {
35044					return err
35045				}
35046				vs.ID = &ID
35047			}
35048		case "name":
35049			if v != nil {
35050				var name string
35051				err = json.Unmarshal(*v, &name)
35052				if err != nil {
35053					return err
35054				}
35055				vs.Name = &name
35056			}
35057		case "type":
35058			if v != nil {
35059				var typeVar string
35060				err = json.Unmarshal(*v, &typeVar)
35061				if err != nil {
35062					return err
35063				}
35064				vs.Type = &typeVar
35065			}
35066		case "location":
35067			if v != nil {
35068				var location string
35069				err = json.Unmarshal(*v, &location)
35070				if err != nil {
35071					return err
35072				}
35073				vs.Location = &location
35074			}
35075		case "tags":
35076			if v != nil {
35077				var tags map[string]*string
35078				err = json.Unmarshal(*v, &tags)
35079				if err != nil {
35080					return err
35081				}
35082				vs.Tags = tags
35083			}
35084		}
35085	}
35086
35087	return nil
35088}
35089
35090// VpnSiteID vpnSite Resource.
35091type VpnSiteID struct {
35092	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
35093	VpnSite *string `json:"vpnSite,omitempty"`
35094}
35095
35096// VpnSiteLink vpnSiteLink Resource.
35097type VpnSiteLink struct {
35098	autorest.Response `json:"-"`
35099	// VpnSiteLinkProperties - Properties of the VPN site link.
35100	*VpnSiteLinkProperties `json:"properties,omitempty"`
35101	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35102	Etag *string `json:"etag,omitempty"`
35103	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
35104	Name *string `json:"name,omitempty"`
35105	// Type - READ-ONLY; Resource type.
35106	Type *string `json:"type,omitempty"`
35107	// ID - Resource ID.
35108	ID *string `json:"id,omitempty"`
35109}
35110
35111// MarshalJSON is the custom marshaler for VpnSiteLink.
35112func (vsl VpnSiteLink) MarshalJSON() ([]byte, error) {
35113	objectMap := make(map[string]interface{})
35114	if vsl.VpnSiteLinkProperties != nil {
35115		objectMap["properties"] = vsl.VpnSiteLinkProperties
35116	}
35117	if vsl.Name != nil {
35118		objectMap["name"] = vsl.Name
35119	}
35120	if vsl.ID != nil {
35121		objectMap["id"] = vsl.ID
35122	}
35123	return json.Marshal(objectMap)
35124}
35125
35126// UnmarshalJSON is the custom unmarshaler for VpnSiteLink struct.
35127func (vsl *VpnSiteLink) UnmarshalJSON(body []byte) error {
35128	var m map[string]*json.RawMessage
35129	err := json.Unmarshal(body, &m)
35130	if err != nil {
35131		return err
35132	}
35133	for k, v := range m {
35134		switch k {
35135		case "properties":
35136			if v != nil {
35137				var vpnSiteLinkProperties VpnSiteLinkProperties
35138				err = json.Unmarshal(*v, &vpnSiteLinkProperties)
35139				if err != nil {
35140					return err
35141				}
35142				vsl.VpnSiteLinkProperties = &vpnSiteLinkProperties
35143			}
35144		case "etag":
35145			if v != nil {
35146				var etag string
35147				err = json.Unmarshal(*v, &etag)
35148				if err != nil {
35149					return err
35150				}
35151				vsl.Etag = &etag
35152			}
35153		case "name":
35154			if v != nil {
35155				var name string
35156				err = json.Unmarshal(*v, &name)
35157				if err != nil {
35158					return err
35159				}
35160				vsl.Name = &name
35161			}
35162		case "type":
35163			if v != nil {
35164				var typeVar string
35165				err = json.Unmarshal(*v, &typeVar)
35166				if err != nil {
35167					return err
35168				}
35169				vsl.Type = &typeVar
35170			}
35171		case "id":
35172			if v != nil {
35173				var ID string
35174				err = json.Unmarshal(*v, &ID)
35175				if err != nil {
35176					return err
35177				}
35178				vsl.ID = &ID
35179			}
35180		}
35181	}
35182
35183	return nil
35184}
35185
35186// VpnSiteLinkConnection vpnSiteLinkConnection Resource.
35187type VpnSiteLinkConnection struct {
35188	autorest.Response `json:"-"`
35189	// VpnSiteLinkConnectionProperties - Properties of the VPN site link connection.
35190	*VpnSiteLinkConnectionProperties `json:"properties,omitempty"`
35191	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
35192	Name *string `json:"name,omitempty"`
35193	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35194	Etag *string `json:"etag,omitempty"`
35195	// Type - READ-ONLY; Resource type.
35196	Type *string `json:"type,omitempty"`
35197	// ID - Resource ID.
35198	ID *string `json:"id,omitempty"`
35199}
35200
35201// MarshalJSON is the custom marshaler for VpnSiteLinkConnection.
35202func (vslc VpnSiteLinkConnection) MarshalJSON() ([]byte, error) {
35203	objectMap := make(map[string]interface{})
35204	if vslc.VpnSiteLinkConnectionProperties != nil {
35205		objectMap["properties"] = vslc.VpnSiteLinkConnectionProperties
35206	}
35207	if vslc.Name != nil {
35208		objectMap["name"] = vslc.Name
35209	}
35210	if vslc.ID != nil {
35211		objectMap["id"] = vslc.ID
35212	}
35213	return json.Marshal(objectMap)
35214}
35215
35216// UnmarshalJSON is the custom unmarshaler for VpnSiteLinkConnection struct.
35217func (vslc *VpnSiteLinkConnection) UnmarshalJSON(body []byte) error {
35218	var m map[string]*json.RawMessage
35219	err := json.Unmarshal(body, &m)
35220	if err != nil {
35221		return err
35222	}
35223	for k, v := range m {
35224		switch k {
35225		case "properties":
35226			if v != nil {
35227				var vpnSiteLinkConnectionProperties VpnSiteLinkConnectionProperties
35228				err = json.Unmarshal(*v, &vpnSiteLinkConnectionProperties)
35229				if err != nil {
35230					return err
35231				}
35232				vslc.VpnSiteLinkConnectionProperties = &vpnSiteLinkConnectionProperties
35233			}
35234		case "name":
35235			if v != nil {
35236				var name string
35237				err = json.Unmarshal(*v, &name)
35238				if err != nil {
35239					return err
35240				}
35241				vslc.Name = &name
35242			}
35243		case "etag":
35244			if v != nil {
35245				var etag string
35246				err = json.Unmarshal(*v, &etag)
35247				if err != nil {
35248					return err
35249				}
35250				vslc.Etag = &etag
35251			}
35252		case "type":
35253			if v != nil {
35254				var typeVar string
35255				err = json.Unmarshal(*v, &typeVar)
35256				if err != nil {
35257					return err
35258				}
35259				vslc.Type = &typeVar
35260			}
35261		case "id":
35262			if v != nil {
35263				var ID string
35264				err = json.Unmarshal(*v, &ID)
35265				if err != nil {
35266					return err
35267				}
35268				vslc.ID = &ID
35269			}
35270		}
35271	}
35272
35273	return nil
35274}
35275
35276// VpnSiteLinkConnectionProperties parameters for VpnConnection.
35277type VpnSiteLinkConnectionProperties struct {
35278	// VpnSiteLink - Id of the connected vpn site link.
35279	VpnSiteLink *SubResource `json:"vpnSiteLink,omitempty"`
35280	// RoutingWeight - Routing weight for vpn connection.
35281	RoutingWeight *int32 `json:"routingWeight,omitempty"`
35282	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
35283	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
35284	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
35285	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
35286	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
35287	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
35288	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
35289	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
35290	// ConnectionBandwidth - Expected bandwidth in MBPS.
35291	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
35292	// SharedKey - SharedKey for the vpn connection.
35293	SharedKey *string `json:"sharedKey,omitempty"`
35294	// EnableBgp - EnableBgp flag.
35295	EnableBgp *bool `json:"enableBgp,omitempty"`
35296	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
35297	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
35298	// IpsecPolicies - The IPSec Policies to be considered by this connection.
35299	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
35300	// EnableRateLimiting - EnableBgp flag.
35301	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
35302	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
35303	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
35304	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site link connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
35305	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
35306}
35307
35308// VpnSiteLinkProperties parameters for VpnSite.
35309type VpnSiteLinkProperties struct {
35310	// LinkProperties - The link provider properties.
35311	LinkProperties *VpnLinkProviderProperties `json:"linkProperties,omitempty"`
35312	// IPAddress - The ip-address for the vpn-site-link.
35313	IPAddress *string `json:"ipAddress,omitempty"`
35314	// BgpProperties - The set of bgp properties.
35315	BgpProperties *VpnLinkBgpSettings `json:"bgpProperties,omitempty"`
35316	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
35317	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
35318}
35319
35320// VpnSiteProperties parameters for VpnSite.
35321type VpnSiteProperties struct {
35322	// VirtualWan - The VirtualWAN to which the vpnSite belongs.
35323	VirtualWan *SubResource `json:"virtualWan,omitempty"`
35324	// DeviceProperties - The device properties.
35325	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
35326	// IPAddress - The ip-address for the vpn-site.
35327	IPAddress *string `json:"ipAddress,omitempty"`
35328	// SiteKey - The key for vpn-site that can be used for connections.
35329	SiteKey *string `json:"siteKey,omitempty"`
35330	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
35331	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
35332	// BgpProperties - The set of bgp properties.
35333	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
35334	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
35335	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
35336	// IsSecuritySite - IsSecuritySite flag.
35337	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
35338	// VpnSiteLinks - List of all vpn site links.
35339	VpnSiteLinks *[]VpnSiteLink `json:"vpnSiteLinks,omitempty"`
35340}
35341
35342// VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
35343// long-running operation.
35344type VpnSitesConfigurationDownloadFuture struct {
35345	azure.Future
35346}
35347
35348// Result returns the result of the asynchronous operation.
35349// If the operation has not completed it will return an error.
35350func (future *VpnSitesConfigurationDownloadFuture) Result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
35351	var done bool
35352	done, err = future.DoneWithContext(context.Background(), client)
35353	if err != nil {
35354		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
35355		return
35356	}
35357	if !done {
35358		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
35359		return
35360	}
35361	ar.Response = future.Response()
35362	return
35363}
35364
35365// VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
35366// operation.
35367type VpnSitesCreateOrUpdateFuture struct {
35368	azure.Future
35369}
35370
35371// Result returns the result of the asynchronous operation.
35372// If the operation has not completed it will return an error.
35373func (future *VpnSitesCreateOrUpdateFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
35374	var done bool
35375	done, err = future.DoneWithContext(context.Background(), client)
35376	if err != nil {
35377		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
35378		return
35379	}
35380	if !done {
35381		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
35382		return
35383	}
35384	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35385	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
35386		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
35387		if err != nil {
35388			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
35389		}
35390	}
35391	return
35392}
35393
35394// VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
35395// operation.
35396type VpnSitesDeleteFuture struct {
35397	azure.Future
35398}
35399
35400// Result returns the result of the asynchronous operation.
35401// If the operation has not completed it will return an error.
35402func (future *VpnSitesDeleteFuture) Result(client VpnSitesClient) (ar autorest.Response, err error) {
35403	var done bool
35404	done, err = future.DoneWithContext(context.Background(), client)
35405	if err != nil {
35406		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
35407		return
35408	}
35409	if !done {
35410		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
35411		return
35412	}
35413	ar.Response = future.Response()
35414	return
35415}
35416
35417// Watcher network watcher in a resource group.
35418type Watcher struct {
35419	autorest.Response `json:"-"`
35420	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35421	Etag *string `json:"etag,omitempty"`
35422	// WatcherPropertiesFormat - Properties of the network watcher.
35423	*WatcherPropertiesFormat `json:"properties,omitempty"`
35424	// ID - Resource ID.
35425	ID *string `json:"id,omitempty"`
35426	// Name - READ-ONLY; Resource name.
35427	Name *string `json:"name,omitempty"`
35428	// Type - READ-ONLY; Resource type.
35429	Type *string `json:"type,omitempty"`
35430	// Location - Resource location.
35431	Location *string `json:"location,omitempty"`
35432	// Tags - Resource tags.
35433	Tags map[string]*string `json:"tags"`
35434}
35435
35436// MarshalJSON is the custom marshaler for Watcher.
35437func (w Watcher) MarshalJSON() ([]byte, error) {
35438	objectMap := make(map[string]interface{})
35439	if w.WatcherPropertiesFormat != nil {
35440		objectMap["properties"] = w.WatcherPropertiesFormat
35441	}
35442	if w.ID != nil {
35443		objectMap["id"] = w.ID
35444	}
35445	if w.Location != nil {
35446		objectMap["location"] = w.Location
35447	}
35448	if w.Tags != nil {
35449		objectMap["tags"] = w.Tags
35450	}
35451	return json.Marshal(objectMap)
35452}
35453
35454// UnmarshalJSON is the custom unmarshaler for Watcher struct.
35455func (w *Watcher) UnmarshalJSON(body []byte) error {
35456	var m map[string]*json.RawMessage
35457	err := json.Unmarshal(body, &m)
35458	if err != nil {
35459		return err
35460	}
35461	for k, v := range m {
35462		switch k {
35463		case "etag":
35464			if v != nil {
35465				var etag string
35466				err = json.Unmarshal(*v, &etag)
35467				if err != nil {
35468					return err
35469				}
35470				w.Etag = &etag
35471			}
35472		case "properties":
35473			if v != nil {
35474				var watcherPropertiesFormat WatcherPropertiesFormat
35475				err = json.Unmarshal(*v, &watcherPropertiesFormat)
35476				if err != nil {
35477					return err
35478				}
35479				w.WatcherPropertiesFormat = &watcherPropertiesFormat
35480			}
35481		case "id":
35482			if v != nil {
35483				var ID string
35484				err = json.Unmarshal(*v, &ID)
35485				if err != nil {
35486					return err
35487				}
35488				w.ID = &ID
35489			}
35490		case "name":
35491			if v != nil {
35492				var name string
35493				err = json.Unmarshal(*v, &name)
35494				if err != nil {
35495					return err
35496				}
35497				w.Name = &name
35498			}
35499		case "type":
35500			if v != nil {
35501				var typeVar string
35502				err = json.Unmarshal(*v, &typeVar)
35503				if err != nil {
35504					return err
35505				}
35506				w.Type = &typeVar
35507			}
35508		case "location":
35509			if v != nil {
35510				var location string
35511				err = json.Unmarshal(*v, &location)
35512				if err != nil {
35513					return err
35514				}
35515				w.Location = &location
35516			}
35517		case "tags":
35518			if v != nil {
35519				var tags map[string]*string
35520				err = json.Unmarshal(*v, &tags)
35521				if err != nil {
35522					return err
35523				}
35524				w.Tags = tags
35525			}
35526		}
35527	}
35528
35529	return nil
35530}
35531
35532// WatcherListResult response for ListNetworkWatchers API service call.
35533type WatcherListResult struct {
35534	autorest.Response `json:"-"`
35535	// Value - List of network watcher resources.
35536	Value *[]Watcher `json:"value,omitempty"`
35537}
35538
35539// WatcherPropertiesFormat the network watcher properties.
35540type WatcherPropertiesFormat struct {
35541	// ProvisioningState - READ-ONLY; The provisioning state of the network watcher resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
35542	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
35543}
35544
35545// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
35546// long-running operation.
35547type WatchersCheckConnectivityFuture struct {
35548	azure.Future
35549}
35550
35551// Result returns the result of the asynchronous operation.
35552// If the operation has not completed it will return an error.
35553func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
35554	var done bool
35555	done, err = future.DoneWithContext(context.Background(), client)
35556	if err != nil {
35557		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
35558		return
35559	}
35560	if !done {
35561		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
35562		return
35563	}
35564	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35565	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
35566		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
35567		if err != nil {
35568			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
35569		}
35570	}
35571	return
35572}
35573
35574// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
35575// operation.
35576type WatchersDeleteFuture struct {
35577	azure.Future
35578}
35579
35580// Result returns the result of the asynchronous operation.
35581// If the operation has not completed it will return an error.
35582func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
35583	var done bool
35584	done, err = future.DoneWithContext(context.Background(), client)
35585	if err != nil {
35586		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
35587		return
35588	}
35589	if !done {
35590		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
35591		return
35592	}
35593	ar.Response = future.Response()
35594	return
35595}
35596
35597// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
35598// long-running operation.
35599type WatchersGetAzureReachabilityReportFuture struct {
35600	azure.Future
35601}
35602
35603// Result returns the result of the asynchronous operation.
35604// If the operation has not completed it will return an error.
35605func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
35606	var done bool
35607	done, err = future.DoneWithContext(context.Background(), client)
35608	if err != nil {
35609		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
35610		return
35611	}
35612	if !done {
35613		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
35614		return
35615	}
35616	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35617	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
35618		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
35619		if err != nil {
35620			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
35621		}
35622	}
35623	return
35624}
35625
35626// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
35627// long-running operation.
35628type WatchersGetFlowLogStatusFuture struct {
35629	azure.Future
35630}
35631
35632// Result returns the result of the asynchronous operation.
35633// If the operation has not completed it will return an error.
35634func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
35635	var done bool
35636	done, err = future.DoneWithContext(context.Background(), client)
35637	if err != nil {
35638		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
35639		return
35640	}
35641	if !done {
35642		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
35643		return
35644	}
35645	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35646	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
35647		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
35648		if err != nil {
35649			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
35650		}
35651	}
35652	return
35653}
35654
35655// WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
35656// of a long-running operation.
35657type WatchersGetNetworkConfigurationDiagnosticFuture struct {
35658	azure.Future
35659}
35660
35661// Result returns the result of the asynchronous operation.
35662// If the operation has not completed it will return an error.
35663func (future *WatchersGetNetworkConfigurationDiagnosticFuture) Result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
35664	var done bool
35665	done, err = future.DoneWithContext(context.Background(), client)
35666	if err != nil {
35667		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
35668		return
35669	}
35670	if !done {
35671		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
35672		return
35673	}
35674	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35675	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
35676		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
35677		if err != nil {
35678			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
35679		}
35680	}
35681	return
35682}
35683
35684// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
35685// operation.
35686type WatchersGetNextHopFuture struct {
35687	azure.Future
35688}
35689
35690// Result returns the result of the asynchronous operation.
35691// If the operation has not completed it will return an error.
35692func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
35693	var done bool
35694	done, err = future.DoneWithContext(context.Background(), client)
35695	if err != nil {
35696		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
35697		return
35698	}
35699	if !done {
35700		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
35701		return
35702	}
35703	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35704	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
35705		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
35706		if err != nil {
35707			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
35708		}
35709	}
35710	return
35711}
35712
35713// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
35714// long-running operation.
35715type WatchersGetTroubleshootingFuture struct {
35716	azure.Future
35717}
35718
35719// Result returns the result of the asynchronous operation.
35720// If the operation has not completed it will return an error.
35721func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
35722	var done bool
35723	done, err = future.DoneWithContext(context.Background(), client)
35724	if err != nil {
35725		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
35726		return
35727	}
35728	if !done {
35729		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
35730		return
35731	}
35732	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35733	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
35734		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
35735		if err != nil {
35736			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
35737		}
35738	}
35739	return
35740}
35741
35742// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
35743// long-running operation.
35744type WatchersGetTroubleshootingResultFuture struct {
35745	azure.Future
35746}
35747
35748// Result returns the result of the asynchronous operation.
35749// If the operation has not completed it will return an error.
35750func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
35751	var done bool
35752	done, err = future.DoneWithContext(context.Background(), client)
35753	if err != nil {
35754		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
35755		return
35756	}
35757	if !done {
35758		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
35759		return
35760	}
35761	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35762	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
35763		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
35764		if err != nil {
35765			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
35766		}
35767	}
35768	return
35769}
35770
35771// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
35772// long-running operation.
35773type WatchersGetVMSecurityRulesFuture struct {
35774	azure.Future
35775}
35776
35777// Result returns the result of the asynchronous operation.
35778// If the operation has not completed it will return an error.
35779func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
35780	var done bool
35781	done, err = future.DoneWithContext(context.Background(), client)
35782	if err != nil {
35783		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
35784		return
35785	}
35786	if !done {
35787		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
35788		return
35789	}
35790	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35791	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
35792		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
35793		if err != nil {
35794			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
35795		}
35796	}
35797	return
35798}
35799
35800// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
35801// long-running operation.
35802type WatchersListAvailableProvidersFuture struct {
35803	azure.Future
35804}
35805
35806// Result returns the result of the asynchronous operation.
35807// If the operation has not completed it will return an error.
35808func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
35809	var done bool
35810	done, err = future.DoneWithContext(context.Background(), client)
35811	if err != nil {
35812		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
35813		return
35814	}
35815	if !done {
35816		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
35817		return
35818	}
35819	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35820	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
35821		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
35822		if err != nil {
35823			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
35824		}
35825	}
35826	return
35827}
35828
35829// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
35830// long-running operation.
35831type WatchersSetFlowLogConfigurationFuture struct {
35832	azure.Future
35833}
35834
35835// Result returns the result of the asynchronous operation.
35836// If the operation has not completed it will return an error.
35837func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
35838	var done bool
35839	done, err = future.DoneWithContext(context.Background(), client)
35840	if err != nil {
35841		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
35842		return
35843	}
35844	if !done {
35845		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
35846		return
35847	}
35848	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35849	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
35850		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
35851		if err != nil {
35852			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
35853		}
35854	}
35855	return
35856}
35857
35858// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
35859// operation.
35860type WatchersVerifyIPFlowFuture struct {
35861	azure.Future
35862}
35863
35864// Result returns the result of the asynchronous operation.
35865// If the operation has not completed it will return an error.
35866func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
35867	var done bool
35868	done, err = future.DoneWithContext(context.Background(), client)
35869	if err != nil {
35870		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
35871		return
35872	}
35873	if !done {
35874		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
35875		return
35876	}
35877	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35878	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
35879		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
35880		if err != nil {
35881			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
35882		}
35883	}
35884	return
35885}
35886
35887// WebApplicationFirewallCustomRule defines contents of a web application rule.
35888type WebApplicationFirewallCustomRule struct {
35889	// Name - The name of the resource that is unique within a policy. This name can be used to access the resource.
35890	Name *string `json:"name,omitempty"`
35891	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35892	Etag *string `json:"etag,omitempty"`
35893	// Priority - Priority of the rule. Rules with a lower value will be evaluated before rules with a higher value.
35894	Priority *int32 `json:"priority,omitempty"`
35895	// RuleType - The rule type. Possible values include: 'WebApplicationFirewallRuleTypeMatchRule', 'WebApplicationFirewallRuleTypeInvalid'
35896	RuleType WebApplicationFirewallRuleType `json:"ruleType,omitempty"`
35897	// MatchConditions - List of match conditions.
35898	MatchConditions *[]MatchCondition `json:"matchConditions,omitempty"`
35899	// Action - Type of Actions. Possible values include: 'WebApplicationFirewallActionAllow', 'WebApplicationFirewallActionBlock', 'WebApplicationFirewallActionLog'
35900	Action WebApplicationFirewallAction `json:"action,omitempty"`
35901}
35902
35903// WebApplicationFirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
35904// long-running operation.
35905type WebApplicationFirewallPoliciesDeleteFuture struct {
35906	azure.Future
35907}
35908
35909// Result returns the result of the asynchronous operation.
35910// If the operation has not completed it will return an error.
35911func (future *WebApplicationFirewallPoliciesDeleteFuture) Result(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
35912	var done bool
35913	done, err = future.DoneWithContext(context.Background(), client)
35914	if err != nil {
35915		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
35916		return
35917	}
35918	if !done {
35919		err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
35920		return
35921	}
35922	ar.Response = future.Response()
35923	return
35924}
35925
35926// WebApplicationFirewallPolicy defines web application firewall policy.
35927type WebApplicationFirewallPolicy struct {
35928	autorest.Response `json:"-"`
35929	// WebApplicationFirewallPolicyPropertiesFormat - Properties of the web application firewall policy.
35930	*WebApplicationFirewallPolicyPropertiesFormat `json:"properties,omitempty"`
35931	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35932	Etag *string `json:"etag,omitempty"`
35933	// ID - Resource ID.
35934	ID *string `json:"id,omitempty"`
35935	// Name - READ-ONLY; Resource name.
35936	Name *string `json:"name,omitempty"`
35937	// Type - READ-ONLY; Resource type.
35938	Type *string `json:"type,omitempty"`
35939	// Location - Resource location.
35940	Location *string `json:"location,omitempty"`
35941	// Tags - Resource tags.
35942	Tags map[string]*string `json:"tags"`
35943}
35944
35945// MarshalJSON is the custom marshaler for WebApplicationFirewallPolicy.
35946func (wafp WebApplicationFirewallPolicy) MarshalJSON() ([]byte, error) {
35947	objectMap := make(map[string]interface{})
35948	if wafp.WebApplicationFirewallPolicyPropertiesFormat != nil {
35949		objectMap["properties"] = wafp.WebApplicationFirewallPolicyPropertiesFormat
35950	}
35951	if wafp.ID != nil {
35952		objectMap["id"] = wafp.ID
35953	}
35954	if wafp.Location != nil {
35955		objectMap["location"] = wafp.Location
35956	}
35957	if wafp.Tags != nil {
35958		objectMap["tags"] = wafp.Tags
35959	}
35960	return json.Marshal(objectMap)
35961}
35962
35963// UnmarshalJSON is the custom unmarshaler for WebApplicationFirewallPolicy struct.
35964func (wafp *WebApplicationFirewallPolicy) UnmarshalJSON(body []byte) error {
35965	var m map[string]*json.RawMessage
35966	err := json.Unmarshal(body, &m)
35967	if err != nil {
35968		return err
35969	}
35970	for k, v := range m {
35971		switch k {
35972		case "properties":
35973			if v != nil {
35974				var webApplicationFirewallPolicyPropertiesFormat WebApplicationFirewallPolicyPropertiesFormat
35975				err = json.Unmarshal(*v, &webApplicationFirewallPolicyPropertiesFormat)
35976				if err != nil {
35977					return err
35978				}
35979				wafp.WebApplicationFirewallPolicyPropertiesFormat = &webApplicationFirewallPolicyPropertiesFormat
35980			}
35981		case "etag":
35982			if v != nil {
35983				var etag string
35984				err = json.Unmarshal(*v, &etag)
35985				if err != nil {
35986					return err
35987				}
35988				wafp.Etag = &etag
35989			}
35990		case "id":
35991			if v != nil {
35992				var ID string
35993				err = json.Unmarshal(*v, &ID)
35994				if err != nil {
35995					return err
35996				}
35997				wafp.ID = &ID
35998			}
35999		case "name":
36000			if v != nil {
36001				var name string
36002				err = json.Unmarshal(*v, &name)
36003				if err != nil {
36004					return err
36005				}
36006				wafp.Name = &name
36007			}
36008		case "type":
36009			if v != nil {
36010				var typeVar string
36011				err = json.Unmarshal(*v, &typeVar)
36012				if err != nil {
36013					return err
36014				}
36015				wafp.Type = &typeVar
36016			}
36017		case "location":
36018			if v != nil {
36019				var location string
36020				err = json.Unmarshal(*v, &location)
36021				if err != nil {
36022					return err
36023				}
36024				wafp.Location = &location
36025			}
36026		case "tags":
36027			if v != nil {
36028				var tags map[string]*string
36029				err = json.Unmarshal(*v, &tags)
36030				if err != nil {
36031					return err
36032				}
36033				wafp.Tags = tags
36034			}
36035		}
36036	}
36037
36038	return nil
36039}
36040
36041// WebApplicationFirewallPolicyListResult result of the request to list WebApplicationFirewallPolicies. It
36042// contains a list of WebApplicationFirewallPolicy objects and a URL link to get the next set of results.
36043type WebApplicationFirewallPolicyListResult struct {
36044	autorest.Response `json:"-"`
36045	// Value - READ-ONLY; List of WebApplicationFirewallPolicies within a resource group.
36046	Value *[]WebApplicationFirewallPolicy `json:"value,omitempty"`
36047	// NextLink - READ-ONLY; URL to get the next set of WebApplicationFirewallPolicy objects if there are any.
36048	NextLink *string `json:"nextLink,omitempty"`
36049}
36050
36051// WebApplicationFirewallPolicyListResultIterator provides access to a complete listing of
36052// WebApplicationFirewallPolicy values.
36053type WebApplicationFirewallPolicyListResultIterator struct {
36054	i    int
36055	page WebApplicationFirewallPolicyListResultPage
36056}
36057
36058// NextWithContext advances to the next value.  If there was an error making
36059// the request the iterator does not advance and the error is returned.
36060func (iter *WebApplicationFirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
36061	if tracing.IsEnabled() {
36062		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultIterator.NextWithContext")
36063		defer func() {
36064			sc := -1
36065			if iter.Response().Response.Response != nil {
36066				sc = iter.Response().Response.Response.StatusCode
36067			}
36068			tracing.EndSpan(ctx, sc, err)
36069		}()
36070	}
36071	iter.i++
36072	if iter.i < len(iter.page.Values()) {
36073		return nil
36074	}
36075	err = iter.page.NextWithContext(ctx)
36076	if err != nil {
36077		iter.i--
36078		return err
36079	}
36080	iter.i = 0
36081	return nil
36082}
36083
36084// Next advances to the next value.  If there was an error making
36085// the request the iterator does not advance and the error is returned.
36086// Deprecated: Use NextWithContext() instead.
36087func (iter *WebApplicationFirewallPolicyListResultIterator) Next() error {
36088	return iter.NextWithContext(context.Background())
36089}
36090
36091// NotDone returns true if the enumeration should be started or is not yet complete.
36092func (iter WebApplicationFirewallPolicyListResultIterator) NotDone() bool {
36093	return iter.page.NotDone() && iter.i < len(iter.page.Values())
36094}
36095
36096// Response returns the raw server response from the last page request.
36097func (iter WebApplicationFirewallPolicyListResultIterator) Response() WebApplicationFirewallPolicyListResult {
36098	return iter.page.Response()
36099}
36100
36101// Value returns the current value or a zero-initialized value if the
36102// iterator has advanced beyond the end of the collection.
36103func (iter WebApplicationFirewallPolicyListResultIterator) Value() WebApplicationFirewallPolicy {
36104	if !iter.page.NotDone() {
36105		return WebApplicationFirewallPolicy{}
36106	}
36107	return iter.page.Values()[iter.i]
36108}
36109
36110// Creates a new instance of the WebApplicationFirewallPolicyListResultIterator type.
36111func NewWebApplicationFirewallPolicyListResultIterator(page WebApplicationFirewallPolicyListResultPage) WebApplicationFirewallPolicyListResultIterator {
36112	return WebApplicationFirewallPolicyListResultIterator{page: page}
36113}
36114
36115// IsEmpty returns true if the ListResult contains no values.
36116func (wafplr WebApplicationFirewallPolicyListResult) IsEmpty() bool {
36117	return wafplr.Value == nil || len(*wafplr.Value) == 0
36118}
36119
36120// webApplicationFirewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
36121// It returns nil if no more results exist.
36122func (wafplr WebApplicationFirewallPolicyListResult) webApplicationFirewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
36123	if wafplr.NextLink == nil || len(to.String(wafplr.NextLink)) < 1 {
36124		return nil, nil
36125	}
36126	return autorest.Prepare((&http.Request{}).WithContext(ctx),
36127		autorest.AsJSON(),
36128		autorest.AsGet(),
36129		autorest.WithBaseURL(to.String(wafplr.NextLink)))
36130}
36131
36132// WebApplicationFirewallPolicyListResultPage contains a page of WebApplicationFirewallPolicy values.
36133type WebApplicationFirewallPolicyListResultPage struct {
36134	fn     func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)
36135	wafplr WebApplicationFirewallPolicyListResult
36136}
36137
36138// NextWithContext advances to the next page of values.  If there was an error making
36139// the request the page does not advance and the error is returned.
36140func (page *WebApplicationFirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
36141	if tracing.IsEnabled() {
36142		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultPage.NextWithContext")
36143		defer func() {
36144			sc := -1
36145			if page.Response().Response.Response != nil {
36146				sc = page.Response().Response.Response.StatusCode
36147			}
36148			tracing.EndSpan(ctx, sc, err)
36149		}()
36150	}
36151	next, err := page.fn(ctx, page.wafplr)
36152	if err != nil {
36153		return err
36154	}
36155	page.wafplr = next
36156	return nil
36157}
36158
36159// Next advances to the next page of values.  If there was an error making
36160// the request the page does not advance and the error is returned.
36161// Deprecated: Use NextWithContext() instead.
36162func (page *WebApplicationFirewallPolicyListResultPage) Next() error {
36163	return page.NextWithContext(context.Background())
36164}
36165
36166// NotDone returns true if the page enumeration should be started or is not yet complete.
36167func (page WebApplicationFirewallPolicyListResultPage) NotDone() bool {
36168	return !page.wafplr.IsEmpty()
36169}
36170
36171// Response returns the raw server response from the last page request.
36172func (page WebApplicationFirewallPolicyListResultPage) Response() WebApplicationFirewallPolicyListResult {
36173	return page.wafplr
36174}
36175
36176// Values returns the slice of values for the current page or nil if there are no values.
36177func (page WebApplicationFirewallPolicyListResultPage) Values() []WebApplicationFirewallPolicy {
36178	if page.wafplr.IsEmpty() {
36179		return nil
36180	}
36181	return *page.wafplr.Value
36182}
36183
36184// Creates a new instance of the WebApplicationFirewallPolicyListResultPage type.
36185func NewWebApplicationFirewallPolicyListResultPage(getNextPage func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)) WebApplicationFirewallPolicyListResultPage {
36186	return WebApplicationFirewallPolicyListResultPage{fn: getNextPage}
36187}
36188
36189// WebApplicationFirewallPolicyPropertiesFormat defines web application firewall policy properties.
36190type WebApplicationFirewallPolicyPropertiesFormat struct {
36191	// PolicySettings - The PolicySettings for policy.
36192	PolicySettings *PolicySettings `json:"policySettings,omitempty"`
36193	// CustomRules - The custom rules inside the policy.
36194	CustomRules *[]WebApplicationFirewallCustomRule `json:"customRules,omitempty"`
36195	// ApplicationGateways - READ-ONLY; A collection of references to application gateways.
36196	ApplicationGateways *[]ApplicationGateway `json:"applicationGateways,omitempty"`
36197	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
36198	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
36199	// ResourceState - READ-ONLY; Resource status of the policy. Possible values include: 'WebApplicationFirewallPolicyResourceStateCreating', 'WebApplicationFirewallPolicyResourceStateEnabling', 'WebApplicationFirewallPolicyResourceStateEnabled', 'WebApplicationFirewallPolicyResourceStateDisabling', 'WebApplicationFirewallPolicyResourceStateDisabled', 'WebApplicationFirewallPolicyResourceStateDeleting'
36200	ResourceState WebApplicationFirewallPolicyResourceState `json:"resourceState,omitempty"`
36201	// ManagedRules - Describes the managedRules structure.
36202	ManagedRules *ManagedRulesDefinition `json:"managedRules,omitempty"`
36203	// HTTPListeners - READ-ONLY; A collection of references to application gateway http listeners.
36204	HTTPListeners *[]SubResource `json:"httpListeners,omitempty"`
36205	// PathBasedRules - READ-ONLY; A collection of references to application gateway path rules.
36206	PathBasedRules *[]SubResource `json:"pathBasedRules,omitempty"`
36207}
36208