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-04-01/network"
33
34// Access enumerates the values for access.
35type Access string
36
37const (
38	// Allow ...
39	Allow Access = "Allow"
40	// Deny ...
41	Deny Access = "Deny"
42)
43
44// PossibleAccessValues returns an array of possible values for the Access const type.
45func PossibleAccessValues() []Access {
46	return []Access{Allow, Deny}
47}
48
49// ApplicationGatewayBackendHealthServerHealth enumerates the values for application gateway backend health
50// server health.
51type ApplicationGatewayBackendHealthServerHealth string
52
53const (
54	// Down ...
55	Down ApplicationGatewayBackendHealthServerHealth = "Down"
56	// Draining ...
57	Draining ApplicationGatewayBackendHealthServerHealth = "Draining"
58	// Partial ...
59	Partial ApplicationGatewayBackendHealthServerHealth = "Partial"
60	// Unknown ...
61	Unknown ApplicationGatewayBackendHealthServerHealth = "Unknown"
62	// Up ...
63	Up ApplicationGatewayBackendHealthServerHealth = "Up"
64)
65
66// PossibleApplicationGatewayBackendHealthServerHealthValues returns an array of possible values for the ApplicationGatewayBackendHealthServerHealth const type.
67func PossibleApplicationGatewayBackendHealthServerHealthValues() []ApplicationGatewayBackendHealthServerHealth {
68	return []ApplicationGatewayBackendHealthServerHealth{Down, Draining, Partial, Unknown, Up}
69}
70
71// ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity.
72type ApplicationGatewayCookieBasedAffinity string
73
74const (
75	// Disabled ...
76	Disabled ApplicationGatewayCookieBasedAffinity = "Disabled"
77	// Enabled ...
78	Enabled ApplicationGatewayCookieBasedAffinity = "Enabled"
79)
80
81// PossibleApplicationGatewayCookieBasedAffinityValues returns an array of possible values for the ApplicationGatewayCookieBasedAffinity const type.
82func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayCookieBasedAffinity {
83	return []ApplicationGatewayCookieBasedAffinity{Disabled, Enabled}
84}
85
86// ApplicationGatewayCustomErrorStatusCode enumerates the values for application gateway custom error status
87// code.
88type ApplicationGatewayCustomErrorStatusCode string
89
90const (
91	// HTTPStatus403 ...
92	HTTPStatus403 ApplicationGatewayCustomErrorStatusCode = "HttpStatus403"
93	// HTTPStatus502 ...
94	HTTPStatus502 ApplicationGatewayCustomErrorStatusCode = "HttpStatus502"
95)
96
97// PossibleApplicationGatewayCustomErrorStatusCodeValues returns an array of possible values for the ApplicationGatewayCustomErrorStatusCode const type.
98func PossibleApplicationGatewayCustomErrorStatusCodeValues() []ApplicationGatewayCustomErrorStatusCode {
99	return []ApplicationGatewayCustomErrorStatusCode{HTTPStatus403, HTTPStatus502}
100}
101
102// ApplicationGatewayFirewallMode enumerates the values for application gateway firewall mode.
103type ApplicationGatewayFirewallMode string
104
105const (
106	// Detection ...
107	Detection ApplicationGatewayFirewallMode = "Detection"
108	// Prevention ...
109	Prevention ApplicationGatewayFirewallMode = "Prevention"
110)
111
112// PossibleApplicationGatewayFirewallModeValues returns an array of possible values for the ApplicationGatewayFirewallMode const type.
113func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewallMode {
114	return []ApplicationGatewayFirewallMode{Detection, Prevention}
115}
116
117// ApplicationGatewayOperationalState enumerates the values for application gateway operational state.
118type ApplicationGatewayOperationalState string
119
120const (
121	// Running ...
122	Running ApplicationGatewayOperationalState = "Running"
123	// Starting ...
124	Starting ApplicationGatewayOperationalState = "Starting"
125	// Stopped ...
126	Stopped ApplicationGatewayOperationalState = "Stopped"
127	// Stopping ...
128	Stopping ApplicationGatewayOperationalState = "Stopping"
129)
130
131// PossibleApplicationGatewayOperationalStateValues returns an array of possible values for the ApplicationGatewayOperationalState const type.
132func PossibleApplicationGatewayOperationalStateValues() []ApplicationGatewayOperationalState {
133	return []ApplicationGatewayOperationalState{Running, Starting, Stopped, Stopping}
134}
135
136// ApplicationGatewayProtocol enumerates the values for application gateway protocol.
137type ApplicationGatewayProtocol string
138
139const (
140	// HTTP ...
141	HTTP ApplicationGatewayProtocol = "Http"
142	// HTTPS ...
143	HTTPS ApplicationGatewayProtocol = "Https"
144)
145
146// PossibleApplicationGatewayProtocolValues returns an array of possible values for the ApplicationGatewayProtocol const type.
147func PossibleApplicationGatewayProtocolValues() []ApplicationGatewayProtocol {
148	return []ApplicationGatewayProtocol{HTTP, HTTPS}
149}
150
151// ApplicationGatewayRedirectType enumerates the values for application gateway redirect type.
152type ApplicationGatewayRedirectType string
153
154const (
155	// Found ...
156	Found ApplicationGatewayRedirectType = "Found"
157	// Permanent ...
158	Permanent ApplicationGatewayRedirectType = "Permanent"
159	// SeeOther ...
160	SeeOther ApplicationGatewayRedirectType = "SeeOther"
161	// Temporary ...
162	Temporary ApplicationGatewayRedirectType = "Temporary"
163)
164
165// PossibleApplicationGatewayRedirectTypeValues returns an array of possible values for the ApplicationGatewayRedirectType const type.
166func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirectType {
167	return []ApplicationGatewayRedirectType{Found, Permanent, SeeOther, Temporary}
168}
169
170// ApplicationGatewayRequestRoutingRuleType enumerates the values for application gateway request routing rule
171// type.
172type ApplicationGatewayRequestRoutingRuleType string
173
174const (
175	// Basic ...
176	Basic ApplicationGatewayRequestRoutingRuleType = "Basic"
177	// PathBasedRouting ...
178	PathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting"
179)
180
181// PossibleApplicationGatewayRequestRoutingRuleTypeValues returns an array of possible values for the ApplicationGatewayRequestRoutingRuleType const type.
182func PossibleApplicationGatewayRequestRoutingRuleTypeValues() []ApplicationGatewayRequestRoutingRuleType {
183	return []ApplicationGatewayRequestRoutingRuleType{Basic, PathBasedRouting}
184}
185
186// ApplicationGatewaySkuName enumerates the values for application gateway sku name.
187type ApplicationGatewaySkuName string
188
189const (
190	// StandardLarge ...
191	StandardLarge ApplicationGatewaySkuName = "Standard_Large"
192	// StandardMedium ...
193	StandardMedium ApplicationGatewaySkuName = "Standard_Medium"
194	// StandardSmall ...
195	StandardSmall ApplicationGatewaySkuName = "Standard_Small"
196	// StandardV2 ...
197	StandardV2 ApplicationGatewaySkuName = "Standard_v2"
198	// WAFLarge ...
199	WAFLarge ApplicationGatewaySkuName = "WAF_Large"
200	// WAFMedium ...
201	WAFMedium ApplicationGatewaySkuName = "WAF_Medium"
202	// WAFV2 ...
203	WAFV2 ApplicationGatewaySkuName = "WAF_v2"
204)
205
206// PossibleApplicationGatewaySkuNameValues returns an array of possible values for the ApplicationGatewaySkuName const type.
207func PossibleApplicationGatewaySkuNameValues() []ApplicationGatewaySkuName {
208	return []ApplicationGatewaySkuName{StandardLarge, StandardMedium, StandardSmall, StandardV2, WAFLarge, WAFMedium, WAFV2}
209}
210
211// ApplicationGatewaySslCipherSuite enumerates the values for application gateway ssl cipher suite.
212type ApplicationGatewaySslCipherSuite string
213
214const (
215	// TLSDHEDSSWITH3DESEDECBCSHA ...
216	TLSDHEDSSWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
217	// TLSDHEDSSWITHAES128CBCSHA ...
218	TLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
219	// TLSDHEDSSWITHAES128CBCSHA256 ...
220	TLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
221	// TLSDHEDSSWITHAES256CBCSHA ...
222	TLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"
223	// TLSDHEDSSWITHAES256CBCSHA256 ...
224	TLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"
225	// TLSDHERSAWITHAES128CBCSHA ...
226	TLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
227	// TLSDHERSAWITHAES128GCMSHA256 ...
228	TLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
229	// TLSDHERSAWITHAES256CBCSHA ...
230	TLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
231	// TLSDHERSAWITHAES256GCMSHA384 ...
232	TLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"
233	// TLSECDHEECDSAWITHAES128CBCSHA ...
234	TLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
235	// TLSECDHEECDSAWITHAES128CBCSHA256 ...
236	TLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
237	// TLSECDHEECDSAWITHAES128GCMSHA256 ...
238	TLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
239	// TLSECDHEECDSAWITHAES256CBCSHA ...
240	TLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
241	// TLSECDHEECDSAWITHAES256CBCSHA384 ...
242	TLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
243	// TLSECDHEECDSAWITHAES256GCMSHA384 ...
244	TLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
245	// TLSECDHERSAWITHAES128CBCSHA ...
246	TLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
247	// TLSECDHERSAWITHAES128CBCSHA256 ...
248	TLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
249	// TLSECDHERSAWITHAES128GCMSHA256 ...
250	TLSECDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
251	// TLSECDHERSAWITHAES256CBCSHA ...
252	TLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
253	// TLSECDHERSAWITHAES256CBCSHA384 ...
254	TLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
255	// TLSECDHERSAWITHAES256GCMSHA384 ...
256	TLSECDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
257	// TLSRSAWITH3DESEDECBCSHA ...
258	TLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
259	// TLSRSAWITHAES128CBCSHA ...
260	TLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA"
261	// TLSRSAWITHAES128CBCSHA256 ...
262	TLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256"
263	// TLSRSAWITHAES128GCMSHA256 ...
264	TLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256"
265	// TLSRSAWITHAES256CBCSHA ...
266	TLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA"
267	// TLSRSAWITHAES256CBCSHA256 ...
268	TLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256"
269	// TLSRSAWITHAES256GCMSHA384 ...
270	TLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384"
271)
272
273// PossibleApplicationGatewaySslCipherSuiteValues returns an array of possible values for the ApplicationGatewaySslCipherSuite const type.
274func PossibleApplicationGatewaySslCipherSuiteValues() []ApplicationGatewaySslCipherSuite {
275	return []ApplicationGatewaySslCipherSuite{TLSDHEDSSWITH3DESEDECBCSHA, TLSDHEDSSWITHAES128CBCSHA, TLSDHEDSSWITHAES128CBCSHA256, TLSDHEDSSWITHAES256CBCSHA, TLSDHEDSSWITHAES256CBCSHA256, TLSDHERSAWITHAES128CBCSHA, TLSDHERSAWITHAES128GCMSHA256, TLSDHERSAWITHAES256CBCSHA, TLSDHERSAWITHAES256GCMSHA384, TLSECDHEECDSAWITHAES128CBCSHA, TLSECDHEECDSAWITHAES128CBCSHA256, TLSECDHEECDSAWITHAES128GCMSHA256, TLSECDHEECDSAWITHAES256CBCSHA, TLSECDHEECDSAWITHAES256CBCSHA384, TLSECDHEECDSAWITHAES256GCMSHA384, TLSECDHERSAWITHAES128CBCSHA, TLSECDHERSAWITHAES128CBCSHA256, TLSECDHERSAWITHAES128GCMSHA256, TLSECDHERSAWITHAES256CBCSHA, TLSECDHERSAWITHAES256CBCSHA384, TLSECDHERSAWITHAES256GCMSHA384, TLSRSAWITH3DESEDECBCSHA, TLSRSAWITHAES128CBCSHA, TLSRSAWITHAES128CBCSHA256, TLSRSAWITHAES128GCMSHA256, TLSRSAWITHAES256CBCSHA, TLSRSAWITHAES256CBCSHA256, TLSRSAWITHAES256GCMSHA384}
276}
277
278// ApplicationGatewaySslPolicyName enumerates the values for application gateway ssl policy name.
279type ApplicationGatewaySslPolicyName string
280
281const (
282	// AppGwSslPolicy20150501 ...
283	AppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501"
284	// AppGwSslPolicy20170401 ...
285	AppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401"
286	// AppGwSslPolicy20170401S ...
287	AppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S"
288)
289
290// PossibleApplicationGatewaySslPolicyNameValues returns an array of possible values for the ApplicationGatewaySslPolicyName const type.
291func PossibleApplicationGatewaySslPolicyNameValues() []ApplicationGatewaySslPolicyName {
292	return []ApplicationGatewaySslPolicyName{AppGwSslPolicy20150501, AppGwSslPolicy20170401, AppGwSslPolicy20170401S}
293}
294
295// ApplicationGatewaySslPolicyType enumerates the values for application gateway ssl policy type.
296type ApplicationGatewaySslPolicyType string
297
298const (
299	// Custom ...
300	Custom ApplicationGatewaySslPolicyType = "Custom"
301	// Predefined ...
302	Predefined ApplicationGatewaySslPolicyType = "Predefined"
303)
304
305// PossibleApplicationGatewaySslPolicyTypeValues returns an array of possible values for the ApplicationGatewaySslPolicyType const type.
306func PossibleApplicationGatewaySslPolicyTypeValues() []ApplicationGatewaySslPolicyType {
307	return []ApplicationGatewaySslPolicyType{Custom, Predefined}
308}
309
310// ApplicationGatewaySslProtocol enumerates the values for application gateway ssl protocol.
311type ApplicationGatewaySslProtocol string
312
313const (
314	// TLSv10 ...
315	TLSv10 ApplicationGatewaySslProtocol = "TLSv1_0"
316	// TLSv11 ...
317	TLSv11 ApplicationGatewaySslProtocol = "TLSv1_1"
318	// TLSv12 ...
319	TLSv12 ApplicationGatewaySslProtocol = "TLSv1_2"
320)
321
322// PossibleApplicationGatewaySslProtocolValues returns an array of possible values for the ApplicationGatewaySslProtocol const type.
323func PossibleApplicationGatewaySslProtocolValues() []ApplicationGatewaySslProtocol {
324	return []ApplicationGatewaySslProtocol{TLSv10, TLSv11, TLSv12}
325}
326
327// ApplicationGatewayTier enumerates the values for application gateway tier.
328type ApplicationGatewayTier string
329
330const (
331	// ApplicationGatewayTierStandard ...
332	ApplicationGatewayTierStandard ApplicationGatewayTier = "Standard"
333	// ApplicationGatewayTierStandardV2 ...
334	ApplicationGatewayTierStandardV2 ApplicationGatewayTier = "Standard_v2"
335	// ApplicationGatewayTierWAF ...
336	ApplicationGatewayTierWAF ApplicationGatewayTier = "WAF"
337	// ApplicationGatewayTierWAFV2 ...
338	ApplicationGatewayTierWAFV2 ApplicationGatewayTier = "WAF_v2"
339)
340
341// PossibleApplicationGatewayTierValues returns an array of possible values for the ApplicationGatewayTier const type.
342func PossibleApplicationGatewayTierValues() []ApplicationGatewayTier {
343	return []ApplicationGatewayTier{ApplicationGatewayTierStandard, ApplicationGatewayTierStandardV2, ApplicationGatewayTierWAF, ApplicationGatewayTierWAFV2}
344}
345
346// AssociationType enumerates the values for association type.
347type AssociationType string
348
349const (
350	// Associated ...
351	Associated AssociationType = "Associated"
352	// Contains ...
353	Contains AssociationType = "Contains"
354)
355
356// PossibleAssociationTypeValues returns an array of possible values for the AssociationType const type.
357func PossibleAssociationTypeValues() []AssociationType {
358	return []AssociationType{Associated, Contains}
359}
360
361// AuthenticationMethod enumerates the values for authentication method.
362type AuthenticationMethod string
363
364const (
365	// EAPMSCHAPv2 ...
366	EAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2"
367	// EAPTLS ...
368	EAPTLS AuthenticationMethod = "EAPTLS"
369)
370
371// PossibleAuthenticationMethodValues returns an array of possible values for the AuthenticationMethod const type.
372func PossibleAuthenticationMethodValues() []AuthenticationMethod {
373	return []AuthenticationMethod{EAPMSCHAPv2, EAPTLS}
374}
375
376// AuthorizationUseStatus enumerates the values for authorization use status.
377type AuthorizationUseStatus string
378
379const (
380	// Available ...
381	Available AuthorizationUseStatus = "Available"
382	// InUse ...
383	InUse AuthorizationUseStatus = "InUse"
384)
385
386// PossibleAuthorizationUseStatusValues returns an array of possible values for the AuthorizationUseStatus const type.
387func PossibleAuthorizationUseStatusValues() []AuthorizationUseStatus {
388	return []AuthorizationUseStatus{Available, InUse}
389}
390
391// AzureFirewallApplicationRuleProtocolType enumerates the values for azure firewall application rule protocol
392// type.
393type AzureFirewallApplicationRuleProtocolType string
394
395const (
396	// AzureFirewallApplicationRuleProtocolTypeHTTP ...
397	AzureFirewallApplicationRuleProtocolTypeHTTP AzureFirewallApplicationRuleProtocolType = "Http"
398	// AzureFirewallApplicationRuleProtocolTypeHTTPS ...
399	AzureFirewallApplicationRuleProtocolTypeHTTPS AzureFirewallApplicationRuleProtocolType = "Https"
400)
401
402// PossibleAzureFirewallApplicationRuleProtocolTypeValues returns an array of possible values for the AzureFirewallApplicationRuleProtocolType const type.
403func PossibleAzureFirewallApplicationRuleProtocolTypeValues() []AzureFirewallApplicationRuleProtocolType {
404	return []AzureFirewallApplicationRuleProtocolType{AzureFirewallApplicationRuleProtocolTypeHTTP, AzureFirewallApplicationRuleProtocolTypeHTTPS}
405}
406
407// AzureFirewallNatRCActionType enumerates the values for azure firewall nat rc action type.
408type AzureFirewallNatRCActionType string
409
410const (
411	// Dnat ...
412	Dnat AzureFirewallNatRCActionType = "Dnat"
413	// Snat ...
414	Snat AzureFirewallNatRCActionType = "Snat"
415)
416
417// PossibleAzureFirewallNatRCActionTypeValues returns an array of possible values for the AzureFirewallNatRCActionType const type.
418func PossibleAzureFirewallNatRCActionTypeValues() []AzureFirewallNatRCActionType {
419	return []AzureFirewallNatRCActionType{Dnat, Snat}
420}
421
422// AzureFirewallNetworkRuleProtocol enumerates the values for azure firewall network rule protocol.
423type AzureFirewallNetworkRuleProtocol string
424
425const (
426	// Any ...
427	Any AzureFirewallNetworkRuleProtocol = "Any"
428	// ICMP ...
429	ICMP AzureFirewallNetworkRuleProtocol = "ICMP"
430	// TCP ...
431	TCP AzureFirewallNetworkRuleProtocol = "TCP"
432	// UDP ...
433	UDP AzureFirewallNetworkRuleProtocol = "UDP"
434)
435
436// PossibleAzureFirewallNetworkRuleProtocolValues returns an array of possible values for the AzureFirewallNetworkRuleProtocol const type.
437func PossibleAzureFirewallNetworkRuleProtocolValues() []AzureFirewallNetworkRuleProtocol {
438	return []AzureFirewallNetworkRuleProtocol{Any, ICMP, TCP, UDP}
439}
440
441// AzureFirewallRCActionType enumerates the values for azure firewall rc action type.
442type AzureFirewallRCActionType string
443
444const (
445	// AzureFirewallRCActionTypeAllow ...
446	AzureFirewallRCActionTypeAllow AzureFirewallRCActionType = "Allow"
447	// AzureFirewallRCActionTypeDeny ...
448	AzureFirewallRCActionTypeDeny AzureFirewallRCActionType = "Deny"
449)
450
451// PossibleAzureFirewallRCActionTypeValues returns an array of possible values for the AzureFirewallRCActionType const type.
452func PossibleAzureFirewallRCActionTypeValues() []AzureFirewallRCActionType {
453	return []AzureFirewallRCActionType{AzureFirewallRCActionTypeAllow, AzureFirewallRCActionTypeDeny}
454}
455
456// AzureFirewallThreatIntelMode enumerates the values for azure firewall threat intel mode.
457type AzureFirewallThreatIntelMode string
458
459const (
460	// AzureFirewallThreatIntelModeAlert ...
461	AzureFirewallThreatIntelModeAlert AzureFirewallThreatIntelMode = "Alert"
462	// AzureFirewallThreatIntelModeDeny ...
463	AzureFirewallThreatIntelModeDeny AzureFirewallThreatIntelMode = "Deny"
464	// AzureFirewallThreatIntelModeOff ...
465	AzureFirewallThreatIntelModeOff AzureFirewallThreatIntelMode = "Off"
466)
467
468// PossibleAzureFirewallThreatIntelModeValues returns an array of possible values for the AzureFirewallThreatIntelMode const type.
469func PossibleAzureFirewallThreatIntelModeValues() []AzureFirewallThreatIntelMode {
470	return []AzureFirewallThreatIntelMode{AzureFirewallThreatIntelModeAlert, AzureFirewallThreatIntelModeDeny, AzureFirewallThreatIntelModeOff}
471}
472
473// BgpPeerState enumerates the values for bgp peer state.
474type BgpPeerState string
475
476const (
477	// BgpPeerStateConnected ...
478	BgpPeerStateConnected BgpPeerState = "Connected"
479	// BgpPeerStateConnecting ...
480	BgpPeerStateConnecting BgpPeerState = "Connecting"
481	// BgpPeerStateIdle ...
482	BgpPeerStateIdle BgpPeerState = "Idle"
483	// BgpPeerStateStopped ...
484	BgpPeerStateStopped BgpPeerState = "Stopped"
485	// BgpPeerStateUnknown ...
486	BgpPeerStateUnknown BgpPeerState = "Unknown"
487)
488
489// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
490func PossibleBgpPeerStateValues() []BgpPeerState {
491	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
492}
493
494// CircuitConnectionStatus enumerates the values for circuit connection status.
495type CircuitConnectionStatus string
496
497const (
498	// Connected ...
499	Connected CircuitConnectionStatus = "Connected"
500	// Connecting ...
501	Connecting CircuitConnectionStatus = "Connecting"
502	// Disconnected ...
503	Disconnected CircuitConnectionStatus = "Disconnected"
504)
505
506// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
507func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
508	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
509}
510
511// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
512type ConnectionMonitorSourceStatus string
513
514const (
515	// ConnectionMonitorSourceStatusActive ...
516	ConnectionMonitorSourceStatusActive ConnectionMonitorSourceStatus = "Active"
517	// ConnectionMonitorSourceStatusInactive ...
518	ConnectionMonitorSourceStatusInactive ConnectionMonitorSourceStatus = "Inactive"
519	// ConnectionMonitorSourceStatusUnknown ...
520	ConnectionMonitorSourceStatusUnknown ConnectionMonitorSourceStatus = "Unknown"
521)
522
523// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
524func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
525	return []ConnectionMonitorSourceStatus{ConnectionMonitorSourceStatusActive, ConnectionMonitorSourceStatusInactive, ConnectionMonitorSourceStatusUnknown}
526}
527
528// ConnectionState enumerates the values for connection state.
529type ConnectionState string
530
531const (
532	// ConnectionStateReachable ...
533	ConnectionStateReachable ConnectionState = "Reachable"
534	// ConnectionStateUnknown ...
535	ConnectionStateUnknown ConnectionState = "Unknown"
536	// ConnectionStateUnreachable ...
537	ConnectionStateUnreachable ConnectionState = "Unreachable"
538)
539
540// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
541func PossibleConnectionStateValues() []ConnectionState {
542	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
543}
544
545// ConnectionStatus enumerates the values for connection status.
546type ConnectionStatus string
547
548const (
549	// ConnectionStatusConnected ...
550	ConnectionStatusConnected ConnectionStatus = "Connected"
551	// ConnectionStatusDegraded ...
552	ConnectionStatusDegraded ConnectionStatus = "Degraded"
553	// ConnectionStatusDisconnected ...
554	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
555	// ConnectionStatusUnknown ...
556	ConnectionStatusUnknown ConnectionStatus = "Unknown"
557)
558
559// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
560func PossibleConnectionStatusValues() []ConnectionStatus {
561	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
562}
563
564// DdosCustomPolicyProtocol enumerates the values for ddos custom policy protocol.
565type DdosCustomPolicyProtocol string
566
567const (
568	// DdosCustomPolicyProtocolSyn ...
569	DdosCustomPolicyProtocolSyn DdosCustomPolicyProtocol = "Syn"
570	// DdosCustomPolicyProtocolTCP ...
571	DdosCustomPolicyProtocolTCP DdosCustomPolicyProtocol = "Tcp"
572	// DdosCustomPolicyProtocolUDP ...
573	DdosCustomPolicyProtocolUDP DdosCustomPolicyProtocol = "Udp"
574)
575
576// PossibleDdosCustomPolicyProtocolValues returns an array of possible values for the DdosCustomPolicyProtocol const type.
577func PossibleDdosCustomPolicyProtocolValues() []DdosCustomPolicyProtocol {
578	return []DdosCustomPolicyProtocol{DdosCustomPolicyProtocolSyn, DdosCustomPolicyProtocolTCP, DdosCustomPolicyProtocolUDP}
579}
580
581// DdosCustomPolicyTriggerSensitivityOverride enumerates the values for ddos custom policy trigger sensitivity
582// override.
583type DdosCustomPolicyTriggerSensitivityOverride string
584
585const (
586	// Default ...
587	Default DdosCustomPolicyTriggerSensitivityOverride = "Default"
588	// High ...
589	High DdosCustomPolicyTriggerSensitivityOverride = "High"
590	// Low ...
591	Low DdosCustomPolicyTriggerSensitivityOverride = "Low"
592	// Relaxed ...
593	Relaxed DdosCustomPolicyTriggerSensitivityOverride = "Relaxed"
594)
595
596// PossibleDdosCustomPolicyTriggerSensitivityOverrideValues returns an array of possible values for the DdosCustomPolicyTriggerSensitivityOverride const type.
597func PossibleDdosCustomPolicyTriggerSensitivityOverrideValues() []DdosCustomPolicyTriggerSensitivityOverride {
598	return []DdosCustomPolicyTriggerSensitivityOverride{Default, High, Low, Relaxed}
599}
600
601// DdosSettingsProtectionCoverage enumerates the values for ddos settings protection coverage.
602type DdosSettingsProtectionCoverage string
603
604const (
605	// DdosSettingsProtectionCoverageBasic ...
606	DdosSettingsProtectionCoverageBasic DdosSettingsProtectionCoverage = "Basic"
607	// DdosSettingsProtectionCoverageStandard ...
608	DdosSettingsProtectionCoverageStandard DdosSettingsProtectionCoverage = "Standard"
609)
610
611// PossibleDdosSettingsProtectionCoverageValues returns an array of possible values for the DdosSettingsProtectionCoverage const type.
612func PossibleDdosSettingsProtectionCoverageValues() []DdosSettingsProtectionCoverage {
613	return []DdosSettingsProtectionCoverage{DdosSettingsProtectionCoverageBasic, DdosSettingsProtectionCoverageStandard}
614}
615
616// DhGroup enumerates the values for dh group.
617type DhGroup string
618
619const (
620	// DHGroup1 ...
621	DHGroup1 DhGroup = "DHGroup1"
622	// DHGroup14 ...
623	DHGroup14 DhGroup = "DHGroup14"
624	// DHGroup2 ...
625	DHGroup2 DhGroup = "DHGroup2"
626	// DHGroup2048 ...
627	DHGroup2048 DhGroup = "DHGroup2048"
628	// DHGroup24 ...
629	DHGroup24 DhGroup = "DHGroup24"
630	// ECP256 ...
631	ECP256 DhGroup = "ECP256"
632	// ECP384 ...
633	ECP384 DhGroup = "ECP384"
634	// None ...
635	None DhGroup = "None"
636)
637
638// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
639func PossibleDhGroupValues() []DhGroup {
640	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
641}
642
643// Direction enumerates the values for direction.
644type Direction string
645
646const (
647	// Inbound ...
648	Inbound Direction = "Inbound"
649	// Outbound ...
650	Outbound Direction = "Outbound"
651)
652
653// PossibleDirectionValues returns an array of possible values for the Direction const type.
654func PossibleDirectionValues() []Direction {
655	return []Direction{Inbound, Outbound}
656}
657
658// EffectiveRouteSource enumerates the values for effective route source.
659type EffectiveRouteSource string
660
661const (
662	// EffectiveRouteSourceDefault ...
663	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
664	// EffectiveRouteSourceUnknown ...
665	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
666	// EffectiveRouteSourceUser ...
667	EffectiveRouteSourceUser EffectiveRouteSource = "User"
668	// EffectiveRouteSourceVirtualNetworkGateway ...
669	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
670)
671
672// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
673func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
674	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
675}
676
677// EffectiveRouteState enumerates the values for effective route state.
678type EffectiveRouteState string
679
680const (
681	// Active ...
682	Active EffectiveRouteState = "Active"
683	// Invalid ...
684	Invalid EffectiveRouteState = "Invalid"
685)
686
687// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
688func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
689	return []EffectiveRouteState{Active, Invalid}
690}
691
692// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
693type EffectiveSecurityRuleProtocol string
694
695const (
696	// EffectiveSecurityRuleProtocolAll ...
697	EffectiveSecurityRuleProtocolAll EffectiveSecurityRuleProtocol = "All"
698	// EffectiveSecurityRuleProtocolTCP ...
699	EffectiveSecurityRuleProtocolTCP EffectiveSecurityRuleProtocol = "Tcp"
700	// EffectiveSecurityRuleProtocolUDP ...
701	EffectiveSecurityRuleProtocolUDP EffectiveSecurityRuleProtocol = "Udp"
702)
703
704// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
705func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
706	return []EffectiveSecurityRuleProtocol{EffectiveSecurityRuleProtocolAll, EffectiveSecurityRuleProtocolTCP, EffectiveSecurityRuleProtocolUDP}
707}
708
709// EvaluationState enumerates the values for evaluation state.
710type EvaluationState string
711
712const (
713	// Completed ...
714	Completed EvaluationState = "Completed"
715	// InProgress ...
716	InProgress EvaluationState = "InProgress"
717	// NotStarted ...
718	NotStarted EvaluationState = "NotStarted"
719)
720
721// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
722func PossibleEvaluationStateValues() []EvaluationState {
723	return []EvaluationState{Completed, InProgress, NotStarted}
724}
725
726// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
727// peering advertised public prefix state.
728type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
729
730const (
731	// Configured ...
732	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
733	// Configuring ...
734	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
735	// NotConfigured ...
736	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
737	// ValidationNeeded ...
738	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
739)
740
741// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
742func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
743	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
744}
745
746// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
747type ExpressRouteCircuitPeeringState string
748
749const (
750	// ExpressRouteCircuitPeeringStateDisabled ...
751	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
752	// ExpressRouteCircuitPeeringStateEnabled ...
753	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
754)
755
756// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
757func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
758	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
759}
760
761// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
762type ExpressRouteCircuitSkuFamily string
763
764const (
765	// MeteredData ...
766	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
767	// UnlimitedData ...
768	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
769)
770
771// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
772func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
773	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
774}
775
776// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
777type ExpressRouteCircuitSkuTier string
778
779const (
780	// ExpressRouteCircuitSkuTierBasic ...
781	ExpressRouteCircuitSkuTierBasic ExpressRouteCircuitSkuTier = "Basic"
782	// ExpressRouteCircuitSkuTierLocal ...
783	ExpressRouteCircuitSkuTierLocal ExpressRouteCircuitSkuTier = "Local"
784	// ExpressRouteCircuitSkuTierPremium ...
785	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
786	// ExpressRouteCircuitSkuTierStandard ...
787	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
788)
789
790// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
791func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
792	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierBasic, ExpressRouteCircuitSkuTierLocal, ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
793}
794
795// ExpressRouteLinkAdminState enumerates the values for express route link admin state.
796type ExpressRouteLinkAdminState string
797
798const (
799	// ExpressRouteLinkAdminStateDisabled ...
800	ExpressRouteLinkAdminStateDisabled ExpressRouteLinkAdminState = "Disabled"
801	// ExpressRouteLinkAdminStateEnabled ...
802	ExpressRouteLinkAdminStateEnabled ExpressRouteLinkAdminState = "Enabled"
803)
804
805// PossibleExpressRouteLinkAdminStateValues returns an array of possible values for the ExpressRouteLinkAdminState const type.
806func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState {
807	return []ExpressRouteLinkAdminState{ExpressRouteLinkAdminStateDisabled, ExpressRouteLinkAdminStateEnabled}
808}
809
810// ExpressRouteLinkConnectorType enumerates the values for express route link connector type.
811type ExpressRouteLinkConnectorType string
812
813const (
814	// LC ...
815	LC ExpressRouteLinkConnectorType = "LC"
816	// SC ...
817	SC ExpressRouteLinkConnectorType = "SC"
818)
819
820// PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type.
821func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType {
822	return []ExpressRouteLinkConnectorType{LC, SC}
823}
824
825// ExpressRoutePeeringState enumerates the values for express route peering state.
826type ExpressRoutePeeringState string
827
828const (
829	// ExpressRoutePeeringStateDisabled ...
830	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
831	// ExpressRoutePeeringStateEnabled ...
832	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
833)
834
835// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
836func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
837	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
838}
839
840// ExpressRoutePeeringType enumerates the values for express route peering type.
841type ExpressRoutePeeringType string
842
843const (
844	// AzurePrivatePeering ...
845	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
846	// AzurePublicPeering ...
847	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
848	// MicrosoftPeering ...
849	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
850)
851
852// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
853func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
854	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
855}
856
857// ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation.
858type ExpressRoutePortsEncapsulation string
859
860const (
861	// Dot1Q ...
862	Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q"
863	// QinQ ...
864	QinQ ExpressRoutePortsEncapsulation = "QinQ"
865)
866
867// PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type.
868func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation {
869	return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ}
870}
871
872// FlowLogFormatType enumerates the values for flow log format type.
873type FlowLogFormatType string
874
875const (
876	// JSON ...
877	JSON FlowLogFormatType = "JSON"
878)
879
880// PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type.
881func PossibleFlowLogFormatTypeValues() []FlowLogFormatType {
882	return []FlowLogFormatType{JSON}
883}
884
885// HTTPMethod enumerates the values for http method.
886type HTTPMethod string
887
888const (
889	// Get ...
890	Get HTTPMethod = "Get"
891)
892
893// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
894func PossibleHTTPMethodValues() []HTTPMethod {
895	return []HTTPMethod{Get}
896}
897
898// HubVirtualNetworkConnectionStatus enumerates the values for hub virtual network connection status.
899type HubVirtualNetworkConnectionStatus string
900
901const (
902	// HubVirtualNetworkConnectionStatusConnected ...
903	HubVirtualNetworkConnectionStatusConnected HubVirtualNetworkConnectionStatus = "Connected"
904	// HubVirtualNetworkConnectionStatusConnecting ...
905	HubVirtualNetworkConnectionStatusConnecting HubVirtualNetworkConnectionStatus = "Connecting"
906	// HubVirtualNetworkConnectionStatusNotConnected ...
907	HubVirtualNetworkConnectionStatusNotConnected HubVirtualNetworkConnectionStatus = "NotConnected"
908	// HubVirtualNetworkConnectionStatusUnknown ...
909	HubVirtualNetworkConnectionStatusUnknown HubVirtualNetworkConnectionStatus = "Unknown"
910)
911
912// PossibleHubVirtualNetworkConnectionStatusValues returns an array of possible values for the HubVirtualNetworkConnectionStatus const type.
913func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnectionStatus {
914	return []HubVirtualNetworkConnectionStatus{HubVirtualNetworkConnectionStatusConnected, HubVirtualNetworkConnectionStatusConnecting, HubVirtualNetworkConnectionStatusNotConnected, HubVirtualNetworkConnectionStatusUnknown}
915}
916
917// IkeEncryption enumerates the values for ike encryption.
918type IkeEncryption string
919
920const (
921	// AES128 ...
922	AES128 IkeEncryption = "AES128"
923	// AES192 ...
924	AES192 IkeEncryption = "AES192"
925	// AES256 ...
926	AES256 IkeEncryption = "AES256"
927	// DES ...
928	DES IkeEncryption = "DES"
929	// DES3 ...
930	DES3 IkeEncryption = "DES3"
931	// GCMAES128 ...
932	GCMAES128 IkeEncryption = "GCMAES128"
933	// GCMAES256 ...
934	GCMAES256 IkeEncryption = "GCMAES256"
935)
936
937// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
938func PossibleIkeEncryptionValues() []IkeEncryption {
939	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
940}
941
942// IkeIntegrity enumerates the values for ike integrity.
943type IkeIntegrity string
944
945const (
946	// IkeIntegrityGCMAES128 ...
947	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
948	// IkeIntegrityGCMAES256 ...
949	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
950	// IkeIntegrityMD5 ...
951	IkeIntegrityMD5 IkeIntegrity = "MD5"
952	// IkeIntegritySHA1 ...
953	IkeIntegritySHA1 IkeIntegrity = "SHA1"
954	// IkeIntegritySHA256 ...
955	IkeIntegritySHA256 IkeIntegrity = "SHA256"
956	// IkeIntegritySHA384 ...
957	IkeIntegritySHA384 IkeIntegrity = "SHA384"
958)
959
960// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
961func PossibleIkeIntegrityValues() []IkeIntegrity {
962	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
963}
964
965// IPAllocationMethod enumerates the values for ip allocation method.
966type IPAllocationMethod string
967
968const (
969	// Dynamic ...
970	Dynamic IPAllocationMethod = "Dynamic"
971	// Static ...
972	Static IPAllocationMethod = "Static"
973)
974
975// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
976func PossibleIPAllocationMethodValues() []IPAllocationMethod {
977	return []IPAllocationMethod{Dynamic, Static}
978}
979
980// IPFlowProtocol enumerates the values for ip flow protocol.
981type IPFlowProtocol string
982
983const (
984	// IPFlowProtocolTCP ...
985	IPFlowProtocolTCP IPFlowProtocol = "TCP"
986	// IPFlowProtocolUDP ...
987	IPFlowProtocolUDP IPFlowProtocol = "UDP"
988)
989
990// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
991func PossibleIPFlowProtocolValues() []IPFlowProtocol {
992	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
993}
994
995// IpsecEncryption enumerates the values for ipsec encryption.
996type IpsecEncryption string
997
998const (
999	// IpsecEncryptionAES128 ...
1000	IpsecEncryptionAES128 IpsecEncryption = "AES128"
1001	// IpsecEncryptionAES192 ...
1002	IpsecEncryptionAES192 IpsecEncryption = "AES192"
1003	// IpsecEncryptionAES256 ...
1004	IpsecEncryptionAES256 IpsecEncryption = "AES256"
1005	// IpsecEncryptionDES ...
1006	IpsecEncryptionDES IpsecEncryption = "DES"
1007	// IpsecEncryptionDES3 ...
1008	IpsecEncryptionDES3 IpsecEncryption = "DES3"
1009	// IpsecEncryptionGCMAES128 ...
1010	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
1011	// IpsecEncryptionGCMAES192 ...
1012	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
1013	// IpsecEncryptionGCMAES256 ...
1014	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
1015	// IpsecEncryptionNone ...
1016	IpsecEncryptionNone IpsecEncryption = "None"
1017)
1018
1019// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
1020func PossibleIpsecEncryptionValues() []IpsecEncryption {
1021	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
1022}
1023
1024// IpsecIntegrity enumerates the values for ipsec integrity.
1025type IpsecIntegrity string
1026
1027const (
1028	// IpsecIntegrityGCMAES128 ...
1029	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
1030	// IpsecIntegrityGCMAES192 ...
1031	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
1032	// IpsecIntegrityGCMAES256 ...
1033	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
1034	// IpsecIntegrityMD5 ...
1035	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
1036	// IpsecIntegritySHA1 ...
1037	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
1038	// IpsecIntegritySHA256 ...
1039	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
1040)
1041
1042// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
1043func PossibleIpsecIntegrityValues() []IpsecIntegrity {
1044	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
1045}
1046
1047// IPVersion enumerates the values for ip version.
1048type IPVersion string
1049
1050const (
1051	// IPv4 ...
1052	IPv4 IPVersion = "IPv4"
1053	// IPv6 ...
1054	IPv6 IPVersion = "IPv6"
1055)
1056
1057// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
1058func PossibleIPVersionValues() []IPVersion {
1059	return []IPVersion{IPv4, IPv6}
1060}
1061
1062// IssueType enumerates the values for issue type.
1063type IssueType string
1064
1065const (
1066	// IssueTypeAgentStopped ...
1067	IssueTypeAgentStopped IssueType = "AgentStopped"
1068	// IssueTypeDNSResolution ...
1069	IssueTypeDNSResolution IssueType = "DnsResolution"
1070	// IssueTypeGuestFirewall ...
1071	IssueTypeGuestFirewall IssueType = "GuestFirewall"
1072	// IssueTypeNetworkSecurityRule ...
1073	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
1074	// IssueTypePlatform ...
1075	IssueTypePlatform IssueType = "Platform"
1076	// IssueTypePortThrottled ...
1077	IssueTypePortThrottled IssueType = "PortThrottled"
1078	// IssueTypeSocketBind ...
1079	IssueTypeSocketBind IssueType = "SocketBind"
1080	// IssueTypeUnknown ...
1081	IssueTypeUnknown IssueType = "Unknown"
1082	// IssueTypeUserDefinedRoute ...
1083	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
1084)
1085
1086// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
1087func PossibleIssueTypeValues() []IssueType {
1088	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
1089}
1090
1091// LoadBalancerOutboundRuleProtocol enumerates the values for load balancer outbound rule protocol.
1092type LoadBalancerOutboundRuleProtocol string
1093
1094const (
1095	// LoadBalancerOutboundRuleProtocolAll ...
1096	LoadBalancerOutboundRuleProtocolAll LoadBalancerOutboundRuleProtocol = "All"
1097	// LoadBalancerOutboundRuleProtocolTCP ...
1098	LoadBalancerOutboundRuleProtocolTCP LoadBalancerOutboundRuleProtocol = "Tcp"
1099	// LoadBalancerOutboundRuleProtocolUDP ...
1100	LoadBalancerOutboundRuleProtocolUDP LoadBalancerOutboundRuleProtocol = "Udp"
1101)
1102
1103// PossibleLoadBalancerOutboundRuleProtocolValues returns an array of possible values for the LoadBalancerOutboundRuleProtocol const type.
1104func PossibleLoadBalancerOutboundRuleProtocolValues() []LoadBalancerOutboundRuleProtocol {
1105	return []LoadBalancerOutboundRuleProtocol{LoadBalancerOutboundRuleProtocolAll, LoadBalancerOutboundRuleProtocolTCP, LoadBalancerOutboundRuleProtocolUDP}
1106}
1107
1108// LoadBalancerSkuName enumerates the values for load balancer sku name.
1109type LoadBalancerSkuName string
1110
1111const (
1112	// LoadBalancerSkuNameBasic ...
1113	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
1114	// LoadBalancerSkuNameStandard ...
1115	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
1116)
1117
1118// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
1119func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
1120	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
1121}
1122
1123// LoadDistribution enumerates the values for load distribution.
1124type LoadDistribution string
1125
1126const (
1127	// LoadDistributionDefault ...
1128	LoadDistributionDefault LoadDistribution = "Default"
1129	// LoadDistributionSourceIP ...
1130	LoadDistributionSourceIP LoadDistribution = "SourceIP"
1131	// LoadDistributionSourceIPProtocol ...
1132	LoadDistributionSourceIPProtocol LoadDistribution = "SourceIPProtocol"
1133)
1134
1135// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
1136func PossibleLoadDistributionValues() []LoadDistribution {
1137	return []LoadDistribution{LoadDistributionDefault, LoadDistributionSourceIP, LoadDistributionSourceIPProtocol}
1138}
1139
1140// NatGatewaySkuName enumerates the values for nat gateway sku name.
1141type NatGatewaySkuName string
1142
1143const (
1144	// Standard ...
1145	Standard NatGatewaySkuName = "Standard"
1146)
1147
1148// PossibleNatGatewaySkuNameValues returns an array of possible values for the NatGatewaySkuName const type.
1149func PossibleNatGatewaySkuNameValues() []NatGatewaySkuName {
1150	return []NatGatewaySkuName{Standard}
1151}
1152
1153// NextHopType enumerates the values for next hop type.
1154type NextHopType string
1155
1156const (
1157	// NextHopTypeHyperNetGateway ...
1158	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
1159	// NextHopTypeInternet ...
1160	NextHopTypeInternet NextHopType = "Internet"
1161	// NextHopTypeNone ...
1162	NextHopTypeNone NextHopType = "None"
1163	// NextHopTypeVirtualAppliance ...
1164	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
1165	// NextHopTypeVirtualNetworkGateway ...
1166	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
1167	// NextHopTypeVnetLocal ...
1168	NextHopTypeVnetLocal NextHopType = "VnetLocal"
1169)
1170
1171// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
1172func PossibleNextHopTypeValues() []NextHopType {
1173	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
1174}
1175
1176// OfficeTrafficCategory enumerates the values for office traffic category.
1177type OfficeTrafficCategory string
1178
1179const (
1180	// OfficeTrafficCategoryAll ...
1181	OfficeTrafficCategoryAll OfficeTrafficCategory = "All"
1182	// OfficeTrafficCategoryNone ...
1183	OfficeTrafficCategoryNone OfficeTrafficCategory = "None"
1184	// OfficeTrafficCategoryOptimize ...
1185	OfficeTrafficCategoryOptimize OfficeTrafficCategory = "Optimize"
1186	// OfficeTrafficCategoryOptimizeAndAllow ...
1187	OfficeTrafficCategoryOptimizeAndAllow OfficeTrafficCategory = "OptimizeAndAllow"
1188)
1189
1190// PossibleOfficeTrafficCategoryValues returns an array of possible values for the OfficeTrafficCategory const type.
1191func PossibleOfficeTrafficCategoryValues() []OfficeTrafficCategory {
1192	return []OfficeTrafficCategory{OfficeTrafficCategoryAll, OfficeTrafficCategoryNone, OfficeTrafficCategoryOptimize, OfficeTrafficCategoryOptimizeAndAllow}
1193}
1194
1195// OperationStatus enumerates the values for operation status.
1196type OperationStatus string
1197
1198const (
1199	// OperationStatusFailed ...
1200	OperationStatusFailed OperationStatus = "Failed"
1201	// OperationStatusInProgress ...
1202	OperationStatusInProgress OperationStatus = "InProgress"
1203	// OperationStatusSucceeded ...
1204	OperationStatusSucceeded OperationStatus = "Succeeded"
1205)
1206
1207// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
1208func PossibleOperationStatusValues() []OperationStatus {
1209	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
1210}
1211
1212// Origin enumerates the values for origin.
1213type Origin string
1214
1215const (
1216	// OriginInbound ...
1217	OriginInbound Origin = "Inbound"
1218	// OriginLocal ...
1219	OriginLocal Origin = "Local"
1220	// OriginOutbound ...
1221	OriginOutbound Origin = "Outbound"
1222)
1223
1224// PossibleOriginValues returns an array of possible values for the Origin const type.
1225func PossibleOriginValues() []Origin {
1226	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
1227}
1228
1229// PcError enumerates the values for pc error.
1230type PcError string
1231
1232const (
1233	// AgentStopped ...
1234	AgentStopped PcError = "AgentStopped"
1235	// CaptureFailed ...
1236	CaptureFailed PcError = "CaptureFailed"
1237	// InternalError ...
1238	InternalError PcError = "InternalError"
1239	// LocalFileFailed ...
1240	LocalFileFailed PcError = "LocalFileFailed"
1241	// StorageFailed ...
1242	StorageFailed PcError = "StorageFailed"
1243)
1244
1245// PossiblePcErrorValues returns an array of possible values for the PcError const type.
1246func PossiblePcErrorValues() []PcError {
1247	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
1248}
1249
1250// PcProtocol enumerates the values for pc protocol.
1251type PcProtocol string
1252
1253const (
1254	// PcProtocolAny ...
1255	PcProtocolAny PcProtocol = "Any"
1256	// PcProtocolTCP ...
1257	PcProtocolTCP PcProtocol = "TCP"
1258	// PcProtocolUDP ...
1259	PcProtocolUDP PcProtocol = "UDP"
1260)
1261
1262// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
1263func PossiblePcProtocolValues() []PcProtocol {
1264	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
1265}
1266
1267// PcStatus enumerates the values for pc status.
1268type PcStatus string
1269
1270const (
1271	// PcStatusError ...
1272	PcStatusError PcStatus = "Error"
1273	// PcStatusNotStarted ...
1274	PcStatusNotStarted PcStatus = "NotStarted"
1275	// PcStatusRunning ...
1276	PcStatusRunning PcStatus = "Running"
1277	// PcStatusStopped ...
1278	PcStatusStopped PcStatus = "Stopped"
1279	// PcStatusUnknown ...
1280	PcStatusUnknown PcStatus = "Unknown"
1281)
1282
1283// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
1284func PossiblePcStatusValues() []PcStatus {
1285	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
1286}
1287
1288// PfsGroup enumerates the values for pfs group.
1289type PfsGroup string
1290
1291const (
1292	// PfsGroupECP256 ...
1293	PfsGroupECP256 PfsGroup = "ECP256"
1294	// PfsGroupECP384 ...
1295	PfsGroupECP384 PfsGroup = "ECP384"
1296	// PfsGroupNone ...
1297	PfsGroupNone PfsGroup = "None"
1298	// PfsGroupPFS1 ...
1299	PfsGroupPFS1 PfsGroup = "PFS1"
1300	// PfsGroupPFS14 ...
1301	PfsGroupPFS14 PfsGroup = "PFS14"
1302	// PfsGroupPFS2 ...
1303	PfsGroupPFS2 PfsGroup = "PFS2"
1304	// PfsGroupPFS2048 ...
1305	PfsGroupPFS2048 PfsGroup = "PFS2048"
1306	// PfsGroupPFS24 ...
1307	PfsGroupPFS24 PfsGroup = "PFS24"
1308	// PfsGroupPFSMM ...
1309	PfsGroupPFSMM PfsGroup = "PFSMM"
1310)
1311
1312// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1313func PossiblePfsGroupValues() []PfsGroup {
1314	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1315}
1316
1317// ProbeProtocol enumerates the values for probe protocol.
1318type ProbeProtocol string
1319
1320const (
1321	// ProbeProtocolHTTP ...
1322	ProbeProtocolHTTP ProbeProtocol = "Http"
1323	// ProbeProtocolHTTPS ...
1324	ProbeProtocolHTTPS ProbeProtocol = "Https"
1325	// ProbeProtocolTCP ...
1326	ProbeProtocolTCP ProbeProtocol = "Tcp"
1327)
1328
1329// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1330func PossibleProbeProtocolValues() []ProbeProtocol {
1331	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1332}
1333
1334// ProcessorArchitecture enumerates the values for processor architecture.
1335type ProcessorArchitecture string
1336
1337const (
1338	// Amd64 ...
1339	Amd64 ProcessorArchitecture = "Amd64"
1340	// X86 ...
1341	X86 ProcessorArchitecture = "X86"
1342)
1343
1344// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1345func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1346	return []ProcessorArchitecture{Amd64, X86}
1347}
1348
1349// Protocol enumerates the values for protocol.
1350type Protocol string
1351
1352const (
1353	// ProtocolHTTP ...
1354	ProtocolHTTP Protocol = "Http"
1355	// ProtocolHTTPS ...
1356	ProtocolHTTPS Protocol = "Https"
1357	// ProtocolIcmp ...
1358	ProtocolIcmp Protocol = "Icmp"
1359	// ProtocolTCP ...
1360	ProtocolTCP Protocol = "Tcp"
1361)
1362
1363// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1364func PossibleProtocolValues() []Protocol {
1365	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1366}
1367
1368// ProvisioningState enumerates the values for provisioning state.
1369type ProvisioningState string
1370
1371const (
1372	// Deleting ...
1373	Deleting ProvisioningState = "Deleting"
1374	// Failed ...
1375	Failed ProvisioningState = "Failed"
1376	// Succeeded ...
1377	Succeeded ProvisioningState = "Succeeded"
1378	// Updating ...
1379	Updating ProvisioningState = "Updating"
1380)
1381
1382// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1383func PossibleProvisioningStateValues() []ProvisioningState {
1384	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1385}
1386
1387// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1388type PublicIPAddressSkuName string
1389
1390const (
1391	// PublicIPAddressSkuNameBasic ...
1392	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1393	// PublicIPAddressSkuNameStandard ...
1394	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1395)
1396
1397// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1398func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1399	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1400}
1401
1402// PublicIPPrefixSkuName enumerates the values for public ip prefix sku name.
1403type PublicIPPrefixSkuName string
1404
1405const (
1406	// PublicIPPrefixSkuNameStandard ...
1407	PublicIPPrefixSkuNameStandard PublicIPPrefixSkuName = "Standard"
1408)
1409
1410// PossiblePublicIPPrefixSkuNameValues returns an array of possible values for the PublicIPPrefixSkuName const type.
1411func PossiblePublicIPPrefixSkuNameValues() []PublicIPPrefixSkuName {
1412	return []PublicIPPrefixSkuName{PublicIPPrefixSkuNameStandard}
1413}
1414
1415// ResourceIdentityType enumerates the values for resource identity type.
1416type ResourceIdentityType string
1417
1418const (
1419	// ResourceIdentityTypeNone ...
1420	ResourceIdentityTypeNone ResourceIdentityType = "None"
1421	// ResourceIdentityTypeSystemAssigned ...
1422	ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned"
1423	// ResourceIdentityTypeSystemAssignedUserAssigned ...
1424	ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned"
1425	// ResourceIdentityTypeUserAssigned ...
1426	ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned"
1427)
1428
1429// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type.
1430func PossibleResourceIdentityTypeValues() []ResourceIdentityType {
1431	return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned}
1432}
1433
1434// RouteNextHopType enumerates the values for route next hop type.
1435type RouteNextHopType string
1436
1437const (
1438	// RouteNextHopTypeInternet ...
1439	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1440	// RouteNextHopTypeNone ...
1441	RouteNextHopTypeNone RouteNextHopType = "None"
1442	// RouteNextHopTypeVirtualAppliance ...
1443	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1444	// RouteNextHopTypeVirtualNetworkGateway ...
1445	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1446	// RouteNextHopTypeVnetLocal ...
1447	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1448)
1449
1450// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1451func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1452	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1453}
1454
1455// SecurityRuleAccess enumerates the values for security rule access.
1456type SecurityRuleAccess string
1457
1458const (
1459	// SecurityRuleAccessAllow ...
1460	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1461	// SecurityRuleAccessDeny ...
1462	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1463)
1464
1465// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1466func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1467	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1468}
1469
1470// SecurityRuleDirection enumerates the values for security rule direction.
1471type SecurityRuleDirection string
1472
1473const (
1474	// SecurityRuleDirectionInbound ...
1475	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1476	// SecurityRuleDirectionOutbound ...
1477	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1478)
1479
1480// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1481func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1482	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1483}
1484
1485// SecurityRuleProtocol enumerates the values for security rule protocol.
1486type SecurityRuleProtocol string
1487
1488const (
1489	// SecurityRuleProtocolAsterisk ...
1490	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1491	// SecurityRuleProtocolEsp ...
1492	SecurityRuleProtocolEsp SecurityRuleProtocol = "Esp"
1493	// SecurityRuleProtocolIcmp ...
1494	SecurityRuleProtocolIcmp SecurityRuleProtocol = "Icmp"
1495	// SecurityRuleProtocolTCP ...
1496	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1497	// SecurityRuleProtocolUDP ...
1498	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1499)
1500
1501// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1502func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1503	return []SecurityRuleProtocol{SecurityRuleProtocolAsterisk, SecurityRuleProtocolEsp, SecurityRuleProtocolIcmp, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1504}
1505
1506// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1507type ServiceProviderProvisioningState string
1508
1509const (
1510	// Deprovisioning ...
1511	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1512	// NotProvisioned ...
1513	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1514	// Provisioned ...
1515	Provisioned ServiceProviderProvisioningState = "Provisioned"
1516	// Provisioning ...
1517	Provisioning ServiceProviderProvisioningState = "Provisioning"
1518)
1519
1520// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1521func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1522	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1523}
1524
1525// Severity enumerates the values for severity.
1526type Severity string
1527
1528const (
1529	// SeverityError ...
1530	SeverityError Severity = "Error"
1531	// SeverityWarning ...
1532	SeverityWarning Severity = "Warning"
1533)
1534
1535// PossibleSeverityValues returns an array of possible values for the Severity const type.
1536func PossibleSeverityValues() []Severity {
1537	return []Severity{SeverityError, SeverityWarning}
1538}
1539
1540// TransportProtocol enumerates the values for transport protocol.
1541type TransportProtocol string
1542
1543const (
1544	// TransportProtocolAll ...
1545	TransportProtocolAll TransportProtocol = "All"
1546	// TransportProtocolTCP ...
1547	TransportProtocolTCP TransportProtocol = "Tcp"
1548	// TransportProtocolUDP ...
1549	TransportProtocolUDP TransportProtocol = "Udp"
1550)
1551
1552// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1553func PossibleTransportProtocolValues() []TransportProtocol {
1554	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1555}
1556
1557// TunnelConnectionStatus enumerates the values for tunnel connection status.
1558type TunnelConnectionStatus string
1559
1560const (
1561	// TunnelConnectionStatusConnected ...
1562	TunnelConnectionStatusConnected TunnelConnectionStatus = "Connected"
1563	// TunnelConnectionStatusConnecting ...
1564	TunnelConnectionStatusConnecting TunnelConnectionStatus = "Connecting"
1565	// TunnelConnectionStatusNotConnected ...
1566	TunnelConnectionStatusNotConnected TunnelConnectionStatus = "NotConnected"
1567	// TunnelConnectionStatusUnknown ...
1568	TunnelConnectionStatusUnknown TunnelConnectionStatus = "Unknown"
1569)
1570
1571// PossibleTunnelConnectionStatusValues returns an array of possible values for the TunnelConnectionStatus const type.
1572func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus {
1573	return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown}
1574}
1575
1576// VerbosityLevel enumerates the values for verbosity level.
1577type VerbosityLevel string
1578
1579const (
1580	// Full ...
1581	Full VerbosityLevel = "Full"
1582	// Minimum ...
1583	Minimum VerbosityLevel = "Minimum"
1584	// Normal ...
1585	Normal VerbosityLevel = "Normal"
1586)
1587
1588// PossibleVerbosityLevelValues returns an array of possible values for the VerbosityLevel const type.
1589func PossibleVerbosityLevelValues() []VerbosityLevel {
1590	return []VerbosityLevel{Full, Minimum, Normal}
1591}
1592
1593// VirtualNetworkGatewayConnectionProtocol enumerates the values for virtual network gateway connection
1594// protocol.
1595type VirtualNetworkGatewayConnectionProtocol string
1596
1597const (
1598	// IKEv1 ...
1599	IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1"
1600	// IKEv2 ...
1601	IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2"
1602)
1603
1604// PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type.
1605func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol {
1606	return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2}
1607}
1608
1609// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1610type VirtualNetworkGatewayConnectionStatus string
1611
1612const (
1613	// VirtualNetworkGatewayConnectionStatusConnected ...
1614	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1615	// VirtualNetworkGatewayConnectionStatusConnecting ...
1616	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1617	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1618	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1619	// VirtualNetworkGatewayConnectionStatusUnknown ...
1620	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1621)
1622
1623// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1624func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1625	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1626}
1627
1628// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1629type VirtualNetworkGatewayConnectionType string
1630
1631const (
1632	// ExpressRoute ...
1633	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1634	// IPsec ...
1635	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1636	// Vnet2Vnet ...
1637	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1638	// VPNClient ...
1639	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1640)
1641
1642// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1643func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1644	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1645}
1646
1647// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1648type VirtualNetworkGatewaySkuName string
1649
1650const (
1651	// VirtualNetworkGatewaySkuNameBasic ...
1652	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1653	// VirtualNetworkGatewaySkuNameErGw1AZ ...
1654	VirtualNetworkGatewaySkuNameErGw1AZ VirtualNetworkGatewaySkuName = "ErGw1AZ"
1655	// VirtualNetworkGatewaySkuNameErGw2AZ ...
1656	VirtualNetworkGatewaySkuNameErGw2AZ VirtualNetworkGatewaySkuName = "ErGw2AZ"
1657	// VirtualNetworkGatewaySkuNameErGw3AZ ...
1658	VirtualNetworkGatewaySkuNameErGw3AZ VirtualNetworkGatewaySkuName = "ErGw3AZ"
1659	// VirtualNetworkGatewaySkuNameHighPerformance ...
1660	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1661	// VirtualNetworkGatewaySkuNameStandard ...
1662	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1663	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1664	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1665	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1666	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1667	// VirtualNetworkGatewaySkuNameVpnGw1AZ ...
1668	VirtualNetworkGatewaySkuNameVpnGw1AZ VirtualNetworkGatewaySkuName = "VpnGw1AZ"
1669	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1670	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1671	// VirtualNetworkGatewaySkuNameVpnGw2AZ ...
1672	VirtualNetworkGatewaySkuNameVpnGw2AZ VirtualNetworkGatewaySkuName = "VpnGw2AZ"
1673	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1674	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1675	// VirtualNetworkGatewaySkuNameVpnGw3AZ ...
1676	VirtualNetworkGatewaySkuNameVpnGw3AZ VirtualNetworkGatewaySkuName = "VpnGw3AZ"
1677)
1678
1679// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
1680func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
1681	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameErGw1AZ, VirtualNetworkGatewaySkuNameErGw2AZ, VirtualNetworkGatewaySkuNameErGw3AZ, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw1AZ, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw2AZ, VirtualNetworkGatewaySkuNameVpnGw3, VirtualNetworkGatewaySkuNameVpnGw3AZ}
1682}
1683
1684// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
1685type VirtualNetworkGatewaySkuTier string
1686
1687const (
1688	// VirtualNetworkGatewaySkuTierBasic ...
1689	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
1690	// VirtualNetworkGatewaySkuTierErGw1AZ ...
1691	VirtualNetworkGatewaySkuTierErGw1AZ VirtualNetworkGatewaySkuTier = "ErGw1AZ"
1692	// VirtualNetworkGatewaySkuTierErGw2AZ ...
1693	VirtualNetworkGatewaySkuTierErGw2AZ VirtualNetworkGatewaySkuTier = "ErGw2AZ"
1694	// VirtualNetworkGatewaySkuTierErGw3AZ ...
1695	VirtualNetworkGatewaySkuTierErGw3AZ VirtualNetworkGatewaySkuTier = "ErGw3AZ"
1696	// VirtualNetworkGatewaySkuTierHighPerformance ...
1697	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
1698	// VirtualNetworkGatewaySkuTierStandard ...
1699	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
1700	// VirtualNetworkGatewaySkuTierUltraPerformance ...
1701	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
1702	// VirtualNetworkGatewaySkuTierVpnGw1 ...
1703	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
1704	// VirtualNetworkGatewaySkuTierVpnGw1AZ ...
1705	VirtualNetworkGatewaySkuTierVpnGw1AZ VirtualNetworkGatewaySkuTier = "VpnGw1AZ"
1706	// VirtualNetworkGatewaySkuTierVpnGw2 ...
1707	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
1708	// VirtualNetworkGatewaySkuTierVpnGw2AZ ...
1709	VirtualNetworkGatewaySkuTierVpnGw2AZ VirtualNetworkGatewaySkuTier = "VpnGw2AZ"
1710	// VirtualNetworkGatewaySkuTierVpnGw3 ...
1711	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
1712	// VirtualNetworkGatewaySkuTierVpnGw3AZ ...
1713	VirtualNetworkGatewaySkuTierVpnGw3AZ VirtualNetworkGatewaySkuTier = "VpnGw3AZ"
1714)
1715
1716// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
1717func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
1718	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierErGw1AZ, VirtualNetworkGatewaySkuTierErGw2AZ, VirtualNetworkGatewaySkuTierErGw3AZ, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw1AZ, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw2AZ, VirtualNetworkGatewaySkuTierVpnGw3, VirtualNetworkGatewaySkuTierVpnGw3AZ}
1719}
1720
1721// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
1722type VirtualNetworkGatewayType string
1723
1724const (
1725	// VirtualNetworkGatewayTypeExpressRoute ...
1726	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
1727	// VirtualNetworkGatewayTypeVpn ...
1728	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
1729)
1730
1731// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
1732func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
1733	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
1734}
1735
1736// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
1737type VirtualNetworkPeeringState string
1738
1739const (
1740	// VirtualNetworkPeeringStateConnected ...
1741	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
1742	// VirtualNetworkPeeringStateDisconnected ...
1743	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
1744	// VirtualNetworkPeeringStateInitiated ...
1745	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
1746)
1747
1748// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
1749func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
1750	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
1751}
1752
1753// VirtualWanSecurityProviderType enumerates the values for virtual wan security provider type.
1754type VirtualWanSecurityProviderType string
1755
1756const (
1757	// External ...
1758	External VirtualWanSecurityProviderType = "External"
1759	// Native ...
1760	Native VirtualWanSecurityProviderType = "Native"
1761)
1762
1763// PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type.
1764func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType {
1765	return []VirtualWanSecurityProviderType{External, Native}
1766}
1767
1768// VpnClientProtocol enumerates the values for vpn client protocol.
1769type VpnClientProtocol string
1770
1771const (
1772	// IkeV2 ...
1773	IkeV2 VpnClientProtocol = "IkeV2"
1774	// OpenVPN ...
1775	OpenVPN VpnClientProtocol = "OpenVPN"
1776	// SSTP ...
1777	SSTP VpnClientProtocol = "SSTP"
1778)
1779
1780// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
1781func PossibleVpnClientProtocolValues() []VpnClientProtocol {
1782	return []VpnClientProtocol{IkeV2, OpenVPN, SSTP}
1783}
1784
1785// VpnConnectionStatus enumerates the values for vpn connection status.
1786type VpnConnectionStatus string
1787
1788const (
1789	// VpnConnectionStatusConnected ...
1790	VpnConnectionStatusConnected VpnConnectionStatus = "Connected"
1791	// VpnConnectionStatusConnecting ...
1792	VpnConnectionStatusConnecting VpnConnectionStatus = "Connecting"
1793	// VpnConnectionStatusNotConnected ...
1794	VpnConnectionStatusNotConnected VpnConnectionStatus = "NotConnected"
1795	// VpnConnectionStatusUnknown ...
1796	VpnConnectionStatusUnknown VpnConnectionStatus = "Unknown"
1797)
1798
1799// PossibleVpnConnectionStatusValues returns an array of possible values for the VpnConnectionStatus const type.
1800func PossibleVpnConnectionStatusValues() []VpnConnectionStatus {
1801	return []VpnConnectionStatus{VpnConnectionStatusConnected, VpnConnectionStatusConnecting, VpnConnectionStatusNotConnected, VpnConnectionStatusUnknown}
1802}
1803
1804// VpnGatewayTunnelingProtocol enumerates the values for vpn gateway tunneling protocol.
1805type VpnGatewayTunnelingProtocol string
1806
1807const (
1808	// VpnGatewayTunnelingProtocolIkeV2 ...
1809	VpnGatewayTunnelingProtocolIkeV2 VpnGatewayTunnelingProtocol = "IkeV2"
1810	// VpnGatewayTunnelingProtocolOpenVPN ...
1811	VpnGatewayTunnelingProtocolOpenVPN VpnGatewayTunnelingProtocol = "OpenVPN"
1812)
1813
1814// PossibleVpnGatewayTunnelingProtocolValues returns an array of possible values for the VpnGatewayTunnelingProtocol const type.
1815func PossibleVpnGatewayTunnelingProtocolValues() []VpnGatewayTunnelingProtocol {
1816	return []VpnGatewayTunnelingProtocol{VpnGatewayTunnelingProtocolIkeV2, VpnGatewayTunnelingProtocolOpenVPN}
1817}
1818
1819// VpnType enumerates the values for vpn type.
1820type VpnType string
1821
1822const (
1823	// PolicyBased ...
1824	PolicyBased VpnType = "PolicyBased"
1825	// RouteBased ...
1826	RouteBased VpnType = "RouteBased"
1827)
1828
1829// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
1830func PossibleVpnTypeValues() []VpnType {
1831	return []VpnType{PolicyBased, RouteBased}
1832}
1833
1834// WebApplicationFirewallAction enumerates the values for web application firewall action.
1835type WebApplicationFirewallAction string
1836
1837const (
1838	// WebApplicationFirewallActionAllow ...
1839	WebApplicationFirewallActionAllow WebApplicationFirewallAction = "Allow"
1840	// WebApplicationFirewallActionBlock ...
1841	WebApplicationFirewallActionBlock WebApplicationFirewallAction = "Block"
1842	// WebApplicationFirewallActionLog ...
1843	WebApplicationFirewallActionLog WebApplicationFirewallAction = "Log"
1844)
1845
1846// PossibleWebApplicationFirewallActionValues returns an array of possible values for the WebApplicationFirewallAction const type.
1847func PossibleWebApplicationFirewallActionValues() []WebApplicationFirewallAction {
1848	return []WebApplicationFirewallAction{WebApplicationFirewallActionAllow, WebApplicationFirewallActionBlock, WebApplicationFirewallActionLog}
1849}
1850
1851// WebApplicationFirewallEnabledState enumerates the values for web application firewall enabled state.
1852type WebApplicationFirewallEnabledState string
1853
1854const (
1855	// WebApplicationFirewallEnabledStateDisabled ...
1856	WebApplicationFirewallEnabledStateDisabled WebApplicationFirewallEnabledState = "Disabled"
1857	// WebApplicationFirewallEnabledStateEnabled ...
1858	WebApplicationFirewallEnabledStateEnabled WebApplicationFirewallEnabledState = "Enabled"
1859)
1860
1861// PossibleWebApplicationFirewallEnabledStateValues returns an array of possible values for the WebApplicationFirewallEnabledState const type.
1862func PossibleWebApplicationFirewallEnabledStateValues() []WebApplicationFirewallEnabledState {
1863	return []WebApplicationFirewallEnabledState{WebApplicationFirewallEnabledStateDisabled, WebApplicationFirewallEnabledStateEnabled}
1864}
1865
1866// WebApplicationFirewallMatchVariable enumerates the values for web application firewall match variable.
1867type WebApplicationFirewallMatchVariable string
1868
1869const (
1870	// PostArgs ...
1871	PostArgs WebApplicationFirewallMatchVariable = "PostArgs"
1872	// QueryString ...
1873	QueryString WebApplicationFirewallMatchVariable = "QueryString"
1874	// RemoteAddr ...
1875	RemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr"
1876	// RequestBody ...
1877	RequestBody WebApplicationFirewallMatchVariable = "RequestBody"
1878	// RequestCookies ...
1879	RequestCookies WebApplicationFirewallMatchVariable = "RequestCookies"
1880	// RequestHeaders ...
1881	RequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders"
1882	// RequestMethod ...
1883	RequestMethod WebApplicationFirewallMatchVariable = "RequestMethod"
1884	// RequestURI ...
1885	RequestURI WebApplicationFirewallMatchVariable = "RequestUri"
1886)
1887
1888// PossibleWebApplicationFirewallMatchVariableValues returns an array of possible values for the WebApplicationFirewallMatchVariable const type.
1889func PossibleWebApplicationFirewallMatchVariableValues() []WebApplicationFirewallMatchVariable {
1890	return []WebApplicationFirewallMatchVariable{PostArgs, QueryString, RemoteAddr, RequestBody, RequestCookies, RequestHeaders, RequestMethod, RequestURI}
1891}
1892
1893// WebApplicationFirewallMode enumerates the values for web application firewall mode.
1894type WebApplicationFirewallMode string
1895
1896const (
1897	// WebApplicationFirewallModeDetection ...
1898	WebApplicationFirewallModeDetection WebApplicationFirewallMode = "Detection"
1899	// WebApplicationFirewallModePrevention ...
1900	WebApplicationFirewallModePrevention WebApplicationFirewallMode = "Prevention"
1901)
1902
1903// PossibleWebApplicationFirewallModeValues returns an array of possible values for the WebApplicationFirewallMode const type.
1904func PossibleWebApplicationFirewallModeValues() []WebApplicationFirewallMode {
1905	return []WebApplicationFirewallMode{WebApplicationFirewallModeDetection, WebApplicationFirewallModePrevention}
1906}
1907
1908// WebApplicationFirewallOperator enumerates the values for web application firewall operator.
1909type WebApplicationFirewallOperator string
1910
1911const (
1912	// WebApplicationFirewallOperatorBeginsWith ...
1913	WebApplicationFirewallOperatorBeginsWith WebApplicationFirewallOperator = "BeginsWith"
1914	// WebApplicationFirewallOperatorContains ...
1915	WebApplicationFirewallOperatorContains WebApplicationFirewallOperator = "Contains"
1916	// WebApplicationFirewallOperatorEndsWith ...
1917	WebApplicationFirewallOperatorEndsWith WebApplicationFirewallOperator = "EndsWith"
1918	// WebApplicationFirewallOperatorEqual ...
1919	WebApplicationFirewallOperatorEqual WebApplicationFirewallOperator = "Equal"
1920	// WebApplicationFirewallOperatorGreaterThan ...
1921	WebApplicationFirewallOperatorGreaterThan WebApplicationFirewallOperator = "GreaterThan"
1922	// WebApplicationFirewallOperatorGreaterThanOrEqual ...
1923	WebApplicationFirewallOperatorGreaterThanOrEqual WebApplicationFirewallOperator = "GreaterThanOrEqual"
1924	// WebApplicationFirewallOperatorIPMatch ...
1925	WebApplicationFirewallOperatorIPMatch WebApplicationFirewallOperator = "IPMatch"
1926	// WebApplicationFirewallOperatorLessThan ...
1927	WebApplicationFirewallOperatorLessThan WebApplicationFirewallOperator = "LessThan"
1928	// WebApplicationFirewallOperatorLessThanOrEqual ...
1929	WebApplicationFirewallOperatorLessThanOrEqual WebApplicationFirewallOperator = "LessThanOrEqual"
1930	// WebApplicationFirewallOperatorRegex ...
1931	WebApplicationFirewallOperatorRegex WebApplicationFirewallOperator = "Regex"
1932)
1933
1934// PossibleWebApplicationFirewallOperatorValues returns an array of possible values for the WebApplicationFirewallOperator const type.
1935func PossibleWebApplicationFirewallOperatorValues() []WebApplicationFirewallOperator {
1936	return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex}
1937}
1938
1939// WebApplicationFirewallPolicyResourceState enumerates the values for web application firewall policy resource
1940// state.
1941type WebApplicationFirewallPolicyResourceState string
1942
1943const (
1944	// WebApplicationFirewallPolicyResourceStateCreating ...
1945	WebApplicationFirewallPolicyResourceStateCreating WebApplicationFirewallPolicyResourceState = "Creating"
1946	// WebApplicationFirewallPolicyResourceStateDeleting ...
1947	WebApplicationFirewallPolicyResourceStateDeleting WebApplicationFirewallPolicyResourceState = "Deleting"
1948	// WebApplicationFirewallPolicyResourceStateDisabled ...
1949	WebApplicationFirewallPolicyResourceStateDisabled WebApplicationFirewallPolicyResourceState = "Disabled"
1950	// WebApplicationFirewallPolicyResourceStateDisabling ...
1951	WebApplicationFirewallPolicyResourceStateDisabling WebApplicationFirewallPolicyResourceState = "Disabling"
1952	// WebApplicationFirewallPolicyResourceStateEnabled ...
1953	WebApplicationFirewallPolicyResourceStateEnabled WebApplicationFirewallPolicyResourceState = "Enabled"
1954	// WebApplicationFirewallPolicyResourceStateEnabling ...
1955	WebApplicationFirewallPolicyResourceStateEnabling WebApplicationFirewallPolicyResourceState = "Enabling"
1956)
1957
1958// PossibleWebApplicationFirewallPolicyResourceStateValues returns an array of possible values for the WebApplicationFirewallPolicyResourceState const type.
1959func PossibleWebApplicationFirewallPolicyResourceStateValues() []WebApplicationFirewallPolicyResourceState {
1960	return []WebApplicationFirewallPolicyResourceState{WebApplicationFirewallPolicyResourceStateCreating, WebApplicationFirewallPolicyResourceStateDeleting, WebApplicationFirewallPolicyResourceStateDisabled, WebApplicationFirewallPolicyResourceStateDisabling, WebApplicationFirewallPolicyResourceStateEnabled, WebApplicationFirewallPolicyResourceStateEnabling}
1961}
1962
1963// WebApplicationFirewallRuleType enumerates the values for web application firewall rule type.
1964type WebApplicationFirewallRuleType string
1965
1966const (
1967	// WebApplicationFirewallRuleTypeInvalid ...
1968	WebApplicationFirewallRuleTypeInvalid WebApplicationFirewallRuleType = "Invalid"
1969	// WebApplicationFirewallRuleTypeMatchRule ...
1970	WebApplicationFirewallRuleTypeMatchRule WebApplicationFirewallRuleType = "MatchRule"
1971)
1972
1973// PossibleWebApplicationFirewallRuleTypeValues returns an array of possible values for the WebApplicationFirewallRuleType const type.
1974func PossibleWebApplicationFirewallRuleTypeValues() []WebApplicationFirewallRuleType {
1975	return []WebApplicationFirewallRuleType{WebApplicationFirewallRuleTypeInvalid, WebApplicationFirewallRuleTypeMatchRule}
1976}
1977
1978// WebApplicationFirewallTransform enumerates the values for web application firewall transform.
1979type WebApplicationFirewallTransform string
1980
1981const (
1982	// HTMLEntityDecode ...
1983	HTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode"
1984	// Lowercase ...
1985	Lowercase WebApplicationFirewallTransform = "Lowercase"
1986	// RemoveNulls ...
1987	RemoveNulls WebApplicationFirewallTransform = "RemoveNulls"
1988	// Trim ...
1989	Trim WebApplicationFirewallTransform = "Trim"
1990	// URLDecode ...
1991	URLDecode WebApplicationFirewallTransform = "UrlDecode"
1992	// URLEncode ...
1993	URLEncode WebApplicationFirewallTransform = "UrlEncode"
1994)
1995
1996// PossibleWebApplicationFirewallTransformValues returns an array of possible values for the WebApplicationFirewallTransform const type.
1997func PossibleWebApplicationFirewallTransformValues() []WebApplicationFirewallTransform {
1998	return []WebApplicationFirewallTransform{HTMLEntityDecode, Lowercase, RemoveNulls, Trim, URLDecode, URLEncode}
1999}
2000
2001// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
2002// virtual network.
2003type AddressSpace struct {
2004	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
2005	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
2006}
2007
2008// ApplicationGateway application gateway resource.
2009type ApplicationGateway struct {
2010	autorest.Response `json:"-"`
2011	// ApplicationGatewayPropertiesFormat - Properties of the application gateway.
2012	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
2013	// Etag - A unique read-only string that changes whenever the resource is updated.
2014	Etag *string `json:"etag,omitempty"`
2015	// Zones - A list of availability zones denoting where the resource needs to come from.
2016	Zones *[]string `json:"zones,omitempty"`
2017	// Identity - The identity of the application gateway, if configured.
2018	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
2019	// ID - Resource ID.
2020	ID *string `json:"id,omitempty"`
2021	// Name - READ-ONLY; Resource name.
2022	Name *string `json:"name,omitempty"`
2023	// Type - READ-ONLY; Resource type.
2024	Type *string `json:"type,omitempty"`
2025	// Location - Resource location.
2026	Location *string `json:"location,omitempty"`
2027	// Tags - Resource tags.
2028	Tags map[string]*string `json:"tags"`
2029}
2030
2031// MarshalJSON is the custom marshaler for ApplicationGateway.
2032func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
2033	objectMap := make(map[string]interface{})
2034	if ag.ApplicationGatewayPropertiesFormat != nil {
2035		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
2036	}
2037	if ag.Etag != nil {
2038		objectMap["etag"] = ag.Etag
2039	}
2040	if ag.Zones != nil {
2041		objectMap["zones"] = ag.Zones
2042	}
2043	if ag.Identity != nil {
2044		objectMap["identity"] = ag.Identity
2045	}
2046	if ag.ID != nil {
2047		objectMap["id"] = ag.ID
2048	}
2049	if ag.Location != nil {
2050		objectMap["location"] = ag.Location
2051	}
2052	if ag.Tags != nil {
2053		objectMap["tags"] = ag.Tags
2054	}
2055	return json.Marshal(objectMap)
2056}
2057
2058// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
2059func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
2060	var m map[string]*json.RawMessage
2061	err := json.Unmarshal(body, &m)
2062	if err != nil {
2063		return err
2064	}
2065	for k, v := range m {
2066		switch k {
2067		case "properties":
2068			if v != nil {
2069				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
2070				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
2071				if err != nil {
2072					return err
2073				}
2074				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
2075			}
2076		case "etag":
2077			if v != nil {
2078				var etag string
2079				err = json.Unmarshal(*v, &etag)
2080				if err != nil {
2081					return err
2082				}
2083				ag.Etag = &etag
2084			}
2085		case "zones":
2086			if v != nil {
2087				var zones []string
2088				err = json.Unmarshal(*v, &zones)
2089				if err != nil {
2090					return err
2091				}
2092				ag.Zones = &zones
2093			}
2094		case "identity":
2095			if v != nil {
2096				var identity ManagedServiceIdentity
2097				err = json.Unmarshal(*v, &identity)
2098				if err != nil {
2099					return err
2100				}
2101				ag.Identity = &identity
2102			}
2103		case "id":
2104			if v != nil {
2105				var ID string
2106				err = json.Unmarshal(*v, &ID)
2107				if err != nil {
2108					return err
2109				}
2110				ag.ID = &ID
2111			}
2112		case "name":
2113			if v != nil {
2114				var name string
2115				err = json.Unmarshal(*v, &name)
2116				if err != nil {
2117					return err
2118				}
2119				ag.Name = &name
2120			}
2121		case "type":
2122			if v != nil {
2123				var typeVar string
2124				err = json.Unmarshal(*v, &typeVar)
2125				if err != nil {
2126					return err
2127				}
2128				ag.Type = &typeVar
2129			}
2130		case "location":
2131			if v != nil {
2132				var location string
2133				err = json.Unmarshal(*v, &location)
2134				if err != nil {
2135					return err
2136				}
2137				ag.Location = &location
2138			}
2139		case "tags":
2140			if v != nil {
2141				var tags map[string]*string
2142				err = json.Unmarshal(*v, &tags)
2143				if err != nil {
2144					return err
2145				}
2146				ag.Tags = tags
2147			}
2148		}
2149	}
2150
2151	return nil
2152}
2153
2154// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
2155type ApplicationGatewayAuthenticationCertificate struct {
2156	// ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate.
2157	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
2158	// Name - Name of the authentication certificate that is unique within an Application Gateway.
2159	Name *string `json:"name,omitempty"`
2160	// Etag - A unique read-only string that changes whenever the resource is updated.
2161	Etag *string `json:"etag,omitempty"`
2162	// Type - Type of the resource.
2163	Type *string `json:"type,omitempty"`
2164	// ID - Resource ID.
2165	ID *string `json:"id,omitempty"`
2166}
2167
2168// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
2169func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
2170	objectMap := make(map[string]interface{})
2171	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
2172		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
2173	}
2174	if agac.Name != nil {
2175		objectMap["name"] = agac.Name
2176	}
2177	if agac.Etag != nil {
2178		objectMap["etag"] = agac.Etag
2179	}
2180	if agac.Type != nil {
2181		objectMap["type"] = agac.Type
2182	}
2183	if agac.ID != nil {
2184		objectMap["id"] = agac.ID
2185	}
2186	return json.Marshal(objectMap)
2187}
2188
2189// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
2190func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
2191	var m map[string]*json.RawMessage
2192	err := json.Unmarshal(body, &m)
2193	if err != nil {
2194		return err
2195	}
2196	for k, v := range m {
2197		switch k {
2198		case "properties":
2199			if v != nil {
2200				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
2201				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
2202				if err != nil {
2203					return err
2204				}
2205				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
2206			}
2207		case "name":
2208			if v != nil {
2209				var name string
2210				err = json.Unmarshal(*v, &name)
2211				if err != nil {
2212					return err
2213				}
2214				agac.Name = &name
2215			}
2216		case "etag":
2217			if v != nil {
2218				var etag string
2219				err = json.Unmarshal(*v, &etag)
2220				if err != nil {
2221					return err
2222				}
2223				agac.Etag = &etag
2224			}
2225		case "type":
2226			if v != nil {
2227				var typeVar string
2228				err = json.Unmarshal(*v, &typeVar)
2229				if err != nil {
2230					return err
2231				}
2232				agac.Type = &typeVar
2233			}
2234		case "id":
2235			if v != nil {
2236				var ID string
2237				err = json.Unmarshal(*v, &ID)
2238				if err != nil {
2239					return err
2240				}
2241				agac.ID = &ID
2242			}
2243		}
2244	}
2245
2246	return nil
2247}
2248
2249// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
2250// application gateway.
2251type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
2252	// Data - Certificate public data.
2253	Data *string `json:"data,omitempty"`
2254	// ProvisioningState - Provisioning state of the authentication certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2255	ProvisioningState *string `json:"provisioningState,omitempty"`
2256}
2257
2258// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
2259type ApplicationGatewayAutoscaleConfiguration struct {
2260	// MinCapacity - Lower bound on number of Application Gateway capacity.
2261	MinCapacity *int32 `json:"minCapacity,omitempty"`
2262	// MaxCapacity - Upper bound on number of Application Gateway capacity.
2263	MaxCapacity *int32 `json:"maxCapacity,omitempty"`
2264}
2265
2266// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
2267// call.
2268type ApplicationGatewayAvailableSslOptions struct {
2269	autorest.Response `json:"-"`
2270	// ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options.
2271	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
2272	// ID - Resource ID.
2273	ID *string `json:"id,omitempty"`
2274	// Name - READ-ONLY; Resource name.
2275	Name *string `json:"name,omitempty"`
2276	// Type - READ-ONLY; Resource type.
2277	Type *string `json:"type,omitempty"`
2278	// Location - Resource location.
2279	Location *string `json:"location,omitempty"`
2280	// Tags - Resource tags.
2281	Tags map[string]*string `json:"tags"`
2282}
2283
2284// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
2285func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
2286	objectMap := make(map[string]interface{})
2287	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
2288		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
2289	}
2290	if agaso.ID != nil {
2291		objectMap["id"] = agaso.ID
2292	}
2293	if agaso.Location != nil {
2294		objectMap["location"] = agaso.Location
2295	}
2296	if agaso.Tags != nil {
2297		objectMap["tags"] = agaso.Tags
2298	}
2299	return json.Marshal(objectMap)
2300}
2301
2302// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
2303func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
2304	var m map[string]*json.RawMessage
2305	err := json.Unmarshal(body, &m)
2306	if err != nil {
2307		return err
2308	}
2309	for k, v := range m {
2310		switch k {
2311		case "properties":
2312			if v != nil {
2313				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
2314				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
2315				if err != nil {
2316					return err
2317				}
2318				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
2319			}
2320		case "id":
2321			if v != nil {
2322				var ID string
2323				err = json.Unmarshal(*v, &ID)
2324				if err != nil {
2325					return err
2326				}
2327				agaso.ID = &ID
2328			}
2329		case "name":
2330			if v != nil {
2331				var name string
2332				err = json.Unmarshal(*v, &name)
2333				if err != nil {
2334					return err
2335				}
2336				agaso.Name = &name
2337			}
2338		case "type":
2339			if v != nil {
2340				var typeVar string
2341				err = json.Unmarshal(*v, &typeVar)
2342				if err != nil {
2343					return err
2344				}
2345				agaso.Type = &typeVar
2346			}
2347		case "location":
2348			if v != nil {
2349				var location string
2350				err = json.Unmarshal(*v, &location)
2351				if err != nil {
2352					return err
2353				}
2354				agaso.Location = &location
2355			}
2356		case "tags":
2357			if v != nil {
2358				var tags map[string]*string
2359				err = json.Unmarshal(*v, &tags)
2360				if err != nil {
2361					return err
2362				}
2363				agaso.Tags = tags
2364			}
2365		}
2366	}
2367
2368	return nil
2369}
2370
2371// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
2372// ApplicationGatewayAvailableSslOptions.
2373type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
2374	// PredefinedPolicies - List of available Ssl predefined policy.
2375	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
2376	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
2377	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
2378	// AvailableCipherSuites - List of available Ssl cipher suites.
2379	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
2380	// AvailableProtocols - List of available Ssl protocols.
2381	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
2382}
2383
2384// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
2385// service call.
2386type ApplicationGatewayAvailableSslPredefinedPolicies struct {
2387	autorest.Response `json:"-"`
2388	// Value - List of available Ssl predefined policy.
2389	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
2390	// NextLink - URL to get the next set of results.
2391	NextLink *string `json:"nextLink,omitempty"`
2392}
2393
2394// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
2395// ApplicationGatewaySslPredefinedPolicy values.
2396type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
2397	i    int
2398	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
2399}
2400
2401// NextWithContext advances to the next value.  If there was an error making
2402// the request the iterator does not advance and the error is returned.
2403func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
2404	if tracing.IsEnabled() {
2405		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
2406		defer func() {
2407			sc := -1
2408			if iter.Response().Response.Response != nil {
2409				sc = iter.Response().Response.Response.StatusCode
2410			}
2411			tracing.EndSpan(ctx, sc, err)
2412		}()
2413	}
2414	iter.i++
2415	if iter.i < len(iter.page.Values()) {
2416		return nil
2417	}
2418	err = iter.page.NextWithContext(ctx)
2419	if err != nil {
2420		iter.i--
2421		return err
2422	}
2423	iter.i = 0
2424	return nil
2425}
2426
2427// Next advances to the next value.  If there was an error making
2428// the request the iterator does not advance and the error is returned.
2429// Deprecated: Use NextWithContext() instead.
2430func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
2431	return iter.NextWithContext(context.Background())
2432}
2433
2434// NotDone returns true if the enumeration should be started or is not yet complete.
2435func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
2436	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2437}
2438
2439// Response returns the raw server response from the last page request.
2440func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2441	return iter.page.Response()
2442}
2443
2444// Value returns the current value or a zero-initialized value if the
2445// iterator has advanced beyond the end of the collection.
2446func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
2447	if !iter.page.NotDone() {
2448		return ApplicationGatewaySslPredefinedPolicy{}
2449	}
2450	return iter.page.Values()[iter.i]
2451}
2452
2453// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
2454func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
2455	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
2456}
2457
2458// IsEmpty returns true if the ListResult contains no values.
2459func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
2460	return agaspp.Value == nil || len(*agaspp.Value) == 0
2461}
2462
2463// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
2464// It returns nil if no more results exist.
2465func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
2466	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
2467		return nil, nil
2468	}
2469	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2470		autorest.AsJSON(),
2471		autorest.AsGet(),
2472		autorest.WithBaseURL(to.String(agaspp.NextLink)))
2473}
2474
2475// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
2476// ApplicationGatewaySslPredefinedPolicy values.
2477type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
2478	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
2479	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
2480}
2481
2482// NextWithContext advances to the next page of values.  If there was an error making
2483// the request the page does not advance and the error is returned.
2484func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
2485	if tracing.IsEnabled() {
2486		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
2487		defer func() {
2488			sc := -1
2489			if page.Response().Response.Response != nil {
2490				sc = page.Response().Response.Response.StatusCode
2491			}
2492			tracing.EndSpan(ctx, sc, err)
2493		}()
2494	}
2495	next, err := page.fn(ctx, page.agaspp)
2496	if err != nil {
2497		return err
2498	}
2499	page.agaspp = next
2500	return nil
2501}
2502
2503// Next advances to the next page of values.  If there was an error making
2504// the request the page does not advance and the error is returned.
2505// Deprecated: Use NextWithContext() instead.
2506func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
2507	return page.NextWithContext(context.Background())
2508}
2509
2510// NotDone returns true if the page enumeration should be started or is not yet complete.
2511func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
2512	return !page.agaspp.IsEmpty()
2513}
2514
2515// Response returns the raw server response from the last page request.
2516func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2517	return page.agaspp
2518}
2519
2520// Values returns the slice of values for the current page or nil if there are no values.
2521func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
2522	if page.agaspp.IsEmpty() {
2523		return nil
2524	}
2525	return *page.agaspp.Value
2526}
2527
2528// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
2529func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
2530	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
2531}
2532
2533// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
2534// service call.
2535type ApplicationGatewayAvailableWafRuleSetsResult struct {
2536	autorest.Response `json:"-"`
2537	// Value - The list of application gateway rule sets.
2538	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
2539}
2540
2541// ApplicationGatewayBackendAddress backend address of an application gateway.
2542type ApplicationGatewayBackendAddress struct {
2543	// Fqdn - Fully qualified domain name (FQDN).
2544	Fqdn *string `json:"fqdn,omitempty"`
2545	// IPAddress - IP address.
2546	IPAddress *string `json:"ipAddress,omitempty"`
2547}
2548
2549// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
2550type ApplicationGatewayBackendAddressPool struct {
2551	// ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool.
2552	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
2553	// Name - Name of the backend address pool that is unique within an Application Gateway.
2554	Name *string `json:"name,omitempty"`
2555	// Etag - A unique read-only string that changes whenever the resource is updated.
2556	Etag *string `json:"etag,omitempty"`
2557	// Type - Type of the resource.
2558	Type *string `json:"type,omitempty"`
2559	// ID - Resource ID.
2560	ID *string `json:"id,omitempty"`
2561}
2562
2563// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
2564func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
2565	objectMap := make(map[string]interface{})
2566	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
2567		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
2568	}
2569	if agbap.Name != nil {
2570		objectMap["name"] = agbap.Name
2571	}
2572	if agbap.Etag != nil {
2573		objectMap["etag"] = agbap.Etag
2574	}
2575	if agbap.Type != nil {
2576		objectMap["type"] = agbap.Type
2577	}
2578	if agbap.ID != nil {
2579		objectMap["id"] = agbap.ID
2580	}
2581	return json.Marshal(objectMap)
2582}
2583
2584// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
2585func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
2586	var m map[string]*json.RawMessage
2587	err := json.Unmarshal(body, &m)
2588	if err != nil {
2589		return err
2590	}
2591	for k, v := range m {
2592		switch k {
2593		case "properties":
2594			if v != nil {
2595				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
2596				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
2597				if err != nil {
2598					return err
2599				}
2600				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
2601			}
2602		case "name":
2603			if v != nil {
2604				var name string
2605				err = json.Unmarshal(*v, &name)
2606				if err != nil {
2607					return err
2608				}
2609				agbap.Name = &name
2610			}
2611		case "etag":
2612			if v != nil {
2613				var etag string
2614				err = json.Unmarshal(*v, &etag)
2615				if err != nil {
2616					return err
2617				}
2618				agbap.Etag = &etag
2619			}
2620		case "type":
2621			if v != nil {
2622				var typeVar string
2623				err = json.Unmarshal(*v, &typeVar)
2624				if err != nil {
2625					return err
2626				}
2627				agbap.Type = &typeVar
2628			}
2629		case "id":
2630			if v != nil {
2631				var ID string
2632				err = json.Unmarshal(*v, &ID)
2633				if err != nil {
2634					return err
2635				}
2636				agbap.ID = &ID
2637			}
2638		}
2639	}
2640
2641	return nil
2642}
2643
2644// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
2645// application gateway.
2646type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
2647	// BackendIPConfigurations - Collection of references to IPs defined in network interfaces.
2648	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
2649	// BackendAddresses - Backend addresses.
2650	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
2651	// ProvisioningState - Provisioning state of the backend address pool resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2652	ProvisioningState *string `json:"provisioningState,omitempty"`
2653}
2654
2655// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call.
2656type ApplicationGatewayBackendHealth struct {
2657	autorest.Response `json:"-"`
2658	// BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources.
2659	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
2660}
2661
2662// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
2663type ApplicationGatewayBackendHealthHTTPSettings struct {
2664	// BackendHTTPSettings - Reference of an ApplicationGatewayBackendHttpSettings resource.
2665	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
2666	// Servers - List of ApplicationGatewayBackendHealthServer resources.
2667	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
2668}
2669
2670// ApplicationGatewayBackendHealthOnDemand result of on demand test probe.
2671type ApplicationGatewayBackendHealthOnDemand struct {
2672	autorest.Response `json:"-"`
2673	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2674	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2675	// BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings.
2676	BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"`
2677}
2678
2679// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
2680type ApplicationGatewayBackendHealthPool struct {
2681	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2682	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2683	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
2684	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
2685}
2686
2687// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
2688type ApplicationGatewayBackendHealthServer struct {
2689	// Address - IP address or FQDN of backend server.
2690	Address *string `json:"address,omitempty"`
2691	// IPConfiguration - Reference of IP configuration of backend server.
2692	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
2693	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
2694	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
2695	// HealthProbeLog - Health Probe Log.
2696	HealthProbeLog *string `json:"healthProbeLog,omitempty"`
2697}
2698
2699// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
2700type ApplicationGatewayBackendHTTPSettings struct {
2701	// ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings.
2702	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
2703	// Name - Name of the backend http settings that is unique within an Application Gateway.
2704	Name *string `json:"name,omitempty"`
2705	// Etag - A unique read-only string that changes whenever the resource is updated.
2706	Etag *string `json:"etag,omitempty"`
2707	// Type - Type of the resource.
2708	Type *string `json:"type,omitempty"`
2709	// ID - Resource ID.
2710	ID *string `json:"id,omitempty"`
2711}
2712
2713// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
2714func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
2715	objectMap := make(map[string]interface{})
2716	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
2717		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2718	}
2719	if agbhs.Name != nil {
2720		objectMap["name"] = agbhs.Name
2721	}
2722	if agbhs.Etag != nil {
2723		objectMap["etag"] = agbhs.Etag
2724	}
2725	if agbhs.Type != nil {
2726		objectMap["type"] = agbhs.Type
2727	}
2728	if agbhs.ID != nil {
2729		objectMap["id"] = agbhs.ID
2730	}
2731	return json.Marshal(objectMap)
2732}
2733
2734// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
2735func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
2736	var m map[string]*json.RawMessage
2737	err := json.Unmarshal(body, &m)
2738	if err != nil {
2739		return err
2740	}
2741	for k, v := range m {
2742		switch k {
2743		case "properties":
2744			if v != nil {
2745				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2746				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
2747				if err != nil {
2748					return err
2749				}
2750				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
2751			}
2752		case "name":
2753			if v != nil {
2754				var name string
2755				err = json.Unmarshal(*v, &name)
2756				if err != nil {
2757					return err
2758				}
2759				agbhs.Name = &name
2760			}
2761		case "etag":
2762			if v != nil {
2763				var etag string
2764				err = json.Unmarshal(*v, &etag)
2765				if err != nil {
2766					return err
2767				}
2768				agbhs.Etag = &etag
2769			}
2770		case "type":
2771			if v != nil {
2772				var typeVar string
2773				err = json.Unmarshal(*v, &typeVar)
2774				if err != nil {
2775					return err
2776				}
2777				agbhs.Type = &typeVar
2778			}
2779		case "id":
2780			if v != nil {
2781				var ID string
2782				err = json.Unmarshal(*v, &ID)
2783				if err != nil {
2784					return err
2785				}
2786				agbhs.ID = &ID
2787			}
2788		}
2789	}
2790
2791	return nil
2792}
2793
2794// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
2795// application gateway.
2796type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
2797	// Port - The destination port on the backend.
2798	Port *int32 `json:"port,omitempty"`
2799	// Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS'
2800	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2801	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
2802	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
2803	// RequestTimeout - Request timeout in seconds. Application Gateway will fail the request if response is not received within RequestTimeout. Acceptable values are from 1 second to 86400 seconds.
2804	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
2805	// Probe - Probe resource of an application gateway.
2806	Probe *SubResource `json:"probe,omitempty"`
2807	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
2808	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
2809	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
2810	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
2811	// ConnectionDraining - Connection draining of the backend http settings resource.
2812	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
2813	// HostName - Host header to be sent to the backend servers.
2814	HostName *string `json:"hostName,omitempty"`
2815	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
2816	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
2817	// AffinityCookieName - Cookie name to use for the affinity cookie.
2818	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
2819	// ProbeEnabled - Whether the probe is enabled. Default value is false.
2820	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
2821	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
2822	Path *string `json:"path,omitempty"`
2823	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2824	ProvisioningState *string `json:"provisioningState,omitempty"`
2825}
2826
2827// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
2828// be active for a specified time after the backend server got removed from the configuration.
2829type ApplicationGatewayConnectionDraining struct {
2830	// Enabled - Whether connection draining is enabled or not.
2831	Enabled *bool `json:"enabled,omitempty"`
2832	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
2833	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
2834}
2835
2836// ApplicationGatewayCustomError customer error of an application gateway.
2837type ApplicationGatewayCustomError struct {
2838	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
2839	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
2840	// CustomErrorPageURL - Error page URL of the application gateway customer error.
2841	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
2842}
2843
2844// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
2845// rule group.
2846type ApplicationGatewayFirewallDisabledRuleGroup struct {
2847	// RuleGroupName - The name of the rule group that will be disabled.
2848	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2849	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
2850	Rules *[]int32 `json:"rules,omitempty"`
2851}
2852
2853// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
2854// check.
2855type ApplicationGatewayFirewallExclusion struct {
2856	// MatchVariable - The variable to be excluded.
2857	MatchVariable *string `json:"matchVariable,omitempty"`
2858	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
2859	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
2860	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
2861	Selector *string `json:"selector,omitempty"`
2862}
2863
2864// ApplicationGatewayFirewallRule a web application firewall rule.
2865type ApplicationGatewayFirewallRule struct {
2866	// RuleID - The identifier of the web application firewall rule.
2867	RuleID *int32 `json:"ruleId,omitempty"`
2868	// Description - The description of the web application firewall rule.
2869	Description *string `json:"description,omitempty"`
2870}
2871
2872// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
2873type ApplicationGatewayFirewallRuleGroup struct {
2874	// RuleGroupName - The name of the web application firewall rule group.
2875	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2876	// Description - The description of the web application firewall rule group.
2877	Description *string `json:"description,omitempty"`
2878	// Rules - The rules of the web application firewall rule group.
2879	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
2880}
2881
2882// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
2883type ApplicationGatewayFirewallRuleSet struct {
2884	// ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set.
2885	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
2886	// ID - Resource ID.
2887	ID *string `json:"id,omitempty"`
2888	// Name - READ-ONLY; Resource name.
2889	Name *string `json:"name,omitempty"`
2890	// Type - READ-ONLY; Resource type.
2891	Type *string `json:"type,omitempty"`
2892	// Location - Resource location.
2893	Location *string `json:"location,omitempty"`
2894	// Tags - Resource tags.
2895	Tags map[string]*string `json:"tags"`
2896}
2897
2898// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
2899func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
2900	objectMap := make(map[string]interface{})
2901	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
2902		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
2903	}
2904	if agfrs.ID != nil {
2905		objectMap["id"] = agfrs.ID
2906	}
2907	if agfrs.Location != nil {
2908		objectMap["location"] = agfrs.Location
2909	}
2910	if agfrs.Tags != nil {
2911		objectMap["tags"] = agfrs.Tags
2912	}
2913	return json.Marshal(objectMap)
2914}
2915
2916// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
2917func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
2918	var m map[string]*json.RawMessage
2919	err := json.Unmarshal(body, &m)
2920	if err != nil {
2921		return err
2922	}
2923	for k, v := range m {
2924		switch k {
2925		case "properties":
2926			if v != nil {
2927				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
2928				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
2929				if err != nil {
2930					return err
2931				}
2932				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
2933			}
2934		case "id":
2935			if v != nil {
2936				var ID string
2937				err = json.Unmarshal(*v, &ID)
2938				if err != nil {
2939					return err
2940				}
2941				agfrs.ID = &ID
2942			}
2943		case "name":
2944			if v != nil {
2945				var name string
2946				err = json.Unmarshal(*v, &name)
2947				if err != nil {
2948					return err
2949				}
2950				agfrs.Name = &name
2951			}
2952		case "type":
2953			if v != nil {
2954				var typeVar string
2955				err = json.Unmarshal(*v, &typeVar)
2956				if err != nil {
2957					return err
2958				}
2959				agfrs.Type = &typeVar
2960			}
2961		case "location":
2962			if v != nil {
2963				var location string
2964				err = json.Unmarshal(*v, &location)
2965				if err != nil {
2966					return err
2967				}
2968				agfrs.Location = &location
2969			}
2970		case "tags":
2971			if v != nil {
2972				var tags map[string]*string
2973				err = json.Unmarshal(*v, &tags)
2974				if err != nil {
2975					return err
2976				}
2977				agfrs.Tags = tags
2978			}
2979		}
2980	}
2981
2982	return nil
2983}
2984
2985// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
2986type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
2987	// ProvisioningState - The provisioning state of the web application firewall rule set.
2988	ProvisioningState *string `json:"provisioningState,omitempty"`
2989	// RuleSetType - The type of the web application firewall rule set.
2990	RuleSetType *string `json:"ruleSetType,omitempty"`
2991	// RuleSetVersion - The version of the web application firewall rule set type.
2992	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
2993	// RuleGroups - The rule groups of the web application firewall rule set.
2994	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
2995}
2996
2997// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
2998type ApplicationGatewayFrontendIPConfiguration struct {
2999	// ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration.
3000	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3001	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
3002	Name *string `json:"name,omitempty"`
3003	// Etag - A unique read-only string that changes whenever the resource is updated.
3004	Etag *string `json:"etag,omitempty"`
3005	// Type - Type of the resource.
3006	Type *string `json:"type,omitempty"`
3007	// ID - Resource ID.
3008	ID *string `json:"id,omitempty"`
3009}
3010
3011// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
3012func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
3013	objectMap := make(map[string]interface{})
3014	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
3015		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3016	}
3017	if agfic.Name != nil {
3018		objectMap["name"] = agfic.Name
3019	}
3020	if agfic.Etag != nil {
3021		objectMap["etag"] = agfic.Etag
3022	}
3023	if agfic.Type != nil {
3024		objectMap["type"] = agfic.Type
3025	}
3026	if agfic.ID != nil {
3027		objectMap["id"] = agfic.ID
3028	}
3029	return json.Marshal(objectMap)
3030}
3031
3032// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
3033func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
3034	var m map[string]*json.RawMessage
3035	err := json.Unmarshal(body, &m)
3036	if err != nil {
3037		return err
3038	}
3039	for k, v := range m {
3040		switch k {
3041		case "properties":
3042			if v != nil {
3043				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3044				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
3045				if err != nil {
3046					return err
3047				}
3048				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
3049			}
3050		case "name":
3051			if v != nil {
3052				var name string
3053				err = json.Unmarshal(*v, &name)
3054				if err != nil {
3055					return err
3056				}
3057				agfic.Name = &name
3058			}
3059		case "etag":
3060			if v != nil {
3061				var etag string
3062				err = json.Unmarshal(*v, &etag)
3063				if err != nil {
3064					return err
3065				}
3066				agfic.Etag = &etag
3067			}
3068		case "type":
3069			if v != nil {
3070				var typeVar string
3071				err = json.Unmarshal(*v, &typeVar)
3072				if err != nil {
3073					return err
3074				}
3075				agfic.Type = &typeVar
3076			}
3077		case "id":
3078			if v != nil {
3079				var ID string
3080				err = json.Unmarshal(*v, &ID)
3081				if err != nil {
3082					return err
3083				}
3084				agfic.ID = &ID
3085			}
3086		}
3087	}
3088
3089	return nil
3090}
3091
3092// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
3093// application gateway.
3094type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
3095	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
3096	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
3097	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
3098	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
3099	// Subnet - Reference of the subnet resource.
3100	Subnet *SubResource `json:"subnet,omitempty"`
3101	// PublicIPAddress - Reference of the PublicIP resource.
3102	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
3103	// ProvisioningState - Provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3104	ProvisioningState *string `json:"provisioningState,omitempty"`
3105}
3106
3107// ApplicationGatewayFrontendPort frontend port of an application gateway.
3108type ApplicationGatewayFrontendPort struct {
3109	// ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port.
3110	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
3111	// Name - Name of the frontend port that is unique within an Application Gateway.
3112	Name *string `json:"name,omitempty"`
3113	// Etag - A unique read-only string that changes whenever the resource is updated.
3114	Etag *string `json:"etag,omitempty"`
3115	// Type - Type of the resource.
3116	Type *string `json:"type,omitempty"`
3117	// ID - Resource ID.
3118	ID *string `json:"id,omitempty"`
3119}
3120
3121// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
3122func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
3123	objectMap := make(map[string]interface{})
3124	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
3125		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
3126	}
3127	if agfp.Name != nil {
3128		objectMap["name"] = agfp.Name
3129	}
3130	if agfp.Etag != nil {
3131		objectMap["etag"] = agfp.Etag
3132	}
3133	if agfp.Type != nil {
3134		objectMap["type"] = agfp.Type
3135	}
3136	if agfp.ID != nil {
3137		objectMap["id"] = agfp.ID
3138	}
3139	return json.Marshal(objectMap)
3140}
3141
3142// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
3143func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
3144	var m map[string]*json.RawMessage
3145	err := json.Unmarshal(body, &m)
3146	if err != nil {
3147		return err
3148	}
3149	for k, v := range m {
3150		switch k {
3151		case "properties":
3152			if v != nil {
3153				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
3154				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
3155				if err != nil {
3156					return err
3157				}
3158				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
3159			}
3160		case "name":
3161			if v != nil {
3162				var name string
3163				err = json.Unmarshal(*v, &name)
3164				if err != nil {
3165					return err
3166				}
3167				agfp.Name = &name
3168			}
3169		case "etag":
3170			if v != nil {
3171				var etag string
3172				err = json.Unmarshal(*v, &etag)
3173				if err != nil {
3174					return err
3175				}
3176				agfp.Etag = &etag
3177			}
3178		case "type":
3179			if v != nil {
3180				var typeVar string
3181				err = json.Unmarshal(*v, &typeVar)
3182				if err != nil {
3183					return err
3184				}
3185				agfp.Type = &typeVar
3186			}
3187		case "id":
3188			if v != nil {
3189				var ID string
3190				err = json.Unmarshal(*v, &ID)
3191				if err != nil {
3192					return err
3193				}
3194				agfp.ID = &ID
3195			}
3196		}
3197	}
3198
3199	return nil
3200}
3201
3202// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
3203type ApplicationGatewayFrontendPortPropertiesFormat struct {
3204	// Port - Frontend port.
3205	Port *int32 `json:"port,omitempty"`
3206	// ProvisioningState - Provisioning state of the frontend port resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3207	ProvisioningState *string `json:"provisioningState,omitempty"`
3208}
3209
3210// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
3211type ApplicationGatewayHeaderConfiguration struct {
3212	// HeaderName - Header name of the header configuration.
3213	HeaderName *string `json:"headerName,omitempty"`
3214	// HeaderValue - Header value of the header configuration.
3215	HeaderValue *string `json:"headerValue,omitempty"`
3216}
3217
3218// ApplicationGatewayHTTPListener http listener of an application gateway.
3219type ApplicationGatewayHTTPListener struct {
3220	// ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener.
3221	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
3222	// Name - Name of the HTTP listener that is unique within an Application Gateway.
3223	Name *string `json:"name,omitempty"`
3224	// Etag - A unique read-only string that changes whenever the resource is updated.
3225	Etag *string `json:"etag,omitempty"`
3226	// Type - Type of the resource.
3227	Type *string `json:"type,omitempty"`
3228	// ID - Resource ID.
3229	ID *string `json:"id,omitempty"`
3230}
3231
3232// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
3233func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
3234	objectMap := make(map[string]interface{})
3235	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
3236		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
3237	}
3238	if aghl.Name != nil {
3239		objectMap["name"] = aghl.Name
3240	}
3241	if aghl.Etag != nil {
3242		objectMap["etag"] = aghl.Etag
3243	}
3244	if aghl.Type != nil {
3245		objectMap["type"] = aghl.Type
3246	}
3247	if aghl.ID != nil {
3248		objectMap["id"] = aghl.ID
3249	}
3250	return json.Marshal(objectMap)
3251}
3252
3253// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
3254func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
3255	var m map[string]*json.RawMessage
3256	err := json.Unmarshal(body, &m)
3257	if err != nil {
3258		return err
3259	}
3260	for k, v := range m {
3261		switch k {
3262		case "properties":
3263			if v != nil {
3264				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
3265				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
3266				if err != nil {
3267					return err
3268				}
3269				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
3270			}
3271		case "name":
3272			if v != nil {
3273				var name string
3274				err = json.Unmarshal(*v, &name)
3275				if err != nil {
3276					return err
3277				}
3278				aghl.Name = &name
3279			}
3280		case "etag":
3281			if v != nil {
3282				var etag string
3283				err = json.Unmarshal(*v, &etag)
3284				if err != nil {
3285					return err
3286				}
3287				aghl.Etag = &etag
3288			}
3289		case "type":
3290			if v != nil {
3291				var typeVar string
3292				err = json.Unmarshal(*v, &typeVar)
3293				if err != nil {
3294					return err
3295				}
3296				aghl.Type = &typeVar
3297			}
3298		case "id":
3299			if v != nil {
3300				var ID string
3301				err = json.Unmarshal(*v, &ID)
3302				if err != nil {
3303					return err
3304				}
3305				aghl.ID = &ID
3306			}
3307		}
3308	}
3309
3310	return nil
3311}
3312
3313// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
3314type ApplicationGatewayHTTPListenerPropertiesFormat struct {
3315	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
3316	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
3317	// FrontendPort - Frontend port resource of an application gateway.
3318	FrontendPort *SubResource `json:"frontendPort,omitempty"`
3319	// Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS'
3320	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3321	// HostName - Host name of HTTP listener.
3322	HostName *string `json:"hostName,omitempty"`
3323	// SslCertificate - SSL certificate resource of an application gateway.
3324	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
3325	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
3326	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
3327	// ProvisioningState - Provisioning state of the HTTP listener resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3328	ProvisioningState *string `json:"provisioningState,omitempty"`
3329	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
3330	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3331}
3332
3333// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
3334// private IP configuration is allowed.
3335type ApplicationGatewayIPConfiguration struct {
3336	// ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration.
3337	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3338	// Name - Name of the IP configuration that is unique within an Application Gateway.
3339	Name *string `json:"name,omitempty"`
3340	// Etag - A unique read-only string that changes whenever the resource is updated.
3341	Etag *string `json:"etag,omitempty"`
3342	// Type - Type of the resource.
3343	Type *string `json:"type,omitempty"`
3344	// ID - Resource ID.
3345	ID *string `json:"id,omitempty"`
3346}
3347
3348// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
3349func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
3350	objectMap := make(map[string]interface{})
3351	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
3352		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
3353	}
3354	if agic.Name != nil {
3355		objectMap["name"] = agic.Name
3356	}
3357	if agic.Etag != nil {
3358		objectMap["etag"] = agic.Etag
3359	}
3360	if agic.Type != nil {
3361		objectMap["type"] = agic.Type
3362	}
3363	if agic.ID != nil {
3364		objectMap["id"] = agic.ID
3365	}
3366	return json.Marshal(objectMap)
3367}
3368
3369// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
3370func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
3371	var m map[string]*json.RawMessage
3372	err := json.Unmarshal(body, &m)
3373	if err != nil {
3374		return err
3375	}
3376	for k, v := range m {
3377		switch k {
3378		case "properties":
3379			if v != nil {
3380				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
3381				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
3382				if err != nil {
3383					return err
3384				}
3385				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
3386			}
3387		case "name":
3388			if v != nil {
3389				var name string
3390				err = json.Unmarshal(*v, &name)
3391				if err != nil {
3392					return err
3393				}
3394				agic.Name = &name
3395			}
3396		case "etag":
3397			if v != nil {
3398				var etag string
3399				err = json.Unmarshal(*v, &etag)
3400				if err != nil {
3401					return err
3402				}
3403				agic.Etag = &etag
3404			}
3405		case "type":
3406			if v != nil {
3407				var typeVar string
3408				err = json.Unmarshal(*v, &typeVar)
3409				if err != nil {
3410					return err
3411				}
3412				agic.Type = &typeVar
3413			}
3414		case "id":
3415			if v != nil {
3416				var ID string
3417				err = json.Unmarshal(*v, &ID)
3418				if err != nil {
3419					return err
3420				}
3421				agic.ID = &ID
3422			}
3423		}
3424	}
3425
3426	return nil
3427}
3428
3429// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
3430// gateway.
3431type ApplicationGatewayIPConfigurationPropertiesFormat struct {
3432	// Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address.
3433	Subnet *SubResource `json:"subnet,omitempty"`
3434	// ProvisioningState - Provisioning state of the application gateway subnet resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3435	ProvisioningState *string `json:"provisioningState,omitempty"`
3436}
3437
3438// ApplicationGatewayListResult response for ListApplicationGateways API service call.
3439type ApplicationGatewayListResult struct {
3440	autorest.Response `json:"-"`
3441	// Value - List of an application gateways in a resource group.
3442	Value *[]ApplicationGateway `json:"value,omitempty"`
3443	// NextLink - URL to get the next set of results.
3444	NextLink *string `json:"nextLink,omitempty"`
3445}
3446
3447// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
3448type ApplicationGatewayListResultIterator struct {
3449	i    int
3450	page ApplicationGatewayListResultPage
3451}
3452
3453// NextWithContext advances to the next value.  If there was an error making
3454// the request the iterator does not advance and the error is returned.
3455func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
3456	if tracing.IsEnabled() {
3457		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
3458		defer func() {
3459			sc := -1
3460			if iter.Response().Response.Response != nil {
3461				sc = iter.Response().Response.Response.StatusCode
3462			}
3463			tracing.EndSpan(ctx, sc, err)
3464		}()
3465	}
3466	iter.i++
3467	if iter.i < len(iter.page.Values()) {
3468		return nil
3469	}
3470	err = iter.page.NextWithContext(ctx)
3471	if err != nil {
3472		iter.i--
3473		return err
3474	}
3475	iter.i = 0
3476	return nil
3477}
3478
3479// Next advances to the next value.  If there was an error making
3480// the request the iterator does not advance and the error is returned.
3481// Deprecated: Use NextWithContext() instead.
3482func (iter *ApplicationGatewayListResultIterator) Next() error {
3483	return iter.NextWithContext(context.Background())
3484}
3485
3486// NotDone returns true if the enumeration should be started or is not yet complete.
3487func (iter ApplicationGatewayListResultIterator) NotDone() bool {
3488	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3489}
3490
3491// Response returns the raw server response from the last page request.
3492func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
3493	return iter.page.Response()
3494}
3495
3496// Value returns the current value or a zero-initialized value if the
3497// iterator has advanced beyond the end of the collection.
3498func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
3499	if !iter.page.NotDone() {
3500		return ApplicationGateway{}
3501	}
3502	return iter.page.Values()[iter.i]
3503}
3504
3505// Creates a new instance of the ApplicationGatewayListResultIterator type.
3506func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
3507	return ApplicationGatewayListResultIterator{page: page}
3508}
3509
3510// IsEmpty returns true if the ListResult contains no values.
3511func (aglr ApplicationGatewayListResult) IsEmpty() bool {
3512	return aglr.Value == nil || len(*aglr.Value) == 0
3513}
3514
3515// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
3516// It returns nil if no more results exist.
3517func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
3518	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
3519		return nil, nil
3520	}
3521	return autorest.Prepare((&http.Request{}).WithContext(ctx),
3522		autorest.AsJSON(),
3523		autorest.AsGet(),
3524		autorest.WithBaseURL(to.String(aglr.NextLink)))
3525}
3526
3527// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
3528type ApplicationGatewayListResultPage struct {
3529	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
3530	aglr ApplicationGatewayListResult
3531}
3532
3533// NextWithContext advances to the next page of values.  If there was an error making
3534// the request the page does not advance and the error is returned.
3535func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
3536	if tracing.IsEnabled() {
3537		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
3538		defer func() {
3539			sc := -1
3540			if page.Response().Response.Response != nil {
3541				sc = page.Response().Response.Response.StatusCode
3542			}
3543			tracing.EndSpan(ctx, sc, err)
3544		}()
3545	}
3546	next, err := page.fn(ctx, page.aglr)
3547	if err != nil {
3548		return err
3549	}
3550	page.aglr = next
3551	return nil
3552}
3553
3554// Next advances to the next page of values.  If there was an error making
3555// the request the page does not advance and the error is returned.
3556// Deprecated: Use NextWithContext() instead.
3557func (page *ApplicationGatewayListResultPage) Next() error {
3558	return page.NextWithContext(context.Background())
3559}
3560
3561// NotDone returns true if the page enumeration should be started or is not yet complete.
3562func (page ApplicationGatewayListResultPage) NotDone() bool {
3563	return !page.aglr.IsEmpty()
3564}
3565
3566// Response returns the raw server response from the last page request.
3567func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
3568	return page.aglr
3569}
3570
3571// Values returns the slice of values for the current page or nil if there are no values.
3572func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
3573	if page.aglr.IsEmpty() {
3574		return nil
3575	}
3576	return *page.aglr.Value
3577}
3578
3579// Creates a new instance of the ApplicationGatewayListResultPage type.
3580func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
3581	return ApplicationGatewayListResultPage{fn: getNextPage}
3582}
3583
3584// ApplicationGatewayOnDemandProbe details of on demand test probe request.
3585type ApplicationGatewayOnDemandProbe struct {
3586	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3587	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3588	// Host - Host name to send the probe to.
3589	Host *string `json:"host,omitempty"`
3590	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
3591	Path *string `json:"path,omitempty"`
3592	// Timeout - The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout period. Acceptable values are from 1 second to 86400 seconds.
3593	Timeout *int32 `json:"timeout,omitempty"`
3594	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3595	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3596	// Match - Criterion for classifying a healthy probe response.
3597	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3598	// BackendAddressPool - Reference of backend pool of application gateway to which probe request will be sent.
3599	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3600	// BackendHTTPSettings - Reference of backend http setting of application gateway to be used for test probe.
3601	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3602}
3603
3604// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
3605type ApplicationGatewayPathRule struct {
3606	// ApplicationGatewayPathRulePropertiesFormat - Properties of the application gateway path rule.
3607	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
3608	// Name - Name of the path rule that is unique within an Application Gateway.
3609	Name *string `json:"name,omitempty"`
3610	// Etag - A unique read-only string that changes whenever the resource is updated.
3611	Etag *string `json:"etag,omitempty"`
3612	// Type - Type of the resource.
3613	Type *string `json:"type,omitempty"`
3614	// ID - Resource ID.
3615	ID *string `json:"id,omitempty"`
3616}
3617
3618// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
3619func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
3620	objectMap := make(map[string]interface{})
3621	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
3622		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
3623	}
3624	if agpr.Name != nil {
3625		objectMap["name"] = agpr.Name
3626	}
3627	if agpr.Etag != nil {
3628		objectMap["etag"] = agpr.Etag
3629	}
3630	if agpr.Type != nil {
3631		objectMap["type"] = agpr.Type
3632	}
3633	if agpr.ID != nil {
3634		objectMap["id"] = agpr.ID
3635	}
3636	return json.Marshal(objectMap)
3637}
3638
3639// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
3640func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
3641	var m map[string]*json.RawMessage
3642	err := json.Unmarshal(body, &m)
3643	if err != nil {
3644		return err
3645	}
3646	for k, v := range m {
3647		switch k {
3648		case "properties":
3649			if v != nil {
3650				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
3651				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
3652				if err != nil {
3653					return err
3654				}
3655				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
3656			}
3657		case "name":
3658			if v != nil {
3659				var name string
3660				err = json.Unmarshal(*v, &name)
3661				if err != nil {
3662					return err
3663				}
3664				agpr.Name = &name
3665			}
3666		case "etag":
3667			if v != nil {
3668				var etag string
3669				err = json.Unmarshal(*v, &etag)
3670				if err != nil {
3671					return err
3672				}
3673				agpr.Etag = &etag
3674			}
3675		case "type":
3676			if v != nil {
3677				var typeVar string
3678				err = json.Unmarshal(*v, &typeVar)
3679				if err != nil {
3680					return err
3681				}
3682				agpr.Type = &typeVar
3683			}
3684		case "id":
3685			if v != nil {
3686				var ID string
3687				err = json.Unmarshal(*v, &ID)
3688				if err != nil {
3689					return err
3690				}
3691				agpr.ID = &ID
3692			}
3693		}
3694	}
3695
3696	return nil
3697}
3698
3699// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
3700type ApplicationGatewayPathRulePropertiesFormat struct {
3701	// Paths - Path rules of URL path map.
3702	Paths *[]string `json:"paths,omitempty"`
3703	// BackendAddressPool - Backend address pool resource of URL path map path rule.
3704	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3705	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
3706	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3707	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
3708	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3709	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
3710	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
3711	// ProvisioningState - Path rule of URL path map resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3712	ProvisioningState *string `json:"provisioningState,omitempty"`
3713}
3714
3715// ApplicationGatewayProbe probe of the application gateway.
3716type ApplicationGatewayProbe struct {
3717	// ApplicationGatewayProbePropertiesFormat - Properties of the application gateway probe.
3718	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
3719	// Name - Name of the probe that is unique within an Application Gateway.
3720	Name *string `json:"name,omitempty"`
3721	// Etag - A unique read-only string that changes whenever the resource is updated.
3722	Etag *string `json:"etag,omitempty"`
3723	// Type - Type of the resource.
3724	Type *string `json:"type,omitempty"`
3725	// ID - Resource ID.
3726	ID *string `json:"id,omitempty"`
3727}
3728
3729// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
3730func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
3731	objectMap := make(map[string]interface{})
3732	if agp.ApplicationGatewayProbePropertiesFormat != nil {
3733		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
3734	}
3735	if agp.Name != nil {
3736		objectMap["name"] = agp.Name
3737	}
3738	if agp.Etag != nil {
3739		objectMap["etag"] = agp.Etag
3740	}
3741	if agp.Type != nil {
3742		objectMap["type"] = agp.Type
3743	}
3744	if agp.ID != nil {
3745		objectMap["id"] = agp.ID
3746	}
3747	return json.Marshal(objectMap)
3748}
3749
3750// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
3751func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
3752	var m map[string]*json.RawMessage
3753	err := json.Unmarshal(body, &m)
3754	if err != nil {
3755		return err
3756	}
3757	for k, v := range m {
3758		switch k {
3759		case "properties":
3760			if v != nil {
3761				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
3762				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
3763				if err != nil {
3764					return err
3765				}
3766				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
3767			}
3768		case "name":
3769			if v != nil {
3770				var name string
3771				err = json.Unmarshal(*v, &name)
3772				if err != nil {
3773					return err
3774				}
3775				agp.Name = &name
3776			}
3777		case "etag":
3778			if v != nil {
3779				var etag string
3780				err = json.Unmarshal(*v, &etag)
3781				if err != nil {
3782					return err
3783				}
3784				agp.Etag = &etag
3785			}
3786		case "type":
3787			if v != nil {
3788				var typeVar string
3789				err = json.Unmarshal(*v, &typeVar)
3790				if err != nil {
3791					return err
3792				}
3793				agp.Type = &typeVar
3794			}
3795		case "id":
3796			if v != nil {
3797				var ID string
3798				err = json.Unmarshal(*v, &ID)
3799				if err != nil {
3800					return err
3801				}
3802				agp.ID = &ID
3803			}
3804		}
3805	}
3806
3807	return nil
3808}
3809
3810// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match.
3811type ApplicationGatewayProbeHealthResponseMatch struct {
3812	// Body - Body that must be contained in the health response. Default value is empty.
3813	Body *string `json:"body,omitempty"`
3814	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
3815	StatusCodes *[]string `json:"statusCodes,omitempty"`
3816}
3817
3818// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
3819type ApplicationGatewayProbePropertiesFormat struct {
3820	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3821	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3822	// Host - Host name to send the probe to.
3823	Host *string `json:"host,omitempty"`
3824	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
3825	Path *string `json:"path,omitempty"`
3826	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
3827	Interval *int32 `json:"interval,omitempty"`
3828	// Timeout - The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout period. Acceptable values are from 1 second to 86400 seconds.
3829	Timeout *int32 `json:"timeout,omitempty"`
3830	// UnhealthyThreshold - The probe retry count. Backend server is marked down after consecutive probe failure count reaches UnhealthyThreshold. Acceptable values are from 1 second to 20.
3831	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
3832	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3833	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3834	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
3835	MinServers *int32 `json:"minServers,omitempty"`
3836	// Match - Criterion for classifying a healthy probe response.
3837	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3838	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3839	ProvisioningState *string `json:"provisioningState,omitempty"`
3840	// 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.
3841	Port *int32 `json:"port,omitempty"`
3842}
3843
3844// ApplicationGatewayPropertiesFormat properties of the application gateway.
3845type ApplicationGatewayPropertiesFormat struct {
3846	// Sku - SKU of the application gateway resource.
3847	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
3848	// SslPolicy - SSL policy of the application gateway resource.
3849	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
3850	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
3851	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
3852	// 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).
3853	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
3854	// 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).
3855	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
3856	// 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).
3857	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
3858	// 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).
3859	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
3860	// 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).
3861	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
3862	// 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).
3863	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
3864	// Probes - Probes of the application gateway resource.
3865	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
3866	// 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).
3867	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
3868	// 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).
3869	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
3870	// 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).
3871	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
3872	// 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).
3873	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
3874	// RequestRoutingRules - Request routing rules of the application gateway resource.
3875	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
3876	// RewriteRuleSets - Rewrite rules for the application gateway resource.
3877	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
3878	// 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).
3879	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
3880	// WebApplicationFirewallConfiguration - Web application firewall configuration.
3881	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
3882	// FirewallPolicy - Reference of the FirewallPolicy resource.
3883	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
3884	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
3885	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
3886	// EnableFips - Whether FIPS is enabled on the application gateway resource.
3887	EnableFips *bool `json:"enableFips,omitempty"`
3888	// AutoscaleConfiguration - Autoscale Configuration.
3889	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
3890	// ResourceGUID - Resource GUID property of the application gateway resource.
3891	ResourceGUID *string `json:"resourceGuid,omitempty"`
3892	// ProvisioningState - Provisioning state of the application gateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3893	ProvisioningState *string `json:"provisioningState,omitempty"`
3894	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
3895	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3896}
3897
3898// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
3899type ApplicationGatewayRedirectConfiguration struct {
3900	// ApplicationGatewayRedirectConfigurationPropertiesFormat - Properties of the application gateway redirect configuration.
3901	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
3902	// Name - Name of the redirect configuration that is unique within an Application Gateway.
3903	Name *string `json:"name,omitempty"`
3904	// Etag - A unique read-only string that changes whenever the resource is updated.
3905	Etag *string `json:"etag,omitempty"`
3906	// Type - Type of the resource.
3907	Type *string `json:"type,omitempty"`
3908	// ID - Resource ID.
3909	ID *string `json:"id,omitempty"`
3910}
3911
3912// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
3913func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
3914	objectMap := make(map[string]interface{})
3915	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
3916		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
3917	}
3918	if agrc.Name != nil {
3919		objectMap["name"] = agrc.Name
3920	}
3921	if agrc.Etag != nil {
3922		objectMap["etag"] = agrc.Etag
3923	}
3924	if agrc.Type != nil {
3925		objectMap["type"] = agrc.Type
3926	}
3927	if agrc.ID != nil {
3928		objectMap["id"] = agrc.ID
3929	}
3930	return json.Marshal(objectMap)
3931}
3932
3933// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
3934func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
3935	var m map[string]*json.RawMessage
3936	err := json.Unmarshal(body, &m)
3937	if err != nil {
3938		return err
3939	}
3940	for k, v := range m {
3941		switch k {
3942		case "properties":
3943			if v != nil {
3944				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
3945				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
3946				if err != nil {
3947					return err
3948				}
3949				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
3950			}
3951		case "name":
3952			if v != nil {
3953				var name string
3954				err = json.Unmarshal(*v, &name)
3955				if err != nil {
3956					return err
3957				}
3958				agrc.Name = &name
3959			}
3960		case "etag":
3961			if v != nil {
3962				var etag string
3963				err = json.Unmarshal(*v, &etag)
3964				if err != nil {
3965					return err
3966				}
3967				agrc.Etag = &etag
3968			}
3969		case "type":
3970			if v != nil {
3971				var typeVar string
3972				err = json.Unmarshal(*v, &typeVar)
3973				if err != nil {
3974					return err
3975				}
3976				agrc.Type = &typeVar
3977			}
3978		case "id":
3979			if v != nil {
3980				var ID string
3981				err = json.Unmarshal(*v, &ID)
3982				if err != nil {
3983					return err
3984				}
3985				agrc.ID = &ID
3986			}
3987		}
3988	}
3989
3990	return nil
3991}
3992
3993// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
3994// application gateway.
3995type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
3996	// RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
3997	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
3998	// TargetListener - Reference to a listener to redirect the request to.
3999	TargetListener *SubResource `json:"targetListener,omitempty"`
4000	// TargetURL - Url to redirect the request to.
4001	TargetURL *string `json:"targetUrl,omitempty"`
4002	// IncludePath - Include path in the redirected url.
4003	IncludePath *bool `json:"includePath,omitempty"`
4004	// IncludeQueryString - Include query string in the redirected url.
4005	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
4006	// RequestRoutingRules - Request routing specifying redirect configuration.
4007	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
4008	// URLPathMaps - Url path maps specifying default redirect configuration.
4009	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
4010	// PathRules - Path rules specifying redirect configuration.
4011	PathRules *[]SubResource `json:"pathRules,omitempty"`
4012}
4013
4014// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
4015type ApplicationGatewayRequestRoutingRule struct {
4016	// ApplicationGatewayRequestRoutingRulePropertiesFormat - Properties of the application gateway request routing rule.
4017	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
4018	// Name - Name of the request routing rule that is unique within an Application Gateway.
4019	Name *string `json:"name,omitempty"`
4020	// Etag - A unique read-only string that changes whenever the resource is updated.
4021	Etag *string `json:"etag,omitempty"`
4022	// Type - Type of the resource.
4023	Type *string `json:"type,omitempty"`
4024	// ID - Resource ID.
4025	ID *string `json:"id,omitempty"`
4026}
4027
4028// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
4029func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
4030	objectMap := make(map[string]interface{})
4031	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
4032		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
4033	}
4034	if agrrr.Name != nil {
4035		objectMap["name"] = agrrr.Name
4036	}
4037	if agrrr.Etag != nil {
4038		objectMap["etag"] = agrrr.Etag
4039	}
4040	if agrrr.Type != nil {
4041		objectMap["type"] = agrrr.Type
4042	}
4043	if agrrr.ID != nil {
4044		objectMap["id"] = agrrr.ID
4045	}
4046	return json.Marshal(objectMap)
4047}
4048
4049// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
4050func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
4051	var m map[string]*json.RawMessage
4052	err := json.Unmarshal(body, &m)
4053	if err != nil {
4054		return err
4055	}
4056	for k, v := range m {
4057		switch k {
4058		case "properties":
4059			if v != nil {
4060				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
4061				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
4062				if err != nil {
4063					return err
4064				}
4065				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
4066			}
4067		case "name":
4068			if v != nil {
4069				var name string
4070				err = json.Unmarshal(*v, &name)
4071				if err != nil {
4072					return err
4073				}
4074				agrrr.Name = &name
4075			}
4076		case "etag":
4077			if v != nil {
4078				var etag string
4079				err = json.Unmarshal(*v, &etag)
4080				if err != nil {
4081					return err
4082				}
4083				agrrr.Etag = &etag
4084			}
4085		case "type":
4086			if v != nil {
4087				var typeVar string
4088				err = json.Unmarshal(*v, &typeVar)
4089				if err != nil {
4090					return err
4091				}
4092				agrrr.Type = &typeVar
4093			}
4094		case "id":
4095			if v != nil {
4096				var ID string
4097				err = json.Unmarshal(*v, &ID)
4098				if err != nil {
4099					return err
4100				}
4101				agrrr.ID = &ID
4102			}
4103		}
4104	}
4105
4106	return nil
4107}
4108
4109// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
4110// application gateway.
4111type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
4112	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
4113	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
4114	// BackendAddressPool - Backend address pool resource of the application gateway.
4115	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4116	// BackendHTTPSettings - Backend http settings resource of the application gateway.
4117	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4118	// HTTPListener - Http listener resource of the application gateway.
4119	HTTPListener *SubResource `json:"httpListener,omitempty"`
4120	// URLPathMap - URL path map resource of the application gateway.
4121	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
4122	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
4123	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
4124	// RedirectConfiguration - Redirect configuration resource of the application gateway.
4125	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
4126	// ProvisioningState - Provisioning state of the request routing rule resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4127	ProvisioningState *string `json:"provisioningState,omitempty"`
4128}
4129
4130// ApplicationGatewayRewriteRule rewrite rule of an application gateway.
4131type ApplicationGatewayRewriteRule struct {
4132	// Name - Name of the rewrite rule that is unique within an Application Gateway.
4133	Name *string `json:"name,omitempty"`
4134	// RuleSequence - Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a RewriteRuleSet.
4135	RuleSequence *int32 `json:"ruleSequence,omitempty"`
4136	// Conditions - Conditions based on which the action set execution will be evaluated.
4137	Conditions *[]ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`
4138	// ActionSet - Set of actions to be done as part of the rewrite Rule.
4139	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
4140}
4141
4142// ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
4143type ApplicationGatewayRewriteRuleActionSet struct {
4144	// RequestHeaderConfigurations - Request Header Actions in the Action Set.
4145	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
4146	// ResponseHeaderConfigurations - Response Header Actions in the Action Set.
4147	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
4148}
4149
4150// ApplicationGatewayRewriteRuleCondition set of conditions in the Rewrite Rule in Application Gateway.
4151type ApplicationGatewayRewriteRuleCondition struct {
4152	// Variable - The condition parameter of the RewriteRuleCondition.
4153	Variable *string `json:"variable,omitempty"`
4154	// Pattern - The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
4155	Pattern *string `json:"pattern,omitempty"`
4156	// IgnoreCase - Setting this paramter to truth value with force the pattern to do a case in-sensitive comparison.
4157	IgnoreCase *bool `json:"ignoreCase,omitempty"`
4158	// Negate - Setting this value as truth will force to check the negation of the condition given by the user.
4159	Negate *bool `json:"negate,omitempty"`
4160}
4161
4162// ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
4163type ApplicationGatewayRewriteRuleSet struct {
4164	// ApplicationGatewayRewriteRuleSetPropertiesFormat - Properties of the application gateway rewrite rule set.
4165	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
4166	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
4167	Name *string `json:"name,omitempty"`
4168	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4169	Etag *string `json:"etag,omitempty"`
4170	// ID - Resource ID.
4171	ID *string `json:"id,omitempty"`
4172}
4173
4174// MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
4175func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
4176	objectMap := make(map[string]interface{})
4177	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
4178		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
4179	}
4180	if agrrs.Name != nil {
4181		objectMap["name"] = agrrs.Name
4182	}
4183	if agrrs.ID != nil {
4184		objectMap["id"] = agrrs.ID
4185	}
4186	return json.Marshal(objectMap)
4187}
4188
4189// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
4190func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
4191	var m map[string]*json.RawMessage
4192	err := json.Unmarshal(body, &m)
4193	if err != nil {
4194		return err
4195	}
4196	for k, v := range m {
4197		switch k {
4198		case "properties":
4199			if v != nil {
4200				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
4201				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
4202				if err != nil {
4203					return err
4204				}
4205				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
4206			}
4207		case "name":
4208			if v != nil {
4209				var name string
4210				err = json.Unmarshal(*v, &name)
4211				if err != nil {
4212					return err
4213				}
4214				agrrs.Name = &name
4215			}
4216		case "etag":
4217			if v != nil {
4218				var etag string
4219				err = json.Unmarshal(*v, &etag)
4220				if err != nil {
4221					return err
4222				}
4223				agrrs.Etag = &etag
4224			}
4225		case "id":
4226			if v != nil {
4227				var ID string
4228				err = json.Unmarshal(*v, &ID)
4229				if err != nil {
4230					return err
4231				}
4232				agrrs.ID = &ID
4233			}
4234		}
4235	}
4236
4237	return nil
4238}
4239
4240// ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
4241// gateway.
4242type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
4243	// RewriteRules - Rewrite rules in the rewrite rule set.
4244	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
4245	// ProvisioningState - READ-ONLY; Provisioning state of the rewrite rule set resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4246	ProvisioningState *string `json:"provisioningState,omitempty"`
4247}
4248
4249// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
4250// long-running operation.
4251type ApplicationGatewaysBackendHealthFuture struct {
4252	azure.Future
4253}
4254
4255// Result returns the result of the asynchronous operation.
4256// If the operation has not completed it will return an error.
4257func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
4258	var done bool
4259	done, err = future.DoneWithContext(context.Background(), client)
4260	if err != nil {
4261		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
4262		return
4263	}
4264	if !done {
4265		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
4266		return
4267	}
4268	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4269	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
4270		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
4271		if err != nil {
4272			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
4273		}
4274	}
4275	return
4276}
4277
4278// ApplicationGatewaysBackendHealthOnDemandFuture an abstraction for monitoring and retrieving the results
4279// of a long-running operation.
4280type ApplicationGatewaysBackendHealthOnDemandFuture struct {
4281	azure.Future
4282}
4283
4284// Result returns the result of the asynchronous operation.
4285// If the operation has not completed it will return an error.
4286func (future *ApplicationGatewaysBackendHealthOnDemandFuture) Result(client ApplicationGatewaysClient) (agbhod ApplicationGatewayBackendHealthOnDemand, err error) {
4287	var done bool
4288	done, err = future.DoneWithContext(context.Background(), client)
4289	if err != nil {
4290		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", future.Response(), "Polling failure")
4291		return
4292	}
4293	if !done {
4294		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthOnDemandFuture")
4295		return
4296	}
4297	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4298	if agbhod.Response.Response, err = future.GetResult(sender); err == nil && agbhod.Response.Response.StatusCode != http.StatusNoContent {
4299		agbhod, err = client.BackendHealthOnDemandResponder(agbhod.Response.Response)
4300		if err != nil {
4301			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", agbhod.Response.Response, "Failure responding to request")
4302		}
4303	}
4304	return
4305}
4306
4307// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
4308// long-running operation.
4309type ApplicationGatewaysCreateOrUpdateFuture struct {
4310	azure.Future
4311}
4312
4313// Result returns the result of the asynchronous operation.
4314// If the operation has not completed it will return an error.
4315func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4316	var done bool
4317	done, err = future.DoneWithContext(context.Background(), client)
4318	if err != nil {
4319		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4320		return
4321	}
4322	if !done {
4323		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
4324		return
4325	}
4326	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4327	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4328		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
4329		if err != nil {
4330			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
4331		}
4332	}
4333	return
4334}
4335
4336// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
4337// long-running operation.
4338type ApplicationGatewaysDeleteFuture struct {
4339	azure.Future
4340}
4341
4342// Result returns the result of the asynchronous operation.
4343// If the operation has not completed it will return an error.
4344func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4345	var done bool
4346	done, err = future.DoneWithContext(context.Background(), client)
4347	if err != nil {
4348		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
4349		return
4350	}
4351	if !done {
4352		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
4353		return
4354	}
4355	ar.Response = future.Response()
4356	return
4357}
4358
4359// ApplicationGatewaySku SKU of an application gateway.
4360type ApplicationGatewaySku struct {
4361	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
4362	Name ApplicationGatewaySkuName `json:"name,omitempty"`
4363	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
4364	Tier ApplicationGatewayTier `json:"tier,omitempty"`
4365	// Capacity - Capacity (instance count) of an application gateway.
4366	Capacity *int32 `json:"capacity,omitempty"`
4367}
4368
4369// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
4370type ApplicationGatewaySslCertificate struct {
4371	// ApplicationGatewaySslCertificatePropertiesFormat - Properties of the application gateway SSL certificate.
4372	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
4373	// Name - Name of the SSL certificate that is unique within an Application Gateway.
4374	Name *string `json:"name,omitempty"`
4375	// Etag - A unique read-only string that changes whenever the resource is updated.
4376	Etag *string `json:"etag,omitempty"`
4377	// Type - Type of the resource.
4378	Type *string `json:"type,omitempty"`
4379	// ID - Resource ID.
4380	ID *string `json:"id,omitempty"`
4381}
4382
4383// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
4384func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
4385	objectMap := make(map[string]interface{})
4386	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
4387		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
4388	}
4389	if agsc.Name != nil {
4390		objectMap["name"] = agsc.Name
4391	}
4392	if agsc.Etag != nil {
4393		objectMap["etag"] = agsc.Etag
4394	}
4395	if agsc.Type != nil {
4396		objectMap["type"] = agsc.Type
4397	}
4398	if agsc.ID != nil {
4399		objectMap["id"] = agsc.ID
4400	}
4401	return json.Marshal(objectMap)
4402}
4403
4404// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
4405func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
4406	var m map[string]*json.RawMessage
4407	err := json.Unmarshal(body, &m)
4408	if err != nil {
4409		return err
4410	}
4411	for k, v := range m {
4412		switch k {
4413		case "properties":
4414			if v != nil {
4415				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
4416				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
4417				if err != nil {
4418					return err
4419				}
4420				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
4421			}
4422		case "name":
4423			if v != nil {
4424				var name string
4425				err = json.Unmarshal(*v, &name)
4426				if err != nil {
4427					return err
4428				}
4429				agsc.Name = &name
4430			}
4431		case "etag":
4432			if v != nil {
4433				var etag string
4434				err = json.Unmarshal(*v, &etag)
4435				if err != nil {
4436					return err
4437				}
4438				agsc.Etag = &etag
4439			}
4440		case "type":
4441			if v != nil {
4442				var typeVar string
4443				err = json.Unmarshal(*v, &typeVar)
4444				if err != nil {
4445					return err
4446				}
4447				agsc.Type = &typeVar
4448			}
4449		case "id":
4450			if v != nil {
4451				var ID string
4452				err = json.Unmarshal(*v, &ID)
4453				if err != nil {
4454					return err
4455				}
4456				agsc.ID = &ID
4457			}
4458		}
4459	}
4460
4461	return nil
4462}
4463
4464// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
4465// gateway.
4466type ApplicationGatewaySslCertificatePropertiesFormat struct {
4467	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
4468	Data *string `json:"data,omitempty"`
4469	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
4470	Password *string `json:"password,omitempty"`
4471	// PublicCertData - Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
4472	PublicCertData *string `json:"publicCertData,omitempty"`
4473	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4474	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4475	// ProvisioningState - Provisioning state of the SSL certificate resource Possible values are: 'Updating', 'Deleting', and 'Failed'.
4476	ProvisioningState *string `json:"provisioningState,omitempty"`
4477}
4478
4479// ApplicationGatewaySslPolicy application Gateway Ssl policy.
4480type ApplicationGatewaySslPolicy struct {
4481	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
4482	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
4483	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
4484	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
4485	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
4486	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
4487	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
4488	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4489	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4490	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4491}
4492
4493// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy.
4494type ApplicationGatewaySslPredefinedPolicy struct {
4495	autorest.Response `json:"-"`
4496	// Name - Name of the Ssl predefined policy.
4497	Name *string `json:"name,omitempty"`
4498	// ApplicationGatewaySslPredefinedPolicyPropertiesFormat - Properties of the application gateway SSL predefined policy.
4499	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
4500	// ID - Resource ID.
4501	ID *string `json:"id,omitempty"`
4502}
4503
4504// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
4505func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
4506	objectMap := make(map[string]interface{})
4507	if agspp.Name != nil {
4508		objectMap["name"] = agspp.Name
4509	}
4510	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
4511		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4512	}
4513	if agspp.ID != nil {
4514		objectMap["id"] = agspp.ID
4515	}
4516	return json.Marshal(objectMap)
4517}
4518
4519// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
4520func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
4521	var m map[string]*json.RawMessage
4522	err := json.Unmarshal(body, &m)
4523	if err != nil {
4524		return err
4525	}
4526	for k, v := range m {
4527		switch k {
4528		case "name":
4529			if v != nil {
4530				var name string
4531				err = json.Unmarshal(*v, &name)
4532				if err != nil {
4533					return err
4534				}
4535				agspp.Name = &name
4536			}
4537		case "properties":
4538			if v != nil {
4539				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4540				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
4541				if err != nil {
4542					return err
4543				}
4544				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
4545			}
4546		case "id":
4547			if v != nil {
4548				var ID string
4549				err = json.Unmarshal(*v, &ID)
4550				if err != nil {
4551					return err
4552				}
4553				agspp.ID = &ID
4554			}
4555		}
4556	}
4557
4558	return nil
4559}
4560
4561// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
4562// ApplicationGatewaySslPredefinedPolicy.
4563type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
4564	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
4565	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4566	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4567	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4568}
4569
4570// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
4571// long-running operation.
4572type ApplicationGatewaysStartFuture struct {
4573	azure.Future
4574}
4575
4576// Result returns the result of the asynchronous operation.
4577// If the operation has not completed it will return an error.
4578func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4579	var done bool
4580	done, err = future.DoneWithContext(context.Background(), client)
4581	if err != nil {
4582		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
4583		return
4584	}
4585	if !done {
4586		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
4587		return
4588	}
4589	ar.Response = future.Response()
4590	return
4591}
4592
4593// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
4594// operation.
4595type ApplicationGatewaysStopFuture struct {
4596	azure.Future
4597}
4598
4599// Result returns the result of the asynchronous operation.
4600// If the operation has not completed it will return an error.
4601func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4602	var done bool
4603	done, err = future.DoneWithContext(context.Background(), client)
4604	if err != nil {
4605		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
4606		return
4607	}
4608	if !done {
4609		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
4610		return
4611	}
4612	ar.Response = future.Response()
4613	return
4614}
4615
4616// ApplicationGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
4617// long-running operation.
4618type ApplicationGatewaysUpdateTagsFuture struct {
4619	azure.Future
4620}
4621
4622// Result returns the result of the asynchronous operation.
4623// If the operation has not completed it will return an error.
4624func (future *ApplicationGatewaysUpdateTagsFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4625	var done bool
4626	done, err = future.DoneWithContext(context.Background(), client)
4627	if err != nil {
4628		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
4629		return
4630	}
4631	if !done {
4632		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysUpdateTagsFuture")
4633		return
4634	}
4635	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4636	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4637		ag, err = client.UpdateTagsResponder(ag.Response.Response)
4638		if err != nil {
4639			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", ag.Response.Response, "Failure responding to request")
4640		}
4641	}
4642	return
4643}
4644
4645// ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
4646type ApplicationGatewayTrustedRootCertificate struct {
4647	// ApplicationGatewayTrustedRootCertificatePropertiesFormat - Properties of the application gateway trusted root certificate.
4648	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
4649	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
4650	Name *string `json:"name,omitempty"`
4651	// Etag - A unique read-only string that changes whenever the resource is updated.
4652	Etag *string `json:"etag,omitempty"`
4653	// Type - Type of the resource.
4654	Type *string `json:"type,omitempty"`
4655	// ID - Resource ID.
4656	ID *string `json:"id,omitempty"`
4657}
4658
4659// MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
4660func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
4661	objectMap := make(map[string]interface{})
4662	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
4663		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
4664	}
4665	if agtrc.Name != nil {
4666		objectMap["name"] = agtrc.Name
4667	}
4668	if agtrc.Etag != nil {
4669		objectMap["etag"] = agtrc.Etag
4670	}
4671	if agtrc.Type != nil {
4672		objectMap["type"] = agtrc.Type
4673	}
4674	if agtrc.ID != nil {
4675		objectMap["id"] = agtrc.ID
4676	}
4677	return json.Marshal(objectMap)
4678}
4679
4680// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
4681func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
4682	var m map[string]*json.RawMessage
4683	err := json.Unmarshal(body, &m)
4684	if err != nil {
4685		return err
4686	}
4687	for k, v := range m {
4688		switch k {
4689		case "properties":
4690			if v != nil {
4691				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
4692				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
4693				if err != nil {
4694					return err
4695				}
4696				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
4697			}
4698		case "name":
4699			if v != nil {
4700				var name string
4701				err = json.Unmarshal(*v, &name)
4702				if err != nil {
4703					return err
4704				}
4705				agtrc.Name = &name
4706			}
4707		case "etag":
4708			if v != nil {
4709				var etag string
4710				err = json.Unmarshal(*v, &etag)
4711				if err != nil {
4712					return err
4713				}
4714				agtrc.Etag = &etag
4715			}
4716		case "type":
4717			if v != nil {
4718				var typeVar string
4719				err = json.Unmarshal(*v, &typeVar)
4720				if err != nil {
4721					return err
4722				}
4723				agtrc.Type = &typeVar
4724			}
4725		case "id":
4726			if v != nil {
4727				var ID string
4728				err = json.Unmarshal(*v, &ID)
4729				if err != nil {
4730					return err
4731				}
4732				agtrc.ID = &ID
4733			}
4734		}
4735	}
4736
4737	return nil
4738}
4739
4740// ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
4741// application gateway.
4742type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
4743	// Data - Certificate public data.
4744	Data *string `json:"data,omitempty"`
4745	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4746	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4747	// ProvisioningState - Provisioning state of the trusted root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4748	ProvisioningState *string `json:"provisioningState,omitempty"`
4749}
4750
4751// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
4752// PathBasedRouting.
4753type ApplicationGatewayURLPathMap struct {
4754	// ApplicationGatewayURLPathMapPropertiesFormat - Properties of the application gateway URL path map.
4755	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
4756	// Name - Name of the URL path map that is unique within an Application Gateway.
4757	Name *string `json:"name,omitempty"`
4758	// Etag - A unique read-only string that changes whenever the resource is updated.
4759	Etag *string `json:"etag,omitempty"`
4760	// Type - Type of the resource.
4761	Type *string `json:"type,omitempty"`
4762	// ID - Resource ID.
4763	ID *string `json:"id,omitempty"`
4764}
4765
4766// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
4767func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
4768	objectMap := make(map[string]interface{})
4769	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
4770		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
4771	}
4772	if agupm.Name != nil {
4773		objectMap["name"] = agupm.Name
4774	}
4775	if agupm.Etag != nil {
4776		objectMap["etag"] = agupm.Etag
4777	}
4778	if agupm.Type != nil {
4779		objectMap["type"] = agupm.Type
4780	}
4781	if agupm.ID != nil {
4782		objectMap["id"] = agupm.ID
4783	}
4784	return json.Marshal(objectMap)
4785}
4786
4787// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
4788func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
4789	var m map[string]*json.RawMessage
4790	err := json.Unmarshal(body, &m)
4791	if err != nil {
4792		return err
4793	}
4794	for k, v := range m {
4795		switch k {
4796		case "properties":
4797			if v != nil {
4798				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
4799				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
4800				if err != nil {
4801					return err
4802				}
4803				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
4804			}
4805		case "name":
4806			if v != nil {
4807				var name string
4808				err = json.Unmarshal(*v, &name)
4809				if err != nil {
4810					return err
4811				}
4812				agupm.Name = &name
4813			}
4814		case "etag":
4815			if v != nil {
4816				var etag string
4817				err = json.Unmarshal(*v, &etag)
4818				if err != nil {
4819					return err
4820				}
4821				agupm.Etag = &etag
4822			}
4823		case "type":
4824			if v != nil {
4825				var typeVar string
4826				err = json.Unmarshal(*v, &typeVar)
4827				if err != nil {
4828					return err
4829				}
4830				agupm.Type = &typeVar
4831			}
4832		case "id":
4833			if v != nil {
4834				var ID string
4835				err = json.Unmarshal(*v, &ID)
4836				if err != nil {
4837					return err
4838				}
4839				agupm.ID = &ID
4840			}
4841		}
4842	}
4843
4844	return nil
4845}
4846
4847// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
4848type ApplicationGatewayURLPathMapPropertiesFormat struct {
4849	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
4850	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
4851	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
4852	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
4853	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
4854	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
4855	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
4856	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
4857	// PathRules - Path rule of URL path map resource.
4858	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
4859	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4860	ProvisioningState *string `json:"provisioningState,omitempty"`
4861}
4862
4863// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
4864// configuration.
4865type ApplicationGatewayWebApplicationFirewallConfiguration struct {
4866	// Enabled - Whether the web application firewall is enabled or not.
4867	Enabled *bool `json:"enabled,omitempty"`
4868	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
4869	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
4870	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
4871	RuleSetType *string `json:"ruleSetType,omitempty"`
4872	// RuleSetVersion - The version of the rule set type.
4873	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
4874	// DisabledRuleGroups - The disabled rule groups.
4875	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
4876	// RequestBodyCheck - Whether allow WAF to check request Body.
4877	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
4878	// MaxRequestBodySize - Maximum request body size for WAF.
4879	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
4880	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
4881	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
4882	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
4883	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
4884	// Exclusions - The exclusion list.
4885	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
4886}
4887
4888// ApplicationSecurityGroup an application security group in a resource group.
4889type ApplicationSecurityGroup struct {
4890	autorest.Response `json:"-"`
4891	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
4892	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
4893	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4894	Etag *string `json:"etag,omitempty"`
4895	// ID - Resource ID.
4896	ID *string `json:"id,omitempty"`
4897	// Name - READ-ONLY; Resource name.
4898	Name *string `json:"name,omitempty"`
4899	// Type - READ-ONLY; Resource type.
4900	Type *string `json:"type,omitempty"`
4901	// Location - Resource location.
4902	Location *string `json:"location,omitempty"`
4903	// Tags - Resource tags.
4904	Tags map[string]*string `json:"tags"`
4905}
4906
4907// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
4908func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
4909	objectMap := make(map[string]interface{})
4910	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
4911		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
4912	}
4913	if asg.ID != nil {
4914		objectMap["id"] = asg.ID
4915	}
4916	if asg.Location != nil {
4917		objectMap["location"] = asg.Location
4918	}
4919	if asg.Tags != nil {
4920		objectMap["tags"] = asg.Tags
4921	}
4922	return json.Marshal(objectMap)
4923}
4924
4925// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
4926func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
4927	var m map[string]*json.RawMessage
4928	err := json.Unmarshal(body, &m)
4929	if err != nil {
4930		return err
4931	}
4932	for k, v := range m {
4933		switch k {
4934		case "properties":
4935			if v != nil {
4936				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
4937				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
4938				if err != nil {
4939					return err
4940				}
4941				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
4942			}
4943		case "etag":
4944			if v != nil {
4945				var etag string
4946				err = json.Unmarshal(*v, &etag)
4947				if err != nil {
4948					return err
4949				}
4950				asg.Etag = &etag
4951			}
4952		case "id":
4953			if v != nil {
4954				var ID string
4955				err = json.Unmarshal(*v, &ID)
4956				if err != nil {
4957					return err
4958				}
4959				asg.ID = &ID
4960			}
4961		case "name":
4962			if v != nil {
4963				var name string
4964				err = json.Unmarshal(*v, &name)
4965				if err != nil {
4966					return err
4967				}
4968				asg.Name = &name
4969			}
4970		case "type":
4971			if v != nil {
4972				var typeVar string
4973				err = json.Unmarshal(*v, &typeVar)
4974				if err != nil {
4975					return err
4976				}
4977				asg.Type = &typeVar
4978			}
4979		case "location":
4980			if v != nil {
4981				var location string
4982				err = json.Unmarshal(*v, &location)
4983				if err != nil {
4984					return err
4985				}
4986				asg.Location = &location
4987			}
4988		case "tags":
4989			if v != nil {
4990				var tags map[string]*string
4991				err = json.Unmarshal(*v, &tags)
4992				if err != nil {
4993					return err
4994				}
4995				asg.Tags = tags
4996			}
4997		}
4998	}
4999
5000	return nil
5001}
5002
5003// ApplicationSecurityGroupListResult a list of application security groups.
5004type ApplicationSecurityGroupListResult struct {
5005	autorest.Response `json:"-"`
5006	// Value - A list of application security groups.
5007	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
5008	// NextLink - READ-ONLY; The URL to get the next set of results.
5009	NextLink *string `json:"nextLink,omitempty"`
5010}
5011
5012// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
5013// ApplicationSecurityGroup values.
5014type ApplicationSecurityGroupListResultIterator struct {
5015	i    int
5016	page ApplicationSecurityGroupListResultPage
5017}
5018
5019// NextWithContext advances to the next value.  If there was an error making
5020// the request the iterator does not advance and the error is returned.
5021func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
5022	if tracing.IsEnabled() {
5023		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
5024		defer func() {
5025			sc := -1
5026			if iter.Response().Response.Response != nil {
5027				sc = iter.Response().Response.Response.StatusCode
5028			}
5029			tracing.EndSpan(ctx, sc, err)
5030		}()
5031	}
5032	iter.i++
5033	if iter.i < len(iter.page.Values()) {
5034		return nil
5035	}
5036	err = iter.page.NextWithContext(ctx)
5037	if err != nil {
5038		iter.i--
5039		return err
5040	}
5041	iter.i = 0
5042	return nil
5043}
5044
5045// Next advances to the next value.  If there was an error making
5046// the request the iterator does not advance and the error is returned.
5047// Deprecated: Use NextWithContext() instead.
5048func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
5049	return iter.NextWithContext(context.Background())
5050}
5051
5052// NotDone returns true if the enumeration should be started or is not yet complete.
5053func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
5054	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5055}
5056
5057// Response returns the raw server response from the last page request.
5058func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
5059	return iter.page.Response()
5060}
5061
5062// Value returns the current value or a zero-initialized value if the
5063// iterator has advanced beyond the end of the collection.
5064func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
5065	if !iter.page.NotDone() {
5066		return ApplicationSecurityGroup{}
5067	}
5068	return iter.page.Values()[iter.i]
5069}
5070
5071// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
5072func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
5073	return ApplicationSecurityGroupListResultIterator{page: page}
5074}
5075
5076// IsEmpty returns true if the ListResult contains no values.
5077func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
5078	return asglr.Value == nil || len(*asglr.Value) == 0
5079}
5080
5081// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
5082// It returns nil if no more results exist.
5083func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
5084	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
5085		return nil, nil
5086	}
5087	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5088		autorest.AsJSON(),
5089		autorest.AsGet(),
5090		autorest.WithBaseURL(to.String(asglr.NextLink)))
5091}
5092
5093// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
5094type ApplicationSecurityGroupListResultPage struct {
5095	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
5096	asglr ApplicationSecurityGroupListResult
5097}
5098
5099// NextWithContext advances to the next page of values.  If there was an error making
5100// the request the page does not advance and the error is returned.
5101func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
5102	if tracing.IsEnabled() {
5103		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
5104		defer func() {
5105			sc := -1
5106			if page.Response().Response.Response != nil {
5107				sc = page.Response().Response.Response.StatusCode
5108			}
5109			tracing.EndSpan(ctx, sc, err)
5110		}()
5111	}
5112	next, err := page.fn(ctx, page.asglr)
5113	if err != nil {
5114		return err
5115	}
5116	page.asglr = next
5117	return nil
5118}
5119
5120// Next advances to the next page of values.  If there was an error making
5121// the request the page does not advance and the error is returned.
5122// Deprecated: Use NextWithContext() instead.
5123func (page *ApplicationSecurityGroupListResultPage) Next() error {
5124	return page.NextWithContext(context.Background())
5125}
5126
5127// NotDone returns true if the page enumeration should be started or is not yet complete.
5128func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
5129	return !page.asglr.IsEmpty()
5130}
5131
5132// Response returns the raw server response from the last page request.
5133func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
5134	return page.asglr
5135}
5136
5137// Values returns the slice of values for the current page or nil if there are no values.
5138func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
5139	if page.asglr.IsEmpty() {
5140		return nil
5141	}
5142	return *page.asglr.Value
5143}
5144
5145// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
5146func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
5147	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
5148}
5149
5150// ApplicationSecurityGroupPropertiesFormat application security group properties.
5151type ApplicationSecurityGroupPropertiesFormat struct {
5152	// 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.
5153	ResourceGUID *string `json:"resourceGuid,omitempty"`
5154	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
5155	ProvisioningState *string `json:"provisioningState,omitempty"`
5156}
5157
5158// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
5159// of a long-running operation.
5160type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
5161	azure.Future
5162}
5163
5164// Result returns the result of the asynchronous operation.
5165// If the operation has not completed it will return an error.
5166func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5167	var done bool
5168	done, err = future.DoneWithContext(context.Background(), client)
5169	if err != nil {
5170		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5171		return
5172	}
5173	if !done {
5174		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
5175		return
5176	}
5177	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5178	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5179		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
5180		if err != nil {
5181			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
5182		}
5183	}
5184	return
5185}
5186
5187// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
5188// long-running operation.
5189type ApplicationSecurityGroupsDeleteFuture struct {
5190	azure.Future
5191}
5192
5193// Result returns the result of the asynchronous operation.
5194// If the operation has not completed it will return an error.
5195func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
5196	var done bool
5197	done, err = future.DoneWithContext(context.Background(), client)
5198	if err != nil {
5199		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
5200		return
5201	}
5202	if !done {
5203		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
5204		return
5205	}
5206	ar.Response = future.Response()
5207	return
5208}
5209
5210// ApplicationSecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
5211// long-running operation.
5212type ApplicationSecurityGroupsUpdateTagsFuture struct {
5213	azure.Future
5214}
5215
5216// Result returns the result of the asynchronous operation.
5217// If the operation has not completed it will return an error.
5218func (future *ApplicationSecurityGroupsUpdateTagsFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5219	var done bool
5220	done, err = future.DoneWithContext(context.Background(), client)
5221	if err != nil {
5222		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
5223		return
5224	}
5225	if !done {
5226		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsUpdateTagsFuture")
5227		return
5228	}
5229	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5230	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5231		asg, err = client.UpdateTagsResponder(asg.Response.Response)
5232		if err != nil {
5233			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", asg.Response.Response, "Failure responding to request")
5234		}
5235	}
5236	return
5237}
5238
5239// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
5240// that belongs to an ExpressRouteCircuit.
5241type AuthorizationListResult struct {
5242	autorest.Response `json:"-"`
5243	// Value - The authorizations in an ExpressRoute Circuit.
5244	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
5245	// NextLink - The URL to get the next set of results.
5246	NextLink *string `json:"nextLink,omitempty"`
5247}
5248
5249// AuthorizationListResultIterator provides access to a complete listing of
5250// ExpressRouteCircuitAuthorization values.
5251type AuthorizationListResultIterator struct {
5252	i    int
5253	page AuthorizationListResultPage
5254}
5255
5256// NextWithContext advances to the next value.  If there was an error making
5257// the request the iterator does not advance and the error is returned.
5258func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
5259	if tracing.IsEnabled() {
5260		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
5261		defer func() {
5262			sc := -1
5263			if iter.Response().Response.Response != nil {
5264				sc = iter.Response().Response.Response.StatusCode
5265			}
5266			tracing.EndSpan(ctx, sc, err)
5267		}()
5268	}
5269	iter.i++
5270	if iter.i < len(iter.page.Values()) {
5271		return nil
5272	}
5273	err = iter.page.NextWithContext(ctx)
5274	if err != nil {
5275		iter.i--
5276		return err
5277	}
5278	iter.i = 0
5279	return nil
5280}
5281
5282// Next advances to the next value.  If there was an error making
5283// the request the iterator does not advance and the error is returned.
5284// Deprecated: Use NextWithContext() instead.
5285func (iter *AuthorizationListResultIterator) Next() error {
5286	return iter.NextWithContext(context.Background())
5287}
5288
5289// NotDone returns true if the enumeration should be started or is not yet complete.
5290func (iter AuthorizationListResultIterator) NotDone() bool {
5291	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5292}
5293
5294// Response returns the raw server response from the last page request.
5295func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
5296	return iter.page.Response()
5297}
5298
5299// Value returns the current value or a zero-initialized value if the
5300// iterator has advanced beyond the end of the collection.
5301func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
5302	if !iter.page.NotDone() {
5303		return ExpressRouteCircuitAuthorization{}
5304	}
5305	return iter.page.Values()[iter.i]
5306}
5307
5308// Creates a new instance of the AuthorizationListResultIterator type.
5309func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
5310	return AuthorizationListResultIterator{page: page}
5311}
5312
5313// IsEmpty returns true if the ListResult contains no values.
5314func (alr AuthorizationListResult) IsEmpty() bool {
5315	return alr.Value == nil || len(*alr.Value) == 0
5316}
5317
5318// authorizationListResultPreparer prepares a request to retrieve the next set of results.
5319// It returns nil if no more results exist.
5320func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
5321	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
5322		return nil, nil
5323	}
5324	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5325		autorest.AsJSON(),
5326		autorest.AsGet(),
5327		autorest.WithBaseURL(to.String(alr.NextLink)))
5328}
5329
5330// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
5331type AuthorizationListResultPage struct {
5332	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
5333	alr AuthorizationListResult
5334}
5335
5336// NextWithContext advances to the next page of values.  If there was an error making
5337// the request the page does not advance and the error is returned.
5338func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
5339	if tracing.IsEnabled() {
5340		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
5341		defer func() {
5342			sc := -1
5343			if page.Response().Response.Response != nil {
5344				sc = page.Response().Response.Response.StatusCode
5345			}
5346			tracing.EndSpan(ctx, sc, err)
5347		}()
5348	}
5349	next, err := page.fn(ctx, page.alr)
5350	if err != nil {
5351		return err
5352	}
5353	page.alr = next
5354	return nil
5355}
5356
5357// Next advances to the next page of values.  If there was an error making
5358// the request the page does not advance and the error is returned.
5359// Deprecated: Use NextWithContext() instead.
5360func (page *AuthorizationListResultPage) Next() error {
5361	return page.NextWithContext(context.Background())
5362}
5363
5364// NotDone returns true if the page enumeration should be started or is not yet complete.
5365func (page AuthorizationListResultPage) NotDone() bool {
5366	return !page.alr.IsEmpty()
5367}
5368
5369// Response returns the raw server response from the last page request.
5370func (page AuthorizationListResultPage) Response() AuthorizationListResult {
5371	return page.alr
5372}
5373
5374// Values returns the slice of values for the current page or nil if there are no values.
5375func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
5376	if page.alr.IsEmpty() {
5377		return nil
5378	}
5379	return *page.alr.Value
5380}
5381
5382// Creates a new instance of the AuthorizationListResultPage type.
5383func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
5384	return AuthorizationListResultPage{fn: getNextPage}
5385}
5386
5387// AuthorizationPropertiesFormat properties of ExpressRouteCircuitAuthorization.
5388type AuthorizationPropertiesFormat struct {
5389	// AuthorizationKey - The authorization key.
5390	AuthorizationKey *string `json:"authorizationKey,omitempty"`
5391	// AuthorizationUseStatus - The authorization use status. Possible values include: 'Available', 'InUse'
5392	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
5393	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
5394	ProvisioningState *string `json:"provisioningState,omitempty"`
5395}
5396
5397// AutoApprovedPrivateLinkService the information of an AutoApprovedPrivateLinkService.
5398type AutoApprovedPrivateLinkService struct {
5399	// PrivateLinkService - The id of the private link service resource.
5400	PrivateLinkService *string `json:"privateLinkService,omitempty"`
5401}
5402
5403// AutoApprovedPrivateLinkServicesResult an array of private link service id that can be linked to a
5404// private end point with auto approved.
5405type AutoApprovedPrivateLinkServicesResult struct {
5406	autorest.Response `json:"-"`
5407	// Value - An array of auto approved private link service.
5408	Value *[]AutoApprovedPrivateLinkService `json:"value,omitempty"`
5409	// NextLink - READ-ONLY; The URL to get the next set of results.
5410	NextLink *string `json:"nextLink,omitempty"`
5411}
5412
5413// AutoApprovedPrivateLinkServicesResultIterator provides access to a complete listing of
5414// AutoApprovedPrivateLinkService values.
5415type AutoApprovedPrivateLinkServicesResultIterator struct {
5416	i    int
5417	page AutoApprovedPrivateLinkServicesResultPage
5418}
5419
5420// NextWithContext advances to the next value.  If there was an error making
5421// the request the iterator does not advance and the error is returned.
5422func (iter *AutoApprovedPrivateLinkServicesResultIterator) NextWithContext(ctx context.Context) (err error) {
5423	if tracing.IsEnabled() {
5424		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultIterator.NextWithContext")
5425		defer func() {
5426			sc := -1
5427			if iter.Response().Response.Response != nil {
5428				sc = iter.Response().Response.Response.StatusCode
5429			}
5430			tracing.EndSpan(ctx, sc, err)
5431		}()
5432	}
5433	iter.i++
5434	if iter.i < len(iter.page.Values()) {
5435		return nil
5436	}
5437	err = iter.page.NextWithContext(ctx)
5438	if err != nil {
5439		iter.i--
5440		return err
5441	}
5442	iter.i = 0
5443	return nil
5444}
5445
5446// Next advances to the next value.  If there was an error making
5447// the request the iterator does not advance and the error is returned.
5448// Deprecated: Use NextWithContext() instead.
5449func (iter *AutoApprovedPrivateLinkServicesResultIterator) Next() error {
5450	return iter.NextWithContext(context.Background())
5451}
5452
5453// NotDone returns true if the enumeration should be started or is not yet complete.
5454func (iter AutoApprovedPrivateLinkServicesResultIterator) NotDone() bool {
5455	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5456}
5457
5458// Response returns the raw server response from the last page request.
5459func (iter AutoApprovedPrivateLinkServicesResultIterator) Response() AutoApprovedPrivateLinkServicesResult {
5460	return iter.page.Response()
5461}
5462
5463// Value returns the current value or a zero-initialized value if the
5464// iterator has advanced beyond the end of the collection.
5465func (iter AutoApprovedPrivateLinkServicesResultIterator) Value() AutoApprovedPrivateLinkService {
5466	if !iter.page.NotDone() {
5467		return AutoApprovedPrivateLinkService{}
5468	}
5469	return iter.page.Values()[iter.i]
5470}
5471
5472// Creates a new instance of the AutoApprovedPrivateLinkServicesResultIterator type.
5473func NewAutoApprovedPrivateLinkServicesResultIterator(page AutoApprovedPrivateLinkServicesResultPage) AutoApprovedPrivateLinkServicesResultIterator {
5474	return AutoApprovedPrivateLinkServicesResultIterator{page: page}
5475}
5476
5477// IsEmpty returns true if the ListResult contains no values.
5478func (aaplsr AutoApprovedPrivateLinkServicesResult) IsEmpty() bool {
5479	return aaplsr.Value == nil || len(*aaplsr.Value) == 0
5480}
5481
5482// autoApprovedPrivateLinkServicesResultPreparer prepares a request to retrieve the next set of results.
5483// It returns nil if no more results exist.
5484func (aaplsr AutoApprovedPrivateLinkServicesResult) autoApprovedPrivateLinkServicesResultPreparer(ctx context.Context) (*http.Request, error) {
5485	if aaplsr.NextLink == nil || len(to.String(aaplsr.NextLink)) < 1 {
5486		return nil, nil
5487	}
5488	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5489		autorest.AsJSON(),
5490		autorest.AsGet(),
5491		autorest.WithBaseURL(to.String(aaplsr.NextLink)))
5492}
5493
5494// AutoApprovedPrivateLinkServicesResultPage contains a page of AutoApprovedPrivateLinkService values.
5495type AutoApprovedPrivateLinkServicesResultPage struct {
5496	fn     func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)
5497	aaplsr AutoApprovedPrivateLinkServicesResult
5498}
5499
5500// NextWithContext advances to the next page of values.  If there was an error making
5501// the request the page does not advance and the error is returned.
5502func (page *AutoApprovedPrivateLinkServicesResultPage) NextWithContext(ctx context.Context) (err error) {
5503	if tracing.IsEnabled() {
5504		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultPage.NextWithContext")
5505		defer func() {
5506			sc := -1
5507			if page.Response().Response.Response != nil {
5508				sc = page.Response().Response.Response.StatusCode
5509			}
5510			tracing.EndSpan(ctx, sc, err)
5511		}()
5512	}
5513	next, err := page.fn(ctx, page.aaplsr)
5514	if err != nil {
5515		return err
5516	}
5517	page.aaplsr = next
5518	return nil
5519}
5520
5521// Next advances to the next page of values.  If there was an error making
5522// the request the page does not advance and the error is returned.
5523// Deprecated: Use NextWithContext() instead.
5524func (page *AutoApprovedPrivateLinkServicesResultPage) Next() error {
5525	return page.NextWithContext(context.Background())
5526}
5527
5528// NotDone returns true if the page enumeration should be started or is not yet complete.
5529func (page AutoApprovedPrivateLinkServicesResultPage) NotDone() bool {
5530	return !page.aaplsr.IsEmpty()
5531}
5532
5533// Response returns the raw server response from the last page request.
5534func (page AutoApprovedPrivateLinkServicesResultPage) Response() AutoApprovedPrivateLinkServicesResult {
5535	return page.aaplsr
5536}
5537
5538// Values returns the slice of values for the current page or nil if there are no values.
5539func (page AutoApprovedPrivateLinkServicesResultPage) Values() []AutoApprovedPrivateLinkService {
5540	if page.aaplsr.IsEmpty() {
5541		return nil
5542	}
5543	return *page.aaplsr.Value
5544}
5545
5546// Creates a new instance of the AutoApprovedPrivateLinkServicesResultPage type.
5547func NewAutoApprovedPrivateLinkServicesResultPage(getNextPage func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)) AutoApprovedPrivateLinkServicesResultPage {
5548	return AutoApprovedPrivateLinkServicesResultPage{fn: getNextPage}
5549}
5550
5551// Availability availability of the metric.
5552type Availability struct {
5553	// TimeGrain - The time grain of the availability.
5554	TimeGrain *string `json:"timeGrain,omitempty"`
5555	// Retention - The retention of the availability.
5556	Retention *string `json:"retention,omitempty"`
5557	// BlobDuration - Duration of the availability blob.
5558	BlobDuration *string `json:"blobDuration,omitempty"`
5559}
5560
5561// AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
5562// subnet.
5563type AvailableDelegation struct {
5564	// Name - The name of the AvailableDelegation resource.
5565	Name *string `json:"name,omitempty"`
5566	// ID - A unique identifier of the AvailableDelegation resource.
5567	ID *string `json:"id,omitempty"`
5568	// Type - Resource type.
5569	Type *string `json:"type,omitempty"`
5570	// ServiceName - The name of the service and resource.
5571	ServiceName *string `json:"serviceName,omitempty"`
5572	// Actions - Describes the actions permitted to the service upon delegation.
5573	Actions *[]string `json:"actions,omitempty"`
5574}
5575
5576// AvailableDelegationsResult an array of available delegations.
5577type AvailableDelegationsResult struct {
5578	autorest.Response `json:"-"`
5579	// Value - An array of available delegations.
5580	Value *[]AvailableDelegation `json:"value,omitempty"`
5581	// NextLink - READ-ONLY; The URL to get the next set of results.
5582	NextLink *string `json:"nextLink,omitempty"`
5583}
5584
5585// AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
5586type AvailableDelegationsResultIterator struct {
5587	i    int
5588	page AvailableDelegationsResultPage
5589}
5590
5591// NextWithContext advances to the next value.  If there was an error making
5592// the request the iterator does not advance and the error is returned.
5593func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
5594	if tracing.IsEnabled() {
5595		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
5596		defer func() {
5597			sc := -1
5598			if iter.Response().Response.Response != nil {
5599				sc = iter.Response().Response.Response.StatusCode
5600			}
5601			tracing.EndSpan(ctx, sc, err)
5602		}()
5603	}
5604	iter.i++
5605	if iter.i < len(iter.page.Values()) {
5606		return nil
5607	}
5608	err = iter.page.NextWithContext(ctx)
5609	if err != nil {
5610		iter.i--
5611		return err
5612	}
5613	iter.i = 0
5614	return nil
5615}
5616
5617// Next advances to the next value.  If there was an error making
5618// the request the iterator does not advance and the error is returned.
5619// Deprecated: Use NextWithContext() instead.
5620func (iter *AvailableDelegationsResultIterator) Next() error {
5621	return iter.NextWithContext(context.Background())
5622}
5623
5624// NotDone returns true if the enumeration should be started or is not yet complete.
5625func (iter AvailableDelegationsResultIterator) NotDone() bool {
5626	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5627}
5628
5629// Response returns the raw server response from the last page request.
5630func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
5631	return iter.page.Response()
5632}
5633
5634// Value returns the current value or a zero-initialized value if the
5635// iterator has advanced beyond the end of the collection.
5636func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
5637	if !iter.page.NotDone() {
5638		return AvailableDelegation{}
5639	}
5640	return iter.page.Values()[iter.i]
5641}
5642
5643// Creates a new instance of the AvailableDelegationsResultIterator type.
5644func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
5645	return AvailableDelegationsResultIterator{page: page}
5646}
5647
5648// IsEmpty returns true if the ListResult contains no values.
5649func (adr AvailableDelegationsResult) IsEmpty() bool {
5650	return adr.Value == nil || len(*adr.Value) == 0
5651}
5652
5653// availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
5654// It returns nil if no more results exist.
5655func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
5656	if adr.NextLink == nil || len(to.String(adr.NextLink)) < 1 {
5657		return nil, nil
5658	}
5659	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5660		autorest.AsJSON(),
5661		autorest.AsGet(),
5662		autorest.WithBaseURL(to.String(adr.NextLink)))
5663}
5664
5665// AvailableDelegationsResultPage contains a page of AvailableDelegation values.
5666type AvailableDelegationsResultPage struct {
5667	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
5668	adr AvailableDelegationsResult
5669}
5670
5671// NextWithContext advances to the next page of values.  If there was an error making
5672// the request the page does not advance and the error is returned.
5673func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
5674	if tracing.IsEnabled() {
5675		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
5676		defer func() {
5677			sc := -1
5678			if page.Response().Response.Response != nil {
5679				sc = page.Response().Response.Response.StatusCode
5680			}
5681			tracing.EndSpan(ctx, sc, err)
5682		}()
5683	}
5684	next, err := page.fn(ctx, page.adr)
5685	if err != nil {
5686		return err
5687	}
5688	page.adr = next
5689	return nil
5690}
5691
5692// Next advances to the next page of values.  If there was an error making
5693// the request the page does not advance and the error is returned.
5694// Deprecated: Use NextWithContext() instead.
5695func (page *AvailableDelegationsResultPage) Next() error {
5696	return page.NextWithContext(context.Background())
5697}
5698
5699// NotDone returns true if the page enumeration should be started or is not yet complete.
5700func (page AvailableDelegationsResultPage) NotDone() bool {
5701	return !page.adr.IsEmpty()
5702}
5703
5704// Response returns the raw server response from the last page request.
5705func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
5706	return page.adr
5707}
5708
5709// Values returns the slice of values for the current page or nil if there are no values.
5710func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
5711	if page.adr.IsEmpty() {
5712		return nil
5713	}
5714	return *page.adr.Value
5715}
5716
5717// Creates a new instance of the AvailableDelegationsResultPage type.
5718func NewAvailableDelegationsResultPage(getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
5719	return AvailableDelegationsResultPage{fn: getNextPage}
5720}
5721
5722// AvailablePrivateEndpointType the information of an AvailablePrivateEndpointType.
5723type AvailablePrivateEndpointType struct {
5724	// Name - The name of the service and resource.
5725	Name *string `json:"name,omitempty"`
5726	// ID - A unique identifier of the AvailablePrivateEndpoint Type resource.
5727	ID *string `json:"id,omitempty"`
5728	// Type - Resource type.
5729	Type *string `json:"type,omitempty"`
5730	// ResourceName - The name of the service and resource.
5731	ResourceName *string `json:"resourceName,omitempty"`
5732}
5733
5734// AvailablePrivateEndpointTypesResult an array of available PrivateEndpoint types.
5735type AvailablePrivateEndpointTypesResult struct {
5736	autorest.Response `json:"-"`
5737	// Value - An array of available privateEndpoint type.
5738	Value *[]AvailablePrivateEndpointType `json:"value,omitempty"`
5739	// NextLink - READ-ONLY; The URL to get the next set of results.
5740	NextLink *string `json:"nextLink,omitempty"`
5741}
5742
5743// AvailablePrivateEndpointTypesResultIterator provides access to a complete listing of
5744// AvailablePrivateEndpointType values.
5745type AvailablePrivateEndpointTypesResultIterator struct {
5746	i    int
5747	page AvailablePrivateEndpointTypesResultPage
5748}
5749
5750// NextWithContext advances to the next value.  If there was an error making
5751// the request the iterator does not advance and the error is returned.
5752func (iter *AvailablePrivateEndpointTypesResultIterator) NextWithContext(ctx context.Context) (err error) {
5753	if tracing.IsEnabled() {
5754		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultIterator.NextWithContext")
5755		defer func() {
5756			sc := -1
5757			if iter.Response().Response.Response != nil {
5758				sc = iter.Response().Response.Response.StatusCode
5759			}
5760			tracing.EndSpan(ctx, sc, err)
5761		}()
5762	}
5763	iter.i++
5764	if iter.i < len(iter.page.Values()) {
5765		return nil
5766	}
5767	err = iter.page.NextWithContext(ctx)
5768	if err != nil {
5769		iter.i--
5770		return err
5771	}
5772	iter.i = 0
5773	return nil
5774}
5775
5776// Next advances to the next value.  If there was an error making
5777// the request the iterator does not advance and the error is returned.
5778// Deprecated: Use NextWithContext() instead.
5779func (iter *AvailablePrivateEndpointTypesResultIterator) Next() error {
5780	return iter.NextWithContext(context.Background())
5781}
5782
5783// NotDone returns true if the enumeration should be started or is not yet complete.
5784func (iter AvailablePrivateEndpointTypesResultIterator) NotDone() bool {
5785	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5786}
5787
5788// Response returns the raw server response from the last page request.
5789func (iter AvailablePrivateEndpointTypesResultIterator) Response() AvailablePrivateEndpointTypesResult {
5790	return iter.page.Response()
5791}
5792
5793// Value returns the current value or a zero-initialized value if the
5794// iterator has advanced beyond the end of the collection.
5795func (iter AvailablePrivateEndpointTypesResultIterator) Value() AvailablePrivateEndpointType {
5796	if !iter.page.NotDone() {
5797		return AvailablePrivateEndpointType{}
5798	}
5799	return iter.page.Values()[iter.i]
5800}
5801
5802// Creates a new instance of the AvailablePrivateEndpointTypesResultIterator type.
5803func NewAvailablePrivateEndpointTypesResultIterator(page AvailablePrivateEndpointTypesResultPage) AvailablePrivateEndpointTypesResultIterator {
5804	return AvailablePrivateEndpointTypesResultIterator{page: page}
5805}
5806
5807// IsEmpty returns true if the ListResult contains no values.
5808func (apetr AvailablePrivateEndpointTypesResult) IsEmpty() bool {
5809	return apetr.Value == nil || len(*apetr.Value) == 0
5810}
5811
5812// availablePrivateEndpointTypesResultPreparer prepares a request to retrieve the next set of results.
5813// It returns nil if no more results exist.
5814func (apetr AvailablePrivateEndpointTypesResult) availablePrivateEndpointTypesResultPreparer(ctx context.Context) (*http.Request, error) {
5815	if apetr.NextLink == nil || len(to.String(apetr.NextLink)) < 1 {
5816		return nil, nil
5817	}
5818	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5819		autorest.AsJSON(),
5820		autorest.AsGet(),
5821		autorest.WithBaseURL(to.String(apetr.NextLink)))
5822}
5823
5824// AvailablePrivateEndpointTypesResultPage contains a page of AvailablePrivateEndpointType values.
5825type AvailablePrivateEndpointTypesResultPage struct {
5826	fn    func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)
5827	apetr AvailablePrivateEndpointTypesResult
5828}
5829
5830// NextWithContext advances to the next page of values.  If there was an error making
5831// the request the page does not advance and the error is returned.
5832func (page *AvailablePrivateEndpointTypesResultPage) NextWithContext(ctx context.Context) (err error) {
5833	if tracing.IsEnabled() {
5834		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultPage.NextWithContext")
5835		defer func() {
5836			sc := -1
5837			if page.Response().Response.Response != nil {
5838				sc = page.Response().Response.Response.StatusCode
5839			}
5840			tracing.EndSpan(ctx, sc, err)
5841		}()
5842	}
5843	next, err := page.fn(ctx, page.apetr)
5844	if err != nil {
5845		return err
5846	}
5847	page.apetr = next
5848	return nil
5849}
5850
5851// Next advances to the next page of values.  If there was an error making
5852// the request the page does not advance and the error is returned.
5853// Deprecated: Use NextWithContext() instead.
5854func (page *AvailablePrivateEndpointTypesResultPage) Next() error {
5855	return page.NextWithContext(context.Background())
5856}
5857
5858// NotDone returns true if the page enumeration should be started or is not yet complete.
5859func (page AvailablePrivateEndpointTypesResultPage) NotDone() bool {
5860	return !page.apetr.IsEmpty()
5861}
5862
5863// Response returns the raw server response from the last page request.
5864func (page AvailablePrivateEndpointTypesResultPage) Response() AvailablePrivateEndpointTypesResult {
5865	return page.apetr
5866}
5867
5868// Values returns the slice of values for the current page or nil if there are no values.
5869func (page AvailablePrivateEndpointTypesResultPage) Values() []AvailablePrivateEndpointType {
5870	if page.apetr.IsEmpty() {
5871		return nil
5872	}
5873	return *page.apetr.Value
5874}
5875
5876// Creates a new instance of the AvailablePrivateEndpointTypesResultPage type.
5877func NewAvailablePrivateEndpointTypesResultPage(getNextPage func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)) AvailablePrivateEndpointTypesResultPage {
5878	return AvailablePrivateEndpointTypesResultPage{fn: getNextPage}
5879}
5880
5881// AvailableProvidersList list of available countries with details.
5882type AvailableProvidersList struct {
5883	autorest.Response `json:"-"`
5884	// Countries - List of available countries.
5885	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
5886}
5887
5888// AvailableProvidersListCity city or town details.
5889type AvailableProvidersListCity struct {
5890	// CityName - The city or town name.
5891	CityName *string `json:"cityName,omitempty"`
5892	// Providers - A list of Internet service providers.
5893	Providers *[]string `json:"providers,omitempty"`
5894}
5895
5896// AvailableProvidersListCountry country details.
5897type AvailableProvidersListCountry struct {
5898	// CountryName - The country name.
5899	CountryName *string `json:"countryName,omitempty"`
5900	// Providers - A list of Internet service providers.
5901	Providers *[]string `json:"providers,omitempty"`
5902	// States - List of available states in the country.
5903	States *[]AvailableProvidersListState `json:"states,omitempty"`
5904}
5905
5906// AvailableProvidersListParameters constraints that determine the list of available Internet service
5907// providers.
5908type AvailableProvidersListParameters struct {
5909	// AzureLocations - A list of Azure regions.
5910	AzureLocations *[]string `json:"azureLocations,omitempty"`
5911	// Country - The country for available providers list.
5912	Country *string `json:"country,omitempty"`
5913	// State - The state for available providers list.
5914	State *string `json:"state,omitempty"`
5915	// City - The city or town for available providers list.
5916	City *string `json:"city,omitempty"`
5917}
5918
5919// AvailableProvidersListState state details.
5920type AvailableProvidersListState struct {
5921	// StateName - The state name.
5922	StateName *string `json:"stateName,omitempty"`
5923	// Providers - A list of Internet service providers.
5924	Providers *[]string `json:"providers,omitempty"`
5925	// Cities - List of available cities or towns in the state.
5926	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
5927}
5928
5929// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
5930// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
5931// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
5932// operation succeeded, the response body includes the HTTP status code for the successful request. If the
5933// asynchronous operation failed, the response body includes the HTTP status code for the failed request
5934// and error information regarding the failure.
5935type AzureAsyncOperationResult struct {
5936	// Status - Status of the Azure async operation. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
5937	Status OperationStatus `json:"status,omitempty"`
5938	// Error - Details of the error occurred during specified asynchronous operation.
5939	Error *Error `json:"error,omitempty"`
5940}
5941
5942// AzureFirewall azure Firewall resource.
5943type AzureFirewall struct {
5944	autorest.Response `json:"-"`
5945	// AzureFirewallPropertiesFormat - Properties of the azure firewall.
5946	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
5947	// Zones - A list of availability zones denoting where the resource needs to come from.
5948	Zones *[]string `json:"zones,omitempty"`
5949	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5950	Etag *string `json:"etag,omitempty"`
5951	// ID - Resource ID.
5952	ID *string `json:"id,omitempty"`
5953	// Name - READ-ONLY; Resource name.
5954	Name *string `json:"name,omitempty"`
5955	// Type - READ-ONLY; Resource type.
5956	Type *string `json:"type,omitempty"`
5957	// Location - Resource location.
5958	Location *string `json:"location,omitempty"`
5959	// Tags - Resource tags.
5960	Tags map[string]*string `json:"tags"`
5961}
5962
5963// MarshalJSON is the custom marshaler for AzureFirewall.
5964func (af AzureFirewall) MarshalJSON() ([]byte, error) {
5965	objectMap := make(map[string]interface{})
5966	if af.AzureFirewallPropertiesFormat != nil {
5967		objectMap["properties"] = af.AzureFirewallPropertiesFormat
5968	}
5969	if af.Zones != nil {
5970		objectMap["zones"] = af.Zones
5971	}
5972	if af.ID != nil {
5973		objectMap["id"] = af.ID
5974	}
5975	if af.Location != nil {
5976		objectMap["location"] = af.Location
5977	}
5978	if af.Tags != nil {
5979		objectMap["tags"] = af.Tags
5980	}
5981	return json.Marshal(objectMap)
5982}
5983
5984// UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
5985func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
5986	var m map[string]*json.RawMessage
5987	err := json.Unmarshal(body, &m)
5988	if err != nil {
5989		return err
5990	}
5991	for k, v := range m {
5992		switch k {
5993		case "properties":
5994			if v != nil {
5995				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
5996				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
5997				if err != nil {
5998					return err
5999				}
6000				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
6001			}
6002		case "zones":
6003			if v != nil {
6004				var zones []string
6005				err = json.Unmarshal(*v, &zones)
6006				if err != nil {
6007					return err
6008				}
6009				af.Zones = &zones
6010			}
6011		case "etag":
6012			if v != nil {
6013				var etag string
6014				err = json.Unmarshal(*v, &etag)
6015				if err != nil {
6016					return err
6017				}
6018				af.Etag = &etag
6019			}
6020		case "id":
6021			if v != nil {
6022				var ID string
6023				err = json.Unmarshal(*v, &ID)
6024				if err != nil {
6025					return err
6026				}
6027				af.ID = &ID
6028			}
6029		case "name":
6030			if v != nil {
6031				var name string
6032				err = json.Unmarshal(*v, &name)
6033				if err != nil {
6034					return err
6035				}
6036				af.Name = &name
6037			}
6038		case "type":
6039			if v != nil {
6040				var typeVar string
6041				err = json.Unmarshal(*v, &typeVar)
6042				if err != nil {
6043					return err
6044				}
6045				af.Type = &typeVar
6046			}
6047		case "location":
6048			if v != nil {
6049				var location string
6050				err = json.Unmarshal(*v, &location)
6051				if err != nil {
6052					return err
6053				}
6054				af.Location = &location
6055			}
6056		case "tags":
6057			if v != nil {
6058				var tags map[string]*string
6059				err = json.Unmarshal(*v, &tags)
6060				if err != nil {
6061					return err
6062				}
6063				af.Tags = tags
6064			}
6065		}
6066	}
6067
6068	return nil
6069}
6070
6071// AzureFirewallApplicationRule properties of an application rule.
6072type AzureFirewallApplicationRule struct {
6073	// Name - Name of the application rule.
6074	Name *string `json:"name,omitempty"`
6075	// Description - Description of the rule.
6076	Description *string `json:"description,omitempty"`
6077	// SourceAddresses - List of source IP addresses for this rule.
6078	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6079	// Protocols - Array of ApplicationRuleProtocols.
6080	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
6081	// TargetFqdns - List of FQDNs for this rule.
6082	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
6083	// FqdnTags - List of FQDN Tags for this rule.
6084	FqdnTags *[]string `json:"fqdnTags,omitempty"`
6085}
6086
6087// AzureFirewallApplicationRuleCollection application rule collection resource.
6088type AzureFirewallApplicationRuleCollection struct {
6089	// AzureFirewallApplicationRuleCollectionPropertiesFormat - Properties of the azure firewall application rule collection.
6090	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
6091	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6092	Name *string `json:"name,omitempty"`
6093	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6094	Etag *string `json:"etag,omitempty"`
6095	// ID - Resource ID.
6096	ID *string `json:"id,omitempty"`
6097}
6098
6099// MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
6100func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
6101	objectMap := make(map[string]interface{})
6102	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
6103		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
6104	}
6105	if afarc.Name != nil {
6106		objectMap["name"] = afarc.Name
6107	}
6108	if afarc.ID != nil {
6109		objectMap["id"] = afarc.ID
6110	}
6111	return json.Marshal(objectMap)
6112}
6113
6114// UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
6115func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
6116	var m map[string]*json.RawMessage
6117	err := json.Unmarshal(body, &m)
6118	if err != nil {
6119		return err
6120	}
6121	for k, v := range m {
6122		switch k {
6123		case "properties":
6124			if v != nil {
6125				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
6126				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
6127				if err != nil {
6128					return err
6129				}
6130				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
6131			}
6132		case "name":
6133			if v != nil {
6134				var name string
6135				err = json.Unmarshal(*v, &name)
6136				if err != nil {
6137					return err
6138				}
6139				afarc.Name = &name
6140			}
6141		case "etag":
6142			if v != nil {
6143				var etag string
6144				err = json.Unmarshal(*v, &etag)
6145				if err != nil {
6146					return err
6147				}
6148				afarc.Etag = &etag
6149			}
6150		case "id":
6151			if v != nil {
6152				var ID string
6153				err = json.Unmarshal(*v, &ID)
6154				if err != nil {
6155					return err
6156				}
6157				afarc.ID = &ID
6158			}
6159		}
6160	}
6161
6162	return nil
6163}
6164
6165// AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
6166type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
6167	// Priority - Priority of the application rule collection resource.
6168	Priority *int32 `json:"priority,omitempty"`
6169	// Action - The action type of a rule collection.
6170	Action *AzureFirewallRCAction `json:"action,omitempty"`
6171	// Rules - Collection of rules used by a application rule collection.
6172	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
6173	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6174	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6175}
6176
6177// AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
6178type AzureFirewallApplicationRuleProtocol struct {
6179	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS'
6180	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
6181	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
6182	Port *int32 `json:"port,omitempty"`
6183}
6184
6185// AzureFirewallFqdnTag azure Firewall FQDN Tag Resource.
6186type AzureFirewallFqdnTag struct {
6187	// AzureFirewallFqdnTagPropertiesFormat - Properties of the azure firewall FQDN tag.
6188	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
6189	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6190	Etag *string `json:"etag,omitempty"`
6191	// ID - Resource ID.
6192	ID *string `json:"id,omitempty"`
6193	// Name - READ-ONLY; Resource name.
6194	Name *string `json:"name,omitempty"`
6195	// Type - READ-ONLY; Resource type.
6196	Type *string `json:"type,omitempty"`
6197	// Location - Resource location.
6198	Location *string `json:"location,omitempty"`
6199	// Tags - Resource tags.
6200	Tags map[string]*string `json:"tags"`
6201}
6202
6203// MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
6204func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
6205	objectMap := make(map[string]interface{})
6206	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
6207		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
6208	}
6209	if afft.ID != nil {
6210		objectMap["id"] = afft.ID
6211	}
6212	if afft.Location != nil {
6213		objectMap["location"] = afft.Location
6214	}
6215	if afft.Tags != nil {
6216		objectMap["tags"] = afft.Tags
6217	}
6218	return json.Marshal(objectMap)
6219}
6220
6221// UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
6222func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
6223	var m map[string]*json.RawMessage
6224	err := json.Unmarshal(body, &m)
6225	if err != nil {
6226		return err
6227	}
6228	for k, v := range m {
6229		switch k {
6230		case "properties":
6231			if v != nil {
6232				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
6233				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
6234				if err != nil {
6235					return err
6236				}
6237				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
6238			}
6239		case "etag":
6240			if v != nil {
6241				var etag string
6242				err = json.Unmarshal(*v, &etag)
6243				if err != nil {
6244					return err
6245				}
6246				afft.Etag = &etag
6247			}
6248		case "id":
6249			if v != nil {
6250				var ID string
6251				err = json.Unmarshal(*v, &ID)
6252				if err != nil {
6253					return err
6254				}
6255				afft.ID = &ID
6256			}
6257		case "name":
6258			if v != nil {
6259				var name string
6260				err = json.Unmarshal(*v, &name)
6261				if err != nil {
6262					return err
6263				}
6264				afft.Name = &name
6265			}
6266		case "type":
6267			if v != nil {
6268				var typeVar string
6269				err = json.Unmarshal(*v, &typeVar)
6270				if err != nil {
6271					return err
6272				}
6273				afft.Type = &typeVar
6274			}
6275		case "location":
6276			if v != nil {
6277				var location string
6278				err = json.Unmarshal(*v, &location)
6279				if err != nil {
6280					return err
6281				}
6282				afft.Location = &location
6283			}
6284		case "tags":
6285			if v != nil {
6286				var tags map[string]*string
6287				err = json.Unmarshal(*v, &tags)
6288				if err != nil {
6289					return err
6290				}
6291				afft.Tags = tags
6292			}
6293		}
6294	}
6295
6296	return nil
6297}
6298
6299// AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
6300type AzureFirewallFqdnTagListResult struct {
6301	autorest.Response `json:"-"`
6302	// Value - List of Azure Firewall FQDN Tags in a resource group.
6303	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
6304	// NextLink - URL to get the next set of results.
6305	NextLink *string `json:"nextLink,omitempty"`
6306}
6307
6308// AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
6309// values.
6310type AzureFirewallFqdnTagListResultIterator struct {
6311	i    int
6312	page AzureFirewallFqdnTagListResultPage
6313}
6314
6315// NextWithContext advances to the next value.  If there was an error making
6316// the request the iterator does not advance and the error is returned.
6317func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
6318	if tracing.IsEnabled() {
6319		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
6320		defer func() {
6321			sc := -1
6322			if iter.Response().Response.Response != nil {
6323				sc = iter.Response().Response.Response.StatusCode
6324			}
6325			tracing.EndSpan(ctx, sc, err)
6326		}()
6327	}
6328	iter.i++
6329	if iter.i < len(iter.page.Values()) {
6330		return nil
6331	}
6332	err = iter.page.NextWithContext(ctx)
6333	if err != nil {
6334		iter.i--
6335		return err
6336	}
6337	iter.i = 0
6338	return nil
6339}
6340
6341// Next advances to the next value.  If there was an error making
6342// the request the iterator does not advance and the error is returned.
6343// Deprecated: Use NextWithContext() instead.
6344func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
6345	return iter.NextWithContext(context.Background())
6346}
6347
6348// NotDone returns true if the enumeration should be started or is not yet complete.
6349func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
6350	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6351}
6352
6353// Response returns the raw server response from the last page request.
6354func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
6355	return iter.page.Response()
6356}
6357
6358// Value returns the current value or a zero-initialized value if the
6359// iterator has advanced beyond the end of the collection.
6360func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
6361	if !iter.page.NotDone() {
6362		return AzureFirewallFqdnTag{}
6363	}
6364	return iter.page.Values()[iter.i]
6365}
6366
6367// Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
6368func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
6369	return AzureFirewallFqdnTagListResultIterator{page: page}
6370}
6371
6372// IsEmpty returns true if the ListResult contains no values.
6373func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
6374	return afftlr.Value == nil || len(*afftlr.Value) == 0
6375}
6376
6377// azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
6378// It returns nil if no more results exist.
6379func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
6380	if afftlr.NextLink == nil || len(to.String(afftlr.NextLink)) < 1 {
6381		return nil, nil
6382	}
6383	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6384		autorest.AsJSON(),
6385		autorest.AsGet(),
6386		autorest.WithBaseURL(to.String(afftlr.NextLink)))
6387}
6388
6389// AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
6390type AzureFirewallFqdnTagListResultPage struct {
6391	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
6392	afftlr AzureFirewallFqdnTagListResult
6393}
6394
6395// NextWithContext advances to the next page of values.  If there was an error making
6396// the request the page does not advance and the error is returned.
6397func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
6398	if tracing.IsEnabled() {
6399		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
6400		defer func() {
6401			sc := -1
6402			if page.Response().Response.Response != nil {
6403				sc = page.Response().Response.Response.StatusCode
6404			}
6405			tracing.EndSpan(ctx, sc, err)
6406		}()
6407	}
6408	next, err := page.fn(ctx, page.afftlr)
6409	if err != nil {
6410		return err
6411	}
6412	page.afftlr = next
6413	return nil
6414}
6415
6416// Next advances to the next page of values.  If there was an error making
6417// the request the page does not advance and the error is returned.
6418// Deprecated: Use NextWithContext() instead.
6419func (page *AzureFirewallFqdnTagListResultPage) Next() error {
6420	return page.NextWithContext(context.Background())
6421}
6422
6423// NotDone returns true if the page enumeration should be started or is not yet complete.
6424func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
6425	return !page.afftlr.IsEmpty()
6426}
6427
6428// Response returns the raw server response from the last page request.
6429func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
6430	return page.afftlr
6431}
6432
6433// Values returns the slice of values for the current page or nil if there are no values.
6434func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
6435	if page.afftlr.IsEmpty() {
6436		return nil
6437	}
6438	return *page.afftlr.Value
6439}
6440
6441// Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
6442func NewAzureFirewallFqdnTagListResultPage(getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
6443	return AzureFirewallFqdnTagListResultPage{fn: getNextPage}
6444}
6445
6446// AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties.
6447type AzureFirewallFqdnTagPropertiesFormat struct {
6448	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
6449	ProvisioningState *string `json:"provisioningState,omitempty"`
6450	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
6451	FqdnTagName *string `json:"fqdnTagName,omitempty"`
6452}
6453
6454// AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
6455type AzureFirewallIPConfiguration struct {
6456	// AzureFirewallIPConfigurationPropertiesFormat - Properties of the azure firewall IP configuration.
6457	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
6458	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
6459	Name *string `json:"name,omitempty"`
6460	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6461	Etag *string `json:"etag,omitempty"`
6462	// ID - Resource ID.
6463	ID *string `json:"id,omitempty"`
6464}
6465
6466// MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
6467func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
6468	objectMap := make(map[string]interface{})
6469	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
6470		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
6471	}
6472	if afic.Name != nil {
6473		objectMap["name"] = afic.Name
6474	}
6475	if afic.ID != nil {
6476		objectMap["id"] = afic.ID
6477	}
6478	return json.Marshal(objectMap)
6479}
6480
6481// UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
6482func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
6483	var m map[string]*json.RawMessage
6484	err := json.Unmarshal(body, &m)
6485	if err != nil {
6486		return err
6487	}
6488	for k, v := range m {
6489		switch k {
6490		case "properties":
6491			if v != nil {
6492				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
6493				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
6494				if err != nil {
6495					return err
6496				}
6497				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
6498			}
6499		case "name":
6500			if v != nil {
6501				var name string
6502				err = json.Unmarshal(*v, &name)
6503				if err != nil {
6504					return err
6505				}
6506				afic.Name = &name
6507			}
6508		case "etag":
6509			if v != nil {
6510				var etag string
6511				err = json.Unmarshal(*v, &etag)
6512				if err != nil {
6513					return err
6514				}
6515				afic.Etag = &etag
6516			}
6517		case "id":
6518			if v != nil {
6519				var ID string
6520				err = json.Unmarshal(*v, &ID)
6521				if err != nil {
6522					return err
6523				}
6524				afic.ID = &ID
6525			}
6526		}
6527	}
6528
6529	return nil
6530}
6531
6532// AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
6533type AzureFirewallIPConfigurationPropertiesFormat struct {
6534	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
6535	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
6536	// Subnet - Reference of the subnet resource. This resource must be named 'AzureFirewallSubnet'.
6537	Subnet *SubResource `json:"subnet,omitempty"`
6538	// PublicIPAddress - Reference of the PublicIP resource. This field is a mandatory input if subnet is not null.
6539	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
6540	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6541	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6542}
6543
6544// AzureFirewallListResult response for ListAzureFirewalls API service call.
6545type AzureFirewallListResult struct {
6546	autorest.Response `json:"-"`
6547	// Value - List of Azure Firewalls in a resource group.
6548	Value *[]AzureFirewall `json:"value,omitempty"`
6549	// NextLink - URL to get the next set of results.
6550	NextLink *string `json:"nextLink,omitempty"`
6551}
6552
6553// AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
6554type AzureFirewallListResultIterator struct {
6555	i    int
6556	page AzureFirewallListResultPage
6557}
6558
6559// NextWithContext advances to the next value.  If there was an error making
6560// the request the iterator does not advance and the error is returned.
6561func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
6562	if tracing.IsEnabled() {
6563		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
6564		defer func() {
6565			sc := -1
6566			if iter.Response().Response.Response != nil {
6567				sc = iter.Response().Response.Response.StatusCode
6568			}
6569			tracing.EndSpan(ctx, sc, err)
6570		}()
6571	}
6572	iter.i++
6573	if iter.i < len(iter.page.Values()) {
6574		return nil
6575	}
6576	err = iter.page.NextWithContext(ctx)
6577	if err != nil {
6578		iter.i--
6579		return err
6580	}
6581	iter.i = 0
6582	return nil
6583}
6584
6585// Next advances to the next value.  If there was an error making
6586// the request the iterator does not advance and the error is returned.
6587// Deprecated: Use NextWithContext() instead.
6588func (iter *AzureFirewallListResultIterator) Next() error {
6589	return iter.NextWithContext(context.Background())
6590}
6591
6592// NotDone returns true if the enumeration should be started or is not yet complete.
6593func (iter AzureFirewallListResultIterator) NotDone() bool {
6594	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6595}
6596
6597// Response returns the raw server response from the last page request.
6598func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
6599	return iter.page.Response()
6600}
6601
6602// Value returns the current value or a zero-initialized value if the
6603// iterator has advanced beyond the end of the collection.
6604func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
6605	if !iter.page.NotDone() {
6606		return AzureFirewall{}
6607	}
6608	return iter.page.Values()[iter.i]
6609}
6610
6611// Creates a new instance of the AzureFirewallListResultIterator type.
6612func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
6613	return AzureFirewallListResultIterator{page: page}
6614}
6615
6616// IsEmpty returns true if the ListResult contains no values.
6617func (aflr AzureFirewallListResult) IsEmpty() bool {
6618	return aflr.Value == nil || len(*aflr.Value) == 0
6619}
6620
6621// azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
6622// It returns nil if no more results exist.
6623func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
6624	if aflr.NextLink == nil || len(to.String(aflr.NextLink)) < 1 {
6625		return nil, nil
6626	}
6627	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6628		autorest.AsJSON(),
6629		autorest.AsGet(),
6630		autorest.WithBaseURL(to.String(aflr.NextLink)))
6631}
6632
6633// AzureFirewallListResultPage contains a page of AzureFirewall values.
6634type AzureFirewallListResultPage struct {
6635	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
6636	aflr AzureFirewallListResult
6637}
6638
6639// NextWithContext advances to the next page of values.  If there was an error making
6640// the request the page does not advance and the error is returned.
6641func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
6642	if tracing.IsEnabled() {
6643		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
6644		defer func() {
6645			sc := -1
6646			if page.Response().Response.Response != nil {
6647				sc = page.Response().Response.Response.StatusCode
6648			}
6649			tracing.EndSpan(ctx, sc, err)
6650		}()
6651	}
6652	next, err := page.fn(ctx, page.aflr)
6653	if err != nil {
6654		return err
6655	}
6656	page.aflr = next
6657	return nil
6658}
6659
6660// Next advances to the next page of values.  If there was an error making
6661// the request the page does not advance and the error is returned.
6662// Deprecated: Use NextWithContext() instead.
6663func (page *AzureFirewallListResultPage) Next() error {
6664	return page.NextWithContext(context.Background())
6665}
6666
6667// NotDone returns true if the page enumeration should be started or is not yet complete.
6668func (page AzureFirewallListResultPage) NotDone() bool {
6669	return !page.aflr.IsEmpty()
6670}
6671
6672// Response returns the raw server response from the last page request.
6673func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
6674	return page.aflr
6675}
6676
6677// Values returns the slice of values for the current page or nil if there are no values.
6678func (page AzureFirewallListResultPage) Values() []AzureFirewall {
6679	if page.aflr.IsEmpty() {
6680		return nil
6681	}
6682	return *page.aflr.Value
6683}
6684
6685// Creates a new instance of the AzureFirewallListResultPage type.
6686func NewAzureFirewallListResultPage(getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
6687	return AzureFirewallListResultPage{fn: getNextPage}
6688}
6689
6690// AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
6691type AzureFirewallNatRCAction struct {
6692	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
6693	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
6694}
6695
6696// AzureFirewallNatRule properties of a NAT rule.
6697type AzureFirewallNatRule struct {
6698	// Name - Name of the NAT rule.
6699	Name *string `json:"name,omitempty"`
6700	// Description - Description of the rule.
6701	Description *string `json:"description,omitempty"`
6702	// SourceAddresses - List of source IP addresses for this rule.
6703	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6704	// DestinationAddresses - List of destination IP addresses for this rule. Supports IP ranges, prefixes, and service tags.
6705	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
6706	// DestinationPorts - List of destination ports.
6707	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
6708	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
6709	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
6710	// TranslatedAddress - The translated address for this NAT rule.
6711	TranslatedAddress *string `json:"translatedAddress,omitempty"`
6712	// TranslatedPort - The translated port for this NAT rule.
6713	TranslatedPort *string `json:"translatedPort,omitempty"`
6714}
6715
6716// AzureFirewallNatRuleCollection NAT rule collection resource.
6717type AzureFirewallNatRuleCollection struct {
6718	// AzureFirewallNatRuleCollectionProperties - Properties of the azure firewall NAT rule collection.
6719	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
6720	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6721	Name *string `json:"name,omitempty"`
6722	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6723	Etag *string `json:"etag,omitempty"`
6724	// ID - Resource ID.
6725	ID *string `json:"id,omitempty"`
6726}
6727
6728// MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
6729func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
6730	objectMap := make(map[string]interface{})
6731	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
6732		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
6733	}
6734	if afnrc.Name != nil {
6735		objectMap["name"] = afnrc.Name
6736	}
6737	if afnrc.ID != nil {
6738		objectMap["id"] = afnrc.ID
6739	}
6740	return json.Marshal(objectMap)
6741}
6742
6743// UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
6744func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
6745	var m map[string]*json.RawMessage
6746	err := json.Unmarshal(body, &m)
6747	if err != nil {
6748		return err
6749	}
6750	for k, v := range m {
6751		switch k {
6752		case "properties":
6753			if v != nil {
6754				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
6755				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
6756				if err != nil {
6757					return err
6758				}
6759				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
6760			}
6761		case "name":
6762			if v != nil {
6763				var name string
6764				err = json.Unmarshal(*v, &name)
6765				if err != nil {
6766					return err
6767				}
6768				afnrc.Name = &name
6769			}
6770		case "etag":
6771			if v != nil {
6772				var etag string
6773				err = json.Unmarshal(*v, &etag)
6774				if err != nil {
6775					return err
6776				}
6777				afnrc.Etag = &etag
6778			}
6779		case "id":
6780			if v != nil {
6781				var ID string
6782				err = json.Unmarshal(*v, &ID)
6783				if err != nil {
6784					return err
6785				}
6786				afnrc.ID = &ID
6787			}
6788		}
6789	}
6790
6791	return nil
6792}
6793
6794// AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
6795type AzureFirewallNatRuleCollectionProperties struct {
6796	// Priority - Priority of the NAT rule collection resource.
6797	Priority *int32 `json:"priority,omitempty"`
6798	// Action - The action type of a NAT rule collection.
6799	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
6800	// Rules - Collection of rules used by a NAT rule collection.
6801	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
6802	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6803	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6804}
6805
6806// AzureFirewallNetworkRule properties of the network rule.
6807type AzureFirewallNetworkRule struct {
6808	// Name - Name of the network rule.
6809	Name *string `json:"name,omitempty"`
6810	// Description - Description of the rule.
6811	Description *string `json:"description,omitempty"`
6812	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
6813	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
6814	// SourceAddresses - List of source IP addresses for this rule.
6815	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6816	// DestinationAddresses - List of destination IP addresses.
6817	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
6818	// DestinationPorts - List of destination ports.
6819	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
6820}
6821
6822// AzureFirewallNetworkRuleCollection network rule collection resource.
6823type AzureFirewallNetworkRuleCollection struct {
6824	// AzureFirewallNetworkRuleCollectionPropertiesFormat - Properties of the azure firewall network rule collection.
6825	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
6826	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6827	Name *string `json:"name,omitempty"`
6828	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6829	Etag *string `json:"etag,omitempty"`
6830	// ID - Resource ID.
6831	ID *string `json:"id,omitempty"`
6832}
6833
6834// MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
6835func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
6836	objectMap := make(map[string]interface{})
6837	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
6838		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
6839	}
6840	if afnrc.Name != nil {
6841		objectMap["name"] = afnrc.Name
6842	}
6843	if afnrc.ID != nil {
6844		objectMap["id"] = afnrc.ID
6845	}
6846	return json.Marshal(objectMap)
6847}
6848
6849// UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
6850func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
6851	var m map[string]*json.RawMessage
6852	err := json.Unmarshal(body, &m)
6853	if err != nil {
6854		return err
6855	}
6856	for k, v := range m {
6857		switch k {
6858		case "properties":
6859			if v != nil {
6860				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
6861				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
6862				if err != nil {
6863					return err
6864				}
6865				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
6866			}
6867		case "name":
6868			if v != nil {
6869				var name string
6870				err = json.Unmarshal(*v, &name)
6871				if err != nil {
6872					return err
6873				}
6874				afnrc.Name = &name
6875			}
6876		case "etag":
6877			if v != nil {
6878				var etag string
6879				err = json.Unmarshal(*v, &etag)
6880				if err != nil {
6881					return err
6882				}
6883				afnrc.Etag = &etag
6884			}
6885		case "id":
6886			if v != nil {
6887				var ID string
6888				err = json.Unmarshal(*v, &ID)
6889				if err != nil {
6890					return err
6891				}
6892				afnrc.ID = &ID
6893			}
6894		}
6895	}
6896
6897	return nil
6898}
6899
6900// AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
6901type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
6902	// Priority - Priority of the network rule collection resource.
6903	Priority *int32 `json:"priority,omitempty"`
6904	// Action - The action type of a rule collection.
6905	Action *AzureFirewallRCAction `json:"action,omitempty"`
6906	// Rules - Collection of rules used by a network rule collection.
6907	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
6908	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6909	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6910}
6911
6912// AzureFirewallPropertiesFormat properties of the Azure Firewall.
6913type AzureFirewallPropertiesFormat struct {
6914	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
6915	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
6916	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
6917	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
6918	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
6919	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
6920	// IPConfigurations - IP configuration of the Azure Firewall resource.
6921	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
6922	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6923	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6924	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
6925	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
6926}
6927
6928// AzureFirewallRCAction properties of the AzureFirewallRCAction.
6929type AzureFirewallRCAction struct {
6930	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
6931	Type AzureFirewallRCActionType `json:"type,omitempty"`
6932}
6933
6934// AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
6935// long-running operation.
6936type AzureFirewallsCreateOrUpdateFuture struct {
6937	azure.Future
6938}
6939
6940// Result returns the result of the asynchronous operation.
6941// If the operation has not completed it will return an error.
6942func (future *AzureFirewallsCreateOrUpdateFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
6943	var done bool
6944	done, err = future.DoneWithContext(context.Background(), client)
6945	if err != nil {
6946		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6947		return
6948	}
6949	if !done {
6950		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
6951		return
6952	}
6953	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6954	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
6955		af, err = client.CreateOrUpdateResponder(af.Response.Response)
6956		if err != nil {
6957			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
6958		}
6959	}
6960	return
6961}
6962
6963// AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
6964// operation.
6965type AzureFirewallsDeleteFuture struct {
6966	azure.Future
6967}
6968
6969// Result returns the result of the asynchronous operation.
6970// If the operation has not completed it will return an error.
6971func (future *AzureFirewallsDeleteFuture) Result(client AzureFirewallsClient) (ar autorest.Response, err error) {
6972	var done bool
6973	done, err = future.DoneWithContext(context.Background(), client)
6974	if err != nil {
6975		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
6976		return
6977	}
6978	if !done {
6979		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
6980		return
6981	}
6982	ar.Response = future.Response()
6983	return
6984}
6985
6986// AzureReachabilityReport azure reachability report details.
6987type AzureReachabilityReport struct {
6988	autorest.Response `json:"-"`
6989	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
6990	AggregationLevel *string `json:"aggregationLevel,omitempty"`
6991	// ProviderLocation - Parameters that define a geographic location.
6992	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
6993	// ReachabilityReport - List of Azure reachability report items.
6994	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
6995}
6996
6997// AzureReachabilityReportItem azure reachability report details for a given provider location.
6998type AzureReachabilityReportItem struct {
6999	// Provider - The Internet service provider.
7000	Provider *string `json:"provider,omitempty"`
7001	// AzureLocation - The Azure region.
7002	AzureLocation *string `json:"azureLocation,omitempty"`
7003	// Latencies - List of latency details for each of the time series.
7004	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
7005}
7006
7007// AzureReachabilityReportLatencyInfo details on latency for a time series.
7008type AzureReachabilityReportLatencyInfo struct {
7009	// TimeStamp - The time stamp.
7010	TimeStamp *date.Time `json:"timeStamp,omitempty"`
7011	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
7012	Score *int32 `json:"score,omitempty"`
7013}
7014
7015// AzureReachabilityReportLocation parameters that define a geographic location.
7016type AzureReachabilityReportLocation struct {
7017	// Country - The name of the country.
7018	Country *string `json:"country,omitempty"`
7019	// State - The name of the state.
7020	State *string `json:"state,omitempty"`
7021	// City - The name of the city or town.
7022	City *string `json:"city,omitempty"`
7023}
7024
7025// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
7026type AzureReachabilityReportParameters struct {
7027	// ProviderLocation - Parameters that define a geographic location.
7028	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
7029	// Providers - List of Internet service providers.
7030	Providers *[]string `json:"providers,omitempty"`
7031	// AzureLocations - Optional Azure regions to scope the query to.
7032	AzureLocations *[]string `json:"azureLocations,omitempty"`
7033	// StartTime - The start time for the Azure reachability report.
7034	StartTime *date.Time `json:"startTime,omitempty"`
7035	// EndTime - The end time for the Azure reachability report.
7036	EndTime *date.Time `json:"endTime,omitempty"`
7037}
7038
7039// BackendAddressPool pool of backend IP addresses.
7040type BackendAddressPool struct {
7041	autorest.Response `json:"-"`
7042	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
7043	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
7044	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
7045	Name *string `json:"name,omitempty"`
7046	// Etag - A unique read-only string that changes whenever the resource is updated.
7047	Etag *string `json:"etag,omitempty"`
7048	// ID - Resource ID.
7049	ID *string `json:"id,omitempty"`
7050}
7051
7052// MarshalJSON is the custom marshaler for BackendAddressPool.
7053func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
7054	objectMap := make(map[string]interface{})
7055	if bap.BackendAddressPoolPropertiesFormat != nil {
7056		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
7057	}
7058	if bap.Name != nil {
7059		objectMap["name"] = bap.Name
7060	}
7061	if bap.Etag != nil {
7062		objectMap["etag"] = bap.Etag
7063	}
7064	if bap.ID != nil {
7065		objectMap["id"] = bap.ID
7066	}
7067	return json.Marshal(objectMap)
7068}
7069
7070// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
7071func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
7072	var m map[string]*json.RawMessage
7073	err := json.Unmarshal(body, &m)
7074	if err != nil {
7075		return err
7076	}
7077	for k, v := range m {
7078		switch k {
7079		case "properties":
7080			if v != nil {
7081				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
7082				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
7083				if err != nil {
7084					return err
7085				}
7086				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
7087			}
7088		case "name":
7089			if v != nil {
7090				var name string
7091				err = json.Unmarshal(*v, &name)
7092				if err != nil {
7093					return err
7094				}
7095				bap.Name = &name
7096			}
7097		case "etag":
7098			if v != nil {
7099				var etag string
7100				err = json.Unmarshal(*v, &etag)
7101				if err != nil {
7102					return err
7103				}
7104				bap.Etag = &etag
7105			}
7106		case "id":
7107			if v != nil {
7108				var ID string
7109				err = json.Unmarshal(*v, &ID)
7110				if err != nil {
7111					return err
7112				}
7113				bap.ID = &ID
7114			}
7115		}
7116	}
7117
7118	return nil
7119}
7120
7121// BackendAddressPoolPropertiesFormat properties of the backend address pool.
7122type BackendAddressPoolPropertiesFormat struct {
7123	// BackendIPConfigurations - READ-ONLY; Gets collection of references to IP addresses defined in network interfaces.
7124	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
7125	// LoadBalancingRules - READ-ONLY; Gets load balancing rules that use this backend address pool.
7126	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
7127	// OutboundRule - READ-ONLY; Gets outbound rules that use this backend address pool.
7128	OutboundRule *SubResource `json:"outboundRule,omitempty"`
7129	// OutboundRules - READ-ONLY; Gets outbound rules that use this backend address pool.
7130	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
7131	// ProvisioningState - Get provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
7132	ProvisioningState *string `json:"provisioningState,omitempty"`
7133}
7134
7135// BastionHost bastion Host resource.
7136type BastionHost struct {
7137	autorest.Response `json:"-"`
7138	// BastionHostPropertiesFormat - Represents the bastion host resource.
7139	*BastionHostPropertiesFormat `json:"properties,omitempty"`
7140	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
7141	Etag *string `json:"etag,omitempty"`
7142	// ID - Resource ID.
7143	ID *string `json:"id,omitempty"`
7144	// Name - READ-ONLY; Resource name.
7145	Name *string `json:"name,omitempty"`
7146	// Type - READ-ONLY; Resource type.
7147	Type *string `json:"type,omitempty"`
7148	// Location - Resource location.
7149	Location *string `json:"location,omitempty"`
7150	// Tags - Resource tags.
7151	Tags map[string]*string `json:"tags"`
7152}
7153
7154// MarshalJSON is the custom marshaler for BastionHost.
7155func (bh BastionHost) MarshalJSON() ([]byte, error) {
7156	objectMap := make(map[string]interface{})
7157	if bh.BastionHostPropertiesFormat != nil {
7158		objectMap["properties"] = bh.BastionHostPropertiesFormat
7159	}
7160	if bh.ID != nil {
7161		objectMap["id"] = bh.ID
7162	}
7163	if bh.Location != nil {
7164		objectMap["location"] = bh.Location
7165	}
7166	if bh.Tags != nil {
7167		objectMap["tags"] = bh.Tags
7168	}
7169	return json.Marshal(objectMap)
7170}
7171
7172// UnmarshalJSON is the custom unmarshaler for BastionHost struct.
7173func (bh *BastionHost) UnmarshalJSON(body []byte) error {
7174	var m map[string]*json.RawMessage
7175	err := json.Unmarshal(body, &m)
7176	if err != nil {
7177		return err
7178	}
7179	for k, v := range m {
7180		switch k {
7181		case "properties":
7182			if v != nil {
7183				var bastionHostPropertiesFormat BastionHostPropertiesFormat
7184				err = json.Unmarshal(*v, &bastionHostPropertiesFormat)
7185				if err != nil {
7186					return err
7187				}
7188				bh.BastionHostPropertiesFormat = &bastionHostPropertiesFormat
7189			}
7190		case "etag":
7191			if v != nil {
7192				var etag string
7193				err = json.Unmarshal(*v, &etag)
7194				if err != nil {
7195					return err
7196				}
7197				bh.Etag = &etag
7198			}
7199		case "id":
7200			if v != nil {
7201				var ID string
7202				err = json.Unmarshal(*v, &ID)
7203				if err != nil {
7204					return err
7205				}
7206				bh.ID = &ID
7207			}
7208		case "name":
7209			if v != nil {
7210				var name string
7211				err = json.Unmarshal(*v, &name)
7212				if err != nil {
7213					return err
7214				}
7215				bh.Name = &name
7216			}
7217		case "type":
7218			if v != nil {
7219				var typeVar string
7220				err = json.Unmarshal(*v, &typeVar)
7221				if err != nil {
7222					return err
7223				}
7224				bh.Type = &typeVar
7225			}
7226		case "location":
7227			if v != nil {
7228				var location string
7229				err = json.Unmarshal(*v, &location)
7230				if err != nil {
7231					return err
7232				}
7233				bh.Location = &location
7234			}
7235		case "tags":
7236			if v != nil {
7237				var tags map[string]*string
7238				err = json.Unmarshal(*v, &tags)
7239				if err != nil {
7240					return err
7241				}
7242				bh.Tags = tags
7243			}
7244		}
7245	}
7246
7247	return nil
7248}
7249
7250// BastionHostIPConfiguration IP configuration of an Bastion Host.
7251type BastionHostIPConfiguration struct {
7252	// BastionHostIPConfigurationPropertiesFormat - Represents the ip configuration associated with the resource.
7253	*BastionHostIPConfigurationPropertiesFormat `json:"properties,omitempty"`
7254	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
7255	Name *string `json:"name,omitempty"`
7256	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7257	Etag *string `json:"etag,omitempty"`
7258	// Type - READ-ONLY; Ip configuration type.
7259	Type *string `json:"type,omitempty"`
7260	// ID - Resource ID.
7261	ID *string `json:"id,omitempty"`
7262}
7263
7264// MarshalJSON is the custom marshaler for BastionHostIPConfiguration.
7265func (bhic BastionHostIPConfiguration) MarshalJSON() ([]byte, error) {
7266	objectMap := make(map[string]interface{})
7267	if bhic.BastionHostIPConfigurationPropertiesFormat != nil {
7268		objectMap["properties"] = bhic.BastionHostIPConfigurationPropertiesFormat
7269	}
7270	if bhic.Name != nil {
7271		objectMap["name"] = bhic.Name
7272	}
7273	if bhic.ID != nil {
7274		objectMap["id"] = bhic.ID
7275	}
7276	return json.Marshal(objectMap)
7277}
7278
7279// UnmarshalJSON is the custom unmarshaler for BastionHostIPConfiguration struct.
7280func (bhic *BastionHostIPConfiguration) UnmarshalJSON(body []byte) error {
7281	var m map[string]*json.RawMessage
7282	err := json.Unmarshal(body, &m)
7283	if err != nil {
7284		return err
7285	}
7286	for k, v := range m {
7287		switch k {
7288		case "properties":
7289			if v != nil {
7290				var bastionHostIPConfigurationPropertiesFormat BastionHostIPConfigurationPropertiesFormat
7291				err = json.Unmarshal(*v, &bastionHostIPConfigurationPropertiesFormat)
7292				if err != nil {
7293					return err
7294				}
7295				bhic.BastionHostIPConfigurationPropertiesFormat = &bastionHostIPConfigurationPropertiesFormat
7296			}
7297		case "name":
7298			if v != nil {
7299				var name string
7300				err = json.Unmarshal(*v, &name)
7301				if err != nil {
7302					return err
7303				}
7304				bhic.Name = &name
7305			}
7306		case "etag":
7307			if v != nil {
7308				var etag string
7309				err = json.Unmarshal(*v, &etag)
7310				if err != nil {
7311					return err
7312				}
7313				bhic.Etag = &etag
7314			}
7315		case "type":
7316			if v != nil {
7317				var typeVar string
7318				err = json.Unmarshal(*v, &typeVar)
7319				if err != nil {
7320					return err
7321				}
7322				bhic.Type = &typeVar
7323			}
7324		case "id":
7325			if v != nil {
7326				var ID string
7327				err = json.Unmarshal(*v, &ID)
7328				if err != nil {
7329					return err
7330				}
7331				bhic.ID = &ID
7332			}
7333		}
7334	}
7335
7336	return nil
7337}
7338
7339// BastionHostIPConfigurationPropertiesFormat properties of IP configuration of an Bastion Host.
7340type BastionHostIPConfigurationPropertiesFormat struct {
7341	// Subnet - Reference of the subnet resource.
7342	Subnet *SubResource `json:"subnet,omitempty"`
7343	// PublicIPAddress - Reference of the PublicIP resource.
7344	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
7345	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7346	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7347	// PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'Static', 'Dynamic'
7348	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
7349}
7350
7351// BastionHostListResult response for ListBastionHosts API service call.
7352type BastionHostListResult struct {
7353	autorest.Response `json:"-"`
7354	// Value - List of Bastion Hosts in a resource group.
7355	Value *[]BastionHost `json:"value,omitempty"`
7356	// NextLink - URL to get the next set of results.
7357	NextLink *string `json:"nextLink,omitempty"`
7358}
7359
7360// BastionHostListResultIterator provides access to a complete listing of BastionHost values.
7361type BastionHostListResultIterator struct {
7362	i    int
7363	page BastionHostListResultPage
7364}
7365
7366// NextWithContext advances to the next value.  If there was an error making
7367// the request the iterator does not advance and the error is returned.
7368func (iter *BastionHostListResultIterator) NextWithContext(ctx context.Context) (err error) {
7369	if tracing.IsEnabled() {
7370		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultIterator.NextWithContext")
7371		defer func() {
7372			sc := -1
7373			if iter.Response().Response.Response != nil {
7374				sc = iter.Response().Response.Response.StatusCode
7375			}
7376			tracing.EndSpan(ctx, sc, err)
7377		}()
7378	}
7379	iter.i++
7380	if iter.i < len(iter.page.Values()) {
7381		return nil
7382	}
7383	err = iter.page.NextWithContext(ctx)
7384	if err != nil {
7385		iter.i--
7386		return err
7387	}
7388	iter.i = 0
7389	return nil
7390}
7391
7392// Next advances to the next value.  If there was an error making
7393// the request the iterator does not advance and the error is returned.
7394// Deprecated: Use NextWithContext() instead.
7395func (iter *BastionHostListResultIterator) Next() error {
7396	return iter.NextWithContext(context.Background())
7397}
7398
7399// NotDone returns true if the enumeration should be started or is not yet complete.
7400func (iter BastionHostListResultIterator) NotDone() bool {
7401	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7402}
7403
7404// Response returns the raw server response from the last page request.
7405func (iter BastionHostListResultIterator) Response() BastionHostListResult {
7406	return iter.page.Response()
7407}
7408
7409// Value returns the current value or a zero-initialized value if the
7410// iterator has advanced beyond the end of the collection.
7411func (iter BastionHostListResultIterator) Value() BastionHost {
7412	if !iter.page.NotDone() {
7413		return BastionHost{}
7414	}
7415	return iter.page.Values()[iter.i]
7416}
7417
7418// Creates a new instance of the BastionHostListResultIterator type.
7419func NewBastionHostListResultIterator(page BastionHostListResultPage) BastionHostListResultIterator {
7420	return BastionHostListResultIterator{page: page}
7421}
7422
7423// IsEmpty returns true if the ListResult contains no values.
7424func (bhlr BastionHostListResult) IsEmpty() bool {
7425	return bhlr.Value == nil || len(*bhlr.Value) == 0
7426}
7427
7428// bastionHostListResultPreparer prepares a request to retrieve the next set of results.
7429// It returns nil if no more results exist.
7430func (bhlr BastionHostListResult) bastionHostListResultPreparer(ctx context.Context) (*http.Request, error) {
7431	if bhlr.NextLink == nil || len(to.String(bhlr.NextLink)) < 1 {
7432		return nil, nil
7433	}
7434	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7435		autorest.AsJSON(),
7436		autorest.AsGet(),
7437		autorest.WithBaseURL(to.String(bhlr.NextLink)))
7438}
7439
7440// BastionHostListResultPage contains a page of BastionHost values.
7441type BastionHostListResultPage struct {
7442	fn   func(context.Context, BastionHostListResult) (BastionHostListResult, error)
7443	bhlr BastionHostListResult
7444}
7445
7446// NextWithContext advances to the next page of values.  If there was an error making
7447// the request the page does not advance and the error is returned.
7448func (page *BastionHostListResultPage) NextWithContext(ctx context.Context) (err error) {
7449	if tracing.IsEnabled() {
7450		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultPage.NextWithContext")
7451		defer func() {
7452			sc := -1
7453			if page.Response().Response.Response != nil {
7454				sc = page.Response().Response.Response.StatusCode
7455			}
7456			tracing.EndSpan(ctx, sc, err)
7457		}()
7458	}
7459	next, err := page.fn(ctx, page.bhlr)
7460	if err != nil {
7461		return err
7462	}
7463	page.bhlr = next
7464	return nil
7465}
7466
7467// Next advances to the next page of values.  If there was an error making
7468// the request the page does not advance and the error is returned.
7469// Deprecated: Use NextWithContext() instead.
7470func (page *BastionHostListResultPage) Next() error {
7471	return page.NextWithContext(context.Background())
7472}
7473
7474// NotDone returns true if the page enumeration should be started or is not yet complete.
7475func (page BastionHostListResultPage) NotDone() bool {
7476	return !page.bhlr.IsEmpty()
7477}
7478
7479// Response returns the raw server response from the last page request.
7480func (page BastionHostListResultPage) Response() BastionHostListResult {
7481	return page.bhlr
7482}
7483
7484// Values returns the slice of values for the current page or nil if there are no values.
7485func (page BastionHostListResultPage) Values() []BastionHost {
7486	if page.bhlr.IsEmpty() {
7487		return nil
7488	}
7489	return *page.bhlr.Value
7490}
7491
7492// Creates a new instance of the BastionHostListResultPage type.
7493func NewBastionHostListResultPage(getNextPage func(context.Context, BastionHostListResult) (BastionHostListResult, error)) BastionHostListResultPage {
7494	return BastionHostListResultPage{fn: getNextPage}
7495}
7496
7497// BastionHostPropertiesFormat properties of the Bastion Host.
7498type BastionHostPropertiesFormat struct {
7499	// IPConfigurations - IP configuration of the Bastion Host resource.
7500	IPConfigurations *[]BastionHostIPConfiguration `json:"ipConfigurations,omitempty"`
7501	// DNSName - FQDN for the endpoint on which bastion host is accessible.
7502	DNSName *string `json:"dnsName,omitempty"`
7503	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7504	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7505}
7506
7507// BastionHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7508// long-running operation.
7509type BastionHostsCreateOrUpdateFuture struct {
7510	azure.Future
7511}
7512
7513// Result returns the result of the asynchronous operation.
7514// If the operation has not completed it will return an error.
7515func (future *BastionHostsCreateOrUpdateFuture) Result(client BastionHostsClient) (bh BastionHost, err error) {
7516	var done bool
7517	done, err = future.DoneWithContext(context.Background(), client)
7518	if err != nil {
7519		err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7520		return
7521	}
7522	if !done {
7523		err = azure.NewAsyncOpIncompleteError("network.BastionHostsCreateOrUpdateFuture")
7524		return
7525	}
7526	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7527	if bh.Response.Response, err = future.GetResult(sender); err == nil && bh.Response.Response.StatusCode != http.StatusNoContent {
7528		bh, err = client.CreateOrUpdateResponder(bh.Response.Response)
7529		if err != nil {
7530			err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", bh.Response.Response, "Failure responding to request")
7531		}
7532	}
7533	return
7534}
7535
7536// BastionHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
7537// operation.
7538type BastionHostsDeleteFuture struct {
7539	azure.Future
7540}
7541
7542// Result returns the result of the asynchronous operation.
7543// If the operation has not completed it will return an error.
7544func (future *BastionHostsDeleteFuture) Result(client BastionHostsClient) (ar autorest.Response, err error) {
7545	var done bool
7546	done, err = future.DoneWithContext(context.Background(), client)
7547	if err != nil {
7548		err = autorest.NewErrorWithError(err, "network.BastionHostsDeleteFuture", "Result", future.Response(), "Polling failure")
7549		return
7550	}
7551	if !done {
7552		err = azure.NewAsyncOpIncompleteError("network.BastionHostsDeleteFuture")
7553		return
7554	}
7555	ar.Response = future.Response()
7556	return
7557}
7558
7559// BGPCommunity contains bgp community information offered in Service Community resources.
7560type BGPCommunity struct {
7561	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
7562	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
7563	// CommunityName - The name of the bgp community. e.g. Skype.
7564	CommunityName *string `json:"communityName,omitempty"`
7565	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
7566	CommunityValue *string `json:"communityValue,omitempty"`
7567	// CommunityPrefixes - The prefixes that the bgp community contains.
7568	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
7569	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
7570	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
7571	// ServiceGroup - The service group of the bgp community contains.
7572	ServiceGroup *string `json:"serviceGroup,omitempty"`
7573}
7574
7575// BgpPeerStatus BGP peer status details.
7576type BgpPeerStatus struct {
7577	// LocalAddress - READ-ONLY; The virtual network gateway's local address.
7578	LocalAddress *string `json:"localAddress,omitempty"`
7579	// Neighbor - READ-ONLY; The remote BGP peer.
7580	Neighbor *string `json:"neighbor,omitempty"`
7581	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer.
7582	Asn *int32 `json:"asn,omitempty"`
7583	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
7584	State BgpPeerState `json:"state,omitempty"`
7585	// ConnectedDuration - READ-ONLY; For how long the peering has been up.
7586	ConnectedDuration *string `json:"connectedDuration,omitempty"`
7587	// RoutesReceived - READ-ONLY; The number of routes learned from this peer.
7588	RoutesReceived *int64 `json:"routesReceived,omitempty"`
7589	// MessagesSent - READ-ONLY; The number of BGP messages sent.
7590	MessagesSent *int64 `json:"messagesSent,omitempty"`
7591	// MessagesReceived - READ-ONLY; The number of BGP messages received.
7592	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
7593}
7594
7595// BgpPeerStatusListResult response for list BGP peer status API service call.
7596type BgpPeerStatusListResult struct {
7597	autorest.Response `json:"-"`
7598	// Value - List of BGP peers.
7599	Value *[]BgpPeerStatus `json:"value,omitempty"`
7600}
7601
7602// BgpServiceCommunity service Community Properties.
7603type BgpServiceCommunity struct {
7604	// BgpServiceCommunityPropertiesFormat - Properties of the BGP service community.
7605	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
7606	// ID - Resource ID.
7607	ID *string `json:"id,omitempty"`
7608	// Name - READ-ONLY; Resource name.
7609	Name *string `json:"name,omitempty"`
7610	// Type - READ-ONLY; Resource type.
7611	Type *string `json:"type,omitempty"`
7612	// Location - Resource location.
7613	Location *string `json:"location,omitempty"`
7614	// Tags - Resource tags.
7615	Tags map[string]*string `json:"tags"`
7616}
7617
7618// MarshalJSON is the custom marshaler for BgpServiceCommunity.
7619func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
7620	objectMap := make(map[string]interface{})
7621	if bsc.BgpServiceCommunityPropertiesFormat != nil {
7622		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
7623	}
7624	if bsc.ID != nil {
7625		objectMap["id"] = bsc.ID
7626	}
7627	if bsc.Location != nil {
7628		objectMap["location"] = bsc.Location
7629	}
7630	if bsc.Tags != nil {
7631		objectMap["tags"] = bsc.Tags
7632	}
7633	return json.Marshal(objectMap)
7634}
7635
7636// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
7637func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
7638	var m map[string]*json.RawMessage
7639	err := json.Unmarshal(body, &m)
7640	if err != nil {
7641		return err
7642	}
7643	for k, v := range m {
7644		switch k {
7645		case "properties":
7646			if v != nil {
7647				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
7648				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
7649				if err != nil {
7650					return err
7651				}
7652				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
7653			}
7654		case "id":
7655			if v != nil {
7656				var ID string
7657				err = json.Unmarshal(*v, &ID)
7658				if err != nil {
7659					return err
7660				}
7661				bsc.ID = &ID
7662			}
7663		case "name":
7664			if v != nil {
7665				var name string
7666				err = json.Unmarshal(*v, &name)
7667				if err != nil {
7668					return err
7669				}
7670				bsc.Name = &name
7671			}
7672		case "type":
7673			if v != nil {
7674				var typeVar string
7675				err = json.Unmarshal(*v, &typeVar)
7676				if err != nil {
7677					return err
7678				}
7679				bsc.Type = &typeVar
7680			}
7681		case "location":
7682			if v != nil {
7683				var location string
7684				err = json.Unmarshal(*v, &location)
7685				if err != nil {
7686					return err
7687				}
7688				bsc.Location = &location
7689			}
7690		case "tags":
7691			if v != nil {
7692				var tags map[string]*string
7693				err = json.Unmarshal(*v, &tags)
7694				if err != nil {
7695					return err
7696				}
7697				bsc.Tags = tags
7698			}
7699		}
7700	}
7701
7702	return nil
7703}
7704
7705// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
7706type BgpServiceCommunityListResult struct {
7707	autorest.Response `json:"-"`
7708	// Value - A list of service community resources.
7709	Value *[]BgpServiceCommunity `json:"value,omitempty"`
7710	// NextLink - The URL to get the next set of results.
7711	NextLink *string `json:"nextLink,omitempty"`
7712}
7713
7714// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
7715// values.
7716type BgpServiceCommunityListResultIterator struct {
7717	i    int
7718	page BgpServiceCommunityListResultPage
7719}
7720
7721// NextWithContext advances to the next value.  If there was an error making
7722// the request the iterator does not advance and the error is returned.
7723func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
7724	if tracing.IsEnabled() {
7725		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
7726		defer func() {
7727			sc := -1
7728			if iter.Response().Response.Response != nil {
7729				sc = iter.Response().Response.Response.StatusCode
7730			}
7731			tracing.EndSpan(ctx, sc, err)
7732		}()
7733	}
7734	iter.i++
7735	if iter.i < len(iter.page.Values()) {
7736		return nil
7737	}
7738	err = iter.page.NextWithContext(ctx)
7739	if err != nil {
7740		iter.i--
7741		return err
7742	}
7743	iter.i = 0
7744	return nil
7745}
7746
7747// Next advances to the next value.  If there was an error making
7748// the request the iterator does not advance and the error is returned.
7749// Deprecated: Use NextWithContext() instead.
7750func (iter *BgpServiceCommunityListResultIterator) Next() error {
7751	return iter.NextWithContext(context.Background())
7752}
7753
7754// NotDone returns true if the enumeration should be started or is not yet complete.
7755func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
7756	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7757}
7758
7759// Response returns the raw server response from the last page request.
7760func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
7761	return iter.page.Response()
7762}
7763
7764// Value returns the current value or a zero-initialized value if the
7765// iterator has advanced beyond the end of the collection.
7766func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
7767	if !iter.page.NotDone() {
7768		return BgpServiceCommunity{}
7769	}
7770	return iter.page.Values()[iter.i]
7771}
7772
7773// Creates a new instance of the BgpServiceCommunityListResultIterator type.
7774func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
7775	return BgpServiceCommunityListResultIterator{page: page}
7776}
7777
7778// IsEmpty returns true if the ListResult contains no values.
7779func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
7780	return bsclr.Value == nil || len(*bsclr.Value) == 0
7781}
7782
7783// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
7784// It returns nil if no more results exist.
7785func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
7786	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
7787		return nil, nil
7788	}
7789	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7790		autorest.AsJSON(),
7791		autorest.AsGet(),
7792		autorest.WithBaseURL(to.String(bsclr.NextLink)))
7793}
7794
7795// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
7796type BgpServiceCommunityListResultPage struct {
7797	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
7798	bsclr BgpServiceCommunityListResult
7799}
7800
7801// NextWithContext advances to the next page of values.  If there was an error making
7802// the request the page does not advance and the error is returned.
7803func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
7804	if tracing.IsEnabled() {
7805		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
7806		defer func() {
7807			sc := -1
7808			if page.Response().Response.Response != nil {
7809				sc = page.Response().Response.Response.StatusCode
7810			}
7811			tracing.EndSpan(ctx, sc, err)
7812		}()
7813	}
7814	next, err := page.fn(ctx, page.bsclr)
7815	if err != nil {
7816		return err
7817	}
7818	page.bsclr = next
7819	return nil
7820}
7821
7822// Next advances to the next page of values.  If there was an error making
7823// the request the page does not advance and the error is returned.
7824// Deprecated: Use NextWithContext() instead.
7825func (page *BgpServiceCommunityListResultPage) Next() error {
7826	return page.NextWithContext(context.Background())
7827}
7828
7829// NotDone returns true if the page enumeration should be started or is not yet complete.
7830func (page BgpServiceCommunityListResultPage) NotDone() bool {
7831	return !page.bsclr.IsEmpty()
7832}
7833
7834// Response returns the raw server response from the last page request.
7835func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
7836	return page.bsclr
7837}
7838
7839// Values returns the slice of values for the current page or nil if there are no values.
7840func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
7841	if page.bsclr.IsEmpty() {
7842		return nil
7843	}
7844	return *page.bsclr.Value
7845}
7846
7847// Creates a new instance of the BgpServiceCommunityListResultPage type.
7848func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
7849	return BgpServiceCommunityListResultPage{fn: getNextPage}
7850}
7851
7852// BgpServiceCommunityPropertiesFormat properties of Service Community.
7853type BgpServiceCommunityPropertiesFormat struct {
7854	// ServiceName - The name of the bgp community. e.g. Skype.
7855	ServiceName *string `json:"serviceName,omitempty"`
7856	// BgpCommunities - Get a list of bgp communities.
7857	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
7858}
7859
7860// BgpSettings BGP settings details.
7861type BgpSettings struct {
7862	// Asn - The BGP speaker's ASN.
7863	Asn *int64 `json:"asn,omitempty"`
7864	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
7865	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
7866	// PeerWeight - The weight added to routes learned from this BGP speaker.
7867	PeerWeight *int32 `json:"peerWeight,omitempty"`
7868}
7869
7870// CheckPrivateLinkServiceVisibilityRequest request body of the CheckPrivateLinkServiceVisibility API
7871// service call.
7872type CheckPrivateLinkServiceVisibilityRequest struct {
7873	// PrivateLinkServiceAlias - The alias of the private link service.
7874	PrivateLinkServiceAlias *string `json:"privateLinkServiceAlias,omitempty"`
7875}
7876
7877// CloudError an error response from the Batch service.
7878type CloudError struct {
7879	// Error - Cloud error body.
7880	Error *CloudErrorBody `json:"error,omitempty"`
7881}
7882
7883// CloudErrorBody an error response from the Batch service.
7884type CloudErrorBody struct {
7885	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
7886	Code *string `json:"code,omitempty"`
7887	// Message - A message describing the error, intended to be suitable for display in a user interface.
7888	Message *string `json:"message,omitempty"`
7889	// Target - The target of the particular error. For example, the name of the property in error.
7890	Target *string `json:"target,omitempty"`
7891	// Details - A list of additional details about the error.
7892	Details *[]CloudErrorBody `json:"details,omitempty"`
7893}
7894
7895// ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
7896type ConfigurationDiagnosticParameters struct {
7897	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
7898	TargetResourceID *string `json:"targetResourceId,omitempty"`
7899	// VerbosityLevel - Verbosity level. Possible values include: 'Normal', 'Minimum', 'Full'
7900	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
7901	// Profiles - List of network configuration diagnostic profiles.
7902	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
7903}
7904
7905// ConfigurationDiagnosticProfile parameters to compare with network configuration.
7906type ConfigurationDiagnosticProfile struct {
7907	// Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound'
7908	Direction Direction `json:"direction,omitempty"`
7909	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
7910	Protocol *string `json:"protocol,omitempty"`
7911	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
7912	Source *string `json:"source,omitempty"`
7913	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
7914	Destination *string `json:"destination,omitempty"`
7915	// DestinationPort - Traffic destination port. Accepted values are '*', port (for example, 3389) and port range (for example, 80-100).
7916	DestinationPort *string `json:"destinationPort,omitempty"`
7917}
7918
7919// ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
7920type ConfigurationDiagnosticResponse struct {
7921	autorest.Response `json:"-"`
7922	// Results - READ-ONLY; List of network configuration diagnostic results.
7923	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
7924}
7925
7926// ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
7927// query.
7928type ConfigurationDiagnosticResult struct {
7929	// Profile - Network configuration diagnostic profile.
7930	Profile *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
7931	// NetworkSecurityGroupResult - Network security group result.
7932	NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"`
7933}
7934
7935// ConnectionMonitor parameters that define the operation to create a connection monitor.
7936type ConnectionMonitor struct {
7937	// Location - Connection monitor location.
7938	Location *string `json:"location,omitempty"`
7939	// Tags - Connection monitor tags.
7940	Tags map[string]*string `json:"tags"`
7941	// ConnectionMonitorParameters - Properties of the connection monitor.
7942	*ConnectionMonitorParameters `json:"properties,omitempty"`
7943}
7944
7945// MarshalJSON is the custom marshaler for ConnectionMonitor.
7946func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
7947	objectMap := make(map[string]interface{})
7948	if cm.Location != nil {
7949		objectMap["location"] = cm.Location
7950	}
7951	if cm.Tags != nil {
7952		objectMap["tags"] = cm.Tags
7953	}
7954	if cm.ConnectionMonitorParameters != nil {
7955		objectMap["properties"] = cm.ConnectionMonitorParameters
7956	}
7957	return json.Marshal(objectMap)
7958}
7959
7960// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
7961func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
7962	var m map[string]*json.RawMessage
7963	err := json.Unmarshal(body, &m)
7964	if err != nil {
7965		return err
7966	}
7967	for k, v := range m {
7968		switch k {
7969		case "location":
7970			if v != nil {
7971				var location string
7972				err = json.Unmarshal(*v, &location)
7973				if err != nil {
7974					return err
7975				}
7976				cm.Location = &location
7977			}
7978		case "tags":
7979			if v != nil {
7980				var tags map[string]*string
7981				err = json.Unmarshal(*v, &tags)
7982				if err != nil {
7983					return err
7984				}
7985				cm.Tags = tags
7986			}
7987		case "properties":
7988			if v != nil {
7989				var connectionMonitorParameters ConnectionMonitorParameters
7990				err = json.Unmarshal(*v, &connectionMonitorParameters)
7991				if err != nil {
7992					return err
7993				}
7994				cm.ConnectionMonitorParameters = &connectionMonitorParameters
7995			}
7996		}
7997	}
7998
7999	return nil
8000}
8001
8002// ConnectionMonitorDestination describes the destination of connection monitor.
8003type ConnectionMonitorDestination struct {
8004	// ResourceID - The ID of the resource used as the destination by connection monitor.
8005	ResourceID *string `json:"resourceId,omitempty"`
8006	// Address - Address of the connection monitor destination (IP or domain name).
8007	Address *string `json:"address,omitempty"`
8008	// Port - The destination port used by connection monitor.
8009	Port *int32 `json:"port,omitempty"`
8010}
8011
8012// ConnectionMonitorListResult list of connection monitors.
8013type ConnectionMonitorListResult struct {
8014	autorest.Response `json:"-"`
8015	// Value - Information about connection monitors.
8016	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
8017}
8018
8019// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
8020type ConnectionMonitorParameters struct {
8021	// Source - Describes the source of connection monitor.
8022	Source *ConnectionMonitorSource `json:"source,omitempty"`
8023	// Destination - Describes the destination of connection monitor.
8024	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
8025	// AutoStart - Determines if the connection monitor will start automatically once created.
8026	AutoStart *bool `json:"autoStart,omitempty"`
8027	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
8028	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
8029}
8030
8031// ConnectionMonitorQueryResult list of connection states snapshots.
8032type ConnectionMonitorQueryResult struct {
8033	autorest.Response `json:"-"`
8034	// SourceStatus - Status of connection monitor source. Possible values include: 'ConnectionMonitorSourceStatusUnknown', 'ConnectionMonitorSourceStatusActive', 'ConnectionMonitorSourceStatusInactive'
8035	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
8036	// States - Information about connection states.
8037	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
8038}
8039
8040// ConnectionMonitorResult information about the connection monitor.
8041type ConnectionMonitorResult struct {
8042	autorest.Response `json:"-"`
8043	// Name - READ-ONLY; Name of the connection monitor.
8044	Name *string `json:"name,omitempty"`
8045	// ID - READ-ONLY; ID of the connection monitor.
8046	ID *string `json:"id,omitempty"`
8047	// Etag - A unique read-only string that changes whenever the resource is updated.
8048	Etag *string `json:"etag,omitempty"`
8049	// Type - READ-ONLY; Connection monitor type.
8050	Type *string `json:"type,omitempty"`
8051	// Location - Connection monitor location.
8052	Location *string `json:"location,omitempty"`
8053	// Tags - Connection monitor tags.
8054	Tags map[string]*string `json:"tags"`
8055	// ConnectionMonitorResultProperties - Properties of the connection monitor result.
8056	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
8057}
8058
8059// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
8060func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
8061	objectMap := make(map[string]interface{})
8062	if cmr.Etag != nil {
8063		objectMap["etag"] = cmr.Etag
8064	}
8065	if cmr.Location != nil {
8066		objectMap["location"] = cmr.Location
8067	}
8068	if cmr.Tags != nil {
8069		objectMap["tags"] = cmr.Tags
8070	}
8071	if cmr.ConnectionMonitorResultProperties != nil {
8072		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
8073	}
8074	return json.Marshal(objectMap)
8075}
8076
8077// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
8078func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
8079	var m map[string]*json.RawMessage
8080	err := json.Unmarshal(body, &m)
8081	if err != nil {
8082		return err
8083	}
8084	for k, v := range m {
8085		switch k {
8086		case "name":
8087			if v != nil {
8088				var name string
8089				err = json.Unmarshal(*v, &name)
8090				if err != nil {
8091					return err
8092				}
8093				cmr.Name = &name
8094			}
8095		case "id":
8096			if v != nil {
8097				var ID string
8098				err = json.Unmarshal(*v, &ID)
8099				if err != nil {
8100					return err
8101				}
8102				cmr.ID = &ID
8103			}
8104		case "etag":
8105			if v != nil {
8106				var etag string
8107				err = json.Unmarshal(*v, &etag)
8108				if err != nil {
8109					return err
8110				}
8111				cmr.Etag = &etag
8112			}
8113		case "type":
8114			if v != nil {
8115				var typeVar string
8116				err = json.Unmarshal(*v, &typeVar)
8117				if err != nil {
8118					return err
8119				}
8120				cmr.Type = &typeVar
8121			}
8122		case "location":
8123			if v != nil {
8124				var location string
8125				err = json.Unmarshal(*v, &location)
8126				if err != nil {
8127					return err
8128				}
8129				cmr.Location = &location
8130			}
8131		case "tags":
8132			if v != nil {
8133				var tags map[string]*string
8134				err = json.Unmarshal(*v, &tags)
8135				if err != nil {
8136					return err
8137				}
8138				cmr.Tags = tags
8139			}
8140		case "properties":
8141			if v != nil {
8142				var connectionMonitorResultProperties ConnectionMonitorResultProperties
8143				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
8144				if err != nil {
8145					return err
8146				}
8147				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
8148			}
8149		}
8150	}
8151
8152	return nil
8153}
8154
8155// ConnectionMonitorResultProperties describes the properties of a connection monitor.
8156type ConnectionMonitorResultProperties struct {
8157	// ProvisioningState - The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8158	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8159	// StartTime - The date and time when the connection monitor was started.
8160	StartTime *date.Time `json:"startTime,omitempty"`
8161	// MonitoringStatus - The monitoring status of the connection monitor.
8162	MonitoringStatus *string `json:"monitoringStatus,omitempty"`
8163	// Source - Describes the source of connection monitor.
8164	Source *ConnectionMonitorSource `json:"source,omitempty"`
8165	// Destination - Describes the destination of connection monitor.
8166	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
8167	// AutoStart - Determines if the connection monitor will start automatically once created.
8168	AutoStart *bool `json:"autoStart,omitempty"`
8169	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
8170	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
8171}
8172
8173// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8174// long-running operation.
8175type ConnectionMonitorsCreateOrUpdateFuture struct {
8176	azure.Future
8177}
8178
8179// Result returns the result of the asynchronous operation.
8180// If the operation has not completed it will return an error.
8181func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
8182	var done bool
8183	done, err = future.DoneWithContext(context.Background(), client)
8184	if err != nil {
8185		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8186		return
8187	}
8188	if !done {
8189		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
8190		return
8191	}
8192	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8193	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
8194		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
8195		if err != nil {
8196			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
8197		}
8198	}
8199	return
8200}
8201
8202// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
8203// long-running operation.
8204type ConnectionMonitorsDeleteFuture struct {
8205	azure.Future
8206}
8207
8208// Result returns the result of the asynchronous operation.
8209// If the operation has not completed it will return an error.
8210func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8211	var done bool
8212	done, err = future.DoneWithContext(context.Background(), client)
8213	if err != nil {
8214		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
8215		return
8216	}
8217	if !done {
8218		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
8219		return
8220	}
8221	ar.Response = future.Response()
8222	return
8223}
8224
8225// ConnectionMonitorSource describes the source of connection monitor.
8226type ConnectionMonitorSource struct {
8227	// ResourceID - The ID of the resource used as the source by connection monitor.
8228	ResourceID *string `json:"resourceId,omitempty"`
8229	// Port - The source port used by connection monitor.
8230	Port *int32 `json:"port,omitempty"`
8231}
8232
8233// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
8234// operation.
8235type ConnectionMonitorsQueryFuture struct {
8236	azure.Future
8237}
8238
8239// Result returns the result of the asynchronous operation.
8240// If the operation has not completed it will return an error.
8241func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
8242	var done bool
8243	done, err = future.DoneWithContext(context.Background(), client)
8244	if err != nil {
8245		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
8246		return
8247	}
8248	if !done {
8249		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
8250		return
8251	}
8252	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8253	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
8254		cmqr, err = client.QueryResponder(cmqr.Response.Response)
8255		if err != nil {
8256			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
8257		}
8258	}
8259	return
8260}
8261
8262// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
8263// operation.
8264type ConnectionMonitorsStartFuture struct {
8265	azure.Future
8266}
8267
8268// Result returns the result of the asynchronous operation.
8269// If the operation has not completed it will return an error.
8270func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8271	var done bool
8272	done, err = future.DoneWithContext(context.Background(), client)
8273	if err != nil {
8274		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
8275		return
8276	}
8277	if !done {
8278		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
8279		return
8280	}
8281	ar.Response = future.Response()
8282	return
8283}
8284
8285// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
8286// operation.
8287type ConnectionMonitorsStopFuture struct {
8288	azure.Future
8289}
8290
8291// Result returns the result of the asynchronous operation.
8292// If the operation has not completed it will return an error.
8293func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8294	var done bool
8295	done, err = future.DoneWithContext(context.Background(), client)
8296	if err != nil {
8297		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
8298		return
8299	}
8300	if !done {
8301		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
8302		return
8303	}
8304	ar.Response = future.Response()
8305	return
8306}
8307
8308// ConnectionResetSharedKey the virtual network connection reset shared key.
8309type ConnectionResetSharedKey struct {
8310	autorest.Response `json:"-"`
8311	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
8312	KeyLength *int32 `json:"keyLength,omitempty"`
8313}
8314
8315// ConnectionSharedKey response for GetConnectionSharedKey API service call.
8316type ConnectionSharedKey struct {
8317	autorest.Response `json:"-"`
8318	// Value - The virtual network connection shared key value.
8319	Value *string `json:"value,omitempty"`
8320	// ID - Resource ID.
8321	ID *string `json:"id,omitempty"`
8322}
8323
8324// ConnectionStateSnapshot connection state snapshot.
8325type ConnectionStateSnapshot struct {
8326	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
8327	ConnectionState ConnectionState `json:"connectionState,omitempty"`
8328	// StartTime - The start time of the connection snapshot.
8329	StartTime *date.Time `json:"startTime,omitempty"`
8330	// EndTime - The end time of the connection snapshot.
8331	EndTime *date.Time `json:"endTime,omitempty"`
8332	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
8333	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
8334	// AvgLatencyInMs - Average latency in ms.
8335	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
8336	// MinLatencyInMs - Minimum latency in ms.
8337	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
8338	// MaxLatencyInMs - Maximum latency in ms.
8339	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
8340	// ProbesSent - The number of sent probes.
8341	ProbesSent *int32 `json:"probesSent,omitempty"`
8342	// ProbesFailed - The number of failed probes.
8343	ProbesFailed *int32 `json:"probesFailed,omitempty"`
8344	// Hops - READ-ONLY; List of hops between the source and the destination.
8345	Hops *[]ConnectivityHop `json:"hops,omitempty"`
8346}
8347
8348// ConnectivityDestination parameters that define destination of connection.
8349type ConnectivityDestination struct {
8350	// ResourceID - The ID of the resource to which a connection attempt will be made.
8351	ResourceID *string `json:"resourceId,omitempty"`
8352	// Address - The IP address or URI the resource to which a connection attempt will be made.
8353	Address *string `json:"address,omitempty"`
8354	// Port - Port on which check connectivity will be performed.
8355	Port *int32 `json:"port,omitempty"`
8356}
8357
8358// ConnectivityHop information about a hop between the source and the destination.
8359type ConnectivityHop struct {
8360	// Type - READ-ONLY; The type of the hop.
8361	Type *string `json:"type,omitempty"`
8362	// ID - READ-ONLY; The ID of the hop.
8363	ID *string `json:"id,omitempty"`
8364	// Address - READ-ONLY; The IP address of the hop.
8365	Address *string `json:"address,omitempty"`
8366	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
8367	ResourceID *string `json:"resourceId,omitempty"`
8368	// NextHopIds - READ-ONLY; List of next hop identifiers.
8369	NextHopIds *[]string `json:"nextHopIds,omitempty"`
8370	// Issues - READ-ONLY; List of issues.
8371	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
8372}
8373
8374// ConnectivityInformation information on the connectivity status.
8375type ConnectivityInformation struct {
8376	autorest.Response `json:"-"`
8377	// Hops - READ-ONLY; List of hops between the source and the destination.
8378	Hops *[]ConnectivityHop `json:"hops,omitempty"`
8379	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
8380	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
8381	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
8382	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
8383	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
8384	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
8385	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
8386	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
8387	// ProbesSent - READ-ONLY; Total number of probes sent.
8388	ProbesSent *int32 `json:"probesSent,omitempty"`
8389	// ProbesFailed - READ-ONLY; Number of failed probes.
8390	ProbesFailed *int32 `json:"probesFailed,omitempty"`
8391}
8392
8393// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
8394type ConnectivityIssue struct {
8395	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
8396	Origin Origin `json:"origin,omitempty"`
8397	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
8398	Severity Severity `json:"severity,omitempty"`
8399	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
8400	Type IssueType `json:"type,omitempty"`
8401	// Context - READ-ONLY; Provides additional context on the issue.
8402	Context *[]map[string]*string `json:"context,omitempty"`
8403}
8404
8405// ConnectivityParameters parameters that determine how the connectivity check will be performed.
8406type ConnectivityParameters struct {
8407	// Source - Describes the source of the connection.
8408	Source *ConnectivitySource `json:"source,omitempty"`
8409	// Destination - Describes the destination of connection.
8410	Destination *ConnectivityDestination `json:"destination,omitempty"`
8411	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
8412	Protocol Protocol `json:"protocol,omitempty"`
8413	// ProtocolConfiguration - Configuration of the protocol.
8414	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
8415}
8416
8417// ConnectivitySource parameters that define the source of the connection.
8418type ConnectivitySource struct {
8419	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
8420	ResourceID *string `json:"resourceId,omitempty"`
8421	// Port - The source port from which a connectivity check will be performed.
8422	Port *int32 `json:"port,omitempty"`
8423}
8424
8425// Container reference to container resource in remote resource provider.
8426type Container struct {
8427	// ID - Resource ID.
8428	ID *string `json:"id,omitempty"`
8429}
8430
8431// ContainerNetworkInterface container network interface child resource.
8432type ContainerNetworkInterface struct {
8433	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
8434	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
8435	// Name - The name of the resource. This name can be used to access the resource.
8436	Name *string `json:"name,omitempty"`
8437	// Type - READ-ONLY; Sub Resource type.
8438	Type *string `json:"type,omitempty"`
8439	// Etag - A unique read-only string that changes whenever the resource is updated.
8440	Etag *string `json:"etag,omitempty"`
8441	// ID - Resource ID.
8442	ID *string `json:"id,omitempty"`
8443}
8444
8445// MarshalJSON is the custom marshaler for ContainerNetworkInterface.
8446func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
8447	objectMap := make(map[string]interface{})
8448	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
8449		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
8450	}
8451	if cni.Name != nil {
8452		objectMap["name"] = cni.Name
8453	}
8454	if cni.Etag != nil {
8455		objectMap["etag"] = cni.Etag
8456	}
8457	if cni.ID != nil {
8458		objectMap["id"] = cni.ID
8459	}
8460	return json.Marshal(objectMap)
8461}
8462
8463// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
8464func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
8465	var m map[string]*json.RawMessage
8466	err := json.Unmarshal(body, &m)
8467	if err != nil {
8468		return err
8469	}
8470	for k, v := range m {
8471		switch k {
8472		case "properties":
8473			if v != nil {
8474				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
8475				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
8476				if err != nil {
8477					return err
8478				}
8479				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
8480			}
8481		case "name":
8482			if v != nil {
8483				var name string
8484				err = json.Unmarshal(*v, &name)
8485				if err != nil {
8486					return err
8487				}
8488				cni.Name = &name
8489			}
8490		case "type":
8491			if v != nil {
8492				var typeVar string
8493				err = json.Unmarshal(*v, &typeVar)
8494				if err != nil {
8495					return err
8496				}
8497				cni.Type = &typeVar
8498			}
8499		case "etag":
8500			if v != nil {
8501				var etag string
8502				err = json.Unmarshal(*v, &etag)
8503				if err != nil {
8504					return err
8505				}
8506				cni.Etag = &etag
8507			}
8508		case "id":
8509			if v != nil {
8510				var ID string
8511				err = json.Unmarshal(*v, &ID)
8512				if err != nil {
8513					return err
8514				}
8515				cni.ID = &ID
8516			}
8517		}
8518	}
8519
8520	return nil
8521}
8522
8523// ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
8524type ContainerNetworkInterfaceConfiguration struct {
8525	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
8526	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
8527	// Name - The name of the resource. This name can be used to access the resource.
8528	Name *string `json:"name,omitempty"`
8529	// Type - READ-ONLY; Sub Resource type.
8530	Type *string `json:"type,omitempty"`
8531	// Etag - A unique read-only string that changes whenever the resource is updated.
8532	Etag *string `json:"etag,omitempty"`
8533	// ID - Resource ID.
8534	ID *string `json:"id,omitempty"`
8535}
8536
8537// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
8538func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
8539	objectMap := make(map[string]interface{})
8540	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
8541		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
8542	}
8543	if cnic.Name != nil {
8544		objectMap["name"] = cnic.Name
8545	}
8546	if cnic.Etag != nil {
8547		objectMap["etag"] = cnic.Etag
8548	}
8549	if cnic.ID != nil {
8550		objectMap["id"] = cnic.ID
8551	}
8552	return json.Marshal(objectMap)
8553}
8554
8555// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
8556func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
8557	var m map[string]*json.RawMessage
8558	err := json.Unmarshal(body, &m)
8559	if err != nil {
8560		return err
8561	}
8562	for k, v := range m {
8563		switch k {
8564		case "properties":
8565			if v != nil {
8566				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
8567				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
8568				if err != nil {
8569					return err
8570				}
8571				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
8572			}
8573		case "name":
8574			if v != nil {
8575				var name string
8576				err = json.Unmarshal(*v, &name)
8577				if err != nil {
8578					return err
8579				}
8580				cnic.Name = &name
8581			}
8582		case "type":
8583			if v != nil {
8584				var typeVar string
8585				err = json.Unmarshal(*v, &typeVar)
8586				if err != nil {
8587					return err
8588				}
8589				cnic.Type = &typeVar
8590			}
8591		case "etag":
8592			if v != nil {
8593				var etag string
8594				err = json.Unmarshal(*v, &etag)
8595				if err != nil {
8596					return err
8597				}
8598				cnic.Etag = &etag
8599			}
8600		case "id":
8601			if v != nil {
8602				var ID string
8603				err = json.Unmarshal(*v, &ID)
8604				if err != nil {
8605					return err
8606				}
8607				cnic.ID = &ID
8608			}
8609		}
8610	}
8611
8612	return nil
8613}
8614
8615// ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
8616// properties.
8617type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
8618	// IPConfigurations - A list of ip configurations of the container network interface configuration.
8619	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
8620	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
8621	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
8622	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
8623	ProvisioningState *string `json:"provisioningState,omitempty"`
8624}
8625
8626// ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
8627type ContainerNetworkInterfaceIPConfiguration struct {
8628	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
8629	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
8630	// Name - The name of the resource. This name can be used to access the resource.
8631	Name *string `json:"name,omitempty"`
8632	// Type - READ-ONLY; Sub Resource type.
8633	Type *string `json:"type,omitempty"`
8634	// Etag - A unique read-only string that changes whenever the resource is updated.
8635	Etag *string `json:"etag,omitempty"`
8636}
8637
8638// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
8639func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
8640	objectMap := make(map[string]interface{})
8641	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
8642		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
8643	}
8644	if cniic.Name != nil {
8645		objectMap["name"] = cniic.Name
8646	}
8647	if cniic.Etag != nil {
8648		objectMap["etag"] = cniic.Etag
8649	}
8650	return json.Marshal(objectMap)
8651}
8652
8653// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
8654func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
8655	var m map[string]*json.RawMessage
8656	err := json.Unmarshal(body, &m)
8657	if err != nil {
8658		return err
8659	}
8660	for k, v := range m {
8661		switch k {
8662		case "properties":
8663			if v != nil {
8664				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
8665				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
8666				if err != nil {
8667					return err
8668				}
8669				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
8670			}
8671		case "name":
8672			if v != nil {
8673				var name string
8674				err = json.Unmarshal(*v, &name)
8675				if err != nil {
8676					return err
8677				}
8678				cniic.Name = &name
8679			}
8680		case "type":
8681			if v != nil {
8682				var typeVar string
8683				err = json.Unmarshal(*v, &typeVar)
8684				if err != nil {
8685					return err
8686				}
8687				cniic.Type = &typeVar
8688			}
8689		case "etag":
8690			if v != nil {
8691				var etag string
8692				err = json.Unmarshal(*v, &etag)
8693				if err != nil {
8694					return err
8695				}
8696				cniic.Etag = &etag
8697			}
8698		}
8699	}
8700
8701	return nil
8702}
8703
8704// ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
8705// IP configuration.
8706type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
8707	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
8708	ProvisioningState *string `json:"provisioningState,omitempty"`
8709}
8710
8711// ContainerNetworkInterfacePropertiesFormat properties of container network interface.
8712type ContainerNetworkInterfacePropertiesFormat struct {
8713	// ContainerNetworkInterfaceConfiguration - Container network interface configuration from which this container network interface is created.
8714	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
8715	// Container - Reference to the container to which this container network interface is attached.
8716	Container *Container `json:"container,omitempty"`
8717	// IPConfigurations - Reference to the ip configuration on this container nic.
8718	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
8719	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
8720	ProvisioningState *string `json:"provisioningState,omitempty"`
8721}
8722
8723// DdosCustomPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8724// long-running operation.
8725type DdosCustomPoliciesCreateOrUpdateFuture struct {
8726	azure.Future
8727}
8728
8729// Result returns the result of the asynchronous operation.
8730// If the operation has not completed it will return an error.
8731func (future *DdosCustomPoliciesCreateOrUpdateFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
8732	var done bool
8733	done, err = future.DoneWithContext(context.Background(), client)
8734	if err != nil {
8735		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8736		return
8737	}
8738	if !done {
8739		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesCreateOrUpdateFuture")
8740		return
8741	}
8742	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8743	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
8744		dcp, err = client.CreateOrUpdateResponder(dcp.Response.Response)
8745		if err != nil {
8746			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", dcp.Response.Response, "Failure responding to request")
8747		}
8748	}
8749	return
8750}
8751
8752// DdosCustomPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
8753// long-running operation.
8754type DdosCustomPoliciesDeleteFuture struct {
8755	azure.Future
8756}
8757
8758// Result returns the result of the asynchronous operation.
8759// If the operation has not completed it will return an error.
8760func (future *DdosCustomPoliciesDeleteFuture) Result(client DdosCustomPoliciesClient) (ar autorest.Response, err error) {
8761	var done bool
8762	done, err = future.DoneWithContext(context.Background(), client)
8763	if err != nil {
8764		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
8765		return
8766	}
8767	if !done {
8768		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesDeleteFuture")
8769		return
8770	}
8771	ar.Response = future.Response()
8772	return
8773}
8774
8775// DdosCustomPoliciesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
8776// long-running operation.
8777type DdosCustomPoliciesUpdateTagsFuture struct {
8778	azure.Future
8779}
8780
8781// Result returns the result of the asynchronous operation.
8782// If the operation has not completed it will return an error.
8783func (future *DdosCustomPoliciesUpdateTagsFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
8784	var done bool
8785	done, err = future.DoneWithContext(context.Background(), client)
8786	if err != nil {
8787		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
8788		return
8789	}
8790	if !done {
8791		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesUpdateTagsFuture")
8792		return
8793	}
8794	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8795	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
8796		dcp, err = client.UpdateTagsResponder(dcp.Response.Response)
8797		if err != nil {
8798			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", dcp.Response.Response, "Failure responding to request")
8799		}
8800	}
8801	return
8802}
8803
8804// DdosCustomPolicy a DDoS custom policy in a resource group.
8805type DdosCustomPolicy struct {
8806	autorest.Response `json:"-"`
8807	// DdosCustomPolicyPropertiesFormat - Properties of the DDoS custom policy.
8808	*DdosCustomPolicyPropertiesFormat `json:"properties,omitempty"`
8809	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8810	Etag *string `json:"etag,omitempty"`
8811	// ID - Resource ID.
8812	ID *string `json:"id,omitempty"`
8813	// Name - READ-ONLY; Resource name.
8814	Name *string `json:"name,omitempty"`
8815	// Type - READ-ONLY; Resource type.
8816	Type *string `json:"type,omitempty"`
8817	// Location - Resource location.
8818	Location *string `json:"location,omitempty"`
8819	// Tags - Resource tags.
8820	Tags map[string]*string `json:"tags"`
8821}
8822
8823// MarshalJSON is the custom marshaler for DdosCustomPolicy.
8824func (dcp DdosCustomPolicy) MarshalJSON() ([]byte, error) {
8825	objectMap := make(map[string]interface{})
8826	if dcp.DdosCustomPolicyPropertiesFormat != nil {
8827		objectMap["properties"] = dcp.DdosCustomPolicyPropertiesFormat
8828	}
8829	if dcp.ID != nil {
8830		objectMap["id"] = dcp.ID
8831	}
8832	if dcp.Location != nil {
8833		objectMap["location"] = dcp.Location
8834	}
8835	if dcp.Tags != nil {
8836		objectMap["tags"] = dcp.Tags
8837	}
8838	return json.Marshal(objectMap)
8839}
8840
8841// UnmarshalJSON is the custom unmarshaler for DdosCustomPolicy struct.
8842func (dcp *DdosCustomPolicy) UnmarshalJSON(body []byte) error {
8843	var m map[string]*json.RawMessage
8844	err := json.Unmarshal(body, &m)
8845	if err != nil {
8846		return err
8847	}
8848	for k, v := range m {
8849		switch k {
8850		case "properties":
8851			if v != nil {
8852				var ddosCustomPolicyPropertiesFormat DdosCustomPolicyPropertiesFormat
8853				err = json.Unmarshal(*v, &ddosCustomPolicyPropertiesFormat)
8854				if err != nil {
8855					return err
8856				}
8857				dcp.DdosCustomPolicyPropertiesFormat = &ddosCustomPolicyPropertiesFormat
8858			}
8859		case "etag":
8860			if v != nil {
8861				var etag string
8862				err = json.Unmarshal(*v, &etag)
8863				if err != nil {
8864					return err
8865				}
8866				dcp.Etag = &etag
8867			}
8868		case "id":
8869			if v != nil {
8870				var ID string
8871				err = json.Unmarshal(*v, &ID)
8872				if err != nil {
8873					return err
8874				}
8875				dcp.ID = &ID
8876			}
8877		case "name":
8878			if v != nil {
8879				var name string
8880				err = json.Unmarshal(*v, &name)
8881				if err != nil {
8882					return err
8883				}
8884				dcp.Name = &name
8885			}
8886		case "type":
8887			if v != nil {
8888				var typeVar string
8889				err = json.Unmarshal(*v, &typeVar)
8890				if err != nil {
8891					return err
8892				}
8893				dcp.Type = &typeVar
8894			}
8895		case "location":
8896			if v != nil {
8897				var location string
8898				err = json.Unmarshal(*v, &location)
8899				if err != nil {
8900					return err
8901				}
8902				dcp.Location = &location
8903			}
8904		case "tags":
8905			if v != nil {
8906				var tags map[string]*string
8907				err = json.Unmarshal(*v, &tags)
8908				if err != nil {
8909					return err
8910				}
8911				dcp.Tags = tags
8912			}
8913		}
8914	}
8915
8916	return nil
8917}
8918
8919// DdosCustomPolicyPropertiesFormat dDoS custom policy properties.
8920type DdosCustomPolicyPropertiesFormat struct {
8921	// 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.
8922	ResourceGUID *string `json:"resourceGuid,omitempty"`
8923	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
8924	ProvisioningState *string `json:"provisioningState,omitempty"`
8925	// PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only.
8926	PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"`
8927	// ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters.
8928	ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"`
8929}
8930
8931// DdosProtectionPlan a DDoS protection plan in a resource group.
8932type DdosProtectionPlan struct {
8933	autorest.Response `json:"-"`
8934	// ID - READ-ONLY; Resource ID.
8935	ID *string `json:"id,omitempty"`
8936	// Name - READ-ONLY; Resource name.
8937	Name *string `json:"name,omitempty"`
8938	// Type - READ-ONLY; Resource type.
8939	Type *string `json:"type,omitempty"`
8940	// Location - Resource location.
8941	Location *string `json:"location,omitempty"`
8942	// Tags - Resource tags.
8943	Tags map[string]*string `json:"tags"`
8944	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
8945	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
8946	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8947	Etag *string `json:"etag,omitempty"`
8948}
8949
8950// MarshalJSON is the custom marshaler for DdosProtectionPlan.
8951func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
8952	objectMap := make(map[string]interface{})
8953	if dpp.Location != nil {
8954		objectMap["location"] = dpp.Location
8955	}
8956	if dpp.Tags != nil {
8957		objectMap["tags"] = dpp.Tags
8958	}
8959	if dpp.DdosProtectionPlanPropertiesFormat != nil {
8960		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
8961	}
8962	return json.Marshal(objectMap)
8963}
8964
8965// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
8966func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
8967	var m map[string]*json.RawMessage
8968	err := json.Unmarshal(body, &m)
8969	if err != nil {
8970		return err
8971	}
8972	for k, v := range m {
8973		switch k {
8974		case "id":
8975			if v != nil {
8976				var ID string
8977				err = json.Unmarshal(*v, &ID)
8978				if err != nil {
8979					return err
8980				}
8981				dpp.ID = &ID
8982			}
8983		case "name":
8984			if v != nil {
8985				var name string
8986				err = json.Unmarshal(*v, &name)
8987				if err != nil {
8988					return err
8989				}
8990				dpp.Name = &name
8991			}
8992		case "type":
8993			if v != nil {
8994				var typeVar string
8995				err = json.Unmarshal(*v, &typeVar)
8996				if err != nil {
8997					return err
8998				}
8999				dpp.Type = &typeVar
9000			}
9001		case "location":
9002			if v != nil {
9003				var location string
9004				err = json.Unmarshal(*v, &location)
9005				if err != nil {
9006					return err
9007				}
9008				dpp.Location = &location
9009			}
9010		case "tags":
9011			if v != nil {
9012				var tags map[string]*string
9013				err = json.Unmarshal(*v, &tags)
9014				if err != nil {
9015					return err
9016				}
9017				dpp.Tags = tags
9018			}
9019		case "properties":
9020			if v != nil {
9021				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
9022				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
9023				if err != nil {
9024					return err
9025				}
9026				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
9027			}
9028		case "etag":
9029			if v != nil {
9030				var etag string
9031				err = json.Unmarshal(*v, &etag)
9032				if err != nil {
9033					return err
9034				}
9035				dpp.Etag = &etag
9036			}
9037		}
9038	}
9039
9040	return nil
9041}
9042
9043// DdosProtectionPlanListResult a list of DDoS protection plans.
9044type DdosProtectionPlanListResult struct {
9045	autorest.Response `json:"-"`
9046	// Value - A list of DDoS protection plans.
9047	Value *[]DdosProtectionPlan `json:"value,omitempty"`
9048	// NextLink - READ-ONLY; The URL to get the next set of results.
9049	NextLink *string `json:"nextLink,omitempty"`
9050}
9051
9052// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
9053type DdosProtectionPlanListResultIterator struct {
9054	i    int
9055	page DdosProtectionPlanListResultPage
9056}
9057
9058// NextWithContext advances to the next value.  If there was an error making
9059// the request the iterator does not advance and the error is returned.
9060func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
9061	if tracing.IsEnabled() {
9062		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
9063		defer func() {
9064			sc := -1
9065			if iter.Response().Response.Response != nil {
9066				sc = iter.Response().Response.Response.StatusCode
9067			}
9068			tracing.EndSpan(ctx, sc, err)
9069		}()
9070	}
9071	iter.i++
9072	if iter.i < len(iter.page.Values()) {
9073		return nil
9074	}
9075	err = iter.page.NextWithContext(ctx)
9076	if err != nil {
9077		iter.i--
9078		return err
9079	}
9080	iter.i = 0
9081	return nil
9082}
9083
9084// Next advances to the next value.  If there was an error making
9085// the request the iterator does not advance and the error is returned.
9086// Deprecated: Use NextWithContext() instead.
9087func (iter *DdosProtectionPlanListResultIterator) Next() error {
9088	return iter.NextWithContext(context.Background())
9089}
9090
9091// NotDone returns true if the enumeration should be started or is not yet complete.
9092func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
9093	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9094}
9095
9096// Response returns the raw server response from the last page request.
9097func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
9098	return iter.page.Response()
9099}
9100
9101// Value returns the current value or a zero-initialized value if the
9102// iterator has advanced beyond the end of the collection.
9103func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
9104	if !iter.page.NotDone() {
9105		return DdosProtectionPlan{}
9106	}
9107	return iter.page.Values()[iter.i]
9108}
9109
9110// Creates a new instance of the DdosProtectionPlanListResultIterator type.
9111func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
9112	return DdosProtectionPlanListResultIterator{page: page}
9113}
9114
9115// IsEmpty returns true if the ListResult contains no values.
9116func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
9117	return dpplr.Value == nil || len(*dpplr.Value) == 0
9118}
9119
9120// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
9121// It returns nil if no more results exist.
9122func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
9123	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
9124		return nil, nil
9125	}
9126	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9127		autorest.AsJSON(),
9128		autorest.AsGet(),
9129		autorest.WithBaseURL(to.String(dpplr.NextLink)))
9130}
9131
9132// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
9133type DdosProtectionPlanListResultPage struct {
9134	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
9135	dpplr DdosProtectionPlanListResult
9136}
9137
9138// NextWithContext advances to the next page of values.  If there was an error making
9139// the request the page does not advance and the error is returned.
9140func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
9141	if tracing.IsEnabled() {
9142		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
9143		defer func() {
9144			sc := -1
9145			if page.Response().Response.Response != nil {
9146				sc = page.Response().Response.Response.StatusCode
9147			}
9148			tracing.EndSpan(ctx, sc, err)
9149		}()
9150	}
9151	next, err := page.fn(ctx, page.dpplr)
9152	if err != nil {
9153		return err
9154	}
9155	page.dpplr = next
9156	return nil
9157}
9158
9159// Next advances to the next page of values.  If there was an error making
9160// the request the page does not advance and the error is returned.
9161// Deprecated: Use NextWithContext() instead.
9162func (page *DdosProtectionPlanListResultPage) Next() error {
9163	return page.NextWithContext(context.Background())
9164}
9165
9166// NotDone returns true if the page enumeration should be started or is not yet complete.
9167func (page DdosProtectionPlanListResultPage) NotDone() bool {
9168	return !page.dpplr.IsEmpty()
9169}
9170
9171// Response returns the raw server response from the last page request.
9172func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
9173	return page.dpplr
9174}
9175
9176// Values returns the slice of values for the current page or nil if there are no values.
9177func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
9178	if page.dpplr.IsEmpty() {
9179		return nil
9180	}
9181	return *page.dpplr.Value
9182}
9183
9184// Creates a new instance of the DdosProtectionPlanListResultPage type.
9185func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
9186	return DdosProtectionPlanListResultPage{fn: getNextPage}
9187}
9188
9189// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
9190type DdosProtectionPlanPropertiesFormat struct {
9191	// 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.
9192	ResourceGUID *string `json:"resourceGuid,omitempty"`
9193	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
9194	ProvisioningState *string `json:"provisioningState,omitempty"`
9195	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
9196	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
9197}
9198
9199// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9200// long-running operation.
9201type DdosProtectionPlansCreateOrUpdateFuture struct {
9202	azure.Future
9203}
9204
9205// Result returns the result of the asynchronous operation.
9206// If the operation has not completed it will return an error.
9207func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
9208	var done bool
9209	done, err = future.DoneWithContext(context.Background(), client)
9210	if err != nil {
9211		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9212		return
9213	}
9214	if !done {
9215		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
9216		return
9217	}
9218	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9219	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
9220		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
9221		if err != nil {
9222			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
9223		}
9224	}
9225	return
9226}
9227
9228// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
9229// long-running operation.
9230type DdosProtectionPlansDeleteFuture struct {
9231	azure.Future
9232}
9233
9234// Result returns the result of the asynchronous operation.
9235// If the operation has not completed it will return an error.
9236func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
9237	var done bool
9238	done, err = future.DoneWithContext(context.Background(), client)
9239	if err != nil {
9240		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
9241		return
9242	}
9243	if !done {
9244		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
9245		return
9246	}
9247	ar.Response = future.Response()
9248	return
9249}
9250
9251// DdosProtectionPlansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
9252// long-running operation.
9253type DdosProtectionPlansUpdateTagsFuture struct {
9254	azure.Future
9255}
9256
9257// Result returns the result of the asynchronous operation.
9258// If the operation has not completed it will return an error.
9259func (future *DdosProtectionPlansUpdateTagsFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
9260	var done bool
9261	done, err = future.DoneWithContext(context.Background(), client)
9262	if err != nil {
9263		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9264		return
9265	}
9266	if !done {
9267		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansUpdateTagsFuture")
9268		return
9269	}
9270	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9271	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
9272		dpp, err = client.UpdateTagsResponder(dpp.Response.Response)
9273		if err != nil {
9274			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", dpp.Response.Response, "Failure responding to request")
9275		}
9276	}
9277	return
9278}
9279
9280// DdosSettings contains the DDoS protection settings of the public IP.
9281type DdosSettings struct {
9282	// DdosCustomPolicy - The DDoS custom policy associated with the public IP.
9283	DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"`
9284	// 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'
9285	ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"`
9286}
9287
9288// Delegation details the service to which the subnet is delegated.
9289type Delegation struct {
9290	// ServiceDelegationPropertiesFormat - Properties of the subnet.
9291	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
9292	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
9293	Name *string `json:"name,omitempty"`
9294	// Etag - A unique read-only string that changes whenever the resource is updated.
9295	Etag *string `json:"etag,omitempty"`
9296	// ID - Resource ID.
9297	ID *string `json:"id,omitempty"`
9298}
9299
9300// MarshalJSON is the custom marshaler for Delegation.
9301func (d Delegation) MarshalJSON() ([]byte, error) {
9302	objectMap := make(map[string]interface{})
9303	if d.ServiceDelegationPropertiesFormat != nil {
9304		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
9305	}
9306	if d.Name != nil {
9307		objectMap["name"] = d.Name
9308	}
9309	if d.Etag != nil {
9310		objectMap["etag"] = d.Etag
9311	}
9312	if d.ID != nil {
9313		objectMap["id"] = d.ID
9314	}
9315	return json.Marshal(objectMap)
9316}
9317
9318// UnmarshalJSON is the custom unmarshaler for Delegation struct.
9319func (d *Delegation) UnmarshalJSON(body []byte) error {
9320	var m map[string]*json.RawMessage
9321	err := json.Unmarshal(body, &m)
9322	if err != nil {
9323		return err
9324	}
9325	for k, v := range m {
9326		switch k {
9327		case "properties":
9328			if v != nil {
9329				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
9330				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
9331				if err != nil {
9332					return err
9333				}
9334				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
9335			}
9336		case "name":
9337			if v != nil {
9338				var name string
9339				err = json.Unmarshal(*v, &name)
9340				if err != nil {
9341					return err
9342				}
9343				d.Name = &name
9344			}
9345		case "etag":
9346			if v != nil {
9347				var etag string
9348				err = json.Unmarshal(*v, &etag)
9349				if err != nil {
9350					return err
9351				}
9352				d.Etag = &etag
9353			}
9354		case "id":
9355			if v != nil {
9356				var ID string
9357				err = json.Unmarshal(*v, &ID)
9358				if err != nil {
9359					return err
9360				}
9361				d.ID = &ID
9362			}
9363		}
9364	}
9365
9366	return nil
9367}
9368
9369// DeviceProperties list of properties of the device.
9370type DeviceProperties struct {
9371	// DeviceVendor - Name of the device Vendor.
9372	DeviceVendor *string `json:"deviceVendor,omitempty"`
9373	// DeviceModel - Model of the device.
9374	DeviceModel *string `json:"deviceModel,omitempty"`
9375	// LinkSpeedInMbps - Link speed.
9376	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
9377}
9378
9379// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
9380// network. Standard DHCP option for a subnet overrides VNET DHCP options.
9381type DhcpOptions struct {
9382	// DNSServers - The list of DNS servers IP addresses.
9383	DNSServers *[]string `json:"dnsServers,omitempty"`
9384}
9385
9386// Dimension dimension of the metric.
9387type Dimension struct {
9388	// Name - The name of the dimension.
9389	Name *string `json:"name,omitempty"`
9390	// DisplayName - The display name of the dimension.
9391	DisplayName *string `json:"displayName,omitempty"`
9392	// InternalName - The internal name of the dimension.
9393	InternalName *string `json:"internalName,omitempty"`
9394}
9395
9396// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
9397type DNSNameAvailabilityResult struct {
9398	autorest.Response `json:"-"`
9399	// Available - Domain availability (True/False).
9400	Available *bool `json:"available,omitempty"`
9401}
9402
9403// EffectiveNetworkSecurityGroup effective network security group.
9404type EffectiveNetworkSecurityGroup struct {
9405	// NetworkSecurityGroup - The ID of network security group that is applied.
9406	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
9407	// Association - Associated resources.
9408	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
9409	// EffectiveSecurityRules - A collection of effective security rules.
9410	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
9411	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
9412	TagMap map[string][]string `json:"tagMap"`
9413}
9414
9415// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
9416func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
9417	objectMap := make(map[string]interface{})
9418	if ensg.NetworkSecurityGroup != nil {
9419		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
9420	}
9421	if ensg.Association != nil {
9422		objectMap["association"] = ensg.Association
9423	}
9424	if ensg.EffectiveSecurityRules != nil {
9425		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
9426	}
9427	if ensg.TagMap != nil {
9428		objectMap["tagMap"] = ensg.TagMap
9429	}
9430	return json.Marshal(objectMap)
9431}
9432
9433// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
9434type EffectiveNetworkSecurityGroupAssociation struct {
9435	// Subnet - The ID of the subnet if assigned.
9436	Subnet *SubResource `json:"subnet,omitempty"`
9437	// NetworkInterface - The ID of the network interface if assigned.
9438	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
9439}
9440
9441// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
9442// call.
9443type EffectiveNetworkSecurityGroupListResult struct {
9444	autorest.Response `json:"-"`
9445	// Value - A list of effective network security groups.
9446	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
9447	// NextLink - READ-ONLY; The URL to get the next set of results.
9448	NextLink *string `json:"nextLink,omitempty"`
9449}
9450
9451// EffectiveNetworkSecurityRule effective network security rules.
9452type EffectiveNetworkSecurityRule struct {
9453	// Name - The name of the security rule specified by the user (if created by the user).
9454	Name *string `json:"name,omitempty"`
9455	// Protocol - The network protocol this rule applies to. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
9456	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
9457	// SourcePortRange - The source port or range.
9458	SourcePortRange *string `json:"sourcePortRange,omitempty"`
9459	// DestinationPortRange - The destination port or range.
9460	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
9461	// 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 (*).
9462	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
9463	// 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 (*).
9464	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
9465	// SourceAddressPrefix - The source address prefix.
9466	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
9467	// DestinationAddressPrefix - The destination address prefix.
9468	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
9469	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
9470	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
9471	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
9472	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
9473	// ExpandedSourceAddressPrefix - The expanded source address prefix.
9474	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
9475	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
9476	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
9477	// Access - Whether network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
9478	Access SecurityRuleAccess `json:"access,omitempty"`
9479	// Priority - The priority of the rule.
9480	Priority *int32 `json:"priority,omitempty"`
9481	// Direction - The direction of the rule. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
9482	Direction SecurityRuleDirection `json:"direction,omitempty"`
9483}
9484
9485// EffectiveRoute effective Route.
9486type EffectiveRoute struct {
9487	// Name - The name of the user defined route. This is optional.
9488	Name *string `json:"name,omitempty"`
9489	// DisableBgpRoutePropagation - If true, on-premises routes are not propagated to the network interfaces in the subnet.
9490	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
9491	// Source - Who created the route. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
9492	Source EffectiveRouteSource `json:"source,omitempty"`
9493	// State - The value of effective route. Possible values include: 'Active', 'Invalid'
9494	State EffectiveRouteState `json:"state,omitempty"`
9495	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
9496	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
9497	// NextHopIPAddress - The IP address of the next hop of the effective route.
9498	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
9499	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
9500	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
9501}
9502
9503// EffectiveRouteListResult response for list effective route API service call.
9504type EffectiveRouteListResult struct {
9505	autorest.Response `json:"-"`
9506	// Value - A list of effective routes.
9507	Value *[]EffectiveRoute `json:"value,omitempty"`
9508	// NextLink - READ-ONLY; The URL to get the next set of results.
9509	NextLink *string `json:"nextLink,omitempty"`
9510}
9511
9512// EndpointServiceResult endpoint service.
9513type EndpointServiceResult struct {
9514	// Name - READ-ONLY; Name of the endpoint service.
9515	Name *string `json:"name,omitempty"`
9516	// Type - READ-ONLY; Type of the endpoint service.
9517	Type *string `json:"type,omitempty"`
9518	// ID - Resource ID.
9519	ID *string `json:"id,omitempty"`
9520}
9521
9522// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
9523type EndpointServicesListResult struct {
9524	autorest.Response `json:"-"`
9525	// Value - List of available endpoint services in a region.
9526	Value *[]EndpointServiceResult `json:"value,omitempty"`
9527	// NextLink - The URL to get the next set of results.
9528	NextLink *string `json:"nextLink,omitempty"`
9529}
9530
9531// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
9532// values.
9533type EndpointServicesListResultIterator struct {
9534	i    int
9535	page EndpointServicesListResultPage
9536}
9537
9538// NextWithContext advances to the next value.  If there was an error making
9539// the request the iterator does not advance and the error is returned.
9540func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
9541	if tracing.IsEnabled() {
9542		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
9543		defer func() {
9544			sc := -1
9545			if iter.Response().Response.Response != nil {
9546				sc = iter.Response().Response.Response.StatusCode
9547			}
9548			tracing.EndSpan(ctx, sc, err)
9549		}()
9550	}
9551	iter.i++
9552	if iter.i < len(iter.page.Values()) {
9553		return nil
9554	}
9555	err = iter.page.NextWithContext(ctx)
9556	if err != nil {
9557		iter.i--
9558		return err
9559	}
9560	iter.i = 0
9561	return nil
9562}
9563
9564// Next advances to the next value.  If there was an error making
9565// the request the iterator does not advance and the error is returned.
9566// Deprecated: Use NextWithContext() instead.
9567func (iter *EndpointServicesListResultIterator) Next() error {
9568	return iter.NextWithContext(context.Background())
9569}
9570
9571// NotDone returns true if the enumeration should be started or is not yet complete.
9572func (iter EndpointServicesListResultIterator) NotDone() bool {
9573	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9574}
9575
9576// Response returns the raw server response from the last page request.
9577func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
9578	return iter.page.Response()
9579}
9580
9581// Value returns the current value or a zero-initialized value if the
9582// iterator has advanced beyond the end of the collection.
9583func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
9584	if !iter.page.NotDone() {
9585		return EndpointServiceResult{}
9586	}
9587	return iter.page.Values()[iter.i]
9588}
9589
9590// Creates a new instance of the EndpointServicesListResultIterator type.
9591func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
9592	return EndpointServicesListResultIterator{page: page}
9593}
9594
9595// IsEmpty returns true if the ListResult contains no values.
9596func (eslr EndpointServicesListResult) IsEmpty() bool {
9597	return eslr.Value == nil || len(*eslr.Value) == 0
9598}
9599
9600// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
9601// It returns nil if no more results exist.
9602func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
9603	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
9604		return nil, nil
9605	}
9606	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9607		autorest.AsJSON(),
9608		autorest.AsGet(),
9609		autorest.WithBaseURL(to.String(eslr.NextLink)))
9610}
9611
9612// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
9613type EndpointServicesListResultPage struct {
9614	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
9615	eslr EndpointServicesListResult
9616}
9617
9618// NextWithContext advances to the next page of values.  If there was an error making
9619// the request the page does not advance and the error is returned.
9620func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
9621	if tracing.IsEnabled() {
9622		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
9623		defer func() {
9624			sc := -1
9625			if page.Response().Response.Response != nil {
9626				sc = page.Response().Response.Response.StatusCode
9627			}
9628			tracing.EndSpan(ctx, sc, err)
9629		}()
9630	}
9631	next, err := page.fn(ctx, page.eslr)
9632	if err != nil {
9633		return err
9634	}
9635	page.eslr = next
9636	return nil
9637}
9638
9639// Next advances to the next page of values.  If there was an error making
9640// the request the page does not advance and the error is returned.
9641// Deprecated: Use NextWithContext() instead.
9642func (page *EndpointServicesListResultPage) Next() error {
9643	return page.NextWithContext(context.Background())
9644}
9645
9646// NotDone returns true if the page enumeration should be started or is not yet complete.
9647func (page EndpointServicesListResultPage) NotDone() bool {
9648	return !page.eslr.IsEmpty()
9649}
9650
9651// Response returns the raw server response from the last page request.
9652func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
9653	return page.eslr
9654}
9655
9656// Values returns the slice of values for the current page or nil if there are no values.
9657func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
9658	if page.eslr.IsEmpty() {
9659		return nil
9660	}
9661	return *page.eslr.Value
9662}
9663
9664// Creates a new instance of the EndpointServicesListResultPage type.
9665func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
9666	return EndpointServicesListResultPage{fn: getNextPage}
9667}
9668
9669// Error common error representation.
9670type Error struct {
9671	// Code - Error code.
9672	Code *string `json:"code,omitempty"`
9673	// Message - Error message.
9674	Message *string `json:"message,omitempty"`
9675	// Target - Error target.
9676	Target *string `json:"target,omitempty"`
9677	// Details - Error details.
9678	Details *[]ErrorDetails `json:"details,omitempty"`
9679	// InnerError - Inner error message.
9680	InnerError *string `json:"innerError,omitempty"`
9681}
9682
9683// ErrorDetails common error details representation.
9684type ErrorDetails struct {
9685	// Code - Error code.
9686	Code *string `json:"code,omitempty"`
9687	// Target - Error target.
9688	Target *string `json:"target,omitempty"`
9689	// Message - Error message.
9690	Message *string `json:"message,omitempty"`
9691}
9692
9693// ErrorResponse the error object.
9694type ErrorResponse struct {
9695	// Error - The error details object.
9696	Error *ErrorDetails `json:"error,omitempty"`
9697}
9698
9699// EvaluatedNetworkSecurityGroup results of network security group evaluation.
9700type EvaluatedNetworkSecurityGroup struct {
9701	// NetworkSecurityGroupID - Network security group ID.
9702	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
9703	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
9704	AppliedTo *string `json:"appliedTo,omitempty"`
9705	// MatchedRule - Matched network security rule.
9706	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
9707	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
9708	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
9709}
9710
9711// ExpressRouteCircuit expressRouteCircuit resource.
9712type ExpressRouteCircuit struct {
9713	autorest.Response `json:"-"`
9714	// Sku - The SKU.
9715	Sku *ExpressRouteCircuitSku `json:"sku,omitempty"`
9716	// ExpressRouteCircuitPropertiesFormat - Properties of the express route circuit.
9717	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
9718	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
9719	Etag *string `json:"etag,omitempty"`
9720	// ID - Resource ID.
9721	ID *string `json:"id,omitempty"`
9722	// Name - READ-ONLY; Resource name.
9723	Name *string `json:"name,omitempty"`
9724	// Type - READ-ONLY; Resource type.
9725	Type *string `json:"type,omitempty"`
9726	// Location - Resource location.
9727	Location *string `json:"location,omitempty"`
9728	// Tags - Resource tags.
9729	Tags map[string]*string `json:"tags"`
9730}
9731
9732// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
9733func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
9734	objectMap := make(map[string]interface{})
9735	if erc.Sku != nil {
9736		objectMap["sku"] = erc.Sku
9737	}
9738	if erc.ExpressRouteCircuitPropertiesFormat != nil {
9739		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
9740	}
9741	if erc.ID != nil {
9742		objectMap["id"] = erc.ID
9743	}
9744	if erc.Location != nil {
9745		objectMap["location"] = erc.Location
9746	}
9747	if erc.Tags != nil {
9748		objectMap["tags"] = erc.Tags
9749	}
9750	return json.Marshal(objectMap)
9751}
9752
9753// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
9754func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
9755	var m map[string]*json.RawMessage
9756	err := json.Unmarshal(body, &m)
9757	if err != nil {
9758		return err
9759	}
9760	for k, v := range m {
9761		switch k {
9762		case "sku":
9763			if v != nil {
9764				var sku ExpressRouteCircuitSku
9765				err = json.Unmarshal(*v, &sku)
9766				if err != nil {
9767					return err
9768				}
9769				erc.Sku = &sku
9770			}
9771		case "properties":
9772			if v != nil {
9773				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
9774				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
9775				if err != nil {
9776					return err
9777				}
9778				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
9779			}
9780		case "etag":
9781			if v != nil {
9782				var etag string
9783				err = json.Unmarshal(*v, &etag)
9784				if err != nil {
9785					return err
9786				}
9787				erc.Etag = &etag
9788			}
9789		case "id":
9790			if v != nil {
9791				var ID string
9792				err = json.Unmarshal(*v, &ID)
9793				if err != nil {
9794					return err
9795				}
9796				erc.ID = &ID
9797			}
9798		case "name":
9799			if v != nil {
9800				var name string
9801				err = json.Unmarshal(*v, &name)
9802				if err != nil {
9803					return err
9804				}
9805				erc.Name = &name
9806			}
9807		case "type":
9808			if v != nil {
9809				var typeVar string
9810				err = json.Unmarshal(*v, &typeVar)
9811				if err != nil {
9812					return err
9813				}
9814				erc.Type = &typeVar
9815			}
9816		case "location":
9817			if v != nil {
9818				var location string
9819				err = json.Unmarshal(*v, &location)
9820				if err != nil {
9821					return err
9822				}
9823				erc.Location = &location
9824			}
9825		case "tags":
9826			if v != nil {
9827				var tags map[string]*string
9828				err = json.Unmarshal(*v, &tags)
9829				if err != nil {
9830					return err
9831				}
9832				erc.Tags = tags
9833			}
9834		}
9835	}
9836
9837	return nil
9838}
9839
9840// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
9841type ExpressRouteCircuitArpTable struct {
9842	// Age - Entry age in minutes.
9843	Age *int32 `json:"age,omitempty"`
9844	// Interface - Interface address.
9845	Interface *string `json:"interface,omitempty"`
9846	// IPAddress - The IP address.
9847	IPAddress *string `json:"ipAddress,omitempty"`
9848	// MacAddress - The MAC address.
9849	MacAddress *string `json:"macAddress,omitempty"`
9850}
9851
9852// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
9853type ExpressRouteCircuitAuthorization struct {
9854	autorest.Response `json:"-"`
9855	// AuthorizationPropertiesFormat - Properties of the express route circuit authorization.
9856	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
9857	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
9858	Name *string `json:"name,omitempty"`
9859	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9860	Etag *string `json:"etag,omitempty"`
9861	// Type - READ-ONLY; Type of the resource.
9862	Type *string `json:"type,omitempty"`
9863	// ID - Resource ID.
9864	ID *string `json:"id,omitempty"`
9865}
9866
9867// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
9868func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
9869	objectMap := make(map[string]interface{})
9870	if erca.AuthorizationPropertiesFormat != nil {
9871		objectMap["properties"] = erca.AuthorizationPropertiesFormat
9872	}
9873	if erca.Name != nil {
9874		objectMap["name"] = erca.Name
9875	}
9876	if erca.ID != nil {
9877		objectMap["id"] = erca.ID
9878	}
9879	return json.Marshal(objectMap)
9880}
9881
9882// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
9883func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
9884	var m map[string]*json.RawMessage
9885	err := json.Unmarshal(body, &m)
9886	if err != nil {
9887		return err
9888	}
9889	for k, v := range m {
9890		switch k {
9891		case "properties":
9892			if v != nil {
9893				var authorizationPropertiesFormat AuthorizationPropertiesFormat
9894				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
9895				if err != nil {
9896					return err
9897				}
9898				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
9899			}
9900		case "name":
9901			if v != nil {
9902				var name string
9903				err = json.Unmarshal(*v, &name)
9904				if err != nil {
9905					return err
9906				}
9907				erca.Name = &name
9908			}
9909		case "etag":
9910			if v != nil {
9911				var etag string
9912				err = json.Unmarshal(*v, &etag)
9913				if err != nil {
9914					return err
9915				}
9916				erca.Etag = &etag
9917			}
9918		case "type":
9919			if v != nil {
9920				var typeVar string
9921				err = json.Unmarshal(*v, &typeVar)
9922				if err != nil {
9923					return err
9924				}
9925				erca.Type = &typeVar
9926			}
9927		case "id":
9928			if v != nil {
9929				var ID string
9930				err = json.Unmarshal(*v, &ID)
9931				if err != nil {
9932					return err
9933				}
9934				erca.ID = &ID
9935			}
9936		}
9937	}
9938
9939	return nil
9940}
9941
9942// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
9943// results of a long-running operation.
9944type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
9945	azure.Future
9946}
9947
9948// Result returns the result of the asynchronous operation.
9949// If the operation has not completed it will return an error.
9950func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
9951	var done bool
9952	done, err = future.DoneWithContext(context.Background(), client)
9953	if err != nil {
9954		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9955		return
9956	}
9957	if !done {
9958		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
9959		return
9960	}
9961	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9962	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
9963		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
9964		if err != nil {
9965			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
9966		}
9967	}
9968	return
9969}
9970
9971// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
9972// of a long-running operation.
9973type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
9974	azure.Future
9975}
9976
9977// Result returns the result of the asynchronous operation.
9978// If the operation has not completed it will return an error.
9979func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
9980	var done bool
9981	done, err = future.DoneWithContext(context.Background(), client)
9982	if err != nil {
9983		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
9984		return
9985	}
9986	if !done {
9987		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
9988		return
9989	}
9990	ar.Response = future.Response()
9991	return
9992}
9993
9994// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
9995// resource.
9996type ExpressRouteCircuitConnection struct {
9997	autorest.Response `json:"-"`
9998	// ExpressRouteCircuitConnectionPropertiesFormat - Properties of the express route circuit connection.
9999	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
10000	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
10001	Name *string `json:"name,omitempty"`
10002	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10003	Etag *string `json:"etag,omitempty"`
10004	// Type - READ-ONLY; Type of the resource.
10005	Type *string `json:"type,omitempty"`
10006	// ID - Resource ID.
10007	ID *string `json:"id,omitempty"`
10008}
10009
10010// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
10011func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
10012	objectMap := make(map[string]interface{})
10013	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
10014		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
10015	}
10016	if ercc.Name != nil {
10017		objectMap["name"] = ercc.Name
10018	}
10019	if ercc.ID != nil {
10020		objectMap["id"] = ercc.ID
10021	}
10022	return json.Marshal(objectMap)
10023}
10024
10025// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
10026func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
10027	var m map[string]*json.RawMessage
10028	err := json.Unmarshal(body, &m)
10029	if err != nil {
10030		return err
10031	}
10032	for k, v := range m {
10033		switch k {
10034		case "properties":
10035			if v != nil {
10036				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
10037				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
10038				if err != nil {
10039					return err
10040				}
10041				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
10042			}
10043		case "name":
10044			if v != nil {
10045				var name string
10046				err = json.Unmarshal(*v, &name)
10047				if err != nil {
10048					return err
10049				}
10050				ercc.Name = &name
10051			}
10052		case "etag":
10053			if v != nil {
10054				var etag string
10055				err = json.Unmarshal(*v, &etag)
10056				if err != nil {
10057					return err
10058				}
10059				ercc.Etag = &etag
10060			}
10061		case "type":
10062			if v != nil {
10063				var typeVar string
10064				err = json.Unmarshal(*v, &typeVar)
10065				if err != nil {
10066					return err
10067				}
10068				ercc.Type = &typeVar
10069			}
10070		case "id":
10071			if v != nil {
10072				var ID string
10073				err = json.Unmarshal(*v, &ID)
10074				if err != nil {
10075					return err
10076				}
10077				ercc.ID = &ID
10078			}
10079		}
10080	}
10081
10082	return nil
10083}
10084
10085// ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
10086// global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
10087type ExpressRouteCircuitConnectionListResult struct {
10088	autorest.Response `json:"-"`
10089	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
10090	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
10091	// NextLink - The URL to get the next set of results.
10092	NextLink *string `json:"nextLink,omitempty"`
10093}
10094
10095// ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
10096// ExpressRouteCircuitConnection values.
10097type ExpressRouteCircuitConnectionListResultIterator struct {
10098	i    int
10099	page ExpressRouteCircuitConnectionListResultPage
10100}
10101
10102// NextWithContext advances to the next value.  If there was an error making
10103// the request the iterator does not advance and the error is returned.
10104func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
10105	if tracing.IsEnabled() {
10106		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
10107		defer func() {
10108			sc := -1
10109			if iter.Response().Response.Response != nil {
10110				sc = iter.Response().Response.Response.StatusCode
10111			}
10112			tracing.EndSpan(ctx, sc, err)
10113		}()
10114	}
10115	iter.i++
10116	if iter.i < len(iter.page.Values()) {
10117		return nil
10118	}
10119	err = iter.page.NextWithContext(ctx)
10120	if err != nil {
10121		iter.i--
10122		return err
10123	}
10124	iter.i = 0
10125	return nil
10126}
10127
10128// Next advances to the next value.  If there was an error making
10129// the request the iterator does not advance and the error is returned.
10130// Deprecated: Use NextWithContext() instead.
10131func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
10132	return iter.NextWithContext(context.Background())
10133}
10134
10135// NotDone returns true if the enumeration should be started or is not yet complete.
10136func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
10137	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10138}
10139
10140// Response returns the raw server response from the last page request.
10141func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
10142	return iter.page.Response()
10143}
10144
10145// Value returns the current value or a zero-initialized value if the
10146// iterator has advanced beyond the end of the collection.
10147func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
10148	if !iter.page.NotDone() {
10149		return ExpressRouteCircuitConnection{}
10150	}
10151	return iter.page.Values()[iter.i]
10152}
10153
10154// Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
10155func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
10156	return ExpressRouteCircuitConnectionListResultIterator{page: page}
10157}
10158
10159// IsEmpty returns true if the ListResult contains no values.
10160func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
10161	return ercclr.Value == nil || len(*ercclr.Value) == 0
10162}
10163
10164// expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
10165// It returns nil if no more results exist.
10166func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
10167	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
10168		return nil, nil
10169	}
10170	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10171		autorest.AsJSON(),
10172		autorest.AsGet(),
10173		autorest.WithBaseURL(to.String(ercclr.NextLink)))
10174}
10175
10176// ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
10177type ExpressRouteCircuitConnectionListResultPage struct {
10178	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
10179	ercclr ExpressRouteCircuitConnectionListResult
10180}
10181
10182// NextWithContext advances to the next page of values.  If there was an error making
10183// the request the page does not advance and the error is returned.
10184func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
10185	if tracing.IsEnabled() {
10186		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
10187		defer func() {
10188			sc := -1
10189			if page.Response().Response.Response != nil {
10190				sc = page.Response().Response.Response.StatusCode
10191			}
10192			tracing.EndSpan(ctx, sc, err)
10193		}()
10194	}
10195	next, err := page.fn(ctx, page.ercclr)
10196	if err != nil {
10197		return err
10198	}
10199	page.ercclr = next
10200	return nil
10201}
10202
10203// Next advances to the next page of values.  If there was an error making
10204// the request the page does not advance and the error is returned.
10205// Deprecated: Use NextWithContext() instead.
10206func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
10207	return page.NextWithContext(context.Background())
10208}
10209
10210// NotDone returns true if the page enumeration should be started or is not yet complete.
10211func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
10212	return !page.ercclr.IsEmpty()
10213}
10214
10215// Response returns the raw server response from the last page request.
10216func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
10217	return page.ercclr
10218}
10219
10220// Values returns the slice of values for the current page or nil if there are no values.
10221func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
10222	if page.ercclr.IsEmpty() {
10223		return nil
10224	}
10225	return *page.ercclr.Value
10226}
10227
10228// Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
10229func NewExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
10230	return ExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
10231}
10232
10233// ExpressRouteCircuitConnectionPropertiesFormat properties of the express route circuit connection.
10234type ExpressRouteCircuitConnectionPropertiesFormat struct {
10235	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
10236	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
10237	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
10238	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
10239	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
10240	AddressPrefix *string `json:"addressPrefix,omitempty"`
10241	// AuthorizationKey - The authorization key.
10242	AuthorizationKey *string `json:"authorizationKey,omitempty"`
10243	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
10244	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
10245	// ProvisioningState - READ-ONLY; Provisioning state of the circuit connection resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
10246	ProvisioningState *string `json:"provisioningState,omitempty"`
10247}
10248
10249// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10250// results of a long-running operation.
10251type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
10252	azure.Future
10253}
10254
10255// Result returns the result of the asynchronous operation.
10256// If the operation has not completed it will return an error.
10257func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
10258	var done bool
10259	done, err = future.DoneWithContext(context.Background(), client)
10260	if err != nil {
10261		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10262		return
10263	}
10264	if !done {
10265		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
10266		return
10267	}
10268	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10269	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
10270		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
10271		if err != nil {
10272			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
10273		}
10274	}
10275	return
10276}
10277
10278// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
10279// long-running operation.
10280type ExpressRouteCircuitConnectionsDeleteFuture struct {
10281	azure.Future
10282}
10283
10284// Result returns the result of the asynchronous operation.
10285// If the operation has not completed it will return an error.
10286func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
10287	var done bool
10288	done, err = future.DoneWithContext(context.Background(), client)
10289	if err != nil {
10290		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
10291		return
10292	}
10293	if !done {
10294		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
10295		return
10296	}
10297	ar.Response = future.Response()
10298	return
10299}
10300
10301// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
10302type ExpressRouteCircuitListResult struct {
10303	autorest.Response `json:"-"`
10304	// Value - A list of ExpressRouteCircuits in a resource group.
10305	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
10306	// NextLink - The URL to get the next set of results.
10307	NextLink *string `json:"nextLink,omitempty"`
10308}
10309
10310// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
10311// values.
10312type ExpressRouteCircuitListResultIterator struct {
10313	i    int
10314	page ExpressRouteCircuitListResultPage
10315}
10316
10317// NextWithContext advances to the next value.  If there was an error making
10318// the request the iterator does not advance and the error is returned.
10319func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
10320	if tracing.IsEnabled() {
10321		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
10322		defer func() {
10323			sc := -1
10324			if iter.Response().Response.Response != nil {
10325				sc = iter.Response().Response.Response.StatusCode
10326			}
10327			tracing.EndSpan(ctx, sc, err)
10328		}()
10329	}
10330	iter.i++
10331	if iter.i < len(iter.page.Values()) {
10332		return nil
10333	}
10334	err = iter.page.NextWithContext(ctx)
10335	if err != nil {
10336		iter.i--
10337		return err
10338	}
10339	iter.i = 0
10340	return nil
10341}
10342
10343// Next advances to the next value.  If there was an error making
10344// the request the iterator does not advance and the error is returned.
10345// Deprecated: Use NextWithContext() instead.
10346func (iter *ExpressRouteCircuitListResultIterator) Next() error {
10347	return iter.NextWithContext(context.Background())
10348}
10349
10350// NotDone returns true if the enumeration should be started or is not yet complete.
10351func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
10352	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10353}
10354
10355// Response returns the raw server response from the last page request.
10356func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
10357	return iter.page.Response()
10358}
10359
10360// Value returns the current value or a zero-initialized value if the
10361// iterator has advanced beyond the end of the collection.
10362func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
10363	if !iter.page.NotDone() {
10364		return ExpressRouteCircuit{}
10365	}
10366	return iter.page.Values()[iter.i]
10367}
10368
10369// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
10370func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
10371	return ExpressRouteCircuitListResultIterator{page: page}
10372}
10373
10374// IsEmpty returns true if the ListResult contains no values.
10375func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
10376	return erclr.Value == nil || len(*erclr.Value) == 0
10377}
10378
10379// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
10380// It returns nil if no more results exist.
10381func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
10382	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
10383		return nil, nil
10384	}
10385	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10386		autorest.AsJSON(),
10387		autorest.AsGet(),
10388		autorest.WithBaseURL(to.String(erclr.NextLink)))
10389}
10390
10391// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
10392type ExpressRouteCircuitListResultPage struct {
10393	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
10394	erclr ExpressRouteCircuitListResult
10395}
10396
10397// NextWithContext advances to the next page of values.  If there was an error making
10398// the request the page does not advance and the error is returned.
10399func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
10400	if tracing.IsEnabled() {
10401		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
10402		defer func() {
10403			sc := -1
10404			if page.Response().Response.Response != nil {
10405				sc = page.Response().Response.Response.StatusCode
10406			}
10407			tracing.EndSpan(ctx, sc, err)
10408		}()
10409	}
10410	next, err := page.fn(ctx, page.erclr)
10411	if err != nil {
10412		return err
10413	}
10414	page.erclr = next
10415	return nil
10416}
10417
10418// Next advances to the next page of values.  If there was an error making
10419// the request the page does not advance and the error is returned.
10420// Deprecated: Use NextWithContext() instead.
10421func (page *ExpressRouteCircuitListResultPage) Next() error {
10422	return page.NextWithContext(context.Background())
10423}
10424
10425// NotDone returns true if the page enumeration should be started or is not yet complete.
10426func (page ExpressRouteCircuitListResultPage) NotDone() bool {
10427	return !page.erclr.IsEmpty()
10428}
10429
10430// Response returns the raw server response from the last page request.
10431func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
10432	return page.erclr
10433}
10434
10435// Values returns the slice of values for the current page or nil if there are no values.
10436func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
10437	if page.erclr.IsEmpty() {
10438		return nil
10439	}
10440	return *page.erclr.Value
10441}
10442
10443// Creates a new instance of the ExpressRouteCircuitListResultPage type.
10444func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
10445	return ExpressRouteCircuitListResultPage{fn: getNextPage}
10446}
10447
10448// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
10449type ExpressRouteCircuitPeering struct {
10450	autorest.Response `json:"-"`
10451	// ExpressRouteCircuitPeeringPropertiesFormat - Properties of the express route circuit peering.
10452	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
10453	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
10454	Name *string `json:"name,omitempty"`
10455	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10456	Etag *string `json:"etag,omitempty"`
10457	// Type - READ-ONLY; Type of the resource.
10458	Type *string `json:"type,omitempty"`
10459	// ID - Resource ID.
10460	ID *string `json:"id,omitempty"`
10461}
10462
10463// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
10464func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
10465	objectMap := make(map[string]interface{})
10466	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
10467		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
10468	}
10469	if ercp.Name != nil {
10470		objectMap["name"] = ercp.Name
10471	}
10472	if ercp.ID != nil {
10473		objectMap["id"] = ercp.ID
10474	}
10475	return json.Marshal(objectMap)
10476}
10477
10478// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
10479func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
10480	var m map[string]*json.RawMessage
10481	err := json.Unmarshal(body, &m)
10482	if err != nil {
10483		return err
10484	}
10485	for k, v := range m {
10486		switch k {
10487		case "properties":
10488			if v != nil {
10489				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
10490				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
10491				if err != nil {
10492					return err
10493				}
10494				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
10495			}
10496		case "name":
10497			if v != nil {
10498				var name string
10499				err = json.Unmarshal(*v, &name)
10500				if err != nil {
10501					return err
10502				}
10503				ercp.Name = &name
10504			}
10505		case "etag":
10506			if v != nil {
10507				var etag string
10508				err = json.Unmarshal(*v, &etag)
10509				if err != nil {
10510					return err
10511				}
10512				ercp.Etag = &etag
10513			}
10514		case "type":
10515			if v != nil {
10516				var typeVar string
10517				err = json.Unmarshal(*v, &typeVar)
10518				if err != nil {
10519					return err
10520				}
10521				ercp.Type = &typeVar
10522			}
10523		case "id":
10524			if v != nil {
10525				var ID string
10526				err = json.Unmarshal(*v, &ID)
10527				if err != nil {
10528					return err
10529				}
10530				ercp.ID = &ID
10531			}
10532		}
10533	}
10534
10535	return nil
10536}
10537
10538// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
10539type ExpressRouteCircuitPeeringConfig struct {
10540	// AdvertisedPublicPrefixes - The reference of AdvertisedPublicPrefixes.
10541	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
10542	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering.
10543	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
10544	// AdvertisedPublicPrefixesState - The advertised public prefix state of the Peering resource. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
10545	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
10546	// LegacyMode - The legacy mode of the peering.
10547	LegacyMode *int32 `json:"legacyMode,omitempty"`
10548	// CustomerASN - The CustomerASN of the peering.
10549	CustomerASN *int32 `json:"customerASN,omitempty"`
10550	// RoutingRegistryName - The RoutingRegistryName of the configuration.
10551	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
10552}
10553
10554// ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
10555type ExpressRouteCircuitPeeringID struct {
10556	// ID - The ID of the ExpressRoute circuit peering.
10557	ID *string `json:"id,omitempty"`
10558}
10559
10560// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
10561// that belong to an ExpressRouteCircuit.
10562type ExpressRouteCircuitPeeringListResult struct {
10563	autorest.Response `json:"-"`
10564	// Value - The peerings in an express route circuit.
10565	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
10566	// NextLink - The URL to get the next set of results.
10567	NextLink *string `json:"nextLink,omitempty"`
10568}
10569
10570// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
10571// ExpressRouteCircuitPeering values.
10572type ExpressRouteCircuitPeeringListResultIterator struct {
10573	i    int
10574	page ExpressRouteCircuitPeeringListResultPage
10575}
10576
10577// NextWithContext advances to the next value.  If there was an error making
10578// the request the iterator does not advance and the error is returned.
10579func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
10580	if tracing.IsEnabled() {
10581		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
10582		defer func() {
10583			sc := -1
10584			if iter.Response().Response.Response != nil {
10585				sc = iter.Response().Response.Response.StatusCode
10586			}
10587			tracing.EndSpan(ctx, sc, err)
10588		}()
10589	}
10590	iter.i++
10591	if iter.i < len(iter.page.Values()) {
10592		return nil
10593	}
10594	err = iter.page.NextWithContext(ctx)
10595	if err != nil {
10596		iter.i--
10597		return err
10598	}
10599	iter.i = 0
10600	return nil
10601}
10602
10603// Next advances to the next value.  If there was an error making
10604// the request the iterator does not advance and the error is returned.
10605// Deprecated: Use NextWithContext() instead.
10606func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
10607	return iter.NextWithContext(context.Background())
10608}
10609
10610// NotDone returns true if the enumeration should be started or is not yet complete.
10611func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
10612	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10613}
10614
10615// Response returns the raw server response from the last page request.
10616func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
10617	return iter.page.Response()
10618}
10619
10620// Value returns the current value or a zero-initialized value if the
10621// iterator has advanced beyond the end of the collection.
10622func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
10623	if !iter.page.NotDone() {
10624		return ExpressRouteCircuitPeering{}
10625	}
10626	return iter.page.Values()[iter.i]
10627}
10628
10629// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
10630func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
10631	return ExpressRouteCircuitPeeringListResultIterator{page: page}
10632}
10633
10634// IsEmpty returns true if the ListResult contains no values.
10635func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
10636	return ercplr.Value == nil || len(*ercplr.Value) == 0
10637}
10638
10639// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
10640// It returns nil if no more results exist.
10641func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
10642	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
10643		return nil, nil
10644	}
10645	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10646		autorest.AsJSON(),
10647		autorest.AsGet(),
10648		autorest.WithBaseURL(to.String(ercplr.NextLink)))
10649}
10650
10651// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
10652type ExpressRouteCircuitPeeringListResultPage struct {
10653	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
10654	ercplr ExpressRouteCircuitPeeringListResult
10655}
10656
10657// NextWithContext advances to the next page of values.  If there was an error making
10658// the request the page does not advance and the error is returned.
10659func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
10660	if tracing.IsEnabled() {
10661		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
10662		defer func() {
10663			sc := -1
10664			if page.Response().Response.Response != nil {
10665				sc = page.Response().Response.Response.StatusCode
10666			}
10667			tracing.EndSpan(ctx, sc, err)
10668		}()
10669	}
10670	next, err := page.fn(ctx, page.ercplr)
10671	if err != nil {
10672		return err
10673	}
10674	page.ercplr = next
10675	return nil
10676}
10677
10678// Next advances to the next page of values.  If there was an error making
10679// the request the page does not advance and the error is returned.
10680// Deprecated: Use NextWithContext() instead.
10681func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
10682	return page.NextWithContext(context.Background())
10683}
10684
10685// NotDone returns true if the page enumeration should be started or is not yet complete.
10686func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
10687	return !page.ercplr.IsEmpty()
10688}
10689
10690// Response returns the raw server response from the last page request.
10691func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
10692	return page.ercplr
10693}
10694
10695// Values returns the slice of values for the current page or nil if there are no values.
10696func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
10697	if page.ercplr.IsEmpty() {
10698		return nil
10699	}
10700	return *page.ercplr.Value
10701}
10702
10703// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
10704func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
10705	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
10706}
10707
10708// ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering.
10709type ExpressRouteCircuitPeeringPropertiesFormat struct {
10710	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
10711	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
10712	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
10713	State ExpressRoutePeeringState `json:"state,omitempty"`
10714	// AzureASN - The Azure ASN.
10715	AzureASN *int32 `json:"azureASN,omitempty"`
10716	// PeerASN - The peer ASN.
10717	PeerASN *int64 `json:"peerASN,omitempty"`
10718	// PrimaryPeerAddressPrefix - The primary address prefix.
10719	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
10720	// SecondaryPeerAddressPrefix - The secondary address prefix.
10721	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
10722	// PrimaryAzurePort - The primary port.
10723	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
10724	// SecondaryAzurePort - The secondary port.
10725	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
10726	// SharedKey - The shared key.
10727	SharedKey *string `json:"sharedKey,omitempty"`
10728	// VlanID - The VLAN ID.
10729	VlanID *int32 `json:"vlanId,omitempty"`
10730	// MicrosoftPeeringConfig - The Microsoft peering configuration.
10731	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
10732	// Stats - Gets peering stats.
10733	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
10734	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10735	ProvisioningState *string `json:"provisioningState,omitempty"`
10736	// GatewayManagerEtag - The GatewayManager Etag.
10737	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
10738	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
10739	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
10740	// RouteFilter - The reference of the RouteFilter resource.
10741	RouteFilter *SubResource `json:"routeFilter,omitempty"`
10742	// Ipv6PeeringConfig - The IPv6 peering configuration.
10743	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
10744	// ExpressRouteConnection - The ExpressRoute connection.
10745	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
10746	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
10747	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
10748	// PeeredConnections - READ-ONLY; The list of peered circuit connections associated with Azure Private Peering for this circuit.
10749	PeeredConnections *[]PeerExpressRouteCircuitConnection `json:"peeredConnections,omitempty"`
10750}
10751
10752// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
10753// of a long-running operation.
10754type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
10755	azure.Future
10756}
10757
10758// Result returns the result of the asynchronous operation.
10759// If the operation has not completed it will return an error.
10760func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
10761	var done bool
10762	done, err = future.DoneWithContext(context.Background(), client)
10763	if err != nil {
10764		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10765		return
10766	}
10767	if !done {
10768		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
10769		return
10770	}
10771	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10772	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
10773		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
10774		if err != nil {
10775			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
10776		}
10777	}
10778	return
10779}
10780
10781// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
10782// long-running operation.
10783type ExpressRouteCircuitPeeringsDeleteFuture struct {
10784	azure.Future
10785}
10786
10787// Result returns the result of the asynchronous operation.
10788// If the operation has not completed it will return an error.
10789func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
10790	var done bool
10791	done, err = future.DoneWithContext(context.Background(), client)
10792	if err != nil {
10793		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
10794		return
10795	}
10796	if !done {
10797		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
10798		return
10799	}
10800	ar.Response = future.Response()
10801	return
10802}
10803
10804// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
10805type ExpressRouteCircuitPropertiesFormat struct {
10806	// AllowClassicOperations - Allow classic operations.
10807	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
10808	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
10809	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
10810	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
10811	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
10812	// Authorizations - The list of authorizations.
10813	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
10814	// Peerings - The list of peerings.
10815	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
10816	// ServiceKey - The ServiceKey.
10817	ServiceKey *string `json:"serviceKey,omitempty"`
10818	// ServiceProviderNotes - The ServiceProviderNotes.
10819	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
10820	// ServiceProviderProperties - The ServiceProviderProperties.
10821	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
10822	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
10823	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
10824	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
10825	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
10826	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
10827	Stag *int32 `json:"stag,omitempty"`
10828	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10829	ProvisioningState *string `json:"provisioningState,omitempty"`
10830	// GatewayManagerEtag - The GatewayManager Etag.
10831	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
10832	// GlobalReachEnabled - Flag denoting Global reach status.
10833	GlobalReachEnabled *bool `json:"globalReachEnabled,omitempty"`
10834}
10835
10836// ExpressRouteCircuitReference reference to an express route circuit.
10837type ExpressRouteCircuitReference struct {
10838	// ID - Corresponding Express Route Circuit Id.
10839	ID *string `json:"id,omitempty"`
10840}
10841
10842// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit.
10843type ExpressRouteCircuitRoutesTable struct {
10844	// NetworkProperty - IP address of a network entity.
10845	NetworkProperty *string `json:"network,omitempty"`
10846	// NextHop - NextHop address.
10847	NextHop *string `json:"nextHop,omitempty"`
10848	// LocPrf - Local preference value as set with the set local-preference route-map configuration command.
10849	LocPrf *string `json:"locPrf,omitempty"`
10850	// Weight - Route Weight.
10851	Weight *int32 `json:"weight,omitempty"`
10852	// Path - Autonomous system paths to the destination network.
10853	Path *string `json:"path,omitempty"`
10854}
10855
10856// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
10857type ExpressRouteCircuitRoutesTableSummary struct {
10858	// Neighbor - IP address of the neighbor.
10859	Neighbor *string `json:"neighbor,omitempty"`
10860	// V - BGP version number spoken to the neighbor.
10861	V *int32 `json:"v,omitempty"`
10862	// As - Autonomous system number.
10863	As *int32 `json:"as,omitempty"`
10864	// 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.
10865	UpDown *string `json:"upDown,omitempty"`
10866	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
10867	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
10868}
10869
10870// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
10871// Circuits API.
10872type ExpressRouteCircuitsArpTableListResult struct {
10873	autorest.Response `json:"-"`
10874	// Value - Gets list of the ARP table.
10875	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
10876	// NextLink - The URL to get the next set of results.
10877	NextLink *string `json:"nextLink,omitempty"`
10878}
10879
10880// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
10881// long-running operation.
10882type ExpressRouteCircuitsCreateOrUpdateFuture struct {
10883	azure.Future
10884}
10885
10886// Result returns the result of the asynchronous operation.
10887// If the operation has not completed it will return an error.
10888func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
10889	var done bool
10890	done, err = future.DoneWithContext(context.Background(), client)
10891	if err != nil {
10892		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10893		return
10894	}
10895	if !done {
10896		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
10897		return
10898	}
10899	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10900	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
10901		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
10902		if err != nil {
10903			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
10904		}
10905	}
10906	return
10907}
10908
10909// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
10910// long-running operation.
10911type ExpressRouteCircuitsDeleteFuture struct {
10912	azure.Future
10913}
10914
10915// Result returns the result of the asynchronous operation.
10916// If the operation has not completed it will return an error.
10917func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
10918	var done bool
10919	done, err = future.DoneWithContext(context.Background(), client)
10920	if err != nil {
10921		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
10922		return
10923	}
10924	if !done {
10925		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
10926		return
10927	}
10928	ar.Response = future.Response()
10929	return
10930}
10931
10932// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
10933// ExpressRouteCircuit.
10934type ExpressRouteCircuitServiceProviderProperties struct {
10935	// ServiceProviderName - The serviceProviderName.
10936	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
10937	// PeeringLocation - The peering location.
10938	PeeringLocation *string `json:"peeringLocation,omitempty"`
10939	// BandwidthInMbps - The BandwidthInMbps.
10940	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
10941}
10942
10943// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
10944type ExpressRouteCircuitSku struct {
10945	// Name - The name of the SKU.
10946	Name *string `json:"name,omitempty"`
10947	// Tier - The tier of the SKU. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal'
10948	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
10949	// Family - The family of the SKU. Possible values include: 'UnlimitedData', 'MeteredData'
10950	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
10951}
10952
10953// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
10954// long-running operation.
10955type ExpressRouteCircuitsListArpTableFuture struct {
10956	azure.Future
10957}
10958
10959// Result returns the result of the asynchronous operation.
10960// If the operation has not completed it will return an error.
10961func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
10962	var done bool
10963	done, err = future.DoneWithContext(context.Background(), client)
10964	if err != nil {
10965		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
10966		return
10967	}
10968	if !done {
10969		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
10970		return
10971	}
10972	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10973	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
10974		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
10975		if err != nil {
10976			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
10977		}
10978	}
10979	return
10980}
10981
10982// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
10983// long-running operation.
10984type ExpressRouteCircuitsListRoutesTableFuture struct {
10985	azure.Future
10986}
10987
10988// Result returns the result of the asynchronous operation.
10989// If the operation has not completed it will return an error.
10990func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
10991	var done bool
10992	done, err = future.DoneWithContext(context.Background(), client)
10993	if err != nil {
10994		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
10995		return
10996	}
10997	if !done {
10998		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
10999		return
11000	}
11001	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11002	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
11003		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
11004		if err != nil {
11005			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
11006		}
11007	}
11008	return
11009}
11010
11011// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
11012// results of a long-running operation.
11013type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
11014	azure.Future
11015}
11016
11017// Result returns the result of the asynchronous operation.
11018// If the operation has not completed it will return an error.
11019func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
11020	var done bool
11021	done, err = future.DoneWithContext(context.Background(), client)
11022	if err != nil {
11023		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
11024		return
11025	}
11026	if !done {
11027		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
11028		return
11029	}
11030	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11031	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
11032		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
11033		if err != nil {
11034			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
11035		}
11036	}
11037	return
11038}
11039
11040// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
11041// Circuits API.
11042type ExpressRouteCircuitsRoutesTableListResult struct {
11043	autorest.Response `json:"-"`
11044	// Value - The list of routes table.
11045	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
11046	// NextLink - The URL to get the next set of results.
11047	NextLink *string `json:"nextLink,omitempty"`
11048}
11049
11050// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
11051// Express Route Circuits API.
11052type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
11053	autorest.Response `json:"-"`
11054	// Value - A list of the routes table.
11055	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
11056	// NextLink - The URL to get the next set of results.
11057	NextLink *string `json:"nextLink,omitempty"`
11058}
11059
11060// ExpressRouteCircuitStats contains stats associated with the peering.
11061type ExpressRouteCircuitStats struct {
11062	autorest.Response `json:"-"`
11063	// PrimarybytesIn - Gets BytesIn of the peering.
11064	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
11065	// PrimarybytesOut - Gets BytesOut of the peering.
11066	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
11067	// SecondarybytesIn - Gets BytesIn of the peering.
11068	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
11069	// SecondarybytesOut - Gets BytesOut of the peering.
11070	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
11071}
11072
11073// ExpressRouteCircuitsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
11074// long-running operation.
11075type ExpressRouteCircuitsUpdateTagsFuture struct {
11076	azure.Future
11077}
11078
11079// Result returns the result of the asynchronous operation.
11080// If the operation has not completed it will return an error.
11081func (future *ExpressRouteCircuitsUpdateTagsFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
11082	var done bool
11083	done, err = future.DoneWithContext(context.Background(), client)
11084	if err != nil {
11085		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11086		return
11087	}
11088	if !done {
11089		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsUpdateTagsFuture")
11090		return
11091	}
11092	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11093	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11094		erc, err = client.UpdateTagsResponder(erc.Response.Response)
11095		if err != nil {
11096			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", erc.Response.Response, "Failure responding to request")
11097		}
11098	}
11099	return
11100}
11101
11102// ExpressRouteConnection expressRouteConnection resource.
11103type ExpressRouteConnection struct {
11104	autorest.Response `json:"-"`
11105	// ExpressRouteConnectionProperties - Properties of the express route connection.
11106	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
11107	// Name - The name of the resource.
11108	Name *string `json:"name,omitempty"`
11109	// ID - Resource ID.
11110	ID *string `json:"id,omitempty"`
11111}
11112
11113// MarshalJSON is the custom marshaler for ExpressRouteConnection.
11114func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
11115	objectMap := make(map[string]interface{})
11116	if erc.ExpressRouteConnectionProperties != nil {
11117		objectMap["properties"] = erc.ExpressRouteConnectionProperties
11118	}
11119	if erc.Name != nil {
11120		objectMap["name"] = erc.Name
11121	}
11122	if erc.ID != nil {
11123		objectMap["id"] = erc.ID
11124	}
11125	return json.Marshal(objectMap)
11126}
11127
11128// UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
11129func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
11130	var m map[string]*json.RawMessage
11131	err := json.Unmarshal(body, &m)
11132	if err != nil {
11133		return err
11134	}
11135	for k, v := range m {
11136		switch k {
11137		case "properties":
11138			if v != nil {
11139				var expressRouteConnectionProperties ExpressRouteConnectionProperties
11140				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
11141				if err != nil {
11142					return err
11143				}
11144				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
11145			}
11146		case "name":
11147			if v != nil {
11148				var name string
11149				err = json.Unmarshal(*v, &name)
11150				if err != nil {
11151					return err
11152				}
11153				erc.Name = &name
11154			}
11155		case "id":
11156			if v != nil {
11157				var ID string
11158				err = json.Unmarshal(*v, &ID)
11159				if err != nil {
11160					return err
11161				}
11162				erc.ID = &ID
11163			}
11164		}
11165	}
11166
11167	return nil
11168}
11169
11170// ExpressRouteConnectionID the ID of the ExpressRouteConnection.
11171type ExpressRouteConnectionID struct {
11172	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
11173	ID *string `json:"id,omitempty"`
11174}
11175
11176// ExpressRouteConnectionList expressRouteConnection list.
11177type ExpressRouteConnectionList struct {
11178	autorest.Response `json:"-"`
11179	// Value - The list of ExpressRoute connections.
11180	Value *[]ExpressRouteConnection `json:"value,omitempty"`
11181}
11182
11183// ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
11184type ExpressRouteConnectionProperties struct {
11185	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11186	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11187	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
11188	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
11189	// AuthorizationKey - Authorization key to establish the connection.
11190	AuthorizationKey *string `json:"authorizationKey,omitempty"`
11191	// RoutingWeight - The routing weight associated to the connection.
11192	RoutingWeight *int32 `json:"routingWeight,omitempty"`
11193}
11194
11195// ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
11196// a long-running operation.
11197type ExpressRouteConnectionsCreateOrUpdateFuture struct {
11198	azure.Future
11199}
11200
11201// Result returns the result of the asynchronous operation.
11202// If the operation has not completed it will return an error.
11203func (future *ExpressRouteConnectionsCreateOrUpdateFuture) Result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
11204	var done bool
11205	done, err = future.DoneWithContext(context.Background(), client)
11206	if err != nil {
11207		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11208		return
11209	}
11210	if !done {
11211		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
11212		return
11213	}
11214	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11215	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11216		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
11217		if err != nil {
11218			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
11219		}
11220	}
11221	return
11222}
11223
11224// ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
11225// long-running operation.
11226type ExpressRouteConnectionsDeleteFuture struct {
11227	azure.Future
11228}
11229
11230// Result returns the result of the asynchronous operation.
11231// If the operation has not completed it will return an error.
11232func (future *ExpressRouteConnectionsDeleteFuture) Result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
11233	var done bool
11234	done, err = future.DoneWithContext(context.Background(), client)
11235	if err != nil {
11236		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
11237		return
11238	}
11239	if !done {
11240		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
11241		return
11242	}
11243	ar.Response = future.Response()
11244	return
11245}
11246
11247// ExpressRouteCrossConnection expressRouteCrossConnection resource.
11248type ExpressRouteCrossConnection struct {
11249	autorest.Response `json:"-"`
11250	// ExpressRouteCrossConnectionProperties - Properties of the express route cross connection.
11251	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
11252	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
11253	Etag *string `json:"etag,omitempty"`
11254	// ID - Resource ID.
11255	ID *string `json:"id,omitempty"`
11256	// Name - READ-ONLY; Resource name.
11257	Name *string `json:"name,omitempty"`
11258	// Type - READ-ONLY; Resource type.
11259	Type *string `json:"type,omitempty"`
11260	// Location - Resource location.
11261	Location *string `json:"location,omitempty"`
11262	// Tags - Resource tags.
11263	Tags map[string]*string `json:"tags"`
11264}
11265
11266// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
11267func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
11268	objectMap := make(map[string]interface{})
11269	if ercc.ExpressRouteCrossConnectionProperties != nil {
11270		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
11271	}
11272	if ercc.ID != nil {
11273		objectMap["id"] = ercc.ID
11274	}
11275	if ercc.Location != nil {
11276		objectMap["location"] = ercc.Location
11277	}
11278	if ercc.Tags != nil {
11279		objectMap["tags"] = ercc.Tags
11280	}
11281	return json.Marshal(objectMap)
11282}
11283
11284// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
11285func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
11286	var m map[string]*json.RawMessage
11287	err := json.Unmarshal(body, &m)
11288	if err != nil {
11289		return err
11290	}
11291	for k, v := range m {
11292		switch k {
11293		case "properties":
11294			if v != nil {
11295				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
11296				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
11297				if err != nil {
11298					return err
11299				}
11300				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
11301			}
11302		case "etag":
11303			if v != nil {
11304				var etag string
11305				err = json.Unmarshal(*v, &etag)
11306				if err != nil {
11307					return err
11308				}
11309				ercc.Etag = &etag
11310			}
11311		case "id":
11312			if v != nil {
11313				var ID string
11314				err = json.Unmarshal(*v, &ID)
11315				if err != nil {
11316					return err
11317				}
11318				ercc.ID = &ID
11319			}
11320		case "name":
11321			if v != nil {
11322				var name string
11323				err = json.Unmarshal(*v, &name)
11324				if err != nil {
11325					return err
11326				}
11327				ercc.Name = &name
11328			}
11329		case "type":
11330			if v != nil {
11331				var typeVar string
11332				err = json.Unmarshal(*v, &typeVar)
11333				if err != nil {
11334					return err
11335				}
11336				ercc.Type = &typeVar
11337			}
11338		case "location":
11339			if v != nil {
11340				var location string
11341				err = json.Unmarshal(*v, &location)
11342				if err != nil {
11343					return err
11344				}
11345				ercc.Location = &location
11346			}
11347		case "tags":
11348			if v != nil {
11349				var tags map[string]*string
11350				err = json.Unmarshal(*v, &tags)
11351				if err != nil {
11352					return err
11353				}
11354				ercc.Tags = tags
11355			}
11356		}
11357	}
11358
11359	return nil
11360}
11361
11362// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
11363type ExpressRouteCrossConnectionListResult struct {
11364	autorest.Response `json:"-"`
11365	// Value - A list of ExpressRouteCrossConnection resources.
11366	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
11367	// NextLink - READ-ONLY; The URL to get the next set of results.
11368	NextLink *string `json:"nextLink,omitempty"`
11369}
11370
11371// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
11372// ExpressRouteCrossConnection values.
11373type ExpressRouteCrossConnectionListResultIterator struct {
11374	i    int
11375	page ExpressRouteCrossConnectionListResultPage
11376}
11377
11378// NextWithContext advances to the next value.  If there was an error making
11379// the request the iterator does not advance and the error is returned.
11380func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
11381	if tracing.IsEnabled() {
11382		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
11383		defer func() {
11384			sc := -1
11385			if iter.Response().Response.Response != nil {
11386				sc = iter.Response().Response.Response.StatusCode
11387			}
11388			tracing.EndSpan(ctx, sc, err)
11389		}()
11390	}
11391	iter.i++
11392	if iter.i < len(iter.page.Values()) {
11393		return nil
11394	}
11395	err = iter.page.NextWithContext(ctx)
11396	if err != nil {
11397		iter.i--
11398		return err
11399	}
11400	iter.i = 0
11401	return nil
11402}
11403
11404// Next advances to the next value.  If there was an error making
11405// the request the iterator does not advance and the error is returned.
11406// Deprecated: Use NextWithContext() instead.
11407func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
11408	return iter.NextWithContext(context.Background())
11409}
11410
11411// NotDone returns true if the enumeration should be started or is not yet complete.
11412func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
11413	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11414}
11415
11416// Response returns the raw server response from the last page request.
11417func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
11418	return iter.page.Response()
11419}
11420
11421// Value returns the current value or a zero-initialized value if the
11422// iterator has advanced beyond the end of the collection.
11423func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
11424	if !iter.page.NotDone() {
11425		return ExpressRouteCrossConnection{}
11426	}
11427	return iter.page.Values()[iter.i]
11428}
11429
11430// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
11431func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
11432	return ExpressRouteCrossConnectionListResultIterator{page: page}
11433}
11434
11435// IsEmpty returns true if the ListResult contains no values.
11436func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
11437	return ercclr.Value == nil || len(*ercclr.Value) == 0
11438}
11439
11440// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
11441// It returns nil if no more results exist.
11442func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
11443	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
11444		return nil, nil
11445	}
11446	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11447		autorest.AsJSON(),
11448		autorest.AsGet(),
11449		autorest.WithBaseURL(to.String(ercclr.NextLink)))
11450}
11451
11452// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
11453type ExpressRouteCrossConnectionListResultPage struct {
11454	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
11455	ercclr ExpressRouteCrossConnectionListResult
11456}
11457
11458// NextWithContext advances to the next page of values.  If there was an error making
11459// the request the page does not advance and the error is returned.
11460func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
11461	if tracing.IsEnabled() {
11462		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
11463		defer func() {
11464			sc := -1
11465			if page.Response().Response.Response != nil {
11466				sc = page.Response().Response.Response.StatusCode
11467			}
11468			tracing.EndSpan(ctx, sc, err)
11469		}()
11470	}
11471	next, err := page.fn(ctx, page.ercclr)
11472	if err != nil {
11473		return err
11474	}
11475	page.ercclr = next
11476	return nil
11477}
11478
11479// Next advances to the next page of values.  If there was an error making
11480// the request the page does not advance and the error is returned.
11481// Deprecated: Use NextWithContext() instead.
11482func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
11483	return page.NextWithContext(context.Background())
11484}
11485
11486// NotDone returns true if the page enumeration should be started or is not yet complete.
11487func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
11488	return !page.ercclr.IsEmpty()
11489}
11490
11491// Response returns the raw server response from the last page request.
11492func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
11493	return page.ercclr
11494}
11495
11496// Values returns the slice of values for the current page or nil if there are no values.
11497func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
11498	if page.ercclr.IsEmpty() {
11499		return nil
11500	}
11501	return *page.ercclr.Value
11502}
11503
11504// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
11505func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
11506	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
11507}
11508
11509// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
11510type ExpressRouteCrossConnectionPeering struct {
11511	autorest.Response `json:"-"`
11512	// ExpressRouteCrossConnectionPeeringProperties - Properties of the express route cross connection peering.
11513	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
11514	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
11515	Name *string `json:"name,omitempty"`
11516	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11517	Etag *string `json:"etag,omitempty"`
11518	// ID - Resource ID.
11519	ID *string `json:"id,omitempty"`
11520}
11521
11522// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
11523func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
11524	objectMap := make(map[string]interface{})
11525	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
11526		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
11527	}
11528	if erccp.Name != nil {
11529		objectMap["name"] = erccp.Name
11530	}
11531	if erccp.ID != nil {
11532		objectMap["id"] = erccp.ID
11533	}
11534	return json.Marshal(objectMap)
11535}
11536
11537// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
11538func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
11539	var m map[string]*json.RawMessage
11540	err := json.Unmarshal(body, &m)
11541	if err != nil {
11542		return err
11543	}
11544	for k, v := range m {
11545		switch k {
11546		case "properties":
11547			if v != nil {
11548				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
11549				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
11550				if err != nil {
11551					return err
11552				}
11553				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
11554			}
11555		case "name":
11556			if v != nil {
11557				var name string
11558				err = json.Unmarshal(*v, &name)
11559				if err != nil {
11560					return err
11561				}
11562				erccp.Name = &name
11563			}
11564		case "etag":
11565			if v != nil {
11566				var etag string
11567				err = json.Unmarshal(*v, &etag)
11568				if err != nil {
11569					return err
11570				}
11571				erccp.Etag = &etag
11572			}
11573		case "id":
11574			if v != nil {
11575				var ID string
11576				err = json.Unmarshal(*v, &ID)
11577				if err != nil {
11578					return err
11579				}
11580				erccp.ID = &ID
11581			}
11582		}
11583	}
11584
11585	return nil
11586}
11587
11588// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
11589// that belong to an ExpressRouteCrossConnection.
11590type ExpressRouteCrossConnectionPeeringList struct {
11591	autorest.Response `json:"-"`
11592	// Value - The peerings in an express route cross connection.
11593	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
11594	// NextLink - READ-ONLY; The URL to get the next set of results.
11595	NextLink *string `json:"nextLink,omitempty"`
11596}
11597
11598// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
11599// ExpressRouteCrossConnectionPeering values.
11600type ExpressRouteCrossConnectionPeeringListIterator struct {
11601	i    int
11602	page ExpressRouteCrossConnectionPeeringListPage
11603}
11604
11605// NextWithContext advances to the next value.  If there was an error making
11606// the request the iterator does not advance and the error is returned.
11607func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
11608	if tracing.IsEnabled() {
11609		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
11610		defer func() {
11611			sc := -1
11612			if iter.Response().Response.Response != nil {
11613				sc = iter.Response().Response.Response.StatusCode
11614			}
11615			tracing.EndSpan(ctx, sc, err)
11616		}()
11617	}
11618	iter.i++
11619	if iter.i < len(iter.page.Values()) {
11620		return nil
11621	}
11622	err = iter.page.NextWithContext(ctx)
11623	if err != nil {
11624		iter.i--
11625		return err
11626	}
11627	iter.i = 0
11628	return nil
11629}
11630
11631// Next advances to the next value.  If there was an error making
11632// the request the iterator does not advance and the error is returned.
11633// Deprecated: Use NextWithContext() instead.
11634func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
11635	return iter.NextWithContext(context.Background())
11636}
11637
11638// NotDone returns true if the enumeration should be started or is not yet complete.
11639func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
11640	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11641}
11642
11643// Response returns the raw server response from the last page request.
11644func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
11645	return iter.page.Response()
11646}
11647
11648// Value returns the current value or a zero-initialized value if the
11649// iterator has advanced beyond the end of the collection.
11650func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
11651	if !iter.page.NotDone() {
11652		return ExpressRouteCrossConnectionPeering{}
11653	}
11654	return iter.page.Values()[iter.i]
11655}
11656
11657// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
11658func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
11659	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
11660}
11661
11662// IsEmpty returns true if the ListResult contains no values.
11663func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
11664	return erccpl.Value == nil || len(*erccpl.Value) == 0
11665}
11666
11667// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
11668// It returns nil if no more results exist.
11669func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
11670	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
11671		return nil, nil
11672	}
11673	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11674		autorest.AsJSON(),
11675		autorest.AsGet(),
11676		autorest.WithBaseURL(to.String(erccpl.NextLink)))
11677}
11678
11679// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
11680type ExpressRouteCrossConnectionPeeringListPage struct {
11681	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
11682	erccpl ExpressRouteCrossConnectionPeeringList
11683}
11684
11685// NextWithContext advances to the next page of values.  If there was an error making
11686// the request the page does not advance and the error is returned.
11687func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
11688	if tracing.IsEnabled() {
11689		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
11690		defer func() {
11691			sc := -1
11692			if page.Response().Response.Response != nil {
11693				sc = page.Response().Response.Response.StatusCode
11694			}
11695			tracing.EndSpan(ctx, sc, err)
11696		}()
11697	}
11698	next, err := page.fn(ctx, page.erccpl)
11699	if err != nil {
11700		return err
11701	}
11702	page.erccpl = next
11703	return nil
11704}
11705
11706// Next advances to the next page of values.  If there was an error making
11707// the request the page does not advance and the error is returned.
11708// Deprecated: Use NextWithContext() instead.
11709func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
11710	return page.NextWithContext(context.Background())
11711}
11712
11713// NotDone returns true if the page enumeration should be started or is not yet complete.
11714func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
11715	return !page.erccpl.IsEmpty()
11716}
11717
11718// Response returns the raw server response from the last page request.
11719func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
11720	return page.erccpl
11721}
11722
11723// Values returns the slice of values for the current page or nil if there are no values.
11724func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
11725	if page.erccpl.IsEmpty() {
11726		return nil
11727	}
11728	return *page.erccpl.Value
11729}
11730
11731// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
11732func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
11733	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
11734}
11735
11736// ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering.
11737type ExpressRouteCrossConnectionPeeringProperties struct {
11738	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
11739	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
11740	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
11741	State ExpressRoutePeeringState `json:"state,omitempty"`
11742	// AzureASN - READ-ONLY; The Azure ASN.
11743	AzureASN *int32 `json:"azureASN,omitempty"`
11744	// PeerASN - The peer ASN.
11745	PeerASN *int64 `json:"peerASN,omitempty"`
11746	// PrimaryPeerAddressPrefix - The primary address prefix.
11747	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
11748	// SecondaryPeerAddressPrefix - The secondary address prefix.
11749	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
11750	// PrimaryAzurePort - READ-ONLY; The primary port.
11751	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
11752	// SecondaryAzurePort - READ-ONLY; The secondary port.
11753	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
11754	// SharedKey - The shared key.
11755	SharedKey *string `json:"sharedKey,omitempty"`
11756	// VlanID - The VLAN ID.
11757	VlanID *int32 `json:"vlanId,omitempty"`
11758	// MicrosoftPeeringConfig - The Microsoft peering configuration.
11759	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
11760	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
11761	ProvisioningState *string `json:"provisioningState,omitempty"`
11762	// GatewayManagerEtag - The GatewayManager Etag.
11763	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
11764	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
11765	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
11766	// Ipv6PeeringConfig - The IPv6 peering configuration.
11767	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
11768}
11769
11770// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
11771// results of a long-running operation.
11772type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
11773	azure.Future
11774}
11775
11776// Result returns the result of the asynchronous operation.
11777// If the operation has not completed it will return an error.
11778func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
11779	var done bool
11780	done, err = future.DoneWithContext(context.Background(), client)
11781	if err != nil {
11782		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11783		return
11784	}
11785	if !done {
11786		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
11787		return
11788	}
11789	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11790	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
11791		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
11792		if err != nil {
11793			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
11794		}
11795	}
11796	return
11797}
11798
11799// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
11800// of a long-running operation.
11801type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
11802	azure.Future
11803}
11804
11805// Result returns the result of the asynchronous operation.
11806// If the operation has not completed it will return an error.
11807func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
11808	var done bool
11809	done, err = future.DoneWithContext(context.Background(), client)
11810	if err != nil {
11811		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
11812		return
11813	}
11814	if !done {
11815		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
11816		return
11817	}
11818	ar.Response = future.Response()
11819	return
11820}
11821
11822// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
11823type ExpressRouteCrossConnectionProperties struct {
11824	// PrimaryAzurePort - READ-ONLY; The name of the primary port.
11825	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
11826	// SecondaryAzurePort - READ-ONLY; The name of the secondary port.
11827	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
11828	// STag - READ-ONLY; The identifier of the circuit traffic.
11829	STag *int32 `json:"sTag,omitempty"`
11830	// PeeringLocation - The peering location of the ExpressRoute circuit.
11831	PeeringLocation *string `json:"peeringLocation,omitempty"`
11832	// BandwidthInMbps - The circuit bandwidth In Mbps.
11833	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
11834	// ExpressRouteCircuit - The ExpressRouteCircuit.
11835	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
11836	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
11837	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
11838	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
11839	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
11840	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
11841	ProvisioningState *string `json:"provisioningState,omitempty"`
11842	// Peerings - The list of peerings.
11843	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
11844}
11845
11846// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
11847type ExpressRouteCrossConnectionRoutesTableSummary struct {
11848	// Neighbor - IP address of Neighbor router.
11849	Neighbor *string `json:"neighbor,omitempty"`
11850	// Asn - Autonomous system number.
11851	Asn *int32 `json:"asn,omitempty"`
11852	// 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.
11853	UpDown *string `json:"upDown,omitempty"`
11854	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
11855	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
11856}
11857
11858// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
11859// results of a long-running operation.
11860type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
11861	azure.Future
11862}
11863
11864// Result returns the result of the asynchronous operation.
11865// If the operation has not completed it will return an error.
11866func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
11867	var done bool
11868	done, err = future.DoneWithContext(context.Background(), client)
11869	if err != nil {
11870		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11871		return
11872	}
11873	if !done {
11874		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
11875		return
11876	}
11877	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11878	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
11879		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
11880		if err != nil {
11881			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
11882		}
11883	}
11884	return
11885}
11886
11887// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
11888// of a long-running operation.
11889type ExpressRouteCrossConnectionsListArpTableFuture struct {
11890	azure.Future
11891}
11892
11893// Result returns the result of the asynchronous operation.
11894// If the operation has not completed it will return an error.
11895func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
11896	var done bool
11897	done, err = future.DoneWithContext(context.Background(), client)
11898	if err != nil {
11899		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
11900		return
11901	}
11902	if !done {
11903		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
11904		return
11905	}
11906	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11907	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
11908		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
11909		if err != nil {
11910			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
11911		}
11912	}
11913	return
11914}
11915
11916// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
11917// results of a long-running operation.
11918type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
11919	azure.Future
11920}
11921
11922// Result returns the result of the asynchronous operation.
11923// If the operation has not completed it will return an error.
11924func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
11925	var done bool
11926	done, err = future.DoneWithContext(context.Background(), client)
11927	if err != nil {
11928		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
11929		return
11930	}
11931	if !done {
11932		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
11933		return
11934	}
11935	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11936	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
11937		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
11938		if err != nil {
11939			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
11940		}
11941	}
11942	return
11943}
11944
11945// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
11946// the results of a long-running operation.
11947type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
11948	azure.Future
11949}
11950
11951// Result returns the result of the asynchronous operation.
11952// If the operation has not completed it will return an error.
11953func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
11954	var done bool
11955	done, err = future.DoneWithContext(context.Background(), client)
11956	if err != nil {
11957		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
11958		return
11959	}
11960	if !done {
11961		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
11962		return
11963	}
11964	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11965	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
11966		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
11967		if err != nil {
11968			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
11969		}
11970	}
11971	return
11972}
11973
11974// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
11975// the Express Route Cross Connections.
11976type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
11977	autorest.Response `json:"-"`
11978	// Value - A list of the routes table.
11979	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
11980	// NextLink - READ-ONLY; The URL to get the next set of results.
11981	NextLink *string `json:"nextLink,omitempty"`
11982}
11983
11984// ExpressRouteCrossConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the results of
11985// a long-running operation.
11986type ExpressRouteCrossConnectionsUpdateTagsFuture struct {
11987	azure.Future
11988}
11989
11990// Result returns the result of the asynchronous operation.
11991// If the operation has not completed it will return an error.
11992func (future *ExpressRouteCrossConnectionsUpdateTagsFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
11993	var done bool
11994	done, err = future.DoneWithContext(context.Background(), client)
11995	if err != nil {
11996		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11997		return
11998	}
11999	if !done {
12000		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsUpdateTagsFuture")
12001		return
12002	}
12003	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12004	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
12005		ercc, err = client.UpdateTagsResponder(ercc.Response.Response)
12006		if err != nil {
12007			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", ercc.Response.Response, "Failure responding to request")
12008		}
12009	}
12010	return
12011}
12012
12013// ExpressRouteGateway expressRoute gateway resource.
12014type ExpressRouteGateway struct {
12015	autorest.Response `json:"-"`
12016	// ExpressRouteGatewayProperties - Properties of the express route gateway.
12017	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
12018	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12019	Etag *string `json:"etag,omitempty"`
12020	// ID - Resource ID.
12021	ID *string `json:"id,omitempty"`
12022	// Name - READ-ONLY; Resource name.
12023	Name *string `json:"name,omitempty"`
12024	// Type - READ-ONLY; Resource type.
12025	Type *string `json:"type,omitempty"`
12026	// Location - Resource location.
12027	Location *string `json:"location,omitempty"`
12028	// Tags - Resource tags.
12029	Tags map[string]*string `json:"tags"`
12030}
12031
12032// MarshalJSON is the custom marshaler for ExpressRouteGateway.
12033func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
12034	objectMap := make(map[string]interface{})
12035	if erg.ExpressRouteGatewayProperties != nil {
12036		objectMap["properties"] = erg.ExpressRouteGatewayProperties
12037	}
12038	if erg.ID != nil {
12039		objectMap["id"] = erg.ID
12040	}
12041	if erg.Location != nil {
12042		objectMap["location"] = erg.Location
12043	}
12044	if erg.Tags != nil {
12045		objectMap["tags"] = erg.Tags
12046	}
12047	return json.Marshal(objectMap)
12048}
12049
12050// UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
12051func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
12052	var m map[string]*json.RawMessage
12053	err := json.Unmarshal(body, &m)
12054	if err != nil {
12055		return err
12056	}
12057	for k, v := range m {
12058		switch k {
12059		case "properties":
12060			if v != nil {
12061				var expressRouteGatewayProperties ExpressRouteGatewayProperties
12062				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
12063				if err != nil {
12064					return err
12065				}
12066				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
12067			}
12068		case "etag":
12069			if v != nil {
12070				var etag string
12071				err = json.Unmarshal(*v, &etag)
12072				if err != nil {
12073					return err
12074				}
12075				erg.Etag = &etag
12076			}
12077		case "id":
12078			if v != nil {
12079				var ID string
12080				err = json.Unmarshal(*v, &ID)
12081				if err != nil {
12082					return err
12083				}
12084				erg.ID = &ID
12085			}
12086		case "name":
12087			if v != nil {
12088				var name string
12089				err = json.Unmarshal(*v, &name)
12090				if err != nil {
12091					return err
12092				}
12093				erg.Name = &name
12094			}
12095		case "type":
12096			if v != nil {
12097				var typeVar string
12098				err = json.Unmarshal(*v, &typeVar)
12099				if err != nil {
12100					return err
12101				}
12102				erg.Type = &typeVar
12103			}
12104		case "location":
12105			if v != nil {
12106				var location string
12107				err = json.Unmarshal(*v, &location)
12108				if err != nil {
12109					return err
12110				}
12111				erg.Location = &location
12112			}
12113		case "tags":
12114			if v != nil {
12115				var tags map[string]*string
12116				err = json.Unmarshal(*v, &tags)
12117				if err != nil {
12118					return err
12119				}
12120				erg.Tags = tags
12121			}
12122		}
12123	}
12124
12125	return nil
12126}
12127
12128// ExpressRouteGatewayList list of ExpressRoute gateways.
12129type ExpressRouteGatewayList struct {
12130	autorest.Response `json:"-"`
12131	// Value - List of ExpressRoute gateways.
12132	Value *[]ExpressRouteGateway `json:"value,omitempty"`
12133}
12134
12135// ExpressRouteGatewayProperties expressRoute gateway resource properties.
12136type ExpressRouteGatewayProperties struct {
12137	// AutoScaleConfiguration - Configuration for auto scaling.
12138	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
12139	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
12140	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
12141	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12142	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12143	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
12144	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
12145}
12146
12147// ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
12148type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
12149	// Bounds - Minimum and maximum number of scale units to deploy.
12150	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
12151}
12152
12153// ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
12154// deploy.
12155type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
12156	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
12157	Min *int32 `json:"min,omitempty"`
12158	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
12159	Max *int32 `json:"max,omitempty"`
12160}
12161
12162// ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
12163// long-running operation.
12164type ExpressRouteGatewaysCreateOrUpdateFuture struct {
12165	azure.Future
12166}
12167
12168// Result returns the result of the asynchronous operation.
12169// If the operation has not completed it will return an error.
12170func (future *ExpressRouteGatewaysCreateOrUpdateFuture) Result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
12171	var done bool
12172	done, err = future.DoneWithContext(context.Background(), client)
12173	if err != nil {
12174		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12175		return
12176	}
12177	if !done {
12178		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
12179		return
12180	}
12181	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12182	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
12183		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
12184		if err != nil {
12185			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
12186		}
12187	}
12188	return
12189}
12190
12191// ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
12192// long-running operation.
12193type ExpressRouteGatewaysDeleteFuture struct {
12194	azure.Future
12195}
12196
12197// Result returns the result of the asynchronous operation.
12198// If the operation has not completed it will return an error.
12199func (future *ExpressRouteGatewaysDeleteFuture) Result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
12200	var done bool
12201	done, err = future.DoneWithContext(context.Background(), client)
12202	if err != nil {
12203		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
12204		return
12205	}
12206	if !done {
12207		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
12208		return
12209	}
12210	ar.Response = future.Response()
12211	return
12212}
12213
12214// ExpressRouteLink expressRouteLink child resource definition.
12215type ExpressRouteLink struct {
12216	autorest.Response `json:"-"`
12217	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties.
12218	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
12219	// Name - Name of child port resource that is unique among child port resources of the parent.
12220	Name *string `json:"name,omitempty"`
12221	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12222	Etag *string `json:"etag,omitempty"`
12223	// ID - Resource ID.
12224	ID *string `json:"id,omitempty"`
12225}
12226
12227// MarshalJSON is the custom marshaler for ExpressRouteLink.
12228func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
12229	objectMap := make(map[string]interface{})
12230	if erl.ExpressRouteLinkPropertiesFormat != nil {
12231		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
12232	}
12233	if erl.Name != nil {
12234		objectMap["name"] = erl.Name
12235	}
12236	if erl.ID != nil {
12237		objectMap["id"] = erl.ID
12238	}
12239	return json.Marshal(objectMap)
12240}
12241
12242// UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
12243func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
12244	var m map[string]*json.RawMessage
12245	err := json.Unmarshal(body, &m)
12246	if err != nil {
12247		return err
12248	}
12249	for k, v := range m {
12250		switch k {
12251		case "properties":
12252			if v != nil {
12253				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
12254				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
12255				if err != nil {
12256					return err
12257				}
12258				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
12259			}
12260		case "name":
12261			if v != nil {
12262				var name string
12263				err = json.Unmarshal(*v, &name)
12264				if err != nil {
12265					return err
12266				}
12267				erl.Name = &name
12268			}
12269		case "etag":
12270			if v != nil {
12271				var etag string
12272				err = json.Unmarshal(*v, &etag)
12273				if err != nil {
12274					return err
12275				}
12276				erl.Etag = &etag
12277			}
12278		case "id":
12279			if v != nil {
12280				var ID string
12281				err = json.Unmarshal(*v, &ID)
12282				if err != nil {
12283					return err
12284				}
12285				erl.ID = &ID
12286			}
12287		}
12288	}
12289
12290	return nil
12291}
12292
12293// ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
12294type ExpressRouteLinkListResult struct {
12295	autorest.Response `json:"-"`
12296	// Value - The list of ExpressRouteLink sub-resources.
12297	Value *[]ExpressRouteLink `json:"value,omitempty"`
12298	// NextLink - The URL to get the next set of results.
12299	NextLink *string `json:"nextLink,omitempty"`
12300}
12301
12302// ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
12303type ExpressRouteLinkListResultIterator struct {
12304	i    int
12305	page ExpressRouteLinkListResultPage
12306}
12307
12308// NextWithContext advances to the next value.  If there was an error making
12309// the request the iterator does not advance and the error is returned.
12310func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
12311	if tracing.IsEnabled() {
12312		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
12313		defer func() {
12314			sc := -1
12315			if iter.Response().Response.Response != nil {
12316				sc = iter.Response().Response.Response.StatusCode
12317			}
12318			tracing.EndSpan(ctx, sc, err)
12319		}()
12320	}
12321	iter.i++
12322	if iter.i < len(iter.page.Values()) {
12323		return nil
12324	}
12325	err = iter.page.NextWithContext(ctx)
12326	if err != nil {
12327		iter.i--
12328		return err
12329	}
12330	iter.i = 0
12331	return nil
12332}
12333
12334// Next advances to the next value.  If there was an error making
12335// the request the iterator does not advance and the error is returned.
12336// Deprecated: Use NextWithContext() instead.
12337func (iter *ExpressRouteLinkListResultIterator) Next() error {
12338	return iter.NextWithContext(context.Background())
12339}
12340
12341// NotDone returns true if the enumeration should be started or is not yet complete.
12342func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
12343	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12344}
12345
12346// Response returns the raw server response from the last page request.
12347func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
12348	return iter.page.Response()
12349}
12350
12351// Value returns the current value or a zero-initialized value if the
12352// iterator has advanced beyond the end of the collection.
12353func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
12354	if !iter.page.NotDone() {
12355		return ExpressRouteLink{}
12356	}
12357	return iter.page.Values()[iter.i]
12358}
12359
12360// Creates a new instance of the ExpressRouteLinkListResultIterator type.
12361func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
12362	return ExpressRouteLinkListResultIterator{page: page}
12363}
12364
12365// IsEmpty returns true if the ListResult contains no values.
12366func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
12367	return erllr.Value == nil || len(*erllr.Value) == 0
12368}
12369
12370// expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
12371// It returns nil if no more results exist.
12372func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
12373	if erllr.NextLink == nil || len(to.String(erllr.NextLink)) < 1 {
12374		return nil, nil
12375	}
12376	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12377		autorest.AsJSON(),
12378		autorest.AsGet(),
12379		autorest.WithBaseURL(to.String(erllr.NextLink)))
12380}
12381
12382// ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
12383type ExpressRouteLinkListResultPage struct {
12384	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
12385	erllr ExpressRouteLinkListResult
12386}
12387
12388// NextWithContext advances to the next page of values.  If there was an error making
12389// the request the page does not advance and the error is returned.
12390func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
12391	if tracing.IsEnabled() {
12392		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
12393		defer func() {
12394			sc := -1
12395			if page.Response().Response.Response != nil {
12396				sc = page.Response().Response.Response.StatusCode
12397			}
12398			tracing.EndSpan(ctx, sc, err)
12399		}()
12400	}
12401	next, err := page.fn(ctx, page.erllr)
12402	if err != nil {
12403		return err
12404	}
12405	page.erllr = next
12406	return nil
12407}
12408
12409// Next advances to the next page of values.  If there was an error making
12410// the request the page does not advance and the error is returned.
12411// Deprecated: Use NextWithContext() instead.
12412func (page *ExpressRouteLinkListResultPage) Next() error {
12413	return page.NextWithContext(context.Background())
12414}
12415
12416// NotDone returns true if the page enumeration should be started or is not yet complete.
12417func (page ExpressRouteLinkListResultPage) NotDone() bool {
12418	return !page.erllr.IsEmpty()
12419}
12420
12421// Response returns the raw server response from the last page request.
12422func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
12423	return page.erllr
12424}
12425
12426// Values returns the slice of values for the current page or nil if there are no values.
12427func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
12428	if page.erllr.IsEmpty() {
12429		return nil
12430	}
12431	return *page.erllr.Value
12432}
12433
12434// Creates a new instance of the ExpressRouteLinkListResultPage type.
12435func NewExpressRouteLinkListResultPage(getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
12436	return ExpressRouteLinkListResultPage{fn: getNextPage}
12437}
12438
12439// ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
12440type ExpressRouteLinkPropertiesFormat struct {
12441	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
12442	RouterName *string `json:"routerName,omitempty"`
12443	// InterfaceName - READ-ONLY; Name of Azure router interface.
12444	InterfaceName *string `json:"interfaceName,omitempty"`
12445	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
12446	PatchPanelID *string `json:"patchPanelId,omitempty"`
12447	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
12448	RackID *string `json:"rackId,omitempty"`
12449	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
12450	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
12451	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
12452	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
12453	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRouteLink resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
12454	ProvisioningState *string `json:"provisioningState,omitempty"`
12455}
12456
12457// ExpressRoutePort expressRoutePort resource definition.
12458type ExpressRoutePort struct {
12459	autorest.Response `json:"-"`
12460	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties.
12461	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
12462	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12463	Etag *string `json:"etag,omitempty"`
12464	// ID - Resource ID.
12465	ID *string `json:"id,omitempty"`
12466	// Name - READ-ONLY; Resource name.
12467	Name *string `json:"name,omitempty"`
12468	// Type - READ-ONLY; Resource type.
12469	Type *string `json:"type,omitempty"`
12470	// Location - Resource location.
12471	Location *string `json:"location,omitempty"`
12472	// Tags - Resource tags.
12473	Tags map[string]*string `json:"tags"`
12474}
12475
12476// MarshalJSON is the custom marshaler for ExpressRoutePort.
12477func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
12478	objectMap := make(map[string]interface{})
12479	if erp.ExpressRoutePortPropertiesFormat != nil {
12480		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
12481	}
12482	if erp.ID != nil {
12483		objectMap["id"] = erp.ID
12484	}
12485	if erp.Location != nil {
12486		objectMap["location"] = erp.Location
12487	}
12488	if erp.Tags != nil {
12489		objectMap["tags"] = erp.Tags
12490	}
12491	return json.Marshal(objectMap)
12492}
12493
12494// UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
12495func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
12496	var m map[string]*json.RawMessage
12497	err := json.Unmarshal(body, &m)
12498	if err != nil {
12499		return err
12500	}
12501	for k, v := range m {
12502		switch k {
12503		case "properties":
12504			if v != nil {
12505				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
12506				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
12507				if err != nil {
12508					return err
12509				}
12510				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
12511			}
12512		case "etag":
12513			if v != nil {
12514				var etag string
12515				err = json.Unmarshal(*v, &etag)
12516				if err != nil {
12517					return err
12518				}
12519				erp.Etag = &etag
12520			}
12521		case "id":
12522			if v != nil {
12523				var ID string
12524				err = json.Unmarshal(*v, &ID)
12525				if err != nil {
12526					return err
12527				}
12528				erp.ID = &ID
12529			}
12530		case "name":
12531			if v != nil {
12532				var name string
12533				err = json.Unmarshal(*v, &name)
12534				if err != nil {
12535					return err
12536				}
12537				erp.Name = &name
12538			}
12539		case "type":
12540			if v != nil {
12541				var typeVar string
12542				err = json.Unmarshal(*v, &typeVar)
12543				if err != nil {
12544					return err
12545				}
12546				erp.Type = &typeVar
12547			}
12548		case "location":
12549			if v != nil {
12550				var location string
12551				err = json.Unmarshal(*v, &location)
12552				if err != nil {
12553					return err
12554				}
12555				erp.Location = &location
12556			}
12557		case "tags":
12558			if v != nil {
12559				var tags map[string]*string
12560				err = json.Unmarshal(*v, &tags)
12561				if err != nil {
12562					return err
12563				}
12564				erp.Tags = tags
12565			}
12566		}
12567	}
12568
12569	return nil
12570}
12571
12572// ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
12573type ExpressRoutePortListResult struct {
12574	autorest.Response `json:"-"`
12575	// Value - A list of ExpressRoutePort resources.
12576	Value *[]ExpressRoutePort `json:"value,omitempty"`
12577	// NextLink - The URL to get the next set of results.
12578	NextLink *string `json:"nextLink,omitempty"`
12579}
12580
12581// ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
12582type ExpressRoutePortListResultIterator struct {
12583	i    int
12584	page ExpressRoutePortListResultPage
12585}
12586
12587// NextWithContext advances to the next value.  If there was an error making
12588// the request the iterator does not advance and the error is returned.
12589func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
12590	if tracing.IsEnabled() {
12591		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
12592		defer func() {
12593			sc := -1
12594			if iter.Response().Response.Response != nil {
12595				sc = iter.Response().Response.Response.StatusCode
12596			}
12597			tracing.EndSpan(ctx, sc, err)
12598		}()
12599	}
12600	iter.i++
12601	if iter.i < len(iter.page.Values()) {
12602		return nil
12603	}
12604	err = iter.page.NextWithContext(ctx)
12605	if err != nil {
12606		iter.i--
12607		return err
12608	}
12609	iter.i = 0
12610	return nil
12611}
12612
12613// Next advances to the next value.  If there was an error making
12614// the request the iterator does not advance and the error is returned.
12615// Deprecated: Use NextWithContext() instead.
12616func (iter *ExpressRoutePortListResultIterator) Next() error {
12617	return iter.NextWithContext(context.Background())
12618}
12619
12620// NotDone returns true if the enumeration should be started or is not yet complete.
12621func (iter ExpressRoutePortListResultIterator) NotDone() bool {
12622	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12623}
12624
12625// Response returns the raw server response from the last page request.
12626func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
12627	return iter.page.Response()
12628}
12629
12630// Value returns the current value or a zero-initialized value if the
12631// iterator has advanced beyond the end of the collection.
12632func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
12633	if !iter.page.NotDone() {
12634		return ExpressRoutePort{}
12635	}
12636	return iter.page.Values()[iter.i]
12637}
12638
12639// Creates a new instance of the ExpressRoutePortListResultIterator type.
12640func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
12641	return ExpressRoutePortListResultIterator{page: page}
12642}
12643
12644// IsEmpty returns true if the ListResult contains no values.
12645func (erplr ExpressRoutePortListResult) IsEmpty() bool {
12646	return erplr.Value == nil || len(*erplr.Value) == 0
12647}
12648
12649// expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
12650// It returns nil if no more results exist.
12651func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
12652	if erplr.NextLink == nil || len(to.String(erplr.NextLink)) < 1 {
12653		return nil, nil
12654	}
12655	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12656		autorest.AsJSON(),
12657		autorest.AsGet(),
12658		autorest.WithBaseURL(to.String(erplr.NextLink)))
12659}
12660
12661// ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
12662type ExpressRoutePortListResultPage struct {
12663	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
12664	erplr ExpressRoutePortListResult
12665}
12666
12667// NextWithContext advances to the next page of values.  If there was an error making
12668// the request the page does not advance and the error is returned.
12669func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
12670	if tracing.IsEnabled() {
12671		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
12672		defer func() {
12673			sc := -1
12674			if page.Response().Response.Response != nil {
12675				sc = page.Response().Response.Response.StatusCode
12676			}
12677			tracing.EndSpan(ctx, sc, err)
12678		}()
12679	}
12680	next, err := page.fn(ctx, page.erplr)
12681	if err != nil {
12682		return err
12683	}
12684	page.erplr = next
12685	return nil
12686}
12687
12688// Next advances to the next page of values.  If there was an error making
12689// the request the page does not advance and the error is returned.
12690// Deprecated: Use NextWithContext() instead.
12691func (page *ExpressRoutePortListResultPage) Next() error {
12692	return page.NextWithContext(context.Background())
12693}
12694
12695// NotDone returns true if the page enumeration should be started or is not yet complete.
12696func (page ExpressRoutePortListResultPage) NotDone() bool {
12697	return !page.erplr.IsEmpty()
12698}
12699
12700// Response returns the raw server response from the last page request.
12701func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
12702	return page.erplr
12703}
12704
12705// Values returns the slice of values for the current page or nil if there are no values.
12706func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
12707	if page.erplr.IsEmpty() {
12708		return nil
12709	}
12710	return *page.erplr.Value
12711}
12712
12713// Creates a new instance of the ExpressRoutePortListResultPage type.
12714func NewExpressRoutePortListResultPage(getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
12715	return ExpressRoutePortListResultPage{fn: getNextPage}
12716}
12717
12718// ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
12719type ExpressRoutePortPropertiesFormat struct {
12720	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
12721	PeeringLocation *string `json:"peeringLocation,omitempty"`
12722	// BandwidthInGbps - Bandwidth of procured ports in Gbps.
12723	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
12724	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
12725	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
12726	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s).
12727	Mtu *string `json:"mtu,omitempty"`
12728	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
12729	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
12730	// EtherType - READ-ONLY; Ether type of the physical port.
12731	EtherType *string `json:"etherType,omitempty"`
12732	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
12733	AllocationDate *string `json:"allocationDate,omitempty"`
12734	// Links - The set of physical links of the ExpressRoutePort resource.
12735	Links *[]ExpressRouteLink `json:"links,omitempty"`
12736	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
12737	Circuits *[]SubResource `json:"circuits,omitempty"`
12738	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRoutePort resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
12739	ProvisioningState *string `json:"provisioningState,omitempty"`
12740	// ResourceGUID - The resource GUID property of the ExpressRoutePort resource.
12741	ResourceGUID *string `json:"resourceGuid,omitempty"`
12742}
12743
12744// ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
12745// long-running operation.
12746type ExpressRoutePortsCreateOrUpdateFuture struct {
12747	azure.Future
12748}
12749
12750// Result returns the result of the asynchronous operation.
12751// If the operation has not completed it will return an error.
12752func (future *ExpressRoutePortsCreateOrUpdateFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
12753	var done bool
12754	done, err = future.DoneWithContext(context.Background(), client)
12755	if err != nil {
12756		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12757		return
12758	}
12759	if !done {
12760		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
12761		return
12762	}
12763	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12764	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
12765		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
12766		if err != nil {
12767			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
12768		}
12769	}
12770	return
12771}
12772
12773// ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
12774// operation.
12775type ExpressRoutePortsDeleteFuture struct {
12776	azure.Future
12777}
12778
12779// Result returns the result of the asynchronous operation.
12780// If the operation has not completed it will return an error.
12781func (future *ExpressRoutePortsDeleteFuture) Result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
12782	var done bool
12783	done, err = future.DoneWithContext(context.Background(), client)
12784	if err != nil {
12785		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
12786		return
12787	}
12788	if !done {
12789		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
12790		return
12791	}
12792	ar.Response = future.Response()
12793	return
12794}
12795
12796// ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
12797type ExpressRoutePortsLocation struct {
12798	autorest.Response `json:"-"`
12799	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties.
12800	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
12801	// ID - Resource ID.
12802	ID *string `json:"id,omitempty"`
12803	// Name - READ-ONLY; Resource name.
12804	Name *string `json:"name,omitempty"`
12805	// Type - READ-ONLY; Resource type.
12806	Type *string `json:"type,omitempty"`
12807	// Location - Resource location.
12808	Location *string `json:"location,omitempty"`
12809	// Tags - Resource tags.
12810	Tags map[string]*string `json:"tags"`
12811}
12812
12813// MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
12814func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
12815	objectMap := make(map[string]interface{})
12816	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
12817		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
12818	}
12819	if erpl.ID != nil {
12820		objectMap["id"] = erpl.ID
12821	}
12822	if erpl.Location != nil {
12823		objectMap["location"] = erpl.Location
12824	}
12825	if erpl.Tags != nil {
12826		objectMap["tags"] = erpl.Tags
12827	}
12828	return json.Marshal(objectMap)
12829}
12830
12831// UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
12832func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
12833	var m map[string]*json.RawMessage
12834	err := json.Unmarshal(body, &m)
12835	if err != nil {
12836		return err
12837	}
12838	for k, v := range m {
12839		switch k {
12840		case "properties":
12841			if v != nil {
12842				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
12843				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
12844				if err != nil {
12845					return err
12846				}
12847				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
12848			}
12849		case "id":
12850			if v != nil {
12851				var ID string
12852				err = json.Unmarshal(*v, &ID)
12853				if err != nil {
12854					return err
12855				}
12856				erpl.ID = &ID
12857			}
12858		case "name":
12859			if v != nil {
12860				var name string
12861				err = json.Unmarshal(*v, &name)
12862				if err != nil {
12863					return err
12864				}
12865				erpl.Name = &name
12866			}
12867		case "type":
12868			if v != nil {
12869				var typeVar string
12870				err = json.Unmarshal(*v, &typeVar)
12871				if err != nil {
12872					return err
12873				}
12874				erpl.Type = &typeVar
12875			}
12876		case "location":
12877			if v != nil {
12878				var location string
12879				err = json.Unmarshal(*v, &location)
12880				if err != nil {
12881					return err
12882				}
12883				erpl.Location = &location
12884			}
12885		case "tags":
12886			if v != nil {
12887				var tags map[string]*string
12888				err = json.Unmarshal(*v, &tags)
12889				if err != nil {
12890					return err
12891				}
12892				erpl.Tags = tags
12893			}
12894		}
12895	}
12896
12897	return nil
12898}
12899
12900// ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
12901type ExpressRoutePortsLocationBandwidths struct {
12902	// OfferName - READ-ONLY; Bandwidth descriptive name.
12903	OfferName *string `json:"offerName,omitempty"`
12904	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps.
12905	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
12906}
12907
12908// ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
12909type ExpressRoutePortsLocationListResult struct {
12910	autorest.Response `json:"-"`
12911	// Value - The list of all ExpressRoutePort peering locations.
12912	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
12913	// NextLink - The URL to get the next set of results.
12914	NextLink *string `json:"nextLink,omitempty"`
12915}
12916
12917// ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
12918// ExpressRoutePortsLocation values.
12919type ExpressRoutePortsLocationListResultIterator struct {
12920	i    int
12921	page ExpressRoutePortsLocationListResultPage
12922}
12923
12924// NextWithContext advances to the next value.  If there was an error making
12925// the request the iterator does not advance and the error is returned.
12926func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
12927	if tracing.IsEnabled() {
12928		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
12929		defer func() {
12930			sc := -1
12931			if iter.Response().Response.Response != nil {
12932				sc = iter.Response().Response.Response.StatusCode
12933			}
12934			tracing.EndSpan(ctx, sc, err)
12935		}()
12936	}
12937	iter.i++
12938	if iter.i < len(iter.page.Values()) {
12939		return nil
12940	}
12941	err = iter.page.NextWithContext(ctx)
12942	if err != nil {
12943		iter.i--
12944		return err
12945	}
12946	iter.i = 0
12947	return nil
12948}
12949
12950// Next advances to the next value.  If there was an error making
12951// the request the iterator does not advance and the error is returned.
12952// Deprecated: Use NextWithContext() instead.
12953func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
12954	return iter.NextWithContext(context.Background())
12955}
12956
12957// NotDone returns true if the enumeration should be started or is not yet complete.
12958func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
12959	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12960}
12961
12962// Response returns the raw server response from the last page request.
12963func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
12964	return iter.page.Response()
12965}
12966
12967// Value returns the current value or a zero-initialized value if the
12968// iterator has advanced beyond the end of the collection.
12969func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
12970	if !iter.page.NotDone() {
12971		return ExpressRoutePortsLocation{}
12972	}
12973	return iter.page.Values()[iter.i]
12974}
12975
12976// Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
12977func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
12978	return ExpressRoutePortsLocationListResultIterator{page: page}
12979}
12980
12981// IsEmpty returns true if the ListResult contains no values.
12982func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
12983	return erpllr.Value == nil || len(*erpllr.Value) == 0
12984}
12985
12986// expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
12987// It returns nil if no more results exist.
12988func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
12989	if erpllr.NextLink == nil || len(to.String(erpllr.NextLink)) < 1 {
12990		return nil, nil
12991	}
12992	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12993		autorest.AsJSON(),
12994		autorest.AsGet(),
12995		autorest.WithBaseURL(to.String(erpllr.NextLink)))
12996}
12997
12998// ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
12999type ExpressRoutePortsLocationListResultPage struct {
13000	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
13001	erpllr ExpressRoutePortsLocationListResult
13002}
13003
13004// NextWithContext advances to the next page of values.  If there was an error making
13005// the request the page does not advance and the error is returned.
13006func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
13007	if tracing.IsEnabled() {
13008		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
13009		defer func() {
13010			sc := -1
13011			if page.Response().Response.Response != nil {
13012				sc = page.Response().Response.Response.StatusCode
13013			}
13014			tracing.EndSpan(ctx, sc, err)
13015		}()
13016	}
13017	next, err := page.fn(ctx, page.erpllr)
13018	if err != nil {
13019		return err
13020	}
13021	page.erpllr = next
13022	return nil
13023}
13024
13025// Next advances to the next page of values.  If there was an error making
13026// the request the page does not advance and the error is returned.
13027// Deprecated: Use NextWithContext() instead.
13028func (page *ExpressRoutePortsLocationListResultPage) Next() error {
13029	return page.NextWithContext(context.Background())
13030}
13031
13032// NotDone returns true if the page enumeration should be started or is not yet complete.
13033func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
13034	return !page.erpllr.IsEmpty()
13035}
13036
13037// Response returns the raw server response from the last page request.
13038func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
13039	return page.erpllr
13040}
13041
13042// Values returns the slice of values for the current page or nil if there are no values.
13043func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
13044	if page.erpllr.IsEmpty() {
13045		return nil
13046	}
13047	return *page.erpllr.Value
13048}
13049
13050// Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
13051func NewExpressRoutePortsLocationListResultPage(getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
13052	return ExpressRoutePortsLocationListResultPage{fn: getNextPage}
13053}
13054
13055// ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
13056// resources.
13057type ExpressRoutePortsLocationPropertiesFormat struct {
13058	// Address - READ-ONLY; Address of peering location.
13059	Address *string `json:"address,omitempty"`
13060	// Contact - READ-ONLY; Contact details of peering locations.
13061	Contact *string `json:"contact,omitempty"`
13062	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
13063	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
13064	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRoutePortLocation resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
13065	ProvisioningState *string `json:"provisioningState,omitempty"`
13066}
13067
13068// ExpressRoutePortsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
13069// long-running operation.
13070type ExpressRoutePortsUpdateTagsFuture struct {
13071	azure.Future
13072}
13073
13074// Result returns the result of the asynchronous operation.
13075// If the operation has not completed it will return an error.
13076func (future *ExpressRoutePortsUpdateTagsFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
13077	var done bool
13078	done, err = future.DoneWithContext(context.Background(), client)
13079	if err != nil {
13080		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
13081		return
13082	}
13083	if !done {
13084		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsUpdateTagsFuture")
13085		return
13086	}
13087	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13088	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
13089		erp, err = client.UpdateTagsResponder(erp.Response.Response)
13090		if err != nil {
13091			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", erp.Response.Response, "Failure responding to request")
13092		}
13093	}
13094	return
13095}
13096
13097// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
13098type ExpressRouteServiceProvider struct {
13099	// ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider.
13100	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
13101	// ID - Resource ID.
13102	ID *string `json:"id,omitempty"`
13103	// Name - READ-ONLY; Resource name.
13104	Name *string `json:"name,omitempty"`
13105	// Type - READ-ONLY; Resource type.
13106	Type *string `json:"type,omitempty"`
13107	// Location - Resource location.
13108	Location *string `json:"location,omitempty"`
13109	// Tags - Resource tags.
13110	Tags map[string]*string `json:"tags"`
13111}
13112
13113// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
13114func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
13115	objectMap := make(map[string]interface{})
13116	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
13117		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
13118	}
13119	if ersp.ID != nil {
13120		objectMap["id"] = ersp.ID
13121	}
13122	if ersp.Location != nil {
13123		objectMap["location"] = ersp.Location
13124	}
13125	if ersp.Tags != nil {
13126		objectMap["tags"] = ersp.Tags
13127	}
13128	return json.Marshal(objectMap)
13129}
13130
13131// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
13132func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
13133	var m map[string]*json.RawMessage
13134	err := json.Unmarshal(body, &m)
13135	if err != nil {
13136		return err
13137	}
13138	for k, v := range m {
13139		switch k {
13140		case "properties":
13141			if v != nil {
13142				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
13143				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
13144				if err != nil {
13145					return err
13146				}
13147				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
13148			}
13149		case "id":
13150			if v != nil {
13151				var ID string
13152				err = json.Unmarshal(*v, &ID)
13153				if err != nil {
13154					return err
13155				}
13156				ersp.ID = &ID
13157			}
13158		case "name":
13159			if v != nil {
13160				var name string
13161				err = json.Unmarshal(*v, &name)
13162				if err != nil {
13163					return err
13164				}
13165				ersp.Name = &name
13166			}
13167		case "type":
13168			if v != nil {
13169				var typeVar string
13170				err = json.Unmarshal(*v, &typeVar)
13171				if err != nil {
13172					return err
13173				}
13174				ersp.Type = &typeVar
13175			}
13176		case "location":
13177			if v != nil {
13178				var location string
13179				err = json.Unmarshal(*v, &location)
13180				if err != nil {
13181					return err
13182				}
13183				ersp.Location = &location
13184			}
13185		case "tags":
13186			if v != nil {
13187				var tags map[string]*string
13188				err = json.Unmarshal(*v, &tags)
13189				if err != nil {
13190					return err
13191				}
13192				ersp.Tags = tags
13193			}
13194		}
13195	}
13196
13197	return nil
13198}
13199
13200// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
13201// resources.
13202type ExpressRouteServiceProviderBandwidthsOffered struct {
13203	// OfferName - The OfferName.
13204	OfferName *string `json:"offerName,omitempty"`
13205	// ValueInMbps - The ValueInMbps.
13206	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
13207}
13208
13209// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
13210type ExpressRouteServiceProviderListResult struct {
13211	autorest.Response `json:"-"`
13212	// Value - A list of ExpressRouteResourceProvider resources.
13213	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
13214	// NextLink - The URL to get the next set of results.
13215	NextLink *string `json:"nextLink,omitempty"`
13216}
13217
13218// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
13219// ExpressRouteServiceProvider values.
13220type ExpressRouteServiceProviderListResultIterator struct {
13221	i    int
13222	page ExpressRouteServiceProviderListResultPage
13223}
13224
13225// NextWithContext advances to the next value.  If there was an error making
13226// the request the iterator does not advance and the error is returned.
13227func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
13228	if tracing.IsEnabled() {
13229		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
13230		defer func() {
13231			sc := -1
13232			if iter.Response().Response.Response != nil {
13233				sc = iter.Response().Response.Response.StatusCode
13234			}
13235			tracing.EndSpan(ctx, sc, err)
13236		}()
13237	}
13238	iter.i++
13239	if iter.i < len(iter.page.Values()) {
13240		return nil
13241	}
13242	err = iter.page.NextWithContext(ctx)
13243	if err != nil {
13244		iter.i--
13245		return err
13246	}
13247	iter.i = 0
13248	return nil
13249}
13250
13251// Next advances to the next value.  If there was an error making
13252// the request the iterator does not advance and the error is returned.
13253// Deprecated: Use NextWithContext() instead.
13254func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
13255	return iter.NextWithContext(context.Background())
13256}
13257
13258// NotDone returns true if the enumeration should be started or is not yet complete.
13259func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
13260	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13261}
13262
13263// Response returns the raw server response from the last page request.
13264func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
13265	return iter.page.Response()
13266}
13267
13268// Value returns the current value or a zero-initialized value if the
13269// iterator has advanced beyond the end of the collection.
13270func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
13271	if !iter.page.NotDone() {
13272		return ExpressRouteServiceProvider{}
13273	}
13274	return iter.page.Values()[iter.i]
13275}
13276
13277// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
13278func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
13279	return ExpressRouteServiceProviderListResultIterator{page: page}
13280}
13281
13282// IsEmpty returns true if the ListResult contains no values.
13283func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
13284	return ersplr.Value == nil || len(*ersplr.Value) == 0
13285}
13286
13287// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
13288// It returns nil if no more results exist.
13289func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
13290	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
13291		return nil, nil
13292	}
13293	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13294		autorest.AsJSON(),
13295		autorest.AsGet(),
13296		autorest.WithBaseURL(to.String(ersplr.NextLink)))
13297}
13298
13299// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
13300type ExpressRouteServiceProviderListResultPage struct {
13301	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
13302	ersplr ExpressRouteServiceProviderListResult
13303}
13304
13305// NextWithContext advances to the next page of values.  If there was an error making
13306// the request the page does not advance and the error is returned.
13307func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
13308	if tracing.IsEnabled() {
13309		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
13310		defer func() {
13311			sc := -1
13312			if page.Response().Response.Response != nil {
13313				sc = page.Response().Response.Response.StatusCode
13314			}
13315			tracing.EndSpan(ctx, sc, err)
13316		}()
13317	}
13318	next, err := page.fn(ctx, page.ersplr)
13319	if err != nil {
13320		return err
13321	}
13322	page.ersplr = next
13323	return nil
13324}
13325
13326// Next advances to the next page of values.  If there was an error making
13327// the request the page does not advance and the error is returned.
13328// Deprecated: Use NextWithContext() instead.
13329func (page *ExpressRouteServiceProviderListResultPage) Next() error {
13330	return page.NextWithContext(context.Background())
13331}
13332
13333// NotDone returns true if the page enumeration should be started or is not yet complete.
13334func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
13335	return !page.ersplr.IsEmpty()
13336}
13337
13338// Response returns the raw server response from the last page request.
13339func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
13340	return page.ersplr
13341}
13342
13343// Values returns the slice of values for the current page or nil if there are no values.
13344func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
13345	if page.ersplr.IsEmpty() {
13346		return nil
13347	}
13348	return *page.ersplr.Value
13349}
13350
13351// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
13352func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
13353	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
13354}
13355
13356// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
13357type ExpressRouteServiceProviderPropertiesFormat struct {
13358	// PeeringLocations - Get a list of peering locations.
13359	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
13360	// BandwidthsOffered - Gets bandwidths offered.
13361	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
13362	// ProvisioningState - Gets the provisioning state of the resource.
13363	ProvisioningState *string `json:"provisioningState,omitempty"`
13364}
13365
13366// FlowLogFormatParameters parameters that define the flow log format.
13367type FlowLogFormatParameters struct {
13368	// Type - The file type of flow log. Possible values include: 'JSON'
13369	Type FlowLogFormatType `json:"type,omitempty"`
13370	// Version - The version (revision) of the flow log.
13371	Version *int32 `json:"version,omitempty"`
13372}
13373
13374// FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
13375type FlowLogInformation struct {
13376	autorest.Response `json:"-"`
13377	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
13378	TargetResourceID *string `json:"targetResourceId,omitempty"`
13379	// FlowLogProperties - Properties of the flow log.
13380	*FlowLogProperties `json:"properties,omitempty"`
13381	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
13382	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
13383}
13384
13385// MarshalJSON is the custom marshaler for FlowLogInformation.
13386func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
13387	objectMap := make(map[string]interface{})
13388	if fli.TargetResourceID != nil {
13389		objectMap["targetResourceId"] = fli.TargetResourceID
13390	}
13391	if fli.FlowLogProperties != nil {
13392		objectMap["properties"] = fli.FlowLogProperties
13393	}
13394	if fli.FlowAnalyticsConfiguration != nil {
13395		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
13396	}
13397	return json.Marshal(objectMap)
13398}
13399
13400// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
13401func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
13402	var m map[string]*json.RawMessage
13403	err := json.Unmarshal(body, &m)
13404	if err != nil {
13405		return err
13406	}
13407	for k, v := range m {
13408		switch k {
13409		case "targetResourceId":
13410			if v != nil {
13411				var targetResourceID string
13412				err = json.Unmarshal(*v, &targetResourceID)
13413				if err != nil {
13414					return err
13415				}
13416				fli.TargetResourceID = &targetResourceID
13417			}
13418		case "properties":
13419			if v != nil {
13420				var flowLogProperties FlowLogProperties
13421				err = json.Unmarshal(*v, &flowLogProperties)
13422				if err != nil {
13423					return err
13424				}
13425				fli.FlowLogProperties = &flowLogProperties
13426			}
13427		case "flowAnalyticsConfiguration":
13428			if v != nil {
13429				var flowAnalyticsConfiguration TrafficAnalyticsProperties
13430				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
13431				if err != nil {
13432					return err
13433				}
13434				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
13435			}
13436		}
13437	}
13438
13439	return nil
13440}
13441
13442// FlowLogProperties parameters that define the configuration of flow log.
13443type FlowLogProperties struct {
13444	// StorageID - ID of the storage account which is used to store the flow log.
13445	StorageID *string `json:"storageId,omitempty"`
13446	// Enabled - Flag to enable/disable flow logging.
13447	Enabled *bool `json:"enabled,omitempty"`
13448	// RetentionPolicy - Parameters that define the retention policy for flow log.
13449	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
13450	// Format - Parameters that define the flow log format.
13451	Format *FlowLogFormatParameters `json:"format,omitempty"`
13452}
13453
13454// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
13455// (optional) status.
13456type FlowLogStatusParameters struct {
13457	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
13458	TargetResourceID *string `json:"targetResourceId,omitempty"`
13459}
13460
13461// FrontendIPConfiguration frontend IP address of the load balancer.
13462type FrontendIPConfiguration struct {
13463	autorest.Response `json:"-"`
13464	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
13465	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
13466	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13467	Name *string `json:"name,omitempty"`
13468	// Etag - A unique read-only string that changes whenever the resource is updated.
13469	Etag *string `json:"etag,omitempty"`
13470	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
13471	Zones *[]string `json:"zones,omitempty"`
13472	// ID - Resource ID.
13473	ID *string `json:"id,omitempty"`
13474}
13475
13476// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
13477func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
13478	objectMap := make(map[string]interface{})
13479	if fic.FrontendIPConfigurationPropertiesFormat != nil {
13480		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
13481	}
13482	if fic.Name != nil {
13483		objectMap["name"] = fic.Name
13484	}
13485	if fic.Etag != nil {
13486		objectMap["etag"] = fic.Etag
13487	}
13488	if fic.Zones != nil {
13489		objectMap["zones"] = fic.Zones
13490	}
13491	if fic.ID != nil {
13492		objectMap["id"] = fic.ID
13493	}
13494	return json.Marshal(objectMap)
13495}
13496
13497// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
13498func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
13499	var m map[string]*json.RawMessage
13500	err := json.Unmarshal(body, &m)
13501	if err != nil {
13502		return err
13503	}
13504	for k, v := range m {
13505		switch k {
13506		case "properties":
13507			if v != nil {
13508				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
13509				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
13510				if err != nil {
13511					return err
13512				}
13513				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
13514			}
13515		case "name":
13516			if v != nil {
13517				var name string
13518				err = json.Unmarshal(*v, &name)
13519				if err != nil {
13520					return err
13521				}
13522				fic.Name = &name
13523			}
13524		case "etag":
13525			if v != nil {
13526				var etag string
13527				err = json.Unmarshal(*v, &etag)
13528				if err != nil {
13529					return err
13530				}
13531				fic.Etag = &etag
13532			}
13533		case "zones":
13534			if v != nil {
13535				var zones []string
13536				err = json.Unmarshal(*v, &zones)
13537				if err != nil {
13538					return err
13539				}
13540				fic.Zones = &zones
13541			}
13542		case "id":
13543			if v != nil {
13544				var ID string
13545				err = json.Unmarshal(*v, &ID)
13546				if err != nil {
13547					return err
13548				}
13549				fic.ID = &ID
13550			}
13551		}
13552	}
13553
13554	return nil
13555}
13556
13557// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
13558type FrontendIPConfigurationPropertiesFormat struct {
13559	// InboundNatRules - READ-ONLY; Read only. Inbound rules URIs that use this frontend IP.
13560	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
13561	// InboundNatPools - READ-ONLY; Read only. Inbound pools URIs that use this frontend IP.
13562	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
13563	// OutboundRules - READ-ONLY; Read only. Outbound rules URIs that use this frontend IP.
13564	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
13565	// LoadBalancingRules - READ-ONLY; Gets load balancing rules URIs that use this frontend IP.
13566	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
13567	// PrivateIPAddress - The private IP address of the IP configuration.
13568	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
13569	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic'
13570	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
13571	// PrivateIPAddressVersion - It represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
13572	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
13573	// Subnet - The reference of the subnet resource.
13574	Subnet *Subnet `json:"subnet,omitempty"`
13575	// PublicIPAddress - The reference of the Public IP resource.
13576	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
13577	// PublicIPPrefix - The reference of the Public IP Prefix resource.
13578	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
13579	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13580	ProvisioningState *string `json:"provisioningState,omitempty"`
13581}
13582
13583// GatewayRoute gateway routing details.
13584type GatewayRoute struct {
13585	// LocalAddress - READ-ONLY; The gateway's local address.
13586	LocalAddress *string `json:"localAddress,omitempty"`
13587	// NetworkProperty - READ-ONLY; The route's network prefix.
13588	NetworkProperty *string `json:"network,omitempty"`
13589	// NextHop - READ-ONLY; The route's next hop.
13590	NextHop *string `json:"nextHop,omitempty"`
13591	// SourcePeer - READ-ONLY; The peer this route was learned from.
13592	SourcePeer *string `json:"sourcePeer,omitempty"`
13593	// Origin - READ-ONLY; The source this route was learned from.
13594	Origin *string `json:"origin,omitempty"`
13595	// AsPath - READ-ONLY; The route's AS path sequence.
13596	AsPath *string `json:"asPath,omitempty"`
13597	// Weight - READ-ONLY; The route's weight.
13598	Weight *int32 `json:"weight,omitempty"`
13599}
13600
13601// GatewayRouteListResult list of virtual network gateway routes.
13602type GatewayRouteListResult struct {
13603	autorest.Response `json:"-"`
13604	// Value - List of gateway routes.
13605	Value *[]GatewayRoute `json:"value,omitempty"`
13606}
13607
13608// GetVpnSitesConfigurationRequest list of Vpn-Sites.
13609type GetVpnSitesConfigurationRequest struct {
13610	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
13611	VpnSites *[]string `json:"vpnSites,omitempty"`
13612	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites.
13613	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
13614}
13615
13616// HTTPConfiguration HTTP configuration of the connectivity check.
13617type HTTPConfiguration struct {
13618	// Method - HTTP method. Possible values include: 'Get'
13619	Method HTTPMethod `json:"method,omitempty"`
13620	// Headers - List of HTTP headers.
13621	Headers *[]HTTPHeader `json:"headers,omitempty"`
13622	// ValidStatusCodes - Valid status codes.
13623	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
13624}
13625
13626// HTTPHeader describes the HTTP header.
13627type HTTPHeader struct {
13628	// Name - The name in HTTP header.
13629	Name *string `json:"name,omitempty"`
13630	// Value - The value in HTTP header.
13631	Value *string `json:"value,omitempty"`
13632}
13633
13634// HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
13635type HubVirtualNetworkConnection struct {
13636	autorest.Response `json:"-"`
13637	// HubVirtualNetworkConnectionProperties - Properties of the hub virtual network connection.
13638	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
13639	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13640	Name *string `json:"name,omitempty"`
13641	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
13642	Etag *string `json:"etag,omitempty"`
13643	// ID - Resource ID.
13644	ID *string `json:"id,omitempty"`
13645}
13646
13647// MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
13648func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
13649	objectMap := make(map[string]interface{})
13650	if hvnc.HubVirtualNetworkConnectionProperties != nil {
13651		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
13652	}
13653	if hvnc.Name != nil {
13654		objectMap["name"] = hvnc.Name
13655	}
13656	if hvnc.ID != nil {
13657		objectMap["id"] = hvnc.ID
13658	}
13659	return json.Marshal(objectMap)
13660}
13661
13662// UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
13663func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
13664	var m map[string]*json.RawMessage
13665	err := json.Unmarshal(body, &m)
13666	if err != nil {
13667		return err
13668	}
13669	for k, v := range m {
13670		switch k {
13671		case "properties":
13672			if v != nil {
13673				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
13674				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
13675				if err != nil {
13676					return err
13677				}
13678				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
13679			}
13680		case "name":
13681			if v != nil {
13682				var name string
13683				err = json.Unmarshal(*v, &name)
13684				if err != nil {
13685					return err
13686				}
13687				hvnc.Name = &name
13688			}
13689		case "etag":
13690			if v != nil {
13691				var etag string
13692				err = json.Unmarshal(*v, &etag)
13693				if err != nil {
13694					return err
13695				}
13696				hvnc.Etag = &etag
13697			}
13698		case "id":
13699			if v != nil {
13700				var ID string
13701				err = json.Unmarshal(*v, &ID)
13702				if err != nil {
13703					return err
13704				}
13705				hvnc.ID = &ID
13706			}
13707		}
13708	}
13709
13710	return nil
13711}
13712
13713// HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection.
13714type HubVirtualNetworkConnectionProperties struct {
13715	// RemoteVirtualNetwork - Reference to the remote virtual network.
13716	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
13717	// AllowHubToRemoteVnetTransit - VirtualHub to RemoteVnet transit to enabled or not.
13718	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
13719	// AllowRemoteVnetToUseHubVnetGateways - Allow RemoteVnet to use Virtual Hub's gateways.
13720	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
13721	// EnableInternetSecurity - Enable internet security.
13722	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
13723	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13724	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13725}
13726
13727// InboundNatPool inbound NAT pool of the load balancer.
13728type InboundNatPool struct {
13729	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
13730	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
13731	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13732	Name *string `json:"name,omitempty"`
13733	// Etag - A unique read-only string that changes whenever the resource is updated.
13734	Etag *string `json:"etag,omitempty"`
13735	// ID - Resource ID.
13736	ID *string `json:"id,omitempty"`
13737}
13738
13739// MarshalJSON is the custom marshaler for InboundNatPool.
13740func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
13741	objectMap := make(map[string]interface{})
13742	if inp.InboundNatPoolPropertiesFormat != nil {
13743		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
13744	}
13745	if inp.Name != nil {
13746		objectMap["name"] = inp.Name
13747	}
13748	if inp.Etag != nil {
13749		objectMap["etag"] = inp.Etag
13750	}
13751	if inp.ID != nil {
13752		objectMap["id"] = inp.ID
13753	}
13754	return json.Marshal(objectMap)
13755}
13756
13757// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
13758func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
13759	var m map[string]*json.RawMessage
13760	err := json.Unmarshal(body, &m)
13761	if err != nil {
13762		return err
13763	}
13764	for k, v := range m {
13765		switch k {
13766		case "properties":
13767			if v != nil {
13768				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
13769				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
13770				if err != nil {
13771					return err
13772				}
13773				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
13774			}
13775		case "name":
13776			if v != nil {
13777				var name string
13778				err = json.Unmarshal(*v, &name)
13779				if err != nil {
13780					return err
13781				}
13782				inp.Name = &name
13783			}
13784		case "etag":
13785			if v != nil {
13786				var etag string
13787				err = json.Unmarshal(*v, &etag)
13788				if err != nil {
13789					return err
13790				}
13791				inp.Etag = &etag
13792			}
13793		case "id":
13794			if v != nil {
13795				var ID string
13796				err = json.Unmarshal(*v, &ID)
13797				if err != nil {
13798					return err
13799				}
13800				inp.ID = &ID
13801			}
13802		}
13803	}
13804
13805	return nil
13806}
13807
13808// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
13809type InboundNatPoolPropertiesFormat struct {
13810	// FrontendIPConfiguration - A reference to frontend IP addresses.
13811	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
13812	// Protocol - The reference to the transport protocol used by the inbound NAT pool. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
13813	Protocol TransportProtocol `json:"protocol,omitempty"`
13814	// 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.
13815	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
13816	// 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.
13817	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
13818	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
13819	BackendPort *int32 `json:"backendPort,omitempty"`
13820	// 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.
13821	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
13822	// 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.
13823	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
13824	// 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.
13825	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
13826	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13827	ProvisioningState *string `json:"provisioningState,omitempty"`
13828}
13829
13830// InboundNatRule inbound NAT rule of the load balancer.
13831type InboundNatRule struct {
13832	autorest.Response `json:"-"`
13833	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
13834	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
13835	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
13836	Name *string `json:"name,omitempty"`
13837	// Etag - A unique read-only string that changes whenever the resource is updated.
13838	Etag *string `json:"etag,omitempty"`
13839	// ID - Resource ID.
13840	ID *string `json:"id,omitempty"`
13841}
13842
13843// MarshalJSON is the custom marshaler for InboundNatRule.
13844func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
13845	objectMap := make(map[string]interface{})
13846	if inr.InboundNatRulePropertiesFormat != nil {
13847		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
13848	}
13849	if inr.Name != nil {
13850		objectMap["name"] = inr.Name
13851	}
13852	if inr.Etag != nil {
13853		objectMap["etag"] = inr.Etag
13854	}
13855	if inr.ID != nil {
13856		objectMap["id"] = inr.ID
13857	}
13858	return json.Marshal(objectMap)
13859}
13860
13861// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
13862func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
13863	var m map[string]*json.RawMessage
13864	err := json.Unmarshal(body, &m)
13865	if err != nil {
13866		return err
13867	}
13868	for k, v := range m {
13869		switch k {
13870		case "properties":
13871			if v != nil {
13872				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
13873				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
13874				if err != nil {
13875					return err
13876				}
13877				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
13878			}
13879		case "name":
13880			if v != nil {
13881				var name string
13882				err = json.Unmarshal(*v, &name)
13883				if err != nil {
13884					return err
13885				}
13886				inr.Name = &name
13887			}
13888		case "etag":
13889			if v != nil {
13890				var etag string
13891				err = json.Unmarshal(*v, &etag)
13892				if err != nil {
13893					return err
13894				}
13895				inr.Etag = &etag
13896			}
13897		case "id":
13898			if v != nil {
13899				var ID string
13900				err = json.Unmarshal(*v, &ID)
13901				if err != nil {
13902					return err
13903				}
13904				inr.ID = &ID
13905			}
13906		}
13907	}
13908
13909	return nil
13910}
13911
13912// InboundNatRuleListResult response for ListInboundNatRule API service call.
13913type InboundNatRuleListResult struct {
13914	autorest.Response `json:"-"`
13915	// Value - A list of inbound nat rules in a load balancer.
13916	Value *[]InboundNatRule `json:"value,omitempty"`
13917	// NextLink - READ-ONLY; The URL to get the next set of results.
13918	NextLink *string `json:"nextLink,omitempty"`
13919}
13920
13921// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
13922type InboundNatRuleListResultIterator struct {
13923	i    int
13924	page InboundNatRuleListResultPage
13925}
13926
13927// NextWithContext advances to the next value.  If there was an error making
13928// the request the iterator does not advance and the error is returned.
13929func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
13930	if tracing.IsEnabled() {
13931		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
13932		defer func() {
13933			sc := -1
13934			if iter.Response().Response.Response != nil {
13935				sc = iter.Response().Response.Response.StatusCode
13936			}
13937			tracing.EndSpan(ctx, sc, err)
13938		}()
13939	}
13940	iter.i++
13941	if iter.i < len(iter.page.Values()) {
13942		return nil
13943	}
13944	err = iter.page.NextWithContext(ctx)
13945	if err != nil {
13946		iter.i--
13947		return err
13948	}
13949	iter.i = 0
13950	return nil
13951}
13952
13953// Next advances to the next value.  If there was an error making
13954// the request the iterator does not advance and the error is returned.
13955// Deprecated: Use NextWithContext() instead.
13956func (iter *InboundNatRuleListResultIterator) Next() error {
13957	return iter.NextWithContext(context.Background())
13958}
13959
13960// NotDone returns true if the enumeration should be started or is not yet complete.
13961func (iter InboundNatRuleListResultIterator) NotDone() bool {
13962	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13963}
13964
13965// Response returns the raw server response from the last page request.
13966func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
13967	return iter.page.Response()
13968}
13969
13970// Value returns the current value or a zero-initialized value if the
13971// iterator has advanced beyond the end of the collection.
13972func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
13973	if !iter.page.NotDone() {
13974		return InboundNatRule{}
13975	}
13976	return iter.page.Values()[iter.i]
13977}
13978
13979// Creates a new instance of the InboundNatRuleListResultIterator type.
13980func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
13981	return InboundNatRuleListResultIterator{page: page}
13982}
13983
13984// IsEmpty returns true if the ListResult contains no values.
13985func (inrlr InboundNatRuleListResult) IsEmpty() bool {
13986	return inrlr.Value == nil || len(*inrlr.Value) == 0
13987}
13988
13989// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
13990// It returns nil if no more results exist.
13991func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
13992	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
13993		return nil, nil
13994	}
13995	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13996		autorest.AsJSON(),
13997		autorest.AsGet(),
13998		autorest.WithBaseURL(to.String(inrlr.NextLink)))
13999}
14000
14001// InboundNatRuleListResultPage contains a page of InboundNatRule values.
14002type InboundNatRuleListResultPage struct {
14003	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
14004	inrlr InboundNatRuleListResult
14005}
14006
14007// NextWithContext advances to the next page of values.  If there was an error making
14008// the request the page does not advance and the error is returned.
14009func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
14010	if tracing.IsEnabled() {
14011		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
14012		defer func() {
14013			sc := -1
14014			if page.Response().Response.Response != nil {
14015				sc = page.Response().Response.Response.StatusCode
14016			}
14017			tracing.EndSpan(ctx, sc, err)
14018		}()
14019	}
14020	next, err := page.fn(ctx, page.inrlr)
14021	if err != nil {
14022		return err
14023	}
14024	page.inrlr = next
14025	return nil
14026}
14027
14028// Next advances to the next page of values.  If there was an error making
14029// the request the page does not advance and the error is returned.
14030// Deprecated: Use NextWithContext() instead.
14031func (page *InboundNatRuleListResultPage) Next() error {
14032	return page.NextWithContext(context.Background())
14033}
14034
14035// NotDone returns true if the page enumeration should be started or is not yet complete.
14036func (page InboundNatRuleListResultPage) NotDone() bool {
14037	return !page.inrlr.IsEmpty()
14038}
14039
14040// Response returns the raw server response from the last page request.
14041func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
14042	return page.inrlr
14043}
14044
14045// Values returns the slice of values for the current page or nil if there are no values.
14046func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
14047	if page.inrlr.IsEmpty() {
14048		return nil
14049	}
14050	return *page.inrlr.Value
14051}
14052
14053// Creates a new instance of the InboundNatRuleListResultPage type.
14054func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
14055	return InboundNatRuleListResultPage{fn: getNextPage}
14056}
14057
14058// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
14059type InboundNatRulePropertiesFormat struct {
14060	// FrontendIPConfiguration - A reference to frontend IP addresses.
14061	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
14062	// 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.
14063	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
14064	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
14065	Protocol TransportProtocol `json:"protocol,omitempty"`
14066	// 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.
14067	FrontendPort *int32 `json:"frontendPort,omitempty"`
14068	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
14069	BackendPort *int32 `json:"backendPort,omitempty"`
14070	// 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.
14071	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
14072	// 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.
14073	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
14074	// 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.
14075	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
14076	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14077	ProvisioningState *string `json:"provisioningState,omitempty"`
14078}
14079
14080// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14081// long-running operation.
14082type InboundNatRulesCreateOrUpdateFuture struct {
14083	azure.Future
14084}
14085
14086// Result returns the result of the asynchronous operation.
14087// If the operation has not completed it will return an error.
14088func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
14089	var done bool
14090	done, err = future.DoneWithContext(context.Background(), client)
14091	if err != nil {
14092		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14093		return
14094	}
14095	if !done {
14096		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
14097		return
14098	}
14099	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14100	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
14101		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
14102		if err != nil {
14103			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
14104		}
14105	}
14106	return
14107}
14108
14109// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14110// operation.
14111type InboundNatRulesDeleteFuture struct {
14112	azure.Future
14113}
14114
14115// Result returns the result of the asynchronous operation.
14116// If the operation has not completed it will return an error.
14117func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
14118	var done bool
14119	done, err = future.DoneWithContext(context.Background(), client)
14120	if err != nil {
14121		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
14122		return
14123	}
14124	if !done {
14125		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
14126		return
14127	}
14128	ar.Response = future.Response()
14129	return
14130}
14131
14132// IntentPolicy network Intent Policy resource.
14133type IntentPolicy struct {
14134	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
14135	Etag *string `json:"etag,omitempty"`
14136	// ID - Resource ID.
14137	ID *string `json:"id,omitempty"`
14138	// Name - READ-ONLY; Resource name.
14139	Name *string `json:"name,omitempty"`
14140	// Type - READ-ONLY; Resource type.
14141	Type *string `json:"type,omitempty"`
14142	// Location - Resource location.
14143	Location *string `json:"location,omitempty"`
14144	// Tags - Resource tags.
14145	Tags map[string]*string `json:"tags"`
14146}
14147
14148// MarshalJSON is the custom marshaler for IntentPolicy.
14149func (IP IntentPolicy) MarshalJSON() ([]byte, error) {
14150	objectMap := make(map[string]interface{})
14151	if IP.Etag != nil {
14152		objectMap["etag"] = IP.Etag
14153	}
14154	if IP.ID != nil {
14155		objectMap["id"] = IP.ID
14156	}
14157	if IP.Location != nil {
14158		objectMap["location"] = IP.Location
14159	}
14160	if IP.Tags != nil {
14161		objectMap["tags"] = IP.Tags
14162	}
14163	return json.Marshal(objectMap)
14164}
14165
14166// IntentPolicyConfiguration details of NetworkIntentPolicyConfiguration for PrepareNetworkPoliciesRequest.
14167type IntentPolicyConfiguration struct {
14168	// NetworkIntentPolicyName - The name of the Network Intent Policy for storing in target subscription.
14169	NetworkIntentPolicyName *string `json:"networkIntentPolicyName,omitempty"`
14170	// SourceNetworkIntentPolicy - Source network intent policy.
14171	SourceNetworkIntentPolicy *IntentPolicy `json:"sourceNetworkIntentPolicy,omitempty"`
14172}
14173
14174// Interface a network interface in a resource group.
14175type Interface struct {
14176	autorest.Response `json:"-"`
14177	// InterfacePropertiesFormat - Properties of the network interface.
14178	*InterfacePropertiesFormat `json:"properties,omitempty"`
14179	// Etag - A unique read-only string that changes whenever the resource is updated.
14180	Etag *string `json:"etag,omitempty"`
14181	// ID - Resource ID.
14182	ID *string `json:"id,omitempty"`
14183	// Name - READ-ONLY; Resource name.
14184	Name *string `json:"name,omitempty"`
14185	// Type - READ-ONLY; Resource type.
14186	Type *string `json:"type,omitempty"`
14187	// Location - Resource location.
14188	Location *string `json:"location,omitempty"`
14189	// Tags - Resource tags.
14190	Tags map[string]*string `json:"tags"`
14191}
14192
14193// MarshalJSON is the custom marshaler for Interface.
14194func (i Interface) MarshalJSON() ([]byte, error) {
14195	objectMap := make(map[string]interface{})
14196	if i.InterfacePropertiesFormat != nil {
14197		objectMap["properties"] = i.InterfacePropertiesFormat
14198	}
14199	if i.Etag != nil {
14200		objectMap["etag"] = i.Etag
14201	}
14202	if i.ID != nil {
14203		objectMap["id"] = i.ID
14204	}
14205	if i.Location != nil {
14206		objectMap["location"] = i.Location
14207	}
14208	if i.Tags != nil {
14209		objectMap["tags"] = i.Tags
14210	}
14211	return json.Marshal(objectMap)
14212}
14213
14214// UnmarshalJSON is the custom unmarshaler for Interface struct.
14215func (i *Interface) UnmarshalJSON(body []byte) error {
14216	var m map[string]*json.RawMessage
14217	err := json.Unmarshal(body, &m)
14218	if err != nil {
14219		return err
14220	}
14221	for k, v := range m {
14222		switch k {
14223		case "properties":
14224			if v != nil {
14225				var interfacePropertiesFormat InterfacePropertiesFormat
14226				err = json.Unmarshal(*v, &interfacePropertiesFormat)
14227				if err != nil {
14228					return err
14229				}
14230				i.InterfacePropertiesFormat = &interfacePropertiesFormat
14231			}
14232		case "etag":
14233			if v != nil {
14234				var etag string
14235				err = json.Unmarshal(*v, &etag)
14236				if err != nil {
14237					return err
14238				}
14239				i.Etag = &etag
14240			}
14241		case "id":
14242			if v != nil {
14243				var ID string
14244				err = json.Unmarshal(*v, &ID)
14245				if err != nil {
14246					return err
14247				}
14248				i.ID = &ID
14249			}
14250		case "name":
14251			if v != nil {
14252				var name string
14253				err = json.Unmarshal(*v, &name)
14254				if err != nil {
14255					return err
14256				}
14257				i.Name = &name
14258			}
14259		case "type":
14260			if v != nil {
14261				var typeVar string
14262				err = json.Unmarshal(*v, &typeVar)
14263				if err != nil {
14264					return err
14265				}
14266				i.Type = &typeVar
14267			}
14268		case "location":
14269			if v != nil {
14270				var location string
14271				err = json.Unmarshal(*v, &location)
14272				if err != nil {
14273					return err
14274				}
14275				i.Location = &location
14276			}
14277		case "tags":
14278			if v != nil {
14279				var tags map[string]*string
14280				err = json.Unmarshal(*v, &tags)
14281				if err != nil {
14282					return err
14283				}
14284				i.Tags = tags
14285			}
14286		}
14287	}
14288
14289	return nil
14290}
14291
14292// InterfaceAssociation network interface and its custom security rules.
14293type InterfaceAssociation struct {
14294	// ID - READ-ONLY; Network interface ID.
14295	ID *string `json:"id,omitempty"`
14296	// SecurityRules - Collection of custom security rules.
14297	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
14298}
14299
14300// InterfaceDNSSettings DNS settings of a network interface.
14301type InterfaceDNSSettings struct {
14302	// 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.
14303	DNSServers *[]string `json:"dnsServers,omitempty"`
14304	// AppliedDNSServers - If the VM that uses this NIC is part of an Availability Set, then this list will have the union of all DNS servers from all NICs that are part of the Availability Set. This property is what is configured on each of those VMs.
14305	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
14306	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
14307	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
14308	// InternalFqdn - Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
14309	InternalFqdn *string `json:"internalFqdn,omitempty"`
14310	// InternalDomainNameSuffix - Even if internalDnsNameLabel is not specified, a DNS entry is created for the primary NIC of the VM. This DNS name can be constructed by concatenating the VM name with the value of internalDomainNameSuffix.
14311	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
14312}
14313
14314// InterfaceIPConfiguration iPConfiguration in a network interface.
14315type InterfaceIPConfiguration struct {
14316	autorest.Response `json:"-"`
14317	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
14318	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
14319	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14320	Name *string `json:"name,omitempty"`
14321	// Etag - A unique read-only string that changes whenever the resource is updated.
14322	Etag *string `json:"etag,omitempty"`
14323	// ID - Resource ID.
14324	ID *string `json:"id,omitempty"`
14325}
14326
14327// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
14328func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
14329	objectMap := make(map[string]interface{})
14330	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
14331		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
14332	}
14333	if iic.Name != nil {
14334		objectMap["name"] = iic.Name
14335	}
14336	if iic.Etag != nil {
14337		objectMap["etag"] = iic.Etag
14338	}
14339	if iic.ID != nil {
14340		objectMap["id"] = iic.ID
14341	}
14342	return json.Marshal(objectMap)
14343}
14344
14345// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
14346func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
14347	var m map[string]*json.RawMessage
14348	err := json.Unmarshal(body, &m)
14349	if err != nil {
14350		return err
14351	}
14352	for k, v := range m {
14353		switch k {
14354		case "properties":
14355			if v != nil {
14356				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
14357				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
14358				if err != nil {
14359					return err
14360				}
14361				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
14362			}
14363		case "name":
14364			if v != nil {
14365				var name string
14366				err = json.Unmarshal(*v, &name)
14367				if err != nil {
14368					return err
14369				}
14370				iic.Name = &name
14371			}
14372		case "etag":
14373			if v != nil {
14374				var etag string
14375				err = json.Unmarshal(*v, &etag)
14376				if err != nil {
14377					return err
14378				}
14379				iic.Etag = &etag
14380			}
14381		case "id":
14382			if v != nil {
14383				var ID string
14384				err = json.Unmarshal(*v, &ID)
14385				if err != nil {
14386					return err
14387				}
14388				iic.ID = &ID
14389			}
14390		}
14391	}
14392
14393	return nil
14394}
14395
14396// InterfaceIPConfigurationListResult response for list ip configurations API service call.
14397type InterfaceIPConfigurationListResult struct {
14398	autorest.Response `json:"-"`
14399	// Value - A list of ip configurations.
14400	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
14401	// NextLink - READ-ONLY; The URL to get the next set of results.
14402	NextLink *string `json:"nextLink,omitempty"`
14403}
14404
14405// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
14406// InterfaceIPConfiguration values.
14407type InterfaceIPConfigurationListResultIterator struct {
14408	i    int
14409	page InterfaceIPConfigurationListResultPage
14410}
14411
14412// NextWithContext advances to the next value.  If there was an error making
14413// the request the iterator does not advance and the error is returned.
14414func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
14415	if tracing.IsEnabled() {
14416		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
14417		defer func() {
14418			sc := -1
14419			if iter.Response().Response.Response != nil {
14420				sc = iter.Response().Response.Response.StatusCode
14421			}
14422			tracing.EndSpan(ctx, sc, err)
14423		}()
14424	}
14425	iter.i++
14426	if iter.i < len(iter.page.Values()) {
14427		return nil
14428	}
14429	err = iter.page.NextWithContext(ctx)
14430	if err != nil {
14431		iter.i--
14432		return err
14433	}
14434	iter.i = 0
14435	return nil
14436}
14437
14438// Next advances to the next value.  If there was an error making
14439// the request the iterator does not advance and the error is returned.
14440// Deprecated: Use NextWithContext() instead.
14441func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
14442	return iter.NextWithContext(context.Background())
14443}
14444
14445// NotDone returns true if the enumeration should be started or is not yet complete.
14446func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
14447	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14448}
14449
14450// Response returns the raw server response from the last page request.
14451func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
14452	return iter.page.Response()
14453}
14454
14455// Value returns the current value or a zero-initialized value if the
14456// iterator has advanced beyond the end of the collection.
14457func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
14458	if !iter.page.NotDone() {
14459		return InterfaceIPConfiguration{}
14460	}
14461	return iter.page.Values()[iter.i]
14462}
14463
14464// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
14465func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
14466	return InterfaceIPConfigurationListResultIterator{page: page}
14467}
14468
14469// IsEmpty returns true if the ListResult contains no values.
14470func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
14471	return iiclr.Value == nil || len(*iiclr.Value) == 0
14472}
14473
14474// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
14475// It returns nil if no more results exist.
14476func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
14477	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
14478		return nil, nil
14479	}
14480	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14481		autorest.AsJSON(),
14482		autorest.AsGet(),
14483		autorest.WithBaseURL(to.String(iiclr.NextLink)))
14484}
14485
14486// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
14487type InterfaceIPConfigurationListResultPage struct {
14488	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
14489	iiclr InterfaceIPConfigurationListResult
14490}
14491
14492// NextWithContext advances to the next page of values.  If there was an error making
14493// the request the page does not advance and the error is returned.
14494func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
14495	if tracing.IsEnabled() {
14496		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
14497		defer func() {
14498			sc := -1
14499			if page.Response().Response.Response != nil {
14500				sc = page.Response().Response.Response.StatusCode
14501			}
14502			tracing.EndSpan(ctx, sc, err)
14503		}()
14504	}
14505	next, err := page.fn(ctx, page.iiclr)
14506	if err != nil {
14507		return err
14508	}
14509	page.iiclr = next
14510	return nil
14511}
14512
14513// Next advances to the next page of values.  If there was an error making
14514// the request the page does not advance and the error is returned.
14515// Deprecated: Use NextWithContext() instead.
14516func (page *InterfaceIPConfigurationListResultPage) Next() error {
14517	return page.NextWithContext(context.Background())
14518}
14519
14520// NotDone returns true if the page enumeration should be started or is not yet complete.
14521func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
14522	return !page.iiclr.IsEmpty()
14523}
14524
14525// Response returns the raw server response from the last page request.
14526func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
14527	return page.iiclr
14528}
14529
14530// Values returns the slice of values for the current page or nil if there are no values.
14531func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
14532	if page.iiclr.IsEmpty() {
14533		return nil
14534	}
14535	return *page.iiclr.Value
14536}
14537
14538// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
14539func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
14540	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
14541}
14542
14543// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
14544type InterfaceIPConfigurationPropertiesFormat struct {
14545	// VirtualNetworkTaps - The reference to Virtual Network Taps.
14546	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
14547	// ApplicationGatewayBackendAddressPools - The reference of ApplicationGatewayBackendAddressPool resource.
14548	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
14549	// LoadBalancerBackendAddressPools - The reference of LoadBalancerBackendAddressPool resource.
14550	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
14551	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
14552	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
14553	// PrivateIPAddress - Private IP address of the IP configuration.
14554	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
14555	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
14556	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
14557	// PrivateIPAddressVersion - Available from Api-Version 2016-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
14558	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
14559	// Subnet - Subnet bound to the IP configuration.
14560	Subnet *Subnet `json:"subnet,omitempty"`
14561	// Primary - Gets whether this is a primary customer address on the network interface.
14562	Primary *bool `json:"primary,omitempty"`
14563	// PublicIPAddress - Public IP address bound to the IP configuration.
14564	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
14565	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
14566	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
14567	// ProvisioningState - The provisioning state of the network interface IP configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14568	ProvisioningState *string `json:"provisioningState,omitempty"`
14569}
14570
14571// InterfaceListResult response for the ListNetworkInterface API service call.
14572type InterfaceListResult struct {
14573	autorest.Response `json:"-"`
14574	// Value - A list of network interfaces in a resource group.
14575	Value *[]Interface `json:"value,omitempty"`
14576	// NextLink - READ-ONLY; The URL to get the next set of results.
14577	NextLink *string `json:"nextLink,omitempty"`
14578}
14579
14580// InterfaceListResultIterator provides access to a complete listing of Interface values.
14581type InterfaceListResultIterator struct {
14582	i    int
14583	page InterfaceListResultPage
14584}
14585
14586// NextWithContext advances to the next value.  If there was an error making
14587// the request the iterator does not advance and the error is returned.
14588func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
14589	if tracing.IsEnabled() {
14590		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
14591		defer func() {
14592			sc := -1
14593			if iter.Response().Response.Response != nil {
14594				sc = iter.Response().Response.Response.StatusCode
14595			}
14596			tracing.EndSpan(ctx, sc, err)
14597		}()
14598	}
14599	iter.i++
14600	if iter.i < len(iter.page.Values()) {
14601		return nil
14602	}
14603	err = iter.page.NextWithContext(ctx)
14604	if err != nil {
14605		iter.i--
14606		return err
14607	}
14608	iter.i = 0
14609	return nil
14610}
14611
14612// Next advances to the next value.  If there was an error making
14613// the request the iterator does not advance and the error is returned.
14614// Deprecated: Use NextWithContext() instead.
14615func (iter *InterfaceListResultIterator) Next() error {
14616	return iter.NextWithContext(context.Background())
14617}
14618
14619// NotDone returns true if the enumeration should be started or is not yet complete.
14620func (iter InterfaceListResultIterator) NotDone() bool {
14621	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14622}
14623
14624// Response returns the raw server response from the last page request.
14625func (iter InterfaceListResultIterator) Response() InterfaceListResult {
14626	return iter.page.Response()
14627}
14628
14629// Value returns the current value or a zero-initialized value if the
14630// iterator has advanced beyond the end of the collection.
14631func (iter InterfaceListResultIterator) Value() Interface {
14632	if !iter.page.NotDone() {
14633		return Interface{}
14634	}
14635	return iter.page.Values()[iter.i]
14636}
14637
14638// Creates a new instance of the InterfaceListResultIterator type.
14639func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
14640	return InterfaceListResultIterator{page: page}
14641}
14642
14643// IsEmpty returns true if the ListResult contains no values.
14644func (ilr InterfaceListResult) IsEmpty() bool {
14645	return ilr.Value == nil || len(*ilr.Value) == 0
14646}
14647
14648// interfaceListResultPreparer prepares a request to retrieve the next set of results.
14649// It returns nil if no more results exist.
14650func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
14651	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
14652		return nil, nil
14653	}
14654	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14655		autorest.AsJSON(),
14656		autorest.AsGet(),
14657		autorest.WithBaseURL(to.String(ilr.NextLink)))
14658}
14659
14660// InterfaceListResultPage contains a page of Interface values.
14661type InterfaceListResultPage struct {
14662	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
14663	ilr InterfaceListResult
14664}
14665
14666// NextWithContext advances to the next page of values.  If there was an error making
14667// the request the page does not advance and the error is returned.
14668func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
14669	if tracing.IsEnabled() {
14670		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
14671		defer func() {
14672			sc := -1
14673			if page.Response().Response.Response != nil {
14674				sc = page.Response().Response.Response.StatusCode
14675			}
14676			tracing.EndSpan(ctx, sc, err)
14677		}()
14678	}
14679	next, err := page.fn(ctx, page.ilr)
14680	if err != nil {
14681		return err
14682	}
14683	page.ilr = next
14684	return nil
14685}
14686
14687// Next advances to the next page of values.  If there was an error making
14688// the request the page does not advance and the error is returned.
14689// Deprecated: Use NextWithContext() instead.
14690func (page *InterfaceListResultPage) Next() error {
14691	return page.NextWithContext(context.Background())
14692}
14693
14694// NotDone returns true if the page enumeration should be started or is not yet complete.
14695func (page InterfaceListResultPage) NotDone() bool {
14696	return !page.ilr.IsEmpty()
14697}
14698
14699// Response returns the raw server response from the last page request.
14700func (page InterfaceListResultPage) Response() InterfaceListResult {
14701	return page.ilr
14702}
14703
14704// Values returns the slice of values for the current page or nil if there are no values.
14705func (page InterfaceListResultPage) Values() []Interface {
14706	if page.ilr.IsEmpty() {
14707		return nil
14708	}
14709	return *page.ilr.Value
14710}
14711
14712// Creates a new instance of the InterfaceListResultPage type.
14713func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
14714	return InterfaceListResultPage{fn: getNextPage}
14715}
14716
14717// InterfaceLoadBalancerListResult response for list ip configurations API service call.
14718type InterfaceLoadBalancerListResult struct {
14719	autorest.Response `json:"-"`
14720	// Value - A list of load balancers.
14721	Value *[]LoadBalancer `json:"value,omitempty"`
14722	// NextLink - READ-ONLY; The URL to get the next set of results.
14723	NextLink *string `json:"nextLink,omitempty"`
14724}
14725
14726// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
14727type InterfaceLoadBalancerListResultIterator struct {
14728	i    int
14729	page InterfaceLoadBalancerListResultPage
14730}
14731
14732// NextWithContext advances to the next value.  If there was an error making
14733// the request the iterator does not advance and the error is returned.
14734func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
14735	if tracing.IsEnabled() {
14736		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
14737		defer func() {
14738			sc := -1
14739			if iter.Response().Response.Response != nil {
14740				sc = iter.Response().Response.Response.StatusCode
14741			}
14742			tracing.EndSpan(ctx, sc, err)
14743		}()
14744	}
14745	iter.i++
14746	if iter.i < len(iter.page.Values()) {
14747		return nil
14748	}
14749	err = iter.page.NextWithContext(ctx)
14750	if err != nil {
14751		iter.i--
14752		return err
14753	}
14754	iter.i = 0
14755	return nil
14756}
14757
14758// Next advances to the next value.  If there was an error making
14759// the request the iterator does not advance and the error is returned.
14760// Deprecated: Use NextWithContext() instead.
14761func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
14762	return iter.NextWithContext(context.Background())
14763}
14764
14765// NotDone returns true if the enumeration should be started or is not yet complete.
14766func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
14767	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14768}
14769
14770// Response returns the raw server response from the last page request.
14771func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
14772	return iter.page.Response()
14773}
14774
14775// Value returns the current value or a zero-initialized value if the
14776// iterator has advanced beyond the end of the collection.
14777func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
14778	if !iter.page.NotDone() {
14779		return LoadBalancer{}
14780	}
14781	return iter.page.Values()[iter.i]
14782}
14783
14784// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
14785func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
14786	return InterfaceLoadBalancerListResultIterator{page: page}
14787}
14788
14789// IsEmpty returns true if the ListResult contains no values.
14790func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
14791	return ilblr.Value == nil || len(*ilblr.Value) == 0
14792}
14793
14794// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
14795// It returns nil if no more results exist.
14796func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
14797	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
14798		return nil, nil
14799	}
14800	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14801		autorest.AsJSON(),
14802		autorest.AsGet(),
14803		autorest.WithBaseURL(to.String(ilblr.NextLink)))
14804}
14805
14806// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
14807type InterfaceLoadBalancerListResultPage struct {
14808	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
14809	ilblr InterfaceLoadBalancerListResult
14810}
14811
14812// NextWithContext advances to the next page of values.  If there was an error making
14813// the request the page does not advance and the error is returned.
14814func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
14815	if tracing.IsEnabled() {
14816		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
14817		defer func() {
14818			sc := -1
14819			if page.Response().Response.Response != nil {
14820				sc = page.Response().Response.Response.StatusCode
14821			}
14822			tracing.EndSpan(ctx, sc, err)
14823		}()
14824	}
14825	next, err := page.fn(ctx, page.ilblr)
14826	if err != nil {
14827		return err
14828	}
14829	page.ilblr = next
14830	return nil
14831}
14832
14833// Next advances to the next page of values.  If there was an error making
14834// the request the page does not advance and the error is returned.
14835// Deprecated: Use NextWithContext() instead.
14836func (page *InterfaceLoadBalancerListResultPage) Next() error {
14837	return page.NextWithContext(context.Background())
14838}
14839
14840// NotDone returns true if the page enumeration should be started or is not yet complete.
14841func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
14842	return !page.ilblr.IsEmpty()
14843}
14844
14845// Response returns the raw server response from the last page request.
14846func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
14847	return page.ilblr
14848}
14849
14850// Values returns the slice of values for the current page or nil if there are no values.
14851func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
14852	if page.ilblr.IsEmpty() {
14853		return nil
14854	}
14855	return *page.ilblr.Value
14856}
14857
14858// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
14859func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
14860	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
14861}
14862
14863// InterfacePropertiesFormat networkInterface properties.
14864type InterfacePropertiesFormat struct {
14865	// VirtualMachine - READ-ONLY; The reference of a virtual machine.
14866	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
14867	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
14868	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
14869	// PrivateEndpoint - READ-ONLY; A reference to the private endpoint to which the network interface is linked.
14870	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
14871	// IPConfigurations - A list of IPConfigurations of the network interface.
14872	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
14873	// TapConfigurations - A list of TapConfigurations of the network interface.
14874	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
14875	// DNSSettings - The DNS settings in network interface.
14876	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
14877	// MacAddress - The MAC address of the network interface.
14878	MacAddress *string `json:"macAddress,omitempty"`
14879	// Primary - Gets whether this is a primary network interface on a virtual machine.
14880	Primary *bool `json:"primary,omitempty"`
14881	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
14882	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
14883	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
14884	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
14885	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources.
14886	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
14887	// ResourceGUID - The resource GUID property of the network interface resource.
14888	ResourceGUID *string `json:"resourceGuid,omitempty"`
14889	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14890	ProvisioningState *string `json:"provisioningState,omitempty"`
14891}
14892
14893// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14894// long-running operation.
14895type InterfacesCreateOrUpdateFuture struct {
14896	azure.Future
14897}
14898
14899// Result returns the result of the asynchronous operation.
14900// If the operation has not completed it will return an error.
14901func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
14902	var done bool
14903	done, err = future.DoneWithContext(context.Background(), client)
14904	if err != nil {
14905		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14906		return
14907	}
14908	if !done {
14909		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
14910		return
14911	}
14912	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14913	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
14914		i, err = client.CreateOrUpdateResponder(i.Response.Response)
14915		if err != nil {
14916			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
14917		}
14918	}
14919	return
14920}
14921
14922// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14923// operation.
14924type InterfacesDeleteFuture struct {
14925	azure.Future
14926}
14927
14928// Result returns the result of the asynchronous operation.
14929// If the operation has not completed it will return an error.
14930func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
14931	var done bool
14932	done, err = future.DoneWithContext(context.Background(), client)
14933	if err != nil {
14934		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
14935		return
14936	}
14937	if !done {
14938		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
14939		return
14940	}
14941	ar.Response = future.Response()
14942	return
14943}
14944
14945// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
14946// long-running operation.
14947type InterfacesGetEffectiveRouteTableFuture struct {
14948	azure.Future
14949}
14950
14951// Result returns the result of the asynchronous operation.
14952// If the operation has not completed it will return an error.
14953func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
14954	var done bool
14955	done, err = future.DoneWithContext(context.Background(), client)
14956	if err != nil {
14957		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
14958		return
14959	}
14960	if !done {
14961		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
14962		return
14963	}
14964	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14965	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
14966		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
14967		if err != nil {
14968			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
14969		}
14970	}
14971	return
14972}
14973
14974// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
14975// results of a long-running operation.
14976type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
14977	azure.Future
14978}
14979
14980// Result returns the result of the asynchronous operation.
14981// If the operation has not completed it will return an error.
14982func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
14983	var done bool
14984	done, err = future.DoneWithContext(context.Background(), client)
14985	if err != nil {
14986		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
14987		return
14988	}
14989	if !done {
14990		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
14991		return
14992	}
14993	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14994	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
14995		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
14996		if err != nil {
14997			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
14998		}
14999	}
15000	return
15001}
15002
15003// InterfacesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
15004// operation.
15005type InterfacesUpdateTagsFuture struct {
15006	azure.Future
15007}
15008
15009// Result returns the result of the asynchronous operation.
15010// If the operation has not completed it will return an error.
15011func (future *InterfacesUpdateTagsFuture) Result(client InterfacesClient) (i Interface, err error) {
15012	var done bool
15013	done, err = future.DoneWithContext(context.Background(), client)
15014	if err != nil {
15015		err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
15016		return
15017	}
15018	if !done {
15019		err = azure.NewAsyncOpIncompleteError("network.InterfacesUpdateTagsFuture")
15020		return
15021	}
15022	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15023	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
15024		i, err = client.UpdateTagsResponder(i.Response.Response)
15025		if err != nil {
15026			err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", i.Response.Response, "Failure responding to request")
15027		}
15028	}
15029	return
15030}
15031
15032// InterfaceTapConfiguration tap configuration in a Network Interface.
15033type InterfaceTapConfiguration struct {
15034	autorest.Response `json:"-"`
15035	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration.
15036	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
15037	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15038	Name *string `json:"name,omitempty"`
15039	// Etag - A unique read-only string that changes whenever the resource is updated.
15040	Etag *string `json:"etag,omitempty"`
15041	// Type - READ-ONLY; Sub Resource type.
15042	Type *string `json:"type,omitempty"`
15043	// ID - Resource ID.
15044	ID *string `json:"id,omitempty"`
15045}
15046
15047// MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
15048func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
15049	objectMap := make(map[string]interface{})
15050	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
15051		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
15052	}
15053	if itc.Name != nil {
15054		objectMap["name"] = itc.Name
15055	}
15056	if itc.Etag != nil {
15057		objectMap["etag"] = itc.Etag
15058	}
15059	if itc.ID != nil {
15060		objectMap["id"] = itc.ID
15061	}
15062	return json.Marshal(objectMap)
15063}
15064
15065// UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
15066func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
15067	var m map[string]*json.RawMessage
15068	err := json.Unmarshal(body, &m)
15069	if err != nil {
15070		return err
15071	}
15072	for k, v := range m {
15073		switch k {
15074		case "properties":
15075			if v != nil {
15076				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
15077				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
15078				if err != nil {
15079					return err
15080				}
15081				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
15082			}
15083		case "name":
15084			if v != nil {
15085				var name string
15086				err = json.Unmarshal(*v, &name)
15087				if err != nil {
15088					return err
15089				}
15090				itc.Name = &name
15091			}
15092		case "etag":
15093			if v != nil {
15094				var etag string
15095				err = json.Unmarshal(*v, &etag)
15096				if err != nil {
15097					return err
15098				}
15099				itc.Etag = &etag
15100			}
15101		case "type":
15102			if v != nil {
15103				var typeVar string
15104				err = json.Unmarshal(*v, &typeVar)
15105				if err != nil {
15106					return err
15107				}
15108				itc.Type = &typeVar
15109			}
15110		case "id":
15111			if v != nil {
15112				var ID string
15113				err = json.Unmarshal(*v, &ID)
15114				if err != nil {
15115					return err
15116				}
15117				itc.ID = &ID
15118			}
15119		}
15120	}
15121
15122	return nil
15123}
15124
15125// InterfaceTapConfigurationListResult response for list tap configurations API service call.
15126type InterfaceTapConfigurationListResult struct {
15127	autorest.Response `json:"-"`
15128	// Value - A list of tap configurations.
15129	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
15130	// NextLink - READ-ONLY; The URL to get the next set of results.
15131	NextLink *string `json:"nextLink,omitempty"`
15132}
15133
15134// InterfaceTapConfigurationListResultIterator provides access to a complete listing of
15135// InterfaceTapConfiguration values.
15136type InterfaceTapConfigurationListResultIterator struct {
15137	i    int
15138	page InterfaceTapConfigurationListResultPage
15139}
15140
15141// NextWithContext advances to the next value.  If there was an error making
15142// the request the iterator does not advance and the error is returned.
15143func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
15144	if tracing.IsEnabled() {
15145		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
15146		defer func() {
15147			sc := -1
15148			if iter.Response().Response.Response != nil {
15149				sc = iter.Response().Response.Response.StatusCode
15150			}
15151			tracing.EndSpan(ctx, sc, err)
15152		}()
15153	}
15154	iter.i++
15155	if iter.i < len(iter.page.Values()) {
15156		return nil
15157	}
15158	err = iter.page.NextWithContext(ctx)
15159	if err != nil {
15160		iter.i--
15161		return err
15162	}
15163	iter.i = 0
15164	return nil
15165}
15166
15167// Next advances to the next value.  If there was an error making
15168// the request the iterator does not advance and the error is returned.
15169// Deprecated: Use NextWithContext() instead.
15170func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
15171	return iter.NextWithContext(context.Background())
15172}
15173
15174// NotDone returns true if the enumeration should be started or is not yet complete.
15175func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
15176	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15177}
15178
15179// Response returns the raw server response from the last page request.
15180func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
15181	return iter.page.Response()
15182}
15183
15184// Value returns the current value or a zero-initialized value if the
15185// iterator has advanced beyond the end of the collection.
15186func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
15187	if !iter.page.NotDone() {
15188		return InterfaceTapConfiguration{}
15189	}
15190	return iter.page.Values()[iter.i]
15191}
15192
15193// Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
15194func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
15195	return InterfaceTapConfigurationListResultIterator{page: page}
15196}
15197
15198// IsEmpty returns true if the ListResult contains no values.
15199func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
15200	return itclr.Value == nil || len(*itclr.Value) == 0
15201}
15202
15203// interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
15204// It returns nil if no more results exist.
15205func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
15206	if itclr.NextLink == nil || len(to.String(itclr.NextLink)) < 1 {
15207		return nil, nil
15208	}
15209	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15210		autorest.AsJSON(),
15211		autorest.AsGet(),
15212		autorest.WithBaseURL(to.String(itclr.NextLink)))
15213}
15214
15215// InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
15216type InterfaceTapConfigurationListResultPage struct {
15217	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
15218	itclr InterfaceTapConfigurationListResult
15219}
15220
15221// NextWithContext advances to the next page of values.  If there was an error making
15222// the request the page does not advance and the error is returned.
15223func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
15224	if tracing.IsEnabled() {
15225		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
15226		defer func() {
15227			sc := -1
15228			if page.Response().Response.Response != nil {
15229				sc = page.Response().Response.Response.StatusCode
15230			}
15231			tracing.EndSpan(ctx, sc, err)
15232		}()
15233	}
15234	next, err := page.fn(ctx, page.itclr)
15235	if err != nil {
15236		return err
15237	}
15238	page.itclr = next
15239	return nil
15240}
15241
15242// Next advances to the next page of values.  If there was an error making
15243// the request the page does not advance and the error is returned.
15244// Deprecated: Use NextWithContext() instead.
15245func (page *InterfaceTapConfigurationListResultPage) Next() error {
15246	return page.NextWithContext(context.Background())
15247}
15248
15249// NotDone returns true if the page enumeration should be started or is not yet complete.
15250func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
15251	return !page.itclr.IsEmpty()
15252}
15253
15254// Response returns the raw server response from the last page request.
15255func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
15256	return page.itclr
15257}
15258
15259// Values returns the slice of values for the current page or nil if there are no values.
15260func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
15261	if page.itclr.IsEmpty() {
15262		return nil
15263	}
15264	return *page.itclr.Value
15265}
15266
15267// Creates a new instance of the InterfaceTapConfigurationListResultPage type.
15268func NewInterfaceTapConfigurationListResultPage(getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
15269	return InterfaceTapConfigurationListResultPage{fn: getNextPage}
15270}
15271
15272// InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
15273type InterfaceTapConfigurationPropertiesFormat struct {
15274	// VirtualNetworkTap - The reference of the Virtual Network Tap resource.
15275	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
15276	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
15277	ProvisioningState *string `json:"provisioningState,omitempty"`
15278}
15279
15280// InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
15281// of a long-running operation.
15282type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
15283	azure.Future
15284}
15285
15286// Result returns the result of the asynchronous operation.
15287// If the operation has not completed it will return an error.
15288func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) Result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
15289	var done bool
15290	done, err = future.DoneWithContext(context.Background(), client)
15291	if err != nil {
15292		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15293		return
15294	}
15295	if !done {
15296		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
15297		return
15298	}
15299	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15300	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
15301		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
15302		if err != nil {
15303			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
15304		}
15305	}
15306	return
15307}
15308
15309// InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
15310// long-running operation.
15311type InterfaceTapConfigurationsDeleteFuture struct {
15312	azure.Future
15313}
15314
15315// Result returns the result of the asynchronous operation.
15316// If the operation has not completed it will return an error.
15317func (future *InterfaceTapConfigurationsDeleteFuture) Result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
15318	var done bool
15319	done, err = future.DoneWithContext(context.Background(), client)
15320	if err != nil {
15321		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
15322		return
15323	}
15324	if !done {
15325		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
15326		return
15327	}
15328	ar.Response = future.Response()
15329	return
15330}
15331
15332// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call.
15333type IPAddressAvailabilityResult struct {
15334	autorest.Response `json:"-"`
15335	// Available - Private IP address availability.
15336	Available *bool `json:"available,omitempty"`
15337	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
15338	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
15339}
15340
15341// IPConfiguration IP configuration.
15342type IPConfiguration struct {
15343	// IPConfigurationPropertiesFormat - Properties of the IP configuration.
15344	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
15345	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15346	Name *string `json:"name,omitempty"`
15347	// Etag - A unique read-only string that changes whenever the resource is updated.
15348	Etag *string `json:"etag,omitempty"`
15349	// ID - Resource ID.
15350	ID *string `json:"id,omitempty"`
15351}
15352
15353// MarshalJSON is the custom marshaler for IPConfiguration.
15354func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
15355	objectMap := make(map[string]interface{})
15356	if ic.IPConfigurationPropertiesFormat != nil {
15357		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
15358	}
15359	if ic.Name != nil {
15360		objectMap["name"] = ic.Name
15361	}
15362	if ic.Etag != nil {
15363		objectMap["etag"] = ic.Etag
15364	}
15365	if ic.ID != nil {
15366		objectMap["id"] = ic.ID
15367	}
15368	return json.Marshal(objectMap)
15369}
15370
15371// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
15372func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
15373	var m map[string]*json.RawMessage
15374	err := json.Unmarshal(body, &m)
15375	if err != nil {
15376		return err
15377	}
15378	for k, v := range m {
15379		switch k {
15380		case "properties":
15381			if v != nil {
15382				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
15383				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
15384				if err != nil {
15385					return err
15386				}
15387				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
15388			}
15389		case "name":
15390			if v != nil {
15391				var name string
15392				err = json.Unmarshal(*v, &name)
15393				if err != nil {
15394					return err
15395				}
15396				ic.Name = &name
15397			}
15398		case "etag":
15399			if v != nil {
15400				var etag string
15401				err = json.Unmarshal(*v, &etag)
15402				if err != nil {
15403					return err
15404				}
15405				ic.Etag = &etag
15406			}
15407		case "id":
15408			if v != nil {
15409				var ID string
15410				err = json.Unmarshal(*v, &ID)
15411				if err != nil {
15412					return err
15413				}
15414				ic.ID = &ID
15415			}
15416		}
15417	}
15418
15419	return nil
15420}
15421
15422// IPConfigurationProfile IP configuration profile child resource.
15423type IPConfigurationProfile struct {
15424	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
15425	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
15426	// Name - The name of the resource. This name can be used to access the resource.
15427	Name *string `json:"name,omitempty"`
15428	// Type - READ-ONLY; Sub Resource type.
15429	Type *string `json:"type,omitempty"`
15430	// Etag - A unique read-only string that changes whenever the resource is updated.
15431	Etag *string `json:"etag,omitempty"`
15432	// ID - Resource ID.
15433	ID *string `json:"id,omitempty"`
15434}
15435
15436// MarshalJSON is the custom marshaler for IPConfigurationProfile.
15437func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
15438	objectMap := make(map[string]interface{})
15439	if icp.IPConfigurationProfilePropertiesFormat != nil {
15440		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
15441	}
15442	if icp.Name != nil {
15443		objectMap["name"] = icp.Name
15444	}
15445	if icp.Etag != nil {
15446		objectMap["etag"] = icp.Etag
15447	}
15448	if icp.ID != nil {
15449		objectMap["id"] = icp.ID
15450	}
15451	return json.Marshal(objectMap)
15452}
15453
15454// UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
15455func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
15456	var m map[string]*json.RawMessage
15457	err := json.Unmarshal(body, &m)
15458	if err != nil {
15459		return err
15460	}
15461	for k, v := range m {
15462		switch k {
15463		case "properties":
15464			if v != nil {
15465				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
15466				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
15467				if err != nil {
15468					return err
15469				}
15470				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
15471			}
15472		case "name":
15473			if v != nil {
15474				var name string
15475				err = json.Unmarshal(*v, &name)
15476				if err != nil {
15477					return err
15478				}
15479				icp.Name = &name
15480			}
15481		case "type":
15482			if v != nil {
15483				var typeVar string
15484				err = json.Unmarshal(*v, &typeVar)
15485				if err != nil {
15486					return err
15487				}
15488				icp.Type = &typeVar
15489			}
15490		case "etag":
15491			if v != nil {
15492				var etag string
15493				err = json.Unmarshal(*v, &etag)
15494				if err != nil {
15495					return err
15496				}
15497				icp.Etag = &etag
15498			}
15499		case "id":
15500			if v != nil {
15501				var ID string
15502				err = json.Unmarshal(*v, &ID)
15503				if err != nil {
15504					return err
15505				}
15506				icp.ID = &ID
15507			}
15508		}
15509	}
15510
15511	return nil
15512}
15513
15514// IPConfigurationProfilePropertiesFormat IP configuration profile properties.
15515type IPConfigurationProfilePropertiesFormat struct {
15516	// Subnet - The reference of the subnet resource to create a container network interface ip configuration.
15517	Subnet *Subnet `json:"subnet,omitempty"`
15518	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
15519	ProvisioningState *string `json:"provisioningState,omitempty"`
15520}
15521
15522// IPConfigurationPropertiesFormat properties of IP configuration.
15523type IPConfigurationPropertiesFormat struct {
15524	// PrivateIPAddress - The private IP address of the IP configuration.
15525	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
15526	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
15527	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
15528	// Subnet - The reference of the subnet resource.
15529	Subnet *Subnet `json:"subnet,omitempty"`
15530	// PublicIPAddress - The reference of the public IP resource.
15531	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
15532	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
15533	ProvisioningState *string `json:"provisioningState,omitempty"`
15534}
15535
15536// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection.
15537type IpsecPolicy struct {
15538	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
15539	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
15540	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
15541	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
15542	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
15543	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
15544	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
15545	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
15546	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
15547	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
15548	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
15549	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
15550	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
15551	DhGroup DhGroup `json:"dhGroup,omitempty"`
15552	// 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'
15553	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
15554}
15555
15556// IPTag contains the IpTag associated with the object.
15557type IPTag struct {
15558	// IPTagType - Gets or sets the ipTag type: Example FirstPartyUsage.
15559	IPTagType *string `json:"ipTagType,omitempty"`
15560	// Tag - Gets or sets value of the IpTag associated with the public IP. Example SQL, Storage etc.
15561	Tag *string `json:"tag,omitempty"`
15562}
15563
15564// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
15565type Ipv6ExpressRouteCircuitPeeringConfig struct {
15566	// PrimaryPeerAddressPrefix - The primary address prefix.
15567	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
15568	// SecondaryPeerAddressPrefix - The secondary address prefix.
15569	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
15570	// MicrosoftPeeringConfig - The Microsoft peering configuration.
15571	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
15572	// RouteFilter - The reference of the RouteFilter resource.
15573	RouteFilter *SubResource `json:"routeFilter,omitempty"`
15574	// State - The state of peering. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
15575	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
15576}
15577
15578// ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
15579// the next set of results.
15580type ListHubVirtualNetworkConnectionsResult struct {
15581	autorest.Response `json:"-"`
15582	// Value - List of HubVirtualNetworkConnections.
15583	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
15584	// NextLink - URL to get the next set of operation list results if there are any.
15585	NextLink *string `json:"nextLink,omitempty"`
15586}
15587
15588// ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
15589// HubVirtualNetworkConnection values.
15590type ListHubVirtualNetworkConnectionsResultIterator struct {
15591	i    int
15592	page ListHubVirtualNetworkConnectionsResultPage
15593}
15594
15595// NextWithContext advances to the next value.  If there was an error making
15596// the request the iterator does not advance and the error is returned.
15597func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
15598	if tracing.IsEnabled() {
15599		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
15600		defer func() {
15601			sc := -1
15602			if iter.Response().Response.Response != nil {
15603				sc = iter.Response().Response.Response.StatusCode
15604			}
15605			tracing.EndSpan(ctx, sc, err)
15606		}()
15607	}
15608	iter.i++
15609	if iter.i < len(iter.page.Values()) {
15610		return nil
15611	}
15612	err = iter.page.NextWithContext(ctx)
15613	if err != nil {
15614		iter.i--
15615		return err
15616	}
15617	iter.i = 0
15618	return nil
15619}
15620
15621// Next advances to the next value.  If there was an error making
15622// the request the iterator does not advance and the error is returned.
15623// Deprecated: Use NextWithContext() instead.
15624func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
15625	return iter.NextWithContext(context.Background())
15626}
15627
15628// NotDone returns true if the enumeration should be started or is not yet complete.
15629func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
15630	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15631}
15632
15633// Response returns the raw server response from the last page request.
15634func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
15635	return iter.page.Response()
15636}
15637
15638// Value returns the current value or a zero-initialized value if the
15639// iterator has advanced beyond the end of the collection.
15640func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
15641	if !iter.page.NotDone() {
15642		return HubVirtualNetworkConnection{}
15643	}
15644	return iter.page.Values()[iter.i]
15645}
15646
15647// Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
15648func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
15649	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
15650}
15651
15652// IsEmpty returns true if the ListResult contains no values.
15653func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
15654	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
15655}
15656
15657// listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
15658// It returns nil if no more results exist.
15659func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
15660	if lhvncr.NextLink == nil || len(to.String(lhvncr.NextLink)) < 1 {
15661		return nil, nil
15662	}
15663	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15664		autorest.AsJSON(),
15665		autorest.AsGet(),
15666		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
15667}
15668
15669// ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
15670type ListHubVirtualNetworkConnectionsResultPage struct {
15671	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
15672	lhvncr ListHubVirtualNetworkConnectionsResult
15673}
15674
15675// NextWithContext advances to the next page of values.  If there was an error making
15676// the request the page does not advance and the error is returned.
15677func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
15678	if tracing.IsEnabled() {
15679		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
15680		defer func() {
15681			sc := -1
15682			if page.Response().Response.Response != nil {
15683				sc = page.Response().Response.Response.StatusCode
15684			}
15685			tracing.EndSpan(ctx, sc, err)
15686		}()
15687	}
15688	next, err := page.fn(ctx, page.lhvncr)
15689	if err != nil {
15690		return err
15691	}
15692	page.lhvncr = next
15693	return nil
15694}
15695
15696// Next advances to the next page of values.  If there was an error making
15697// the request the page does not advance and the error is returned.
15698// Deprecated: Use NextWithContext() instead.
15699func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
15700	return page.NextWithContext(context.Background())
15701}
15702
15703// NotDone returns true if the page enumeration should be started or is not yet complete.
15704func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
15705	return !page.lhvncr.IsEmpty()
15706}
15707
15708// Response returns the raw server response from the last page request.
15709func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
15710	return page.lhvncr
15711}
15712
15713// Values returns the slice of values for the current page or nil if there are no values.
15714func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
15715	if page.lhvncr.IsEmpty() {
15716		return nil
15717	}
15718	return *page.lhvncr.Value
15719}
15720
15721// Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
15722func NewListHubVirtualNetworkConnectionsResultPage(getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
15723	return ListHubVirtualNetworkConnectionsResultPage{fn: getNextPage}
15724}
15725
15726// ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
15727// P2SVpnGateways and a URL nextLink to get the next set of results.
15728type ListP2SVpnGatewaysResult struct {
15729	autorest.Response `json:"-"`
15730	// Value - List of P2SVpnGateways.
15731	Value *[]P2SVpnGateway `json:"value,omitempty"`
15732	// NextLink - URL to get the next set of operation list results if there are any.
15733	NextLink *string `json:"nextLink,omitempty"`
15734}
15735
15736// ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
15737type ListP2SVpnGatewaysResultIterator struct {
15738	i    int
15739	page ListP2SVpnGatewaysResultPage
15740}
15741
15742// NextWithContext advances to the next value.  If there was an error making
15743// the request the iterator does not advance and the error is returned.
15744func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
15745	if tracing.IsEnabled() {
15746		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
15747		defer func() {
15748			sc := -1
15749			if iter.Response().Response.Response != nil {
15750				sc = iter.Response().Response.Response.StatusCode
15751			}
15752			tracing.EndSpan(ctx, sc, err)
15753		}()
15754	}
15755	iter.i++
15756	if iter.i < len(iter.page.Values()) {
15757		return nil
15758	}
15759	err = iter.page.NextWithContext(ctx)
15760	if err != nil {
15761		iter.i--
15762		return err
15763	}
15764	iter.i = 0
15765	return nil
15766}
15767
15768// Next advances to the next value.  If there was an error making
15769// the request the iterator does not advance and the error is returned.
15770// Deprecated: Use NextWithContext() instead.
15771func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
15772	return iter.NextWithContext(context.Background())
15773}
15774
15775// NotDone returns true if the enumeration should be started or is not yet complete.
15776func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
15777	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15778}
15779
15780// Response returns the raw server response from the last page request.
15781func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
15782	return iter.page.Response()
15783}
15784
15785// Value returns the current value or a zero-initialized value if the
15786// iterator has advanced beyond the end of the collection.
15787func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
15788	if !iter.page.NotDone() {
15789		return P2SVpnGateway{}
15790	}
15791	return iter.page.Values()[iter.i]
15792}
15793
15794// Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
15795func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
15796	return ListP2SVpnGatewaysResultIterator{page: page}
15797}
15798
15799// IsEmpty returns true if the ListResult contains no values.
15800func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
15801	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
15802}
15803
15804// listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
15805// It returns nil if no more results exist.
15806func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
15807	if lpvgr.NextLink == nil || len(to.String(lpvgr.NextLink)) < 1 {
15808		return nil, nil
15809	}
15810	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15811		autorest.AsJSON(),
15812		autorest.AsGet(),
15813		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
15814}
15815
15816// ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
15817type ListP2SVpnGatewaysResultPage struct {
15818	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
15819	lpvgr ListP2SVpnGatewaysResult
15820}
15821
15822// NextWithContext advances to the next page of values.  If there was an error making
15823// the request the page does not advance and the error is returned.
15824func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
15825	if tracing.IsEnabled() {
15826		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
15827		defer func() {
15828			sc := -1
15829			if page.Response().Response.Response != nil {
15830				sc = page.Response().Response.Response.StatusCode
15831			}
15832			tracing.EndSpan(ctx, sc, err)
15833		}()
15834	}
15835	next, err := page.fn(ctx, page.lpvgr)
15836	if err != nil {
15837		return err
15838	}
15839	page.lpvgr = next
15840	return nil
15841}
15842
15843// Next advances to the next page of values.  If there was an error making
15844// the request the page does not advance and the error is returned.
15845// Deprecated: Use NextWithContext() instead.
15846func (page *ListP2SVpnGatewaysResultPage) Next() error {
15847	return page.NextWithContext(context.Background())
15848}
15849
15850// NotDone returns true if the page enumeration should be started or is not yet complete.
15851func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
15852	return !page.lpvgr.IsEmpty()
15853}
15854
15855// Response returns the raw server response from the last page request.
15856func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
15857	return page.lpvgr
15858}
15859
15860// Values returns the slice of values for the current page or nil if there are no values.
15861func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
15862	if page.lpvgr.IsEmpty() {
15863		return nil
15864	}
15865	return *page.lpvgr.Value
15866}
15867
15868// Creates a new instance of the ListP2SVpnGatewaysResultPage type.
15869func NewListP2SVpnGatewaysResultPage(getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
15870	return ListP2SVpnGatewaysResultPage{fn: getNextPage}
15871}
15872
15873// ListP2SVpnServerConfigurationsResult result of the request to list all P2SVpnServerConfigurations
15874// associated to a VirtualWan. It contains a list of P2SVpnServerConfigurations and a URL nextLink to get
15875// the next set of results.
15876type ListP2SVpnServerConfigurationsResult struct {
15877	autorest.Response `json:"-"`
15878	// Value - List of P2SVpnServerConfigurations.
15879	Value *[]P2SVpnServerConfiguration `json:"value,omitempty"`
15880	// NextLink - URL to get the next set of operation list results if there are any.
15881	NextLink *string `json:"nextLink,omitempty"`
15882}
15883
15884// ListP2SVpnServerConfigurationsResultIterator provides access to a complete listing of
15885// P2SVpnServerConfiguration values.
15886type ListP2SVpnServerConfigurationsResultIterator struct {
15887	i    int
15888	page ListP2SVpnServerConfigurationsResultPage
15889}
15890
15891// NextWithContext advances to the next value.  If there was an error making
15892// the request the iterator does not advance and the error is returned.
15893func (iter *ListP2SVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
15894	if tracing.IsEnabled() {
15895		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultIterator.NextWithContext")
15896		defer func() {
15897			sc := -1
15898			if iter.Response().Response.Response != nil {
15899				sc = iter.Response().Response.Response.StatusCode
15900			}
15901			tracing.EndSpan(ctx, sc, err)
15902		}()
15903	}
15904	iter.i++
15905	if iter.i < len(iter.page.Values()) {
15906		return nil
15907	}
15908	err = iter.page.NextWithContext(ctx)
15909	if err != nil {
15910		iter.i--
15911		return err
15912	}
15913	iter.i = 0
15914	return nil
15915}
15916
15917// Next advances to the next value.  If there was an error making
15918// the request the iterator does not advance and the error is returned.
15919// Deprecated: Use NextWithContext() instead.
15920func (iter *ListP2SVpnServerConfigurationsResultIterator) Next() error {
15921	return iter.NextWithContext(context.Background())
15922}
15923
15924// NotDone returns true if the enumeration should be started or is not yet complete.
15925func (iter ListP2SVpnServerConfigurationsResultIterator) NotDone() bool {
15926	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15927}
15928
15929// Response returns the raw server response from the last page request.
15930func (iter ListP2SVpnServerConfigurationsResultIterator) Response() ListP2SVpnServerConfigurationsResult {
15931	return iter.page.Response()
15932}
15933
15934// Value returns the current value or a zero-initialized value if the
15935// iterator has advanced beyond the end of the collection.
15936func (iter ListP2SVpnServerConfigurationsResultIterator) Value() P2SVpnServerConfiguration {
15937	if !iter.page.NotDone() {
15938		return P2SVpnServerConfiguration{}
15939	}
15940	return iter.page.Values()[iter.i]
15941}
15942
15943// Creates a new instance of the ListP2SVpnServerConfigurationsResultIterator type.
15944func NewListP2SVpnServerConfigurationsResultIterator(page ListP2SVpnServerConfigurationsResultPage) ListP2SVpnServerConfigurationsResultIterator {
15945	return ListP2SVpnServerConfigurationsResultIterator{page: page}
15946}
15947
15948// IsEmpty returns true if the ListResult contains no values.
15949func (lpvscr ListP2SVpnServerConfigurationsResult) IsEmpty() bool {
15950	return lpvscr.Value == nil || len(*lpvscr.Value) == 0
15951}
15952
15953// listP2SVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
15954// It returns nil if no more results exist.
15955func (lpvscr ListP2SVpnServerConfigurationsResult) listP2SVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
15956	if lpvscr.NextLink == nil || len(to.String(lpvscr.NextLink)) < 1 {
15957		return nil, nil
15958	}
15959	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15960		autorest.AsJSON(),
15961		autorest.AsGet(),
15962		autorest.WithBaseURL(to.String(lpvscr.NextLink)))
15963}
15964
15965// ListP2SVpnServerConfigurationsResultPage contains a page of P2SVpnServerConfiguration values.
15966type ListP2SVpnServerConfigurationsResultPage struct {
15967	fn     func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)
15968	lpvscr ListP2SVpnServerConfigurationsResult
15969}
15970
15971// NextWithContext advances to the next page of values.  If there was an error making
15972// the request the page does not advance and the error is returned.
15973func (page *ListP2SVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
15974	if tracing.IsEnabled() {
15975		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultPage.NextWithContext")
15976		defer func() {
15977			sc := -1
15978			if page.Response().Response.Response != nil {
15979				sc = page.Response().Response.Response.StatusCode
15980			}
15981			tracing.EndSpan(ctx, sc, err)
15982		}()
15983	}
15984	next, err := page.fn(ctx, page.lpvscr)
15985	if err != nil {
15986		return err
15987	}
15988	page.lpvscr = next
15989	return nil
15990}
15991
15992// Next advances to the next page of values.  If there was an error making
15993// the request the page does not advance and the error is returned.
15994// Deprecated: Use NextWithContext() instead.
15995func (page *ListP2SVpnServerConfigurationsResultPage) Next() error {
15996	return page.NextWithContext(context.Background())
15997}
15998
15999// NotDone returns true if the page enumeration should be started or is not yet complete.
16000func (page ListP2SVpnServerConfigurationsResultPage) NotDone() bool {
16001	return !page.lpvscr.IsEmpty()
16002}
16003
16004// Response returns the raw server response from the last page request.
16005func (page ListP2SVpnServerConfigurationsResultPage) Response() ListP2SVpnServerConfigurationsResult {
16006	return page.lpvscr
16007}
16008
16009// Values returns the slice of values for the current page or nil if there are no values.
16010func (page ListP2SVpnServerConfigurationsResultPage) Values() []P2SVpnServerConfiguration {
16011	if page.lpvscr.IsEmpty() {
16012		return nil
16013	}
16014	return *page.lpvscr.Value
16015}
16016
16017// Creates a new instance of the ListP2SVpnServerConfigurationsResultPage type.
16018func NewListP2SVpnServerConfigurationsResultPage(getNextPage func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)) ListP2SVpnServerConfigurationsResultPage {
16019	return ListP2SVpnServerConfigurationsResultPage{fn: getNextPage}
16020}
16021
16022// ListString ...
16023type ListString struct {
16024	autorest.Response `json:"-"`
16025	Value             *[]string `json:"value,omitempty"`
16026}
16027
16028// ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
16029// URL nextLink to get the next set of results.
16030type ListVirtualHubsResult struct {
16031	autorest.Response `json:"-"`
16032	// Value - List of VirtualHubs.
16033	Value *[]VirtualHub `json:"value,omitempty"`
16034	// NextLink - URL to get the next set of operation list results if there are any.
16035	NextLink *string `json:"nextLink,omitempty"`
16036}
16037
16038// ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
16039type ListVirtualHubsResultIterator struct {
16040	i    int
16041	page ListVirtualHubsResultPage
16042}
16043
16044// NextWithContext advances to the next value.  If there was an error making
16045// the request the iterator does not advance and the error is returned.
16046func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
16047	if tracing.IsEnabled() {
16048		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
16049		defer func() {
16050			sc := -1
16051			if iter.Response().Response.Response != nil {
16052				sc = iter.Response().Response.Response.StatusCode
16053			}
16054			tracing.EndSpan(ctx, sc, err)
16055		}()
16056	}
16057	iter.i++
16058	if iter.i < len(iter.page.Values()) {
16059		return nil
16060	}
16061	err = iter.page.NextWithContext(ctx)
16062	if err != nil {
16063		iter.i--
16064		return err
16065	}
16066	iter.i = 0
16067	return nil
16068}
16069
16070// Next advances to the next value.  If there was an error making
16071// the request the iterator does not advance and the error is returned.
16072// Deprecated: Use NextWithContext() instead.
16073func (iter *ListVirtualHubsResultIterator) Next() error {
16074	return iter.NextWithContext(context.Background())
16075}
16076
16077// NotDone returns true if the enumeration should be started or is not yet complete.
16078func (iter ListVirtualHubsResultIterator) NotDone() bool {
16079	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16080}
16081
16082// Response returns the raw server response from the last page request.
16083func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
16084	return iter.page.Response()
16085}
16086
16087// Value returns the current value or a zero-initialized value if the
16088// iterator has advanced beyond the end of the collection.
16089func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
16090	if !iter.page.NotDone() {
16091		return VirtualHub{}
16092	}
16093	return iter.page.Values()[iter.i]
16094}
16095
16096// Creates a new instance of the ListVirtualHubsResultIterator type.
16097func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
16098	return ListVirtualHubsResultIterator{page: page}
16099}
16100
16101// IsEmpty returns true if the ListResult contains no values.
16102func (lvhr ListVirtualHubsResult) IsEmpty() bool {
16103	return lvhr.Value == nil || len(*lvhr.Value) == 0
16104}
16105
16106// listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
16107// It returns nil if no more results exist.
16108func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
16109	if lvhr.NextLink == nil || len(to.String(lvhr.NextLink)) < 1 {
16110		return nil, nil
16111	}
16112	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16113		autorest.AsJSON(),
16114		autorest.AsGet(),
16115		autorest.WithBaseURL(to.String(lvhr.NextLink)))
16116}
16117
16118// ListVirtualHubsResultPage contains a page of VirtualHub values.
16119type ListVirtualHubsResultPage struct {
16120	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
16121	lvhr ListVirtualHubsResult
16122}
16123
16124// NextWithContext advances to the next page of values.  If there was an error making
16125// the request the page does not advance and the error is returned.
16126func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
16127	if tracing.IsEnabled() {
16128		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
16129		defer func() {
16130			sc := -1
16131			if page.Response().Response.Response != nil {
16132				sc = page.Response().Response.Response.StatusCode
16133			}
16134			tracing.EndSpan(ctx, sc, err)
16135		}()
16136	}
16137	next, err := page.fn(ctx, page.lvhr)
16138	if err != nil {
16139		return err
16140	}
16141	page.lvhr = next
16142	return nil
16143}
16144
16145// Next advances to the next page of values.  If there was an error making
16146// the request the page does not advance and the error is returned.
16147// Deprecated: Use NextWithContext() instead.
16148func (page *ListVirtualHubsResultPage) Next() error {
16149	return page.NextWithContext(context.Background())
16150}
16151
16152// NotDone returns true if the page enumeration should be started or is not yet complete.
16153func (page ListVirtualHubsResultPage) NotDone() bool {
16154	return !page.lvhr.IsEmpty()
16155}
16156
16157// Response returns the raw server response from the last page request.
16158func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
16159	return page.lvhr
16160}
16161
16162// Values returns the slice of values for the current page or nil if there are no values.
16163func (page ListVirtualHubsResultPage) Values() []VirtualHub {
16164	if page.lvhr.IsEmpty() {
16165		return nil
16166	}
16167	return *page.lvhr.Value
16168}
16169
16170// Creates a new instance of the ListVirtualHubsResultPage type.
16171func NewListVirtualHubsResultPage(getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
16172	return ListVirtualHubsResultPage{fn: getNextPage}
16173}
16174
16175// ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
16176// URL nextLink to get the next set of results.
16177type ListVirtualWANsResult struct {
16178	autorest.Response `json:"-"`
16179	// Value - List of VirtualWANs.
16180	Value *[]VirtualWAN `json:"value,omitempty"`
16181	// NextLink - URL to get the next set of operation list results if there are any.
16182	NextLink *string `json:"nextLink,omitempty"`
16183}
16184
16185// ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
16186type ListVirtualWANsResultIterator struct {
16187	i    int
16188	page ListVirtualWANsResultPage
16189}
16190
16191// NextWithContext advances to the next value.  If there was an error making
16192// the request the iterator does not advance and the error is returned.
16193func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
16194	if tracing.IsEnabled() {
16195		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
16196		defer func() {
16197			sc := -1
16198			if iter.Response().Response.Response != nil {
16199				sc = iter.Response().Response.Response.StatusCode
16200			}
16201			tracing.EndSpan(ctx, sc, err)
16202		}()
16203	}
16204	iter.i++
16205	if iter.i < len(iter.page.Values()) {
16206		return nil
16207	}
16208	err = iter.page.NextWithContext(ctx)
16209	if err != nil {
16210		iter.i--
16211		return err
16212	}
16213	iter.i = 0
16214	return nil
16215}
16216
16217// Next advances to the next value.  If there was an error making
16218// the request the iterator does not advance and the error is returned.
16219// Deprecated: Use NextWithContext() instead.
16220func (iter *ListVirtualWANsResultIterator) Next() error {
16221	return iter.NextWithContext(context.Background())
16222}
16223
16224// NotDone returns true if the enumeration should be started or is not yet complete.
16225func (iter ListVirtualWANsResultIterator) NotDone() bool {
16226	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16227}
16228
16229// Response returns the raw server response from the last page request.
16230func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
16231	return iter.page.Response()
16232}
16233
16234// Value returns the current value or a zero-initialized value if the
16235// iterator has advanced beyond the end of the collection.
16236func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
16237	if !iter.page.NotDone() {
16238		return VirtualWAN{}
16239	}
16240	return iter.page.Values()[iter.i]
16241}
16242
16243// Creates a new instance of the ListVirtualWANsResultIterator type.
16244func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
16245	return ListVirtualWANsResultIterator{page: page}
16246}
16247
16248// IsEmpty returns true if the ListResult contains no values.
16249func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
16250	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
16251}
16252
16253// listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
16254// It returns nil if no more results exist.
16255func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
16256	if lvwnr.NextLink == nil || len(to.String(lvwnr.NextLink)) < 1 {
16257		return nil, nil
16258	}
16259	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16260		autorest.AsJSON(),
16261		autorest.AsGet(),
16262		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
16263}
16264
16265// ListVirtualWANsResultPage contains a page of VirtualWAN values.
16266type ListVirtualWANsResultPage struct {
16267	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
16268	lvwnr ListVirtualWANsResult
16269}
16270
16271// NextWithContext advances to the next page of values.  If there was an error making
16272// the request the page does not advance and the error is returned.
16273func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
16274	if tracing.IsEnabled() {
16275		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
16276		defer func() {
16277			sc := -1
16278			if page.Response().Response.Response != nil {
16279				sc = page.Response().Response.Response.StatusCode
16280			}
16281			tracing.EndSpan(ctx, sc, err)
16282		}()
16283	}
16284	next, err := page.fn(ctx, page.lvwnr)
16285	if err != nil {
16286		return err
16287	}
16288	page.lvwnr = next
16289	return nil
16290}
16291
16292// Next advances to the next page of values.  If there was an error making
16293// the request the page does not advance and the error is returned.
16294// Deprecated: Use NextWithContext() instead.
16295func (page *ListVirtualWANsResultPage) Next() error {
16296	return page.NextWithContext(context.Background())
16297}
16298
16299// NotDone returns true if the page enumeration should be started or is not yet complete.
16300func (page ListVirtualWANsResultPage) NotDone() bool {
16301	return !page.lvwnr.IsEmpty()
16302}
16303
16304// Response returns the raw server response from the last page request.
16305func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
16306	return page.lvwnr
16307}
16308
16309// Values returns the slice of values for the current page or nil if there are no values.
16310func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
16311	if page.lvwnr.IsEmpty() {
16312		return nil
16313	}
16314	return *page.lvwnr.Value
16315}
16316
16317// Creates a new instance of the ListVirtualWANsResultPage type.
16318func NewListVirtualWANsResultPage(getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
16319	return ListVirtualWANsResultPage{fn: getNextPage}
16320}
16321
16322// ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
16323// It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
16324type ListVpnConnectionsResult struct {
16325	autorest.Response `json:"-"`
16326	// Value - List of Vpn Connections.
16327	Value *[]VpnConnection `json:"value,omitempty"`
16328	// NextLink - URL to get the next set of operation list results if there are any.
16329	NextLink *string `json:"nextLink,omitempty"`
16330}
16331
16332// ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
16333type ListVpnConnectionsResultIterator struct {
16334	i    int
16335	page ListVpnConnectionsResultPage
16336}
16337
16338// NextWithContext advances to the next value.  If there was an error making
16339// the request the iterator does not advance and the error is returned.
16340func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
16341	if tracing.IsEnabled() {
16342		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
16343		defer func() {
16344			sc := -1
16345			if iter.Response().Response.Response != nil {
16346				sc = iter.Response().Response.Response.StatusCode
16347			}
16348			tracing.EndSpan(ctx, sc, err)
16349		}()
16350	}
16351	iter.i++
16352	if iter.i < len(iter.page.Values()) {
16353		return nil
16354	}
16355	err = iter.page.NextWithContext(ctx)
16356	if err != nil {
16357		iter.i--
16358		return err
16359	}
16360	iter.i = 0
16361	return nil
16362}
16363
16364// Next advances to the next value.  If there was an error making
16365// the request the iterator does not advance and the error is returned.
16366// Deprecated: Use NextWithContext() instead.
16367func (iter *ListVpnConnectionsResultIterator) Next() error {
16368	return iter.NextWithContext(context.Background())
16369}
16370
16371// NotDone returns true if the enumeration should be started or is not yet complete.
16372func (iter ListVpnConnectionsResultIterator) NotDone() bool {
16373	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16374}
16375
16376// Response returns the raw server response from the last page request.
16377func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
16378	return iter.page.Response()
16379}
16380
16381// Value returns the current value or a zero-initialized value if the
16382// iterator has advanced beyond the end of the collection.
16383func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
16384	if !iter.page.NotDone() {
16385		return VpnConnection{}
16386	}
16387	return iter.page.Values()[iter.i]
16388}
16389
16390// Creates a new instance of the ListVpnConnectionsResultIterator type.
16391func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
16392	return ListVpnConnectionsResultIterator{page: page}
16393}
16394
16395// IsEmpty returns true if the ListResult contains no values.
16396func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
16397	return lvcr.Value == nil || len(*lvcr.Value) == 0
16398}
16399
16400// listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
16401// It returns nil if no more results exist.
16402func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
16403	if lvcr.NextLink == nil || len(to.String(lvcr.NextLink)) < 1 {
16404		return nil, nil
16405	}
16406	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16407		autorest.AsJSON(),
16408		autorest.AsGet(),
16409		autorest.WithBaseURL(to.String(lvcr.NextLink)))
16410}
16411
16412// ListVpnConnectionsResultPage contains a page of VpnConnection values.
16413type ListVpnConnectionsResultPage struct {
16414	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
16415	lvcr ListVpnConnectionsResult
16416}
16417
16418// NextWithContext advances to the next page of values.  If there was an error making
16419// the request the page does not advance and the error is returned.
16420func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
16421	if tracing.IsEnabled() {
16422		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
16423		defer func() {
16424			sc := -1
16425			if page.Response().Response.Response != nil {
16426				sc = page.Response().Response.Response.StatusCode
16427			}
16428			tracing.EndSpan(ctx, sc, err)
16429		}()
16430	}
16431	next, err := page.fn(ctx, page.lvcr)
16432	if err != nil {
16433		return err
16434	}
16435	page.lvcr = next
16436	return nil
16437}
16438
16439// Next advances to the next page of values.  If there was an error making
16440// the request the page does not advance and the error is returned.
16441// Deprecated: Use NextWithContext() instead.
16442func (page *ListVpnConnectionsResultPage) Next() error {
16443	return page.NextWithContext(context.Background())
16444}
16445
16446// NotDone returns true if the page enumeration should be started or is not yet complete.
16447func (page ListVpnConnectionsResultPage) NotDone() bool {
16448	return !page.lvcr.IsEmpty()
16449}
16450
16451// Response returns the raw server response from the last page request.
16452func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
16453	return page.lvcr
16454}
16455
16456// Values returns the slice of values for the current page or nil if there are no values.
16457func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
16458	if page.lvcr.IsEmpty() {
16459		return nil
16460	}
16461	return *page.lvcr.Value
16462}
16463
16464// Creates a new instance of the ListVpnConnectionsResultPage type.
16465func NewListVpnConnectionsResultPage(getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
16466	return ListVpnConnectionsResultPage{fn: getNextPage}
16467}
16468
16469// ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
16470// URL nextLink to get the next set of results.
16471type ListVpnGatewaysResult struct {
16472	autorest.Response `json:"-"`
16473	// Value - List of VpnGateways.
16474	Value *[]VpnGateway `json:"value,omitempty"`
16475	// NextLink - URL to get the next set of operation list results if there are any.
16476	NextLink *string `json:"nextLink,omitempty"`
16477}
16478
16479// ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
16480type ListVpnGatewaysResultIterator struct {
16481	i    int
16482	page ListVpnGatewaysResultPage
16483}
16484
16485// NextWithContext advances to the next value.  If there was an error making
16486// the request the iterator does not advance and the error is returned.
16487func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
16488	if tracing.IsEnabled() {
16489		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
16490		defer func() {
16491			sc := -1
16492			if iter.Response().Response.Response != nil {
16493				sc = iter.Response().Response.Response.StatusCode
16494			}
16495			tracing.EndSpan(ctx, sc, err)
16496		}()
16497	}
16498	iter.i++
16499	if iter.i < len(iter.page.Values()) {
16500		return nil
16501	}
16502	err = iter.page.NextWithContext(ctx)
16503	if err != nil {
16504		iter.i--
16505		return err
16506	}
16507	iter.i = 0
16508	return nil
16509}
16510
16511// Next advances to the next value.  If there was an error making
16512// the request the iterator does not advance and the error is returned.
16513// Deprecated: Use NextWithContext() instead.
16514func (iter *ListVpnGatewaysResultIterator) Next() error {
16515	return iter.NextWithContext(context.Background())
16516}
16517
16518// NotDone returns true if the enumeration should be started or is not yet complete.
16519func (iter ListVpnGatewaysResultIterator) NotDone() bool {
16520	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16521}
16522
16523// Response returns the raw server response from the last page request.
16524func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
16525	return iter.page.Response()
16526}
16527
16528// Value returns the current value or a zero-initialized value if the
16529// iterator has advanced beyond the end of the collection.
16530func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
16531	if !iter.page.NotDone() {
16532		return VpnGateway{}
16533	}
16534	return iter.page.Values()[iter.i]
16535}
16536
16537// Creates a new instance of the ListVpnGatewaysResultIterator type.
16538func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
16539	return ListVpnGatewaysResultIterator{page: page}
16540}
16541
16542// IsEmpty returns true if the ListResult contains no values.
16543func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
16544	return lvgr.Value == nil || len(*lvgr.Value) == 0
16545}
16546
16547// listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
16548// It returns nil if no more results exist.
16549func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
16550	if lvgr.NextLink == nil || len(to.String(lvgr.NextLink)) < 1 {
16551		return nil, nil
16552	}
16553	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16554		autorest.AsJSON(),
16555		autorest.AsGet(),
16556		autorest.WithBaseURL(to.String(lvgr.NextLink)))
16557}
16558
16559// ListVpnGatewaysResultPage contains a page of VpnGateway values.
16560type ListVpnGatewaysResultPage struct {
16561	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
16562	lvgr ListVpnGatewaysResult
16563}
16564
16565// NextWithContext advances to the next page of values.  If there was an error making
16566// the request the page does not advance and the error is returned.
16567func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
16568	if tracing.IsEnabled() {
16569		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
16570		defer func() {
16571			sc := -1
16572			if page.Response().Response.Response != nil {
16573				sc = page.Response().Response.Response.StatusCode
16574			}
16575			tracing.EndSpan(ctx, sc, err)
16576		}()
16577	}
16578	next, err := page.fn(ctx, page.lvgr)
16579	if err != nil {
16580		return err
16581	}
16582	page.lvgr = next
16583	return nil
16584}
16585
16586// Next advances to the next page of values.  If there was an error making
16587// the request the page does not advance and the error is returned.
16588// Deprecated: Use NextWithContext() instead.
16589func (page *ListVpnGatewaysResultPage) Next() error {
16590	return page.NextWithContext(context.Background())
16591}
16592
16593// NotDone returns true if the page enumeration should be started or is not yet complete.
16594func (page ListVpnGatewaysResultPage) NotDone() bool {
16595	return !page.lvgr.IsEmpty()
16596}
16597
16598// Response returns the raw server response from the last page request.
16599func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
16600	return page.lvgr
16601}
16602
16603// Values returns the slice of values for the current page or nil if there are no values.
16604func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
16605	if page.lvgr.IsEmpty() {
16606		return nil
16607	}
16608	return *page.lvgr.Value
16609}
16610
16611// Creates a new instance of the ListVpnGatewaysResultPage type.
16612func NewListVpnGatewaysResultPage(getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
16613	return ListVpnGatewaysResultPage{fn: getNextPage}
16614}
16615
16616// ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
16617// nextLink to get the next set of results.
16618type ListVpnSitesResult struct {
16619	autorest.Response `json:"-"`
16620	// Value - List of VpnSites.
16621	Value *[]VpnSite `json:"value,omitempty"`
16622	// NextLink - URL to get the next set of operation list results if there are any.
16623	NextLink *string `json:"nextLink,omitempty"`
16624}
16625
16626// ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
16627type ListVpnSitesResultIterator struct {
16628	i    int
16629	page ListVpnSitesResultPage
16630}
16631
16632// NextWithContext advances to the next value.  If there was an error making
16633// the request the iterator does not advance and the error is returned.
16634func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
16635	if tracing.IsEnabled() {
16636		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
16637		defer func() {
16638			sc := -1
16639			if iter.Response().Response.Response != nil {
16640				sc = iter.Response().Response.Response.StatusCode
16641			}
16642			tracing.EndSpan(ctx, sc, err)
16643		}()
16644	}
16645	iter.i++
16646	if iter.i < len(iter.page.Values()) {
16647		return nil
16648	}
16649	err = iter.page.NextWithContext(ctx)
16650	if err != nil {
16651		iter.i--
16652		return err
16653	}
16654	iter.i = 0
16655	return nil
16656}
16657
16658// Next advances to the next value.  If there was an error making
16659// the request the iterator does not advance and the error is returned.
16660// Deprecated: Use NextWithContext() instead.
16661func (iter *ListVpnSitesResultIterator) Next() error {
16662	return iter.NextWithContext(context.Background())
16663}
16664
16665// NotDone returns true if the enumeration should be started or is not yet complete.
16666func (iter ListVpnSitesResultIterator) NotDone() bool {
16667	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16668}
16669
16670// Response returns the raw server response from the last page request.
16671func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
16672	return iter.page.Response()
16673}
16674
16675// Value returns the current value or a zero-initialized value if the
16676// iterator has advanced beyond the end of the collection.
16677func (iter ListVpnSitesResultIterator) Value() VpnSite {
16678	if !iter.page.NotDone() {
16679		return VpnSite{}
16680	}
16681	return iter.page.Values()[iter.i]
16682}
16683
16684// Creates a new instance of the ListVpnSitesResultIterator type.
16685func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
16686	return ListVpnSitesResultIterator{page: page}
16687}
16688
16689// IsEmpty returns true if the ListResult contains no values.
16690func (lvsr ListVpnSitesResult) IsEmpty() bool {
16691	return lvsr.Value == nil || len(*lvsr.Value) == 0
16692}
16693
16694// listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
16695// It returns nil if no more results exist.
16696func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
16697	if lvsr.NextLink == nil || len(to.String(lvsr.NextLink)) < 1 {
16698		return nil, nil
16699	}
16700	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16701		autorest.AsJSON(),
16702		autorest.AsGet(),
16703		autorest.WithBaseURL(to.String(lvsr.NextLink)))
16704}
16705
16706// ListVpnSitesResultPage contains a page of VpnSite values.
16707type ListVpnSitesResultPage struct {
16708	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
16709	lvsr ListVpnSitesResult
16710}
16711
16712// NextWithContext advances to the next page of values.  If there was an error making
16713// the request the page does not advance and the error is returned.
16714func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
16715	if tracing.IsEnabled() {
16716		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
16717		defer func() {
16718			sc := -1
16719			if page.Response().Response.Response != nil {
16720				sc = page.Response().Response.Response.StatusCode
16721			}
16722			tracing.EndSpan(ctx, sc, err)
16723		}()
16724	}
16725	next, err := page.fn(ctx, page.lvsr)
16726	if err != nil {
16727		return err
16728	}
16729	page.lvsr = next
16730	return nil
16731}
16732
16733// Next advances to the next page of values.  If there was an error making
16734// the request the page does not advance and the error is returned.
16735// Deprecated: Use NextWithContext() instead.
16736func (page *ListVpnSitesResultPage) Next() error {
16737	return page.NextWithContext(context.Background())
16738}
16739
16740// NotDone returns true if the page enumeration should be started or is not yet complete.
16741func (page ListVpnSitesResultPage) NotDone() bool {
16742	return !page.lvsr.IsEmpty()
16743}
16744
16745// Response returns the raw server response from the last page request.
16746func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
16747	return page.lvsr
16748}
16749
16750// Values returns the slice of values for the current page or nil if there are no values.
16751func (page ListVpnSitesResultPage) Values() []VpnSite {
16752	if page.lvsr.IsEmpty() {
16753		return nil
16754	}
16755	return *page.lvsr.Value
16756}
16757
16758// Creates a new instance of the ListVpnSitesResultPage type.
16759func NewListVpnSitesResultPage(getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
16760	return ListVpnSitesResultPage{fn: getNextPage}
16761}
16762
16763// LoadBalancer loadBalancer resource.
16764type LoadBalancer struct {
16765	autorest.Response `json:"-"`
16766	// Sku - The load balancer SKU.
16767	Sku *LoadBalancerSku `json:"sku,omitempty"`
16768	// LoadBalancerPropertiesFormat - Properties of load balancer.
16769	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
16770	// Etag - A unique read-only string that changes whenever the resource is updated.
16771	Etag *string `json:"etag,omitempty"`
16772	// ID - Resource ID.
16773	ID *string `json:"id,omitempty"`
16774	// Name - READ-ONLY; Resource name.
16775	Name *string `json:"name,omitempty"`
16776	// Type - READ-ONLY; Resource type.
16777	Type *string `json:"type,omitempty"`
16778	// Location - Resource location.
16779	Location *string `json:"location,omitempty"`
16780	// Tags - Resource tags.
16781	Tags map[string]*string `json:"tags"`
16782}
16783
16784// MarshalJSON is the custom marshaler for LoadBalancer.
16785func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
16786	objectMap := make(map[string]interface{})
16787	if lb.Sku != nil {
16788		objectMap["sku"] = lb.Sku
16789	}
16790	if lb.LoadBalancerPropertiesFormat != nil {
16791		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
16792	}
16793	if lb.Etag != nil {
16794		objectMap["etag"] = lb.Etag
16795	}
16796	if lb.ID != nil {
16797		objectMap["id"] = lb.ID
16798	}
16799	if lb.Location != nil {
16800		objectMap["location"] = lb.Location
16801	}
16802	if lb.Tags != nil {
16803		objectMap["tags"] = lb.Tags
16804	}
16805	return json.Marshal(objectMap)
16806}
16807
16808// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
16809func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
16810	var m map[string]*json.RawMessage
16811	err := json.Unmarshal(body, &m)
16812	if err != nil {
16813		return err
16814	}
16815	for k, v := range m {
16816		switch k {
16817		case "sku":
16818			if v != nil {
16819				var sku LoadBalancerSku
16820				err = json.Unmarshal(*v, &sku)
16821				if err != nil {
16822					return err
16823				}
16824				lb.Sku = &sku
16825			}
16826		case "properties":
16827			if v != nil {
16828				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
16829				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
16830				if err != nil {
16831					return err
16832				}
16833				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
16834			}
16835		case "etag":
16836			if v != nil {
16837				var etag string
16838				err = json.Unmarshal(*v, &etag)
16839				if err != nil {
16840					return err
16841				}
16842				lb.Etag = &etag
16843			}
16844		case "id":
16845			if v != nil {
16846				var ID string
16847				err = json.Unmarshal(*v, &ID)
16848				if err != nil {
16849					return err
16850				}
16851				lb.ID = &ID
16852			}
16853		case "name":
16854			if v != nil {
16855				var name string
16856				err = json.Unmarshal(*v, &name)
16857				if err != nil {
16858					return err
16859				}
16860				lb.Name = &name
16861			}
16862		case "type":
16863			if v != nil {
16864				var typeVar string
16865				err = json.Unmarshal(*v, &typeVar)
16866				if err != nil {
16867					return err
16868				}
16869				lb.Type = &typeVar
16870			}
16871		case "location":
16872			if v != nil {
16873				var location string
16874				err = json.Unmarshal(*v, &location)
16875				if err != nil {
16876					return err
16877				}
16878				lb.Location = &location
16879			}
16880		case "tags":
16881			if v != nil {
16882				var tags map[string]*string
16883				err = json.Unmarshal(*v, &tags)
16884				if err != nil {
16885					return err
16886				}
16887				lb.Tags = tags
16888			}
16889		}
16890	}
16891
16892	return nil
16893}
16894
16895// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
16896type LoadBalancerBackendAddressPoolListResult struct {
16897	autorest.Response `json:"-"`
16898	// Value - A list of backend address pools in a load balancer.
16899	Value *[]BackendAddressPool `json:"value,omitempty"`
16900	// NextLink - READ-ONLY; The URL to get the next set of results.
16901	NextLink *string `json:"nextLink,omitempty"`
16902}
16903
16904// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
16905// BackendAddressPool values.
16906type LoadBalancerBackendAddressPoolListResultIterator struct {
16907	i    int
16908	page LoadBalancerBackendAddressPoolListResultPage
16909}
16910
16911// NextWithContext advances to the next value.  If there was an error making
16912// the request the iterator does not advance and the error is returned.
16913func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
16914	if tracing.IsEnabled() {
16915		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
16916		defer func() {
16917			sc := -1
16918			if iter.Response().Response.Response != nil {
16919				sc = iter.Response().Response.Response.StatusCode
16920			}
16921			tracing.EndSpan(ctx, sc, err)
16922		}()
16923	}
16924	iter.i++
16925	if iter.i < len(iter.page.Values()) {
16926		return nil
16927	}
16928	err = iter.page.NextWithContext(ctx)
16929	if err != nil {
16930		iter.i--
16931		return err
16932	}
16933	iter.i = 0
16934	return nil
16935}
16936
16937// Next advances to the next value.  If there was an error making
16938// the request the iterator does not advance and the error is returned.
16939// Deprecated: Use NextWithContext() instead.
16940func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
16941	return iter.NextWithContext(context.Background())
16942}
16943
16944// NotDone returns true if the enumeration should be started or is not yet complete.
16945func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
16946	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16947}
16948
16949// Response returns the raw server response from the last page request.
16950func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
16951	return iter.page.Response()
16952}
16953
16954// Value returns the current value or a zero-initialized value if the
16955// iterator has advanced beyond the end of the collection.
16956func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
16957	if !iter.page.NotDone() {
16958		return BackendAddressPool{}
16959	}
16960	return iter.page.Values()[iter.i]
16961}
16962
16963// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
16964func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
16965	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
16966}
16967
16968// IsEmpty returns true if the ListResult contains no values.
16969func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
16970	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
16971}
16972
16973// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
16974// It returns nil if no more results exist.
16975func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
16976	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
16977		return nil, nil
16978	}
16979	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16980		autorest.AsJSON(),
16981		autorest.AsGet(),
16982		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
16983}
16984
16985// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
16986type LoadBalancerBackendAddressPoolListResultPage struct {
16987	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
16988	lbbaplr LoadBalancerBackendAddressPoolListResult
16989}
16990
16991// NextWithContext advances to the next page of values.  If there was an error making
16992// the request the page does not advance and the error is returned.
16993func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
16994	if tracing.IsEnabled() {
16995		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
16996		defer func() {
16997			sc := -1
16998			if page.Response().Response.Response != nil {
16999				sc = page.Response().Response.Response.StatusCode
17000			}
17001			tracing.EndSpan(ctx, sc, err)
17002		}()
17003	}
17004	next, err := page.fn(ctx, page.lbbaplr)
17005	if err != nil {
17006		return err
17007	}
17008	page.lbbaplr = next
17009	return nil
17010}
17011
17012// Next advances to the next page of values.  If there was an error making
17013// the request the page does not advance and the error is returned.
17014// Deprecated: Use NextWithContext() instead.
17015func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
17016	return page.NextWithContext(context.Background())
17017}
17018
17019// NotDone returns true if the page enumeration should be started or is not yet complete.
17020func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
17021	return !page.lbbaplr.IsEmpty()
17022}
17023
17024// Response returns the raw server response from the last page request.
17025func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
17026	return page.lbbaplr
17027}
17028
17029// Values returns the slice of values for the current page or nil if there are no values.
17030func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
17031	if page.lbbaplr.IsEmpty() {
17032		return nil
17033	}
17034	return *page.lbbaplr.Value
17035}
17036
17037// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
17038func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
17039	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
17040}
17041
17042// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
17043type LoadBalancerFrontendIPConfigurationListResult struct {
17044	autorest.Response `json:"-"`
17045	// Value - A list of frontend IP configurations in a load balancer.
17046	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
17047	// NextLink - READ-ONLY; The URL to get the next set of results.
17048	NextLink *string `json:"nextLink,omitempty"`
17049}
17050
17051// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
17052// FrontendIPConfiguration values.
17053type LoadBalancerFrontendIPConfigurationListResultIterator struct {
17054	i    int
17055	page LoadBalancerFrontendIPConfigurationListResultPage
17056}
17057
17058// NextWithContext advances to the next value.  If there was an error making
17059// the request the iterator does not advance and the error is returned.
17060func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
17061	if tracing.IsEnabled() {
17062		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
17063		defer func() {
17064			sc := -1
17065			if iter.Response().Response.Response != nil {
17066				sc = iter.Response().Response.Response.StatusCode
17067			}
17068			tracing.EndSpan(ctx, sc, err)
17069		}()
17070	}
17071	iter.i++
17072	if iter.i < len(iter.page.Values()) {
17073		return nil
17074	}
17075	err = iter.page.NextWithContext(ctx)
17076	if err != nil {
17077		iter.i--
17078		return err
17079	}
17080	iter.i = 0
17081	return nil
17082}
17083
17084// Next advances to the next value.  If there was an error making
17085// the request the iterator does not advance and the error is returned.
17086// Deprecated: Use NextWithContext() instead.
17087func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
17088	return iter.NextWithContext(context.Background())
17089}
17090
17091// NotDone returns true if the enumeration should be started or is not yet complete.
17092func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
17093	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17094}
17095
17096// Response returns the raw server response from the last page request.
17097func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
17098	return iter.page.Response()
17099}
17100
17101// Value returns the current value or a zero-initialized value if the
17102// iterator has advanced beyond the end of the collection.
17103func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
17104	if !iter.page.NotDone() {
17105		return FrontendIPConfiguration{}
17106	}
17107	return iter.page.Values()[iter.i]
17108}
17109
17110// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
17111func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
17112	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
17113}
17114
17115// IsEmpty returns true if the ListResult contains no values.
17116func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
17117	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
17118}
17119
17120// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
17121// It returns nil if no more results exist.
17122func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
17123	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
17124		return nil, nil
17125	}
17126	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17127		autorest.AsJSON(),
17128		autorest.AsGet(),
17129		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
17130}
17131
17132// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
17133type LoadBalancerFrontendIPConfigurationListResultPage struct {
17134	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
17135	lbficlr LoadBalancerFrontendIPConfigurationListResult
17136}
17137
17138// NextWithContext advances to the next page of values.  If there was an error making
17139// the request the page does not advance and the error is returned.
17140func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
17141	if tracing.IsEnabled() {
17142		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
17143		defer func() {
17144			sc := -1
17145			if page.Response().Response.Response != nil {
17146				sc = page.Response().Response.Response.StatusCode
17147			}
17148			tracing.EndSpan(ctx, sc, err)
17149		}()
17150	}
17151	next, err := page.fn(ctx, page.lbficlr)
17152	if err != nil {
17153		return err
17154	}
17155	page.lbficlr = next
17156	return nil
17157}
17158
17159// Next advances to the next page of values.  If there was an error making
17160// the request the page does not advance and the error is returned.
17161// Deprecated: Use NextWithContext() instead.
17162func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
17163	return page.NextWithContext(context.Background())
17164}
17165
17166// NotDone returns true if the page enumeration should be started or is not yet complete.
17167func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
17168	return !page.lbficlr.IsEmpty()
17169}
17170
17171// Response returns the raw server response from the last page request.
17172func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
17173	return page.lbficlr
17174}
17175
17176// Values returns the slice of values for the current page or nil if there are no values.
17177func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
17178	if page.lbficlr.IsEmpty() {
17179		return nil
17180	}
17181	return *page.lbficlr.Value
17182}
17183
17184// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
17185func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
17186	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
17187}
17188
17189// LoadBalancerListResult response for ListLoadBalancers API service call.
17190type LoadBalancerListResult struct {
17191	autorest.Response `json:"-"`
17192	// Value - A list of load balancers in a resource group.
17193	Value *[]LoadBalancer `json:"value,omitempty"`
17194	// NextLink - READ-ONLY; The URL to get the next set of results.
17195	NextLink *string `json:"nextLink,omitempty"`
17196}
17197
17198// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
17199type LoadBalancerListResultIterator struct {
17200	i    int
17201	page LoadBalancerListResultPage
17202}
17203
17204// NextWithContext advances to the next value.  If there was an error making
17205// the request the iterator does not advance and the error is returned.
17206func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
17207	if tracing.IsEnabled() {
17208		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
17209		defer func() {
17210			sc := -1
17211			if iter.Response().Response.Response != nil {
17212				sc = iter.Response().Response.Response.StatusCode
17213			}
17214			tracing.EndSpan(ctx, sc, err)
17215		}()
17216	}
17217	iter.i++
17218	if iter.i < len(iter.page.Values()) {
17219		return nil
17220	}
17221	err = iter.page.NextWithContext(ctx)
17222	if err != nil {
17223		iter.i--
17224		return err
17225	}
17226	iter.i = 0
17227	return nil
17228}
17229
17230// Next advances to the next value.  If there was an error making
17231// the request the iterator does not advance and the error is returned.
17232// Deprecated: Use NextWithContext() instead.
17233func (iter *LoadBalancerListResultIterator) Next() error {
17234	return iter.NextWithContext(context.Background())
17235}
17236
17237// NotDone returns true if the enumeration should be started or is not yet complete.
17238func (iter LoadBalancerListResultIterator) NotDone() bool {
17239	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17240}
17241
17242// Response returns the raw server response from the last page request.
17243func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
17244	return iter.page.Response()
17245}
17246
17247// Value returns the current value or a zero-initialized value if the
17248// iterator has advanced beyond the end of the collection.
17249func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
17250	if !iter.page.NotDone() {
17251		return LoadBalancer{}
17252	}
17253	return iter.page.Values()[iter.i]
17254}
17255
17256// Creates a new instance of the LoadBalancerListResultIterator type.
17257func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
17258	return LoadBalancerListResultIterator{page: page}
17259}
17260
17261// IsEmpty returns true if the ListResult contains no values.
17262func (lblr LoadBalancerListResult) IsEmpty() bool {
17263	return lblr.Value == nil || len(*lblr.Value) == 0
17264}
17265
17266// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
17267// It returns nil if no more results exist.
17268func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
17269	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
17270		return nil, nil
17271	}
17272	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17273		autorest.AsJSON(),
17274		autorest.AsGet(),
17275		autorest.WithBaseURL(to.String(lblr.NextLink)))
17276}
17277
17278// LoadBalancerListResultPage contains a page of LoadBalancer values.
17279type LoadBalancerListResultPage struct {
17280	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
17281	lblr LoadBalancerListResult
17282}
17283
17284// NextWithContext advances to the next page of values.  If there was an error making
17285// the request the page does not advance and the error is returned.
17286func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
17287	if tracing.IsEnabled() {
17288		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
17289		defer func() {
17290			sc := -1
17291			if page.Response().Response.Response != nil {
17292				sc = page.Response().Response.Response.StatusCode
17293			}
17294			tracing.EndSpan(ctx, sc, err)
17295		}()
17296	}
17297	next, err := page.fn(ctx, page.lblr)
17298	if err != nil {
17299		return err
17300	}
17301	page.lblr = next
17302	return nil
17303}
17304
17305// Next advances to the next page of values.  If there was an error making
17306// the request the page does not advance and the error is returned.
17307// Deprecated: Use NextWithContext() instead.
17308func (page *LoadBalancerListResultPage) Next() error {
17309	return page.NextWithContext(context.Background())
17310}
17311
17312// NotDone returns true if the page enumeration should be started or is not yet complete.
17313func (page LoadBalancerListResultPage) NotDone() bool {
17314	return !page.lblr.IsEmpty()
17315}
17316
17317// Response returns the raw server response from the last page request.
17318func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
17319	return page.lblr
17320}
17321
17322// Values returns the slice of values for the current page or nil if there are no values.
17323func (page LoadBalancerListResultPage) Values() []LoadBalancer {
17324	if page.lblr.IsEmpty() {
17325		return nil
17326	}
17327	return *page.lblr.Value
17328}
17329
17330// Creates a new instance of the LoadBalancerListResultPage type.
17331func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
17332	return LoadBalancerListResultPage{fn: getNextPage}
17333}
17334
17335// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
17336type LoadBalancerLoadBalancingRuleListResult struct {
17337	autorest.Response `json:"-"`
17338	// Value - A list of load balancing rules in a load balancer.
17339	Value *[]LoadBalancingRule `json:"value,omitempty"`
17340	// NextLink - READ-ONLY; The URL to get the next set of results.
17341	NextLink *string `json:"nextLink,omitempty"`
17342}
17343
17344// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
17345// LoadBalancingRule values.
17346type LoadBalancerLoadBalancingRuleListResultIterator struct {
17347	i    int
17348	page LoadBalancerLoadBalancingRuleListResultPage
17349}
17350
17351// NextWithContext advances to the next value.  If there was an error making
17352// the request the iterator does not advance and the error is returned.
17353func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
17354	if tracing.IsEnabled() {
17355		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
17356		defer func() {
17357			sc := -1
17358			if iter.Response().Response.Response != nil {
17359				sc = iter.Response().Response.Response.StatusCode
17360			}
17361			tracing.EndSpan(ctx, sc, err)
17362		}()
17363	}
17364	iter.i++
17365	if iter.i < len(iter.page.Values()) {
17366		return nil
17367	}
17368	err = iter.page.NextWithContext(ctx)
17369	if err != nil {
17370		iter.i--
17371		return err
17372	}
17373	iter.i = 0
17374	return nil
17375}
17376
17377// Next advances to the next value.  If there was an error making
17378// the request the iterator does not advance and the error is returned.
17379// Deprecated: Use NextWithContext() instead.
17380func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
17381	return iter.NextWithContext(context.Background())
17382}
17383
17384// NotDone returns true if the enumeration should be started or is not yet complete.
17385func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
17386	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17387}
17388
17389// Response returns the raw server response from the last page request.
17390func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
17391	return iter.page.Response()
17392}
17393
17394// Value returns the current value or a zero-initialized value if the
17395// iterator has advanced beyond the end of the collection.
17396func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
17397	if !iter.page.NotDone() {
17398		return LoadBalancingRule{}
17399	}
17400	return iter.page.Values()[iter.i]
17401}
17402
17403// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
17404func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
17405	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
17406}
17407
17408// IsEmpty returns true if the ListResult contains no values.
17409func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
17410	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
17411}
17412
17413// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
17414// It returns nil if no more results exist.
17415func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
17416	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
17417		return nil, nil
17418	}
17419	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17420		autorest.AsJSON(),
17421		autorest.AsGet(),
17422		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
17423}
17424
17425// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
17426type LoadBalancerLoadBalancingRuleListResultPage struct {
17427	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
17428	lblbrlr LoadBalancerLoadBalancingRuleListResult
17429}
17430
17431// NextWithContext advances to the next page of values.  If there was an error making
17432// the request the page does not advance and the error is returned.
17433func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
17434	if tracing.IsEnabled() {
17435		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
17436		defer func() {
17437			sc := -1
17438			if page.Response().Response.Response != nil {
17439				sc = page.Response().Response.Response.StatusCode
17440			}
17441			tracing.EndSpan(ctx, sc, err)
17442		}()
17443	}
17444	next, err := page.fn(ctx, page.lblbrlr)
17445	if err != nil {
17446		return err
17447	}
17448	page.lblbrlr = next
17449	return nil
17450}
17451
17452// Next advances to the next page of values.  If there was an error making
17453// the request the page does not advance and the error is returned.
17454// Deprecated: Use NextWithContext() instead.
17455func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
17456	return page.NextWithContext(context.Background())
17457}
17458
17459// NotDone returns true if the page enumeration should be started or is not yet complete.
17460func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
17461	return !page.lblbrlr.IsEmpty()
17462}
17463
17464// Response returns the raw server response from the last page request.
17465func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
17466	return page.lblbrlr
17467}
17468
17469// Values returns the slice of values for the current page or nil if there are no values.
17470func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
17471	if page.lblbrlr.IsEmpty() {
17472		return nil
17473	}
17474	return *page.lblbrlr.Value
17475}
17476
17477// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
17478func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
17479	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
17480}
17481
17482// LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
17483type LoadBalancerOutboundRuleListResult struct {
17484	autorest.Response `json:"-"`
17485	// Value - A list of outbound rules in a load balancer.
17486	Value *[]OutboundRule `json:"value,omitempty"`
17487	// NextLink - READ-ONLY; The URL to get the next set of results.
17488	NextLink *string `json:"nextLink,omitempty"`
17489}
17490
17491// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
17492type LoadBalancerOutboundRuleListResultIterator struct {
17493	i    int
17494	page LoadBalancerOutboundRuleListResultPage
17495}
17496
17497// NextWithContext advances to the next value.  If there was an error making
17498// the request the iterator does not advance and the error is returned.
17499func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
17500	if tracing.IsEnabled() {
17501		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
17502		defer func() {
17503			sc := -1
17504			if iter.Response().Response.Response != nil {
17505				sc = iter.Response().Response.Response.StatusCode
17506			}
17507			tracing.EndSpan(ctx, sc, err)
17508		}()
17509	}
17510	iter.i++
17511	if iter.i < len(iter.page.Values()) {
17512		return nil
17513	}
17514	err = iter.page.NextWithContext(ctx)
17515	if err != nil {
17516		iter.i--
17517		return err
17518	}
17519	iter.i = 0
17520	return nil
17521}
17522
17523// Next advances to the next value.  If there was an error making
17524// the request the iterator does not advance and the error is returned.
17525// Deprecated: Use NextWithContext() instead.
17526func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
17527	return iter.NextWithContext(context.Background())
17528}
17529
17530// NotDone returns true if the enumeration should be started or is not yet complete.
17531func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
17532	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17533}
17534
17535// Response returns the raw server response from the last page request.
17536func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
17537	return iter.page.Response()
17538}
17539
17540// Value returns the current value or a zero-initialized value if the
17541// iterator has advanced beyond the end of the collection.
17542func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
17543	if !iter.page.NotDone() {
17544		return OutboundRule{}
17545	}
17546	return iter.page.Values()[iter.i]
17547}
17548
17549// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
17550func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
17551	return LoadBalancerOutboundRuleListResultIterator{page: page}
17552}
17553
17554// IsEmpty returns true if the ListResult contains no values.
17555func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
17556	return lborlr.Value == nil || len(*lborlr.Value) == 0
17557}
17558
17559// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
17560// It returns nil if no more results exist.
17561func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
17562	if lborlr.NextLink == nil || len(to.String(lborlr.NextLink)) < 1 {
17563		return nil, nil
17564	}
17565	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17566		autorest.AsJSON(),
17567		autorest.AsGet(),
17568		autorest.WithBaseURL(to.String(lborlr.NextLink)))
17569}
17570
17571// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
17572type LoadBalancerOutboundRuleListResultPage struct {
17573	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
17574	lborlr LoadBalancerOutboundRuleListResult
17575}
17576
17577// NextWithContext advances to the next page of values.  If there was an error making
17578// the request the page does not advance and the error is returned.
17579func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
17580	if tracing.IsEnabled() {
17581		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
17582		defer func() {
17583			sc := -1
17584			if page.Response().Response.Response != nil {
17585				sc = page.Response().Response.Response.StatusCode
17586			}
17587			tracing.EndSpan(ctx, sc, err)
17588		}()
17589	}
17590	next, err := page.fn(ctx, page.lborlr)
17591	if err != nil {
17592		return err
17593	}
17594	page.lborlr = next
17595	return nil
17596}
17597
17598// Next advances to the next page of values.  If there was an error making
17599// the request the page does not advance and the error is returned.
17600// Deprecated: Use NextWithContext() instead.
17601func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
17602	return page.NextWithContext(context.Background())
17603}
17604
17605// NotDone returns true if the page enumeration should be started or is not yet complete.
17606func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
17607	return !page.lborlr.IsEmpty()
17608}
17609
17610// Response returns the raw server response from the last page request.
17611func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
17612	return page.lborlr
17613}
17614
17615// Values returns the slice of values for the current page or nil if there are no values.
17616func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
17617	if page.lborlr.IsEmpty() {
17618		return nil
17619	}
17620	return *page.lborlr.Value
17621}
17622
17623// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
17624func NewLoadBalancerOutboundRuleListResultPage(getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
17625	return LoadBalancerOutboundRuleListResultPage{fn: getNextPage}
17626}
17627
17628// LoadBalancerProbeListResult response for ListProbe API service call.
17629type LoadBalancerProbeListResult struct {
17630	autorest.Response `json:"-"`
17631	// Value - A list of probes in a load balancer.
17632	Value *[]Probe `json:"value,omitempty"`
17633	// NextLink - READ-ONLY; The URL to get the next set of results.
17634	NextLink *string `json:"nextLink,omitempty"`
17635}
17636
17637// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
17638type LoadBalancerProbeListResultIterator struct {
17639	i    int
17640	page LoadBalancerProbeListResultPage
17641}
17642
17643// NextWithContext advances to the next value.  If there was an error making
17644// the request the iterator does not advance and the error is returned.
17645func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
17646	if tracing.IsEnabled() {
17647		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
17648		defer func() {
17649			sc := -1
17650			if iter.Response().Response.Response != nil {
17651				sc = iter.Response().Response.Response.StatusCode
17652			}
17653			tracing.EndSpan(ctx, sc, err)
17654		}()
17655	}
17656	iter.i++
17657	if iter.i < len(iter.page.Values()) {
17658		return nil
17659	}
17660	err = iter.page.NextWithContext(ctx)
17661	if err != nil {
17662		iter.i--
17663		return err
17664	}
17665	iter.i = 0
17666	return nil
17667}
17668
17669// Next advances to the next value.  If there was an error making
17670// the request the iterator does not advance and the error is returned.
17671// Deprecated: Use NextWithContext() instead.
17672func (iter *LoadBalancerProbeListResultIterator) Next() error {
17673	return iter.NextWithContext(context.Background())
17674}
17675
17676// NotDone returns true if the enumeration should be started or is not yet complete.
17677func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
17678	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17679}
17680
17681// Response returns the raw server response from the last page request.
17682func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
17683	return iter.page.Response()
17684}
17685
17686// Value returns the current value or a zero-initialized value if the
17687// iterator has advanced beyond the end of the collection.
17688func (iter LoadBalancerProbeListResultIterator) Value() Probe {
17689	if !iter.page.NotDone() {
17690		return Probe{}
17691	}
17692	return iter.page.Values()[iter.i]
17693}
17694
17695// Creates a new instance of the LoadBalancerProbeListResultIterator type.
17696func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
17697	return LoadBalancerProbeListResultIterator{page: page}
17698}
17699
17700// IsEmpty returns true if the ListResult contains no values.
17701func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
17702	return lbplr.Value == nil || len(*lbplr.Value) == 0
17703}
17704
17705// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
17706// It returns nil if no more results exist.
17707func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
17708	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
17709		return nil, nil
17710	}
17711	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17712		autorest.AsJSON(),
17713		autorest.AsGet(),
17714		autorest.WithBaseURL(to.String(lbplr.NextLink)))
17715}
17716
17717// LoadBalancerProbeListResultPage contains a page of Probe values.
17718type LoadBalancerProbeListResultPage struct {
17719	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
17720	lbplr LoadBalancerProbeListResult
17721}
17722
17723// NextWithContext advances to the next page of values.  If there was an error making
17724// the request the page does not advance and the error is returned.
17725func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
17726	if tracing.IsEnabled() {
17727		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
17728		defer func() {
17729			sc := -1
17730			if page.Response().Response.Response != nil {
17731				sc = page.Response().Response.Response.StatusCode
17732			}
17733			tracing.EndSpan(ctx, sc, err)
17734		}()
17735	}
17736	next, err := page.fn(ctx, page.lbplr)
17737	if err != nil {
17738		return err
17739	}
17740	page.lbplr = next
17741	return nil
17742}
17743
17744// Next advances to the next page of values.  If there was an error making
17745// the request the page does not advance and the error is returned.
17746// Deprecated: Use NextWithContext() instead.
17747func (page *LoadBalancerProbeListResultPage) Next() error {
17748	return page.NextWithContext(context.Background())
17749}
17750
17751// NotDone returns true if the page enumeration should be started or is not yet complete.
17752func (page LoadBalancerProbeListResultPage) NotDone() bool {
17753	return !page.lbplr.IsEmpty()
17754}
17755
17756// Response returns the raw server response from the last page request.
17757func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
17758	return page.lbplr
17759}
17760
17761// Values returns the slice of values for the current page or nil if there are no values.
17762func (page LoadBalancerProbeListResultPage) Values() []Probe {
17763	if page.lbplr.IsEmpty() {
17764		return nil
17765	}
17766	return *page.lbplr.Value
17767}
17768
17769// Creates a new instance of the LoadBalancerProbeListResultPage type.
17770func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
17771	return LoadBalancerProbeListResultPage{fn: getNextPage}
17772}
17773
17774// LoadBalancerPropertiesFormat properties of the load balancer.
17775type LoadBalancerPropertiesFormat struct {
17776	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer.
17777	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
17778	// BackendAddressPools - Collection of backend address pools used by a load balancer.
17779	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
17780	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning.
17781	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
17782	// Probes - Collection of probe objects used in the load balancer.
17783	Probes *[]Probe `json:"probes,omitempty"`
17784	// 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.
17785	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
17786	// 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.
17787	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
17788	// OutboundRules - The outbound rules.
17789	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
17790	// ResourceGUID - The resource GUID property of the load balancer resource.
17791	ResourceGUID *string `json:"resourceGuid,omitempty"`
17792	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17793	ProvisioningState *string `json:"provisioningState,omitempty"`
17794}
17795
17796// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17797// long-running operation.
17798type LoadBalancersCreateOrUpdateFuture struct {
17799	azure.Future
17800}
17801
17802// Result returns the result of the asynchronous operation.
17803// If the operation has not completed it will return an error.
17804func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
17805	var done bool
17806	done, err = future.DoneWithContext(context.Background(), client)
17807	if err != nil {
17808		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17809		return
17810	}
17811	if !done {
17812		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
17813		return
17814	}
17815	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17816	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
17817		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
17818		if err != nil {
17819			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
17820		}
17821	}
17822	return
17823}
17824
17825// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
17826// operation.
17827type LoadBalancersDeleteFuture struct {
17828	azure.Future
17829}
17830
17831// Result returns the result of the asynchronous operation.
17832// If the operation has not completed it will return an error.
17833func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
17834	var done bool
17835	done, err = future.DoneWithContext(context.Background(), client)
17836	if err != nil {
17837		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
17838		return
17839	}
17840	if !done {
17841		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
17842		return
17843	}
17844	ar.Response = future.Response()
17845	return
17846}
17847
17848// LoadBalancerSku SKU of a load balancer.
17849type LoadBalancerSku struct {
17850	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
17851	Name LoadBalancerSkuName `json:"name,omitempty"`
17852}
17853
17854// LoadBalancersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
17855// operation.
17856type LoadBalancersUpdateTagsFuture struct {
17857	azure.Future
17858}
17859
17860// Result returns the result of the asynchronous operation.
17861// If the operation has not completed it will return an error.
17862func (future *LoadBalancersUpdateTagsFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
17863	var done bool
17864	done, err = future.DoneWithContext(context.Background(), client)
17865	if err != nil {
17866		err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
17867		return
17868	}
17869	if !done {
17870		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersUpdateTagsFuture")
17871		return
17872	}
17873	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17874	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
17875		lb, err = client.UpdateTagsResponder(lb.Response.Response)
17876		if err != nil {
17877			err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", lb.Response.Response, "Failure responding to request")
17878		}
17879	}
17880	return
17881}
17882
17883// LoadBalancingRule a load balancing rule for a load balancer.
17884type LoadBalancingRule struct {
17885	autorest.Response `json:"-"`
17886	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
17887	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
17888	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17889	Name *string `json:"name,omitempty"`
17890	// Etag - A unique read-only string that changes whenever the resource is updated.
17891	Etag *string `json:"etag,omitempty"`
17892	// ID - Resource ID.
17893	ID *string `json:"id,omitempty"`
17894}
17895
17896// MarshalJSON is the custom marshaler for LoadBalancingRule.
17897func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
17898	objectMap := make(map[string]interface{})
17899	if lbr.LoadBalancingRulePropertiesFormat != nil {
17900		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
17901	}
17902	if lbr.Name != nil {
17903		objectMap["name"] = lbr.Name
17904	}
17905	if lbr.Etag != nil {
17906		objectMap["etag"] = lbr.Etag
17907	}
17908	if lbr.ID != nil {
17909		objectMap["id"] = lbr.ID
17910	}
17911	return json.Marshal(objectMap)
17912}
17913
17914// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
17915func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
17916	var m map[string]*json.RawMessage
17917	err := json.Unmarshal(body, &m)
17918	if err != nil {
17919		return err
17920	}
17921	for k, v := range m {
17922		switch k {
17923		case "properties":
17924			if v != nil {
17925				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
17926				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
17927				if err != nil {
17928					return err
17929				}
17930				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
17931			}
17932		case "name":
17933			if v != nil {
17934				var name string
17935				err = json.Unmarshal(*v, &name)
17936				if err != nil {
17937					return err
17938				}
17939				lbr.Name = &name
17940			}
17941		case "etag":
17942			if v != nil {
17943				var etag string
17944				err = json.Unmarshal(*v, &etag)
17945				if err != nil {
17946					return err
17947				}
17948				lbr.Etag = &etag
17949			}
17950		case "id":
17951			if v != nil {
17952				var ID string
17953				err = json.Unmarshal(*v, &ID)
17954				if err != nil {
17955					return err
17956				}
17957				lbr.ID = &ID
17958			}
17959		}
17960	}
17961
17962	return nil
17963}
17964
17965// LoadBalancingRulePropertiesFormat properties of the load balancer.
17966type LoadBalancingRulePropertiesFormat struct {
17967	// FrontendIPConfiguration - A reference to frontend IP addresses.
17968	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
17969	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
17970	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
17971	// Probe - The reference of the load balancer probe used by the load balancing rule.
17972	Probe *SubResource `json:"probe,omitempty"`
17973	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
17974	Protocol TransportProtocol `json:"protocol,omitempty"`
17975	// LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol'
17976	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
17977	// 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".
17978	FrontendPort *int32 `json:"frontendPort,omitempty"`
17979	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port".
17980	BackendPort *int32 `json:"backendPort,omitempty"`
17981	// 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.
17982	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
17983	// 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.
17984	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
17985	// 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.
17986	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
17987	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
17988	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
17989	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17990	ProvisioningState *string `json:"provisioningState,omitempty"`
17991}
17992
17993// LocalNetworkGateway a common class for general resource information.
17994type LocalNetworkGateway struct {
17995	autorest.Response `json:"-"`
17996	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
17997	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
17998	// Etag - A unique read-only string that changes whenever the resource is updated.
17999	Etag *string `json:"etag,omitempty"`
18000	// ID - Resource ID.
18001	ID *string `json:"id,omitempty"`
18002	// Name - READ-ONLY; Resource name.
18003	Name *string `json:"name,omitempty"`
18004	// Type - READ-ONLY; Resource type.
18005	Type *string `json:"type,omitempty"`
18006	// Location - Resource location.
18007	Location *string `json:"location,omitempty"`
18008	// Tags - Resource tags.
18009	Tags map[string]*string `json:"tags"`
18010}
18011
18012// MarshalJSON is the custom marshaler for LocalNetworkGateway.
18013func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
18014	objectMap := make(map[string]interface{})
18015	if lng.LocalNetworkGatewayPropertiesFormat != nil {
18016		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
18017	}
18018	if lng.Etag != nil {
18019		objectMap["etag"] = lng.Etag
18020	}
18021	if lng.ID != nil {
18022		objectMap["id"] = lng.ID
18023	}
18024	if lng.Location != nil {
18025		objectMap["location"] = lng.Location
18026	}
18027	if lng.Tags != nil {
18028		objectMap["tags"] = lng.Tags
18029	}
18030	return json.Marshal(objectMap)
18031}
18032
18033// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
18034func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
18035	var m map[string]*json.RawMessage
18036	err := json.Unmarshal(body, &m)
18037	if err != nil {
18038		return err
18039	}
18040	for k, v := range m {
18041		switch k {
18042		case "properties":
18043			if v != nil {
18044				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
18045				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
18046				if err != nil {
18047					return err
18048				}
18049				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
18050			}
18051		case "etag":
18052			if v != nil {
18053				var etag string
18054				err = json.Unmarshal(*v, &etag)
18055				if err != nil {
18056					return err
18057				}
18058				lng.Etag = &etag
18059			}
18060		case "id":
18061			if v != nil {
18062				var ID string
18063				err = json.Unmarshal(*v, &ID)
18064				if err != nil {
18065					return err
18066				}
18067				lng.ID = &ID
18068			}
18069		case "name":
18070			if v != nil {
18071				var name string
18072				err = json.Unmarshal(*v, &name)
18073				if err != nil {
18074					return err
18075				}
18076				lng.Name = &name
18077			}
18078		case "type":
18079			if v != nil {
18080				var typeVar string
18081				err = json.Unmarshal(*v, &typeVar)
18082				if err != nil {
18083					return err
18084				}
18085				lng.Type = &typeVar
18086			}
18087		case "location":
18088			if v != nil {
18089				var location string
18090				err = json.Unmarshal(*v, &location)
18091				if err != nil {
18092					return err
18093				}
18094				lng.Location = &location
18095			}
18096		case "tags":
18097			if v != nil {
18098				var tags map[string]*string
18099				err = json.Unmarshal(*v, &tags)
18100				if err != nil {
18101					return err
18102				}
18103				lng.Tags = tags
18104			}
18105		}
18106	}
18107
18108	return nil
18109}
18110
18111// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
18112type LocalNetworkGatewayListResult struct {
18113	autorest.Response `json:"-"`
18114	// Value - A list of local network gateways that exists in a resource group.
18115	Value *[]LocalNetworkGateway `json:"value,omitempty"`
18116	// NextLink - READ-ONLY; The URL to get the next set of results.
18117	NextLink *string `json:"nextLink,omitempty"`
18118}
18119
18120// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
18121// values.
18122type LocalNetworkGatewayListResultIterator struct {
18123	i    int
18124	page LocalNetworkGatewayListResultPage
18125}
18126
18127// NextWithContext advances to the next value.  If there was an error making
18128// the request the iterator does not advance and the error is returned.
18129func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
18130	if tracing.IsEnabled() {
18131		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
18132		defer func() {
18133			sc := -1
18134			if iter.Response().Response.Response != nil {
18135				sc = iter.Response().Response.Response.StatusCode
18136			}
18137			tracing.EndSpan(ctx, sc, err)
18138		}()
18139	}
18140	iter.i++
18141	if iter.i < len(iter.page.Values()) {
18142		return nil
18143	}
18144	err = iter.page.NextWithContext(ctx)
18145	if err != nil {
18146		iter.i--
18147		return err
18148	}
18149	iter.i = 0
18150	return nil
18151}
18152
18153// Next advances to the next value.  If there was an error making
18154// the request the iterator does not advance and the error is returned.
18155// Deprecated: Use NextWithContext() instead.
18156func (iter *LocalNetworkGatewayListResultIterator) Next() error {
18157	return iter.NextWithContext(context.Background())
18158}
18159
18160// NotDone returns true if the enumeration should be started or is not yet complete.
18161func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
18162	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18163}
18164
18165// Response returns the raw server response from the last page request.
18166func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
18167	return iter.page.Response()
18168}
18169
18170// Value returns the current value or a zero-initialized value if the
18171// iterator has advanced beyond the end of the collection.
18172func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
18173	if !iter.page.NotDone() {
18174		return LocalNetworkGateway{}
18175	}
18176	return iter.page.Values()[iter.i]
18177}
18178
18179// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
18180func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
18181	return LocalNetworkGatewayListResultIterator{page: page}
18182}
18183
18184// IsEmpty returns true if the ListResult contains no values.
18185func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
18186	return lnglr.Value == nil || len(*lnglr.Value) == 0
18187}
18188
18189// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
18190// It returns nil if no more results exist.
18191func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
18192	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
18193		return nil, nil
18194	}
18195	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18196		autorest.AsJSON(),
18197		autorest.AsGet(),
18198		autorest.WithBaseURL(to.String(lnglr.NextLink)))
18199}
18200
18201// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
18202type LocalNetworkGatewayListResultPage struct {
18203	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
18204	lnglr LocalNetworkGatewayListResult
18205}
18206
18207// NextWithContext advances to the next page of values.  If there was an error making
18208// the request the page does not advance and the error is returned.
18209func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
18210	if tracing.IsEnabled() {
18211		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
18212		defer func() {
18213			sc := -1
18214			if page.Response().Response.Response != nil {
18215				sc = page.Response().Response.Response.StatusCode
18216			}
18217			tracing.EndSpan(ctx, sc, err)
18218		}()
18219	}
18220	next, err := page.fn(ctx, page.lnglr)
18221	if err != nil {
18222		return err
18223	}
18224	page.lnglr = next
18225	return nil
18226}
18227
18228// Next advances to the next page of values.  If there was an error making
18229// the request the page does not advance and the error is returned.
18230// Deprecated: Use NextWithContext() instead.
18231func (page *LocalNetworkGatewayListResultPage) Next() error {
18232	return page.NextWithContext(context.Background())
18233}
18234
18235// NotDone returns true if the page enumeration should be started or is not yet complete.
18236func (page LocalNetworkGatewayListResultPage) NotDone() bool {
18237	return !page.lnglr.IsEmpty()
18238}
18239
18240// Response returns the raw server response from the last page request.
18241func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
18242	return page.lnglr
18243}
18244
18245// Values returns the slice of values for the current page or nil if there are no values.
18246func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
18247	if page.lnglr.IsEmpty() {
18248		return nil
18249	}
18250	return *page.lnglr.Value
18251}
18252
18253// Creates a new instance of the LocalNetworkGatewayListResultPage type.
18254func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
18255	return LocalNetworkGatewayListResultPage{fn: getNextPage}
18256}
18257
18258// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties.
18259type LocalNetworkGatewayPropertiesFormat struct {
18260	// LocalNetworkAddressSpace - Local network site address space.
18261	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
18262	// GatewayIPAddress - IP address of local network gateway.
18263	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
18264	// BgpSettings - Local network gateway's BGP speaker settings.
18265	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
18266	// ResourceGUID - The resource GUID property of the LocalNetworkGateway resource.
18267	ResourceGUID *string `json:"resourceGuid,omitempty"`
18268	// ProvisioningState - READ-ONLY; The provisioning state of the LocalNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18269	ProvisioningState *string `json:"provisioningState,omitempty"`
18270}
18271
18272// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
18273// long-running operation.
18274type LocalNetworkGatewaysCreateOrUpdateFuture struct {
18275	azure.Future
18276}
18277
18278// Result returns the result of the asynchronous operation.
18279// If the operation has not completed it will return an error.
18280func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
18281	var done bool
18282	done, err = future.DoneWithContext(context.Background(), client)
18283	if err != nil {
18284		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18285		return
18286	}
18287	if !done {
18288		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
18289		return
18290	}
18291	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18292	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
18293		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
18294		if err != nil {
18295			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
18296		}
18297	}
18298	return
18299}
18300
18301// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
18302// long-running operation.
18303type LocalNetworkGatewaysDeleteFuture struct {
18304	azure.Future
18305}
18306
18307// Result returns the result of the asynchronous operation.
18308// If the operation has not completed it will return an error.
18309func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
18310	var done bool
18311	done, err = future.DoneWithContext(context.Background(), client)
18312	if err != nil {
18313		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
18314		return
18315	}
18316	if !done {
18317		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
18318		return
18319	}
18320	ar.Response = future.Response()
18321	return
18322}
18323
18324// LocalNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
18325// long-running operation.
18326type LocalNetworkGatewaysUpdateTagsFuture struct {
18327	azure.Future
18328}
18329
18330// Result returns the result of the asynchronous operation.
18331// If the operation has not completed it will return an error.
18332func (future *LocalNetworkGatewaysUpdateTagsFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
18333	var done bool
18334	done, err = future.DoneWithContext(context.Background(), client)
18335	if err != nil {
18336		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
18337		return
18338	}
18339	if !done {
18340		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysUpdateTagsFuture")
18341		return
18342	}
18343	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18344	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
18345		lng, err = client.UpdateTagsResponder(lng.Response.Response)
18346		if err != nil {
18347			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", lng.Response.Response, "Failure responding to request")
18348		}
18349	}
18350	return
18351}
18352
18353// LogSpecification description of logging specification.
18354type LogSpecification struct {
18355	// Name - The name of the specification.
18356	Name *string `json:"name,omitempty"`
18357	// DisplayName - The display name of the specification.
18358	DisplayName *string `json:"displayName,omitempty"`
18359	// BlobDuration - Duration of the blob.
18360	BlobDuration *string `json:"blobDuration,omitempty"`
18361}
18362
18363// ManagedServiceIdentity identity for the resource.
18364type ManagedServiceIdentity struct {
18365	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
18366	PrincipalID *string `json:"principalId,omitempty"`
18367	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
18368	TenantID *string `json:"tenantId,omitempty"`
18369	// 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'
18370	Type ResourceIdentityType `json:"type,omitempty"`
18371	// 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}'.
18372	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
18373}
18374
18375// MarshalJSON is the custom marshaler for ManagedServiceIdentity.
18376func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
18377	objectMap := make(map[string]interface{})
18378	if msi.Type != "" {
18379		objectMap["type"] = msi.Type
18380	}
18381	if msi.UserAssignedIdentities != nil {
18382		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
18383	}
18384	return json.Marshal(objectMap)
18385}
18386
18387// ManagedServiceIdentityUserAssignedIdentitiesValue ...
18388type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
18389	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
18390	PrincipalID *string `json:"principalId,omitempty"`
18391	// ClientID - READ-ONLY; The client id of user assigned identity.
18392	ClientID *string `json:"clientId,omitempty"`
18393}
18394
18395// MatchCondition define match conditions.
18396type MatchCondition struct {
18397	// MatchVariables - List of match variables.
18398	MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"`
18399	// Operator - Describes operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex'
18400	Operator WebApplicationFirewallOperator `json:"operator,omitempty"`
18401	// NegationConditon - Describes if this is negate condition or not.
18402	NegationConditon *bool `json:"negationConditon,omitempty"`
18403	// MatchValues - Match value.
18404	MatchValues *[]string `json:"matchValues,omitempty"`
18405	// Transforms - List of transforms.
18406	Transforms *[]WebApplicationFirewallTransform `json:"transforms,omitempty"`
18407}
18408
18409// MatchedRule matched rule.
18410type MatchedRule struct {
18411	// RuleName - Name of the matched network security rule.
18412	RuleName *string `json:"ruleName,omitempty"`
18413	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
18414	Action *string `json:"action,omitempty"`
18415}
18416
18417// MatchVariable define match variables.
18418type MatchVariable struct {
18419	// VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies'
18420	VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"`
18421	// Selector - Describes field of the matchVariable collection.
18422	Selector *string `json:"selector,omitempty"`
18423}
18424
18425// MetricSpecification description of metrics specification.
18426type MetricSpecification struct {
18427	// Name - The name of the metric.
18428	Name *string `json:"name,omitempty"`
18429	// DisplayName - The display name of the metric.
18430	DisplayName *string `json:"displayName,omitempty"`
18431	// DisplayDescription - The description of the metric.
18432	DisplayDescription *string `json:"displayDescription,omitempty"`
18433	// Unit - Units the metric to be displayed in.
18434	Unit *string `json:"unit,omitempty"`
18435	// AggregationType - The aggregation type.
18436	AggregationType *string `json:"aggregationType,omitempty"`
18437	// Availabilities - List of availability.
18438	Availabilities *[]Availability `json:"availabilities,omitempty"`
18439	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
18440	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
18441	// FillGapWithZero - Whether gaps would be filled with zeros.
18442	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
18443	// MetricFilterPattern - Pattern for the filter of the metric.
18444	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
18445	// Dimensions - List of dimensions.
18446	Dimensions *[]Dimension `json:"dimensions,omitempty"`
18447	// IsInternal - Whether the metric is internal.
18448	IsInternal *bool `json:"isInternal,omitempty"`
18449	// SourceMdmAccount - The source MDM account.
18450	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
18451	// SourceMdmNamespace - The source MDM namespace.
18452	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
18453	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
18454	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
18455}
18456
18457// NatGateway nat Gateway resource.
18458type NatGateway struct {
18459	autorest.Response `json:"-"`
18460	// Sku - The nat gateway SKU.
18461	Sku *NatGatewaySku `json:"sku,omitempty"`
18462	// NatGatewayPropertiesFormat - Nat Gateway properties.
18463	*NatGatewayPropertiesFormat `json:"properties,omitempty"`
18464	// Zones - A list of availability zones denoting the zone in which Nat Gateway should be deployed.
18465	Zones *[]string `json:"zones,omitempty"`
18466	// Etag - A unique read-only string that changes whenever the resource is updated.
18467	Etag *string `json:"etag,omitempty"`
18468	// ID - Resource ID.
18469	ID *string `json:"id,omitempty"`
18470	// Name - READ-ONLY; Resource name.
18471	Name *string `json:"name,omitempty"`
18472	// Type - READ-ONLY; Resource type.
18473	Type *string `json:"type,omitempty"`
18474	// Location - Resource location.
18475	Location *string `json:"location,omitempty"`
18476	// Tags - Resource tags.
18477	Tags map[string]*string `json:"tags"`
18478}
18479
18480// MarshalJSON is the custom marshaler for NatGateway.
18481func (ng NatGateway) MarshalJSON() ([]byte, error) {
18482	objectMap := make(map[string]interface{})
18483	if ng.Sku != nil {
18484		objectMap["sku"] = ng.Sku
18485	}
18486	if ng.NatGatewayPropertiesFormat != nil {
18487		objectMap["properties"] = ng.NatGatewayPropertiesFormat
18488	}
18489	if ng.Zones != nil {
18490		objectMap["zones"] = ng.Zones
18491	}
18492	if ng.Etag != nil {
18493		objectMap["etag"] = ng.Etag
18494	}
18495	if ng.ID != nil {
18496		objectMap["id"] = ng.ID
18497	}
18498	if ng.Location != nil {
18499		objectMap["location"] = ng.Location
18500	}
18501	if ng.Tags != nil {
18502		objectMap["tags"] = ng.Tags
18503	}
18504	return json.Marshal(objectMap)
18505}
18506
18507// UnmarshalJSON is the custom unmarshaler for NatGateway struct.
18508func (ng *NatGateway) UnmarshalJSON(body []byte) error {
18509	var m map[string]*json.RawMessage
18510	err := json.Unmarshal(body, &m)
18511	if err != nil {
18512		return err
18513	}
18514	for k, v := range m {
18515		switch k {
18516		case "sku":
18517			if v != nil {
18518				var sku NatGatewaySku
18519				err = json.Unmarshal(*v, &sku)
18520				if err != nil {
18521					return err
18522				}
18523				ng.Sku = &sku
18524			}
18525		case "properties":
18526			if v != nil {
18527				var natGatewayPropertiesFormat NatGatewayPropertiesFormat
18528				err = json.Unmarshal(*v, &natGatewayPropertiesFormat)
18529				if err != nil {
18530					return err
18531				}
18532				ng.NatGatewayPropertiesFormat = &natGatewayPropertiesFormat
18533			}
18534		case "zones":
18535			if v != nil {
18536				var zones []string
18537				err = json.Unmarshal(*v, &zones)
18538				if err != nil {
18539					return err
18540				}
18541				ng.Zones = &zones
18542			}
18543		case "etag":
18544			if v != nil {
18545				var etag string
18546				err = json.Unmarshal(*v, &etag)
18547				if err != nil {
18548					return err
18549				}
18550				ng.Etag = &etag
18551			}
18552		case "id":
18553			if v != nil {
18554				var ID string
18555				err = json.Unmarshal(*v, &ID)
18556				if err != nil {
18557					return err
18558				}
18559				ng.ID = &ID
18560			}
18561		case "name":
18562			if v != nil {
18563				var name string
18564				err = json.Unmarshal(*v, &name)
18565				if err != nil {
18566					return err
18567				}
18568				ng.Name = &name
18569			}
18570		case "type":
18571			if v != nil {
18572				var typeVar string
18573				err = json.Unmarshal(*v, &typeVar)
18574				if err != nil {
18575					return err
18576				}
18577				ng.Type = &typeVar
18578			}
18579		case "location":
18580			if v != nil {
18581				var location string
18582				err = json.Unmarshal(*v, &location)
18583				if err != nil {
18584					return err
18585				}
18586				ng.Location = &location
18587			}
18588		case "tags":
18589			if v != nil {
18590				var tags map[string]*string
18591				err = json.Unmarshal(*v, &tags)
18592				if err != nil {
18593					return err
18594				}
18595				ng.Tags = tags
18596			}
18597		}
18598	}
18599
18600	return nil
18601}
18602
18603// NatGatewayListResult response for ListNatGateways API service call.
18604type NatGatewayListResult struct {
18605	autorest.Response `json:"-"`
18606	// Value - A list of Nat Gateways that exists in a resource group.
18607	Value *[]NatGateway `json:"value,omitempty"`
18608	// NextLink - The URL to get the next set of results.
18609	NextLink *string `json:"nextLink,omitempty"`
18610}
18611
18612// NatGatewayListResultIterator provides access to a complete listing of NatGateway values.
18613type NatGatewayListResultIterator struct {
18614	i    int
18615	page NatGatewayListResultPage
18616}
18617
18618// NextWithContext advances to the next value.  If there was an error making
18619// the request the iterator does not advance and the error is returned.
18620func (iter *NatGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
18621	if tracing.IsEnabled() {
18622		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultIterator.NextWithContext")
18623		defer func() {
18624			sc := -1
18625			if iter.Response().Response.Response != nil {
18626				sc = iter.Response().Response.Response.StatusCode
18627			}
18628			tracing.EndSpan(ctx, sc, err)
18629		}()
18630	}
18631	iter.i++
18632	if iter.i < len(iter.page.Values()) {
18633		return nil
18634	}
18635	err = iter.page.NextWithContext(ctx)
18636	if err != nil {
18637		iter.i--
18638		return err
18639	}
18640	iter.i = 0
18641	return nil
18642}
18643
18644// Next advances to the next value.  If there was an error making
18645// the request the iterator does not advance and the error is returned.
18646// Deprecated: Use NextWithContext() instead.
18647func (iter *NatGatewayListResultIterator) Next() error {
18648	return iter.NextWithContext(context.Background())
18649}
18650
18651// NotDone returns true if the enumeration should be started or is not yet complete.
18652func (iter NatGatewayListResultIterator) NotDone() bool {
18653	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18654}
18655
18656// Response returns the raw server response from the last page request.
18657func (iter NatGatewayListResultIterator) Response() NatGatewayListResult {
18658	return iter.page.Response()
18659}
18660
18661// Value returns the current value or a zero-initialized value if the
18662// iterator has advanced beyond the end of the collection.
18663func (iter NatGatewayListResultIterator) Value() NatGateway {
18664	if !iter.page.NotDone() {
18665		return NatGateway{}
18666	}
18667	return iter.page.Values()[iter.i]
18668}
18669
18670// Creates a new instance of the NatGatewayListResultIterator type.
18671func NewNatGatewayListResultIterator(page NatGatewayListResultPage) NatGatewayListResultIterator {
18672	return NatGatewayListResultIterator{page: page}
18673}
18674
18675// IsEmpty returns true if the ListResult contains no values.
18676func (nglr NatGatewayListResult) IsEmpty() bool {
18677	return nglr.Value == nil || len(*nglr.Value) == 0
18678}
18679
18680// natGatewayListResultPreparer prepares a request to retrieve the next set of results.
18681// It returns nil if no more results exist.
18682func (nglr NatGatewayListResult) natGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
18683	if nglr.NextLink == nil || len(to.String(nglr.NextLink)) < 1 {
18684		return nil, nil
18685	}
18686	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18687		autorest.AsJSON(),
18688		autorest.AsGet(),
18689		autorest.WithBaseURL(to.String(nglr.NextLink)))
18690}
18691
18692// NatGatewayListResultPage contains a page of NatGateway values.
18693type NatGatewayListResultPage struct {
18694	fn   func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)
18695	nglr NatGatewayListResult
18696}
18697
18698// NextWithContext advances to the next page of values.  If there was an error making
18699// the request the page does not advance and the error is returned.
18700func (page *NatGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
18701	if tracing.IsEnabled() {
18702		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultPage.NextWithContext")
18703		defer func() {
18704			sc := -1
18705			if page.Response().Response.Response != nil {
18706				sc = page.Response().Response.Response.StatusCode
18707			}
18708			tracing.EndSpan(ctx, sc, err)
18709		}()
18710	}
18711	next, err := page.fn(ctx, page.nglr)
18712	if err != nil {
18713		return err
18714	}
18715	page.nglr = next
18716	return nil
18717}
18718
18719// Next advances to the next page of values.  If there was an error making
18720// the request the page does not advance and the error is returned.
18721// Deprecated: Use NextWithContext() instead.
18722func (page *NatGatewayListResultPage) Next() error {
18723	return page.NextWithContext(context.Background())
18724}
18725
18726// NotDone returns true if the page enumeration should be started or is not yet complete.
18727func (page NatGatewayListResultPage) NotDone() bool {
18728	return !page.nglr.IsEmpty()
18729}
18730
18731// Response returns the raw server response from the last page request.
18732func (page NatGatewayListResultPage) Response() NatGatewayListResult {
18733	return page.nglr
18734}
18735
18736// Values returns the slice of values for the current page or nil if there are no values.
18737func (page NatGatewayListResultPage) Values() []NatGateway {
18738	if page.nglr.IsEmpty() {
18739		return nil
18740	}
18741	return *page.nglr.Value
18742}
18743
18744// Creates a new instance of the NatGatewayListResultPage type.
18745func NewNatGatewayListResultPage(getNextPage func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)) NatGatewayListResultPage {
18746	return NatGatewayListResultPage{fn: getNextPage}
18747}
18748
18749// NatGatewayPropertiesFormat nat Gateway properties.
18750type NatGatewayPropertiesFormat struct {
18751	// IdleTimeoutInMinutes - The idle timeout of the nat gateway.
18752	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
18753	// PublicIPAddresses - An array of public ip addresses associated with the nat gateway resource.
18754	PublicIPAddresses *[]SubResource `json:"publicIpAddresses,omitempty"`
18755	// PublicIPPrefixes - An array of public ip prefixes associated with the nat gateway resource.
18756	PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"`
18757	// Subnets - READ-ONLY; An array of references to the subnets using this nat gateway resource.
18758	Subnets *[]SubResource `json:"subnets,omitempty"`
18759	// ResourceGUID - The resource GUID property of the nat gateway resource.
18760	ResourceGUID *string `json:"resourceGuid,omitempty"`
18761	// ProvisioningState - The provisioning state of the NatGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18762	ProvisioningState *string `json:"provisioningState,omitempty"`
18763}
18764
18765// NatGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
18766// long-running operation.
18767type NatGatewaysCreateOrUpdateFuture struct {
18768	azure.Future
18769}
18770
18771// Result returns the result of the asynchronous operation.
18772// If the operation has not completed it will return an error.
18773func (future *NatGatewaysCreateOrUpdateFuture) Result(client NatGatewaysClient) (ng NatGateway, err error) {
18774	var done bool
18775	done, err = future.DoneWithContext(context.Background(), client)
18776	if err != nil {
18777		err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18778		return
18779	}
18780	if !done {
18781		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysCreateOrUpdateFuture")
18782		return
18783	}
18784	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18785	if ng.Response.Response, err = future.GetResult(sender); err == nil && ng.Response.Response.StatusCode != http.StatusNoContent {
18786		ng, err = client.CreateOrUpdateResponder(ng.Response.Response)
18787		if err != nil {
18788			err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", ng.Response.Response, "Failure responding to request")
18789		}
18790	}
18791	return
18792}
18793
18794// NatGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
18795// operation.
18796type NatGatewaysDeleteFuture struct {
18797	azure.Future
18798}
18799
18800// Result returns the result of the asynchronous operation.
18801// If the operation has not completed it will return an error.
18802func (future *NatGatewaysDeleteFuture) Result(client NatGatewaysClient) (ar autorest.Response, err error) {
18803	var done bool
18804	done, err = future.DoneWithContext(context.Background(), client)
18805	if err != nil {
18806		err = autorest.NewErrorWithError(err, "network.NatGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
18807		return
18808	}
18809	if !done {
18810		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysDeleteFuture")
18811		return
18812	}
18813	ar.Response = future.Response()
18814	return
18815}
18816
18817// NatGatewaySku SKU of nat gateway.
18818type NatGatewaySku struct {
18819	// Name - Name of Nat Gateway SKU. Possible values include: 'Standard'
18820	Name NatGatewaySkuName `json:"name,omitempty"`
18821}
18822
18823// NextHopParameters parameters that define the source and destination endpoint.
18824type NextHopParameters struct {
18825	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
18826	TargetResourceID *string `json:"targetResourceId,omitempty"`
18827	// SourceIPAddress - The source IP address.
18828	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
18829	// DestinationIPAddress - The destination IP address.
18830	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
18831	// 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).
18832	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
18833}
18834
18835// NextHopResult the information about next hop from the specified VM.
18836type NextHopResult struct {
18837	autorest.Response `json:"-"`
18838	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
18839	NextHopType NextHopType `json:"nextHopType,omitempty"`
18840	// NextHopIPAddress - Next hop IP Address.
18841	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
18842	// 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'.
18843	RouteTableID *string `json:"routeTableId,omitempty"`
18844}
18845
18846// Operation network REST API operation definition.
18847type Operation struct {
18848	// Name - Operation name: {provider}/{resource}/{operation}.
18849	Name *string `json:"name,omitempty"`
18850	// Display - Display metadata associated with the operation.
18851	Display *OperationDisplay `json:"display,omitempty"`
18852	// Origin - Origin of the operation.
18853	Origin *string `json:"origin,omitempty"`
18854	// OperationPropertiesFormat - Operation properties format.
18855	*OperationPropertiesFormat `json:"properties,omitempty"`
18856}
18857
18858// MarshalJSON is the custom marshaler for Operation.
18859func (o Operation) MarshalJSON() ([]byte, error) {
18860	objectMap := make(map[string]interface{})
18861	if o.Name != nil {
18862		objectMap["name"] = o.Name
18863	}
18864	if o.Display != nil {
18865		objectMap["display"] = o.Display
18866	}
18867	if o.Origin != nil {
18868		objectMap["origin"] = o.Origin
18869	}
18870	if o.OperationPropertiesFormat != nil {
18871		objectMap["properties"] = o.OperationPropertiesFormat
18872	}
18873	return json.Marshal(objectMap)
18874}
18875
18876// UnmarshalJSON is the custom unmarshaler for Operation struct.
18877func (o *Operation) UnmarshalJSON(body []byte) error {
18878	var m map[string]*json.RawMessage
18879	err := json.Unmarshal(body, &m)
18880	if err != nil {
18881		return err
18882	}
18883	for k, v := range m {
18884		switch k {
18885		case "name":
18886			if v != nil {
18887				var name string
18888				err = json.Unmarshal(*v, &name)
18889				if err != nil {
18890					return err
18891				}
18892				o.Name = &name
18893			}
18894		case "display":
18895			if v != nil {
18896				var display OperationDisplay
18897				err = json.Unmarshal(*v, &display)
18898				if err != nil {
18899					return err
18900				}
18901				o.Display = &display
18902			}
18903		case "origin":
18904			if v != nil {
18905				var origin string
18906				err = json.Unmarshal(*v, &origin)
18907				if err != nil {
18908					return err
18909				}
18910				o.Origin = &origin
18911			}
18912		case "properties":
18913			if v != nil {
18914				var operationPropertiesFormat OperationPropertiesFormat
18915				err = json.Unmarshal(*v, &operationPropertiesFormat)
18916				if err != nil {
18917					return err
18918				}
18919				o.OperationPropertiesFormat = &operationPropertiesFormat
18920			}
18921		}
18922	}
18923
18924	return nil
18925}
18926
18927// OperationDisplay display metadata associated with the operation.
18928type OperationDisplay struct {
18929	// Provider - Service provider: Microsoft Network.
18930	Provider *string `json:"provider,omitempty"`
18931	// Resource - Resource on which the operation is performed.
18932	Resource *string `json:"resource,omitempty"`
18933	// Operation - Type of the operation: get, read, delete, etc.
18934	Operation *string `json:"operation,omitempty"`
18935	// Description - Description of the operation.
18936	Description *string `json:"description,omitempty"`
18937}
18938
18939// OperationListResult result of the request to list Network operations. It contains a list of operations
18940// and a URL link to get the next set of results.
18941type OperationListResult struct {
18942	autorest.Response `json:"-"`
18943	// Value - List of Network operations supported by the Network resource provider.
18944	Value *[]Operation `json:"value,omitempty"`
18945	// NextLink - URL to get the next set of operation list results if there are any.
18946	NextLink *string `json:"nextLink,omitempty"`
18947}
18948
18949// OperationListResultIterator provides access to a complete listing of Operation values.
18950type OperationListResultIterator struct {
18951	i    int
18952	page OperationListResultPage
18953}
18954
18955// NextWithContext advances to the next value.  If there was an error making
18956// the request the iterator does not advance and the error is returned.
18957func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
18958	if tracing.IsEnabled() {
18959		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
18960		defer func() {
18961			sc := -1
18962			if iter.Response().Response.Response != nil {
18963				sc = iter.Response().Response.Response.StatusCode
18964			}
18965			tracing.EndSpan(ctx, sc, err)
18966		}()
18967	}
18968	iter.i++
18969	if iter.i < len(iter.page.Values()) {
18970		return nil
18971	}
18972	err = iter.page.NextWithContext(ctx)
18973	if err != nil {
18974		iter.i--
18975		return err
18976	}
18977	iter.i = 0
18978	return nil
18979}
18980
18981// Next advances to the next value.  If there was an error making
18982// the request the iterator does not advance and the error is returned.
18983// Deprecated: Use NextWithContext() instead.
18984func (iter *OperationListResultIterator) Next() error {
18985	return iter.NextWithContext(context.Background())
18986}
18987
18988// NotDone returns true if the enumeration should be started or is not yet complete.
18989func (iter OperationListResultIterator) NotDone() bool {
18990	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18991}
18992
18993// Response returns the raw server response from the last page request.
18994func (iter OperationListResultIterator) Response() OperationListResult {
18995	return iter.page.Response()
18996}
18997
18998// Value returns the current value or a zero-initialized value if the
18999// iterator has advanced beyond the end of the collection.
19000func (iter OperationListResultIterator) Value() Operation {
19001	if !iter.page.NotDone() {
19002		return Operation{}
19003	}
19004	return iter.page.Values()[iter.i]
19005}
19006
19007// Creates a new instance of the OperationListResultIterator type.
19008func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
19009	return OperationListResultIterator{page: page}
19010}
19011
19012// IsEmpty returns true if the ListResult contains no values.
19013func (olr OperationListResult) IsEmpty() bool {
19014	return olr.Value == nil || len(*olr.Value) == 0
19015}
19016
19017// operationListResultPreparer prepares a request to retrieve the next set of results.
19018// It returns nil if no more results exist.
19019func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
19020	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
19021		return nil, nil
19022	}
19023	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19024		autorest.AsJSON(),
19025		autorest.AsGet(),
19026		autorest.WithBaseURL(to.String(olr.NextLink)))
19027}
19028
19029// OperationListResultPage contains a page of Operation values.
19030type OperationListResultPage struct {
19031	fn  func(context.Context, OperationListResult) (OperationListResult, error)
19032	olr OperationListResult
19033}
19034
19035// NextWithContext advances to the next page of values.  If there was an error making
19036// the request the page does not advance and the error is returned.
19037func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
19038	if tracing.IsEnabled() {
19039		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
19040		defer func() {
19041			sc := -1
19042			if page.Response().Response.Response != nil {
19043				sc = page.Response().Response.Response.StatusCode
19044			}
19045			tracing.EndSpan(ctx, sc, err)
19046		}()
19047	}
19048	next, err := page.fn(ctx, page.olr)
19049	if err != nil {
19050		return err
19051	}
19052	page.olr = next
19053	return nil
19054}
19055
19056// Next advances to the next page of values.  If there was an error making
19057// the request the page does not advance and the error is returned.
19058// Deprecated: Use NextWithContext() instead.
19059func (page *OperationListResultPage) Next() error {
19060	return page.NextWithContext(context.Background())
19061}
19062
19063// NotDone returns true if the page enumeration should be started or is not yet complete.
19064func (page OperationListResultPage) NotDone() bool {
19065	return !page.olr.IsEmpty()
19066}
19067
19068// Response returns the raw server response from the last page request.
19069func (page OperationListResultPage) Response() OperationListResult {
19070	return page.olr
19071}
19072
19073// Values returns the slice of values for the current page or nil if there are no values.
19074func (page OperationListResultPage) Values() []Operation {
19075	if page.olr.IsEmpty() {
19076		return nil
19077	}
19078	return *page.olr.Value
19079}
19080
19081// Creates a new instance of the OperationListResultPage type.
19082func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
19083	return OperationListResultPage{fn: getNextPage}
19084}
19085
19086// OperationPropertiesFormat description of operation properties format.
19087type OperationPropertiesFormat struct {
19088	// ServiceSpecification - Specification of the service.
19089	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
19090}
19091
19092// OperationPropertiesFormatServiceSpecification specification of the service.
19093type OperationPropertiesFormatServiceSpecification struct {
19094	// MetricSpecifications - Operation service specification.
19095	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
19096	// LogSpecifications - Operation log specification.
19097	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
19098}
19099
19100// OutboundRule outbound rule of the load balancer.
19101type OutboundRule struct {
19102	autorest.Response `json:"-"`
19103	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
19104	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
19105	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19106	Name *string `json:"name,omitempty"`
19107	// Etag - A unique read-only string that changes whenever the resource is updated.
19108	Etag *string `json:"etag,omitempty"`
19109	// ID - Resource ID.
19110	ID *string `json:"id,omitempty"`
19111}
19112
19113// MarshalJSON is the custom marshaler for OutboundRule.
19114func (or OutboundRule) MarshalJSON() ([]byte, error) {
19115	objectMap := make(map[string]interface{})
19116	if or.OutboundRulePropertiesFormat != nil {
19117		objectMap["properties"] = or.OutboundRulePropertiesFormat
19118	}
19119	if or.Name != nil {
19120		objectMap["name"] = or.Name
19121	}
19122	if or.Etag != nil {
19123		objectMap["etag"] = or.Etag
19124	}
19125	if or.ID != nil {
19126		objectMap["id"] = or.ID
19127	}
19128	return json.Marshal(objectMap)
19129}
19130
19131// UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
19132func (or *OutboundRule) UnmarshalJSON(body []byte) error {
19133	var m map[string]*json.RawMessage
19134	err := json.Unmarshal(body, &m)
19135	if err != nil {
19136		return err
19137	}
19138	for k, v := range m {
19139		switch k {
19140		case "properties":
19141			if v != nil {
19142				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
19143				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
19144				if err != nil {
19145					return err
19146				}
19147				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
19148			}
19149		case "name":
19150			if v != nil {
19151				var name string
19152				err = json.Unmarshal(*v, &name)
19153				if err != nil {
19154					return err
19155				}
19156				or.Name = &name
19157			}
19158		case "etag":
19159			if v != nil {
19160				var etag string
19161				err = json.Unmarshal(*v, &etag)
19162				if err != nil {
19163					return err
19164				}
19165				or.Etag = &etag
19166			}
19167		case "id":
19168			if v != nil {
19169				var ID string
19170				err = json.Unmarshal(*v, &ID)
19171				if err != nil {
19172					return err
19173				}
19174				or.ID = &ID
19175			}
19176		}
19177	}
19178
19179	return nil
19180}
19181
19182// OutboundRulePropertiesFormat outbound rule of the load balancer.
19183type OutboundRulePropertiesFormat struct {
19184	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
19185	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
19186	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
19187	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
19188	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
19189	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
19190	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19191	ProvisioningState *string `json:"provisioningState,omitempty"`
19192	// Protocol - The protocol for the outbound rule in load balancer. Possible values include: 'LoadBalancerOutboundRuleProtocolTCP', 'LoadBalancerOutboundRuleProtocolUDP', 'LoadBalancerOutboundRuleProtocolAll'
19193	Protocol LoadBalancerOutboundRuleProtocol `json:"protocol,omitempty"`
19194	// 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.
19195	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
19196	// IdleTimeoutInMinutes - The timeout for the TCP idle connection.
19197	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
19198}
19199
19200// P2SVpnGateway p2SVpnGateway Resource.
19201type P2SVpnGateway struct {
19202	autorest.Response `json:"-"`
19203	// P2SVpnGatewayProperties - Properties of the P2SVpnGateway.
19204	*P2SVpnGatewayProperties `json:"properties,omitempty"`
19205	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
19206	Etag *string `json:"etag,omitempty"`
19207	// ID - Resource ID.
19208	ID *string `json:"id,omitempty"`
19209	// Name - READ-ONLY; Resource name.
19210	Name *string `json:"name,omitempty"`
19211	// Type - READ-ONLY; Resource type.
19212	Type *string `json:"type,omitempty"`
19213	// Location - Resource location.
19214	Location *string `json:"location,omitempty"`
19215	// Tags - Resource tags.
19216	Tags map[string]*string `json:"tags"`
19217}
19218
19219// MarshalJSON is the custom marshaler for P2SVpnGateway.
19220func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
19221	objectMap := make(map[string]interface{})
19222	if pvg.P2SVpnGatewayProperties != nil {
19223		objectMap["properties"] = pvg.P2SVpnGatewayProperties
19224	}
19225	if pvg.ID != nil {
19226		objectMap["id"] = pvg.ID
19227	}
19228	if pvg.Location != nil {
19229		objectMap["location"] = pvg.Location
19230	}
19231	if pvg.Tags != nil {
19232		objectMap["tags"] = pvg.Tags
19233	}
19234	return json.Marshal(objectMap)
19235}
19236
19237// UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
19238func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
19239	var m map[string]*json.RawMessage
19240	err := json.Unmarshal(body, &m)
19241	if err != nil {
19242		return err
19243	}
19244	for k, v := range m {
19245		switch k {
19246		case "properties":
19247			if v != nil {
19248				var p2SVpnGatewayProperties P2SVpnGatewayProperties
19249				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
19250				if err != nil {
19251					return err
19252				}
19253				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
19254			}
19255		case "etag":
19256			if v != nil {
19257				var etag string
19258				err = json.Unmarshal(*v, &etag)
19259				if err != nil {
19260					return err
19261				}
19262				pvg.Etag = &etag
19263			}
19264		case "id":
19265			if v != nil {
19266				var ID string
19267				err = json.Unmarshal(*v, &ID)
19268				if err != nil {
19269					return err
19270				}
19271				pvg.ID = &ID
19272			}
19273		case "name":
19274			if v != nil {
19275				var name string
19276				err = json.Unmarshal(*v, &name)
19277				if err != nil {
19278					return err
19279				}
19280				pvg.Name = &name
19281			}
19282		case "type":
19283			if v != nil {
19284				var typeVar string
19285				err = json.Unmarshal(*v, &typeVar)
19286				if err != nil {
19287					return err
19288				}
19289				pvg.Type = &typeVar
19290			}
19291		case "location":
19292			if v != nil {
19293				var location string
19294				err = json.Unmarshal(*v, &location)
19295				if err != nil {
19296					return err
19297				}
19298				pvg.Location = &location
19299			}
19300		case "tags":
19301			if v != nil {
19302				var tags map[string]*string
19303				err = json.Unmarshal(*v, &tags)
19304				if err != nil {
19305					return err
19306				}
19307				pvg.Tags = tags
19308			}
19309		}
19310	}
19311
19312	return nil
19313}
19314
19315// P2SVpnGatewayProperties parameters for P2SVpnGateway.
19316type P2SVpnGatewayProperties struct {
19317	// VirtualHub - The VirtualHub to which the gateway belongs.
19318	VirtualHub *SubResource `json:"virtualHub,omitempty"`
19319	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
19320	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
19321	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
19322	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
19323	// P2SVpnServerConfiguration - The P2SVpnServerConfiguration to which the p2sVpnGateway is attached to.
19324	P2SVpnServerConfiguration *SubResource `json:"p2SVpnServerConfiguration,omitempty"`
19325	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
19326	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
19327	// CustomRoutes - The reference of the address space resource which represents the custom routes specified by the customer for P2SVpnGateway and P2S VpnClient.
19328	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
19329	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
19330	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
19331}
19332
19333// P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
19334// long-running operation.
19335type P2sVpnGatewaysCreateOrUpdateFuture struct {
19336	azure.Future
19337}
19338
19339// Result returns the result of the asynchronous operation.
19340// If the operation has not completed it will return an error.
19341func (future *P2sVpnGatewaysCreateOrUpdateFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
19342	var done bool
19343	done, err = future.DoneWithContext(context.Background(), client)
19344	if err != nil {
19345		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19346		return
19347	}
19348	if !done {
19349		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
19350		return
19351	}
19352	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19353	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
19354		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
19355		if err != nil {
19356			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
19357		}
19358	}
19359	return
19360}
19361
19362// P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19363// operation.
19364type P2sVpnGatewaysDeleteFuture struct {
19365	azure.Future
19366}
19367
19368// Result returns the result of the asynchronous operation.
19369// If the operation has not completed it will return an error.
19370func (future *P2sVpnGatewaysDeleteFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
19371	var done bool
19372	done, err = future.DoneWithContext(context.Background(), client)
19373	if err != nil {
19374		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
19375		return
19376	}
19377	if !done {
19378		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
19379		return
19380	}
19381	ar.Response = future.Response()
19382	return
19383}
19384
19385// P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
19386// long-running operation.
19387type P2sVpnGatewaysGenerateVpnProfileFuture struct {
19388	azure.Future
19389}
19390
19391// Result returns the result of the asynchronous operation.
19392// If the operation has not completed it will return an error.
19393func (future *P2sVpnGatewaysGenerateVpnProfileFuture) Result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
19394	var done bool
19395	done, err = future.DoneWithContext(context.Background(), client)
19396	if err != nil {
19397		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
19398		return
19399	}
19400	if !done {
19401		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
19402		return
19403	}
19404	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19405	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
19406		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
19407		if err != nil {
19408			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
19409		}
19410	}
19411	return
19412}
19413
19414// P2sVpnGatewaysGetP2sVpnConnectionHealthFuture an abstraction for monitoring and retrieving the results
19415// of a long-running operation.
19416type P2sVpnGatewaysGetP2sVpnConnectionHealthFuture struct {
19417	azure.Future
19418}
19419
19420// Result returns the result of the asynchronous operation.
19421// If the operation has not completed it will return an error.
19422func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
19423	var done bool
19424	done, err = future.DoneWithContext(context.Background(), client)
19425	if err != nil {
19426		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", future.Response(), "Polling failure")
19427		return
19428	}
19429	if !done {
19430		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture")
19431		return
19432	}
19433	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19434	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
19435		pvg, err = client.GetP2sVpnConnectionHealthResponder(pvg.Response.Response)
19436		if err != nil {
19437			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", pvg.Response.Response, "Failure responding to request")
19438		}
19439	}
19440	return
19441}
19442
19443// P2sVpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
19444// long-running operation.
19445type P2sVpnGatewaysUpdateTagsFuture struct {
19446	azure.Future
19447}
19448
19449// Result returns the result of the asynchronous operation.
19450// If the operation has not completed it will return an error.
19451func (future *P2sVpnGatewaysUpdateTagsFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
19452	var done bool
19453	done, err = future.DoneWithContext(context.Background(), client)
19454	if err != nil {
19455		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
19456		return
19457	}
19458	if !done {
19459		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysUpdateTagsFuture")
19460		return
19461	}
19462	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19463	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
19464		pvg, err = client.UpdateTagsResponder(pvg.Response.Response)
19465		if err != nil {
19466			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", pvg.Response.Response, "Failure responding to request")
19467		}
19468	}
19469	return
19470}
19471
19472// P2SVpnProfileParameters vpn Client Parameters for package generation.
19473type P2SVpnProfileParameters struct {
19474	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
19475	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
19476}
19477
19478// P2SVpnServerConfigRadiusClientRootCertificate radius client root certificate of
19479// P2SVpnServerConfiguration.
19480type P2SVpnServerConfigRadiusClientRootCertificate struct {
19481	// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat - Properties of the Radius client root certificate.
19482	*P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
19483	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19484	Name *string `json:"name,omitempty"`
19485	// Etag - A unique read-only string that changes whenever the resource is updated.
19486	Etag *string `json:"etag,omitempty"`
19487	// ID - Resource ID.
19488	ID *string `json:"id,omitempty"`
19489}
19490
19491// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusClientRootCertificate.
19492func (pvscrcrc P2SVpnServerConfigRadiusClientRootCertificate) MarshalJSON() ([]byte, error) {
19493	objectMap := make(map[string]interface{})
19494	if pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat != nil {
19495		objectMap["properties"] = pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
19496	}
19497	if pvscrcrc.Name != nil {
19498		objectMap["name"] = pvscrcrc.Name
19499	}
19500	if pvscrcrc.Etag != nil {
19501		objectMap["etag"] = pvscrcrc.Etag
19502	}
19503	if pvscrcrc.ID != nil {
19504		objectMap["id"] = pvscrcrc.ID
19505	}
19506	return json.Marshal(objectMap)
19507}
19508
19509// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusClientRootCertificate struct.
19510func (pvscrcrc *P2SVpnServerConfigRadiusClientRootCertificate) UnmarshalJSON(body []byte) error {
19511	var m map[string]*json.RawMessage
19512	err := json.Unmarshal(body, &m)
19513	if err != nil {
19514		return err
19515	}
19516	for k, v := range m {
19517		switch k {
19518		case "properties":
19519			if v != nil {
19520				var p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
19521				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat)
19522				if err != nil {
19523					return err
19524				}
19525				pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
19526			}
19527		case "name":
19528			if v != nil {
19529				var name string
19530				err = json.Unmarshal(*v, &name)
19531				if err != nil {
19532					return err
19533				}
19534				pvscrcrc.Name = &name
19535			}
19536		case "etag":
19537			if v != nil {
19538				var etag string
19539				err = json.Unmarshal(*v, &etag)
19540				if err != nil {
19541					return err
19542				}
19543				pvscrcrc.Etag = &etag
19544			}
19545		case "id":
19546			if v != nil {
19547				var ID string
19548				err = json.Unmarshal(*v, &ID)
19549				if err != nil {
19550					return err
19551				}
19552				pvscrcrc.ID = &ID
19553			}
19554		}
19555	}
19556
19557	return nil
19558}
19559
19560// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat properties of the Radius client root
19561// certificate of P2SVpnServerConfiguration.
19562type P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat struct {
19563	// Thumbprint - The Radius client root certificate thumbprint.
19564	Thumbprint *string `json:"thumbprint,omitempty"`
19565	// ProvisioningState - READ-ONLY; The provisioning state of the Radius client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19566	ProvisioningState *string `json:"provisioningState,omitempty"`
19567}
19568
19569// P2SVpnServerConfigRadiusServerRootCertificate radius Server root certificate of
19570// P2SVpnServerConfiguration.
19571type P2SVpnServerConfigRadiusServerRootCertificate struct {
19572	// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration Radius Server root certificate.
19573	*P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat `json:"properties,omitempty"`
19574	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19575	Name *string `json:"name,omitempty"`
19576	// Etag - A unique read-only string that changes whenever the resource is updated.
19577	Etag *string `json:"etag,omitempty"`
19578	// ID - Resource ID.
19579	ID *string `json:"id,omitempty"`
19580}
19581
19582// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusServerRootCertificate.
19583func (pvscrsrc P2SVpnServerConfigRadiusServerRootCertificate) MarshalJSON() ([]byte, error) {
19584	objectMap := make(map[string]interface{})
19585	if pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat != nil {
19586		objectMap["properties"] = pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
19587	}
19588	if pvscrsrc.Name != nil {
19589		objectMap["name"] = pvscrsrc.Name
19590	}
19591	if pvscrsrc.Etag != nil {
19592		objectMap["etag"] = pvscrsrc.Etag
19593	}
19594	if pvscrsrc.ID != nil {
19595		objectMap["id"] = pvscrsrc.ID
19596	}
19597	return json.Marshal(objectMap)
19598}
19599
19600// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusServerRootCertificate struct.
19601func (pvscrsrc *P2SVpnServerConfigRadiusServerRootCertificate) UnmarshalJSON(body []byte) error {
19602	var m map[string]*json.RawMessage
19603	err := json.Unmarshal(body, &m)
19604	if err != nil {
19605		return err
19606	}
19607	for k, v := range m {
19608		switch k {
19609		case "properties":
19610			if v != nil {
19611				var p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
19612				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat)
19613				if err != nil {
19614					return err
19615				}
19616				pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
19617			}
19618		case "name":
19619			if v != nil {
19620				var name string
19621				err = json.Unmarshal(*v, &name)
19622				if err != nil {
19623					return err
19624				}
19625				pvscrsrc.Name = &name
19626			}
19627		case "etag":
19628			if v != nil {
19629				var etag string
19630				err = json.Unmarshal(*v, &etag)
19631				if err != nil {
19632					return err
19633				}
19634				pvscrsrc.Etag = &etag
19635			}
19636		case "id":
19637			if v != nil {
19638				var ID string
19639				err = json.Unmarshal(*v, &ID)
19640				if err != nil {
19641					return err
19642				}
19643				pvscrsrc.ID = &ID
19644			}
19645		}
19646	}
19647
19648	return nil
19649}
19650
19651// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat properties of Radius Server root
19652// certificate of P2SVpnServerConfiguration.
19653type P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat struct {
19654	// PublicCertData - The certificate public data.
19655	PublicCertData *string `json:"publicCertData,omitempty"`
19656	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration Radius Server root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19657	ProvisioningState *string `json:"provisioningState,omitempty"`
19658}
19659
19660// P2SVpnServerConfiguration p2SVpnServerConfiguration Resource.
19661type P2SVpnServerConfiguration struct {
19662	autorest.Response `json:"-"`
19663	// P2SVpnServerConfigurationProperties - Properties of the P2SVpnServer configuration.
19664	*P2SVpnServerConfigurationProperties `json:"properties,omitempty"`
19665	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19666	Name *string `json:"name,omitempty"`
19667	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
19668	Etag *string `json:"etag,omitempty"`
19669	// ID - Resource ID.
19670	ID *string `json:"id,omitempty"`
19671}
19672
19673// MarshalJSON is the custom marshaler for P2SVpnServerConfiguration.
19674func (pvsc P2SVpnServerConfiguration) MarshalJSON() ([]byte, error) {
19675	objectMap := make(map[string]interface{})
19676	if pvsc.P2SVpnServerConfigurationProperties != nil {
19677		objectMap["properties"] = pvsc.P2SVpnServerConfigurationProperties
19678	}
19679	if pvsc.Name != nil {
19680		objectMap["name"] = pvsc.Name
19681	}
19682	if pvsc.ID != nil {
19683		objectMap["id"] = pvsc.ID
19684	}
19685	return json.Marshal(objectMap)
19686}
19687
19688// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfiguration struct.
19689func (pvsc *P2SVpnServerConfiguration) UnmarshalJSON(body []byte) error {
19690	var m map[string]*json.RawMessage
19691	err := json.Unmarshal(body, &m)
19692	if err != nil {
19693		return err
19694	}
19695	for k, v := range m {
19696		switch k {
19697		case "properties":
19698			if v != nil {
19699				var p2SVpnServerConfigurationProperties P2SVpnServerConfigurationProperties
19700				err = json.Unmarshal(*v, &p2SVpnServerConfigurationProperties)
19701				if err != nil {
19702					return err
19703				}
19704				pvsc.P2SVpnServerConfigurationProperties = &p2SVpnServerConfigurationProperties
19705			}
19706		case "name":
19707			if v != nil {
19708				var name string
19709				err = json.Unmarshal(*v, &name)
19710				if err != nil {
19711					return err
19712				}
19713				pvsc.Name = &name
19714			}
19715		case "etag":
19716			if v != nil {
19717				var etag string
19718				err = json.Unmarshal(*v, &etag)
19719				if err != nil {
19720					return err
19721				}
19722				pvsc.Etag = &etag
19723			}
19724		case "id":
19725			if v != nil {
19726				var ID string
19727				err = json.Unmarshal(*v, &ID)
19728				if err != nil {
19729					return err
19730				}
19731				pvsc.ID = &ID
19732			}
19733		}
19734	}
19735
19736	return nil
19737}
19738
19739// P2SVpnServerConfigurationProperties parameters for P2SVpnServerConfiguration.
19740type P2SVpnServerConfigurationProperties struct {
19741	// Name - The name of the P2SVpnServerConfiguration that is unique within a VirtualWan in a resource group. This name can be used to access the resource along with Paren VirtualWan resource name.
19742	Name *string `json:"name,omitempty"`
19743	// VpnProtocols - VPN protocols for the P2SVpnServerConfiguration.
19744	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
19745	// P2SVpnServerConfigVpnClientRootCertificates - VPN client root certificate of P2SVpnServerConfiguration.
19746	P2SVpnServerConfigVpnClientRootCertificates *[]P2SVpnServerConfigVpnClientRootCertificate `json:"p2SVpnServerConfigVpnClientRootCertificates,omitempty"`
19747	// P2SVpnServerConfigVpnClientRevokedCertificates - VPN client revoked certificate of P2SVpnServerConfiguration.
19748	P2SVpnServerConfigVpnClientRevokedCertificates *[]P2SVpnServerConfigVpnClientRevokedCertificate `json:"p2SVpnServerConfigVpnClientRevokedCertificates,omitempty"`
19749	// P2SVpnServerConfigRadiusServerRootCertificates - Radius Server root certificate of P2SVpnServerConfiguration.
19750	P2SVpnServerConfigRadiusServerRootCertificates *[]P2SVpnServerConfigRadiusServerRootCertificate `json:"p2SVpnServerConfigRadiusServerRootCertificates,omitempty"`
19751	// P2SVpnServerConfigRadiusClientRootCertificates - Radius client root certificate of P2SVpnServerConfiguration.
19752	P2SVpnServerConfigRadiusClientRootCertificates *[]P2SVpnServerConfigRadiusClientRootCertificate `json:"p2SVpnServerConfigRadiusClientRootCertificates,omitempty"`
19753	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for P2SVpnServerConfiguration.
19754	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
19755	// RadiusServerAddress - The radius server address property of the P2SVpnServerConfiguration resource for point to site client connection.
19756	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
19757	// RadiusServerSecret - The radius secret property of the P2SVpnServerConfiguration resource for point to site client connection.
19758	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
19759	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19760	ProvisioningState *string `json:"provisioningState,omitempty"`
19761	// P2SVpnGateways - READ-ONLY; List of references to P2SVpnGateways.
19762	P2SVpnGateways *[]SubResource `json:"p2SVpnGateways,omitempty"`
19763	// Etag - A unique read-only string that changes whenever the resource is updated.
19764	Etag *string `json:"etag,omitempty"`
19765}
19766
19767// P2sVpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
19768// of a long-running operation.
19769type P2sVpnServerConfigurationsCreateOrUpdateFuture struct {
19770	azure.Future
19771}
19772
19773// Result returns the result of the asynchronous operation.
19774// If the operation has not completed it will return an error.
19775func (future *P2sVpnServerConfigurationsCreateOrUpdateFuture) Result(client P2sVpnServerConfigurationsClient) (pvsc P2SVpnServerConfiguration, err error) {
19776	var done bool
19777	done, err = future.DoneWithContext(context.Background(), client)
19778	if err != nil {
19779		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19780		return
19781	}
19782	if !done {
19783		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsCreateOrUpdateFuture")
19784		return
19785	}
19786	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19787	if pvsc.Response.Response, err = future.GetResult(sender); err == nil && pvsc.Response.Response.StatusCode != http.StatusNoContent {
19788		pvsc, err = client.CreateOrUpdateResponder(pvsc.Response.Response)
19789		if err != nil {
19790			err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", pvsc.Response.Response, "Failure responding to request")
19791		}
19792	}
19793	return
19794}
19795
19796// P2sVpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
19797// long-running operation.
19798type P2sVpnServerConfigurationsDeleteFuture struct {
19799	azure.Future
19800}
19801
19802// Result returns the result of the asynchronous operation.
19803// If the operation has not completed it will return an error.
19804func (future *P2sVpnServerConfigurationsDeleteFuture) Result(client P2sVpnServerConfigurationsClient) (ar autorest.Response, err error) {
19805	var done bool
19806	done, err = future.DoneWithContext(context.Background(), client)
19807	if err != nil {
19808		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
19809		return
19810	}
19811	if !done {
19812		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsDeleteFuture")
19813		return
19814	}
19815	ar.Response = future.Response()
19816	return
19817}
19818
19819// P2SVpnServerConfigVpnClientRevokedCertificate VPN client revoked certificate of
19820// P2SVpnServerConfiguration.
19821type P2SVpnServerConfigVpnClientRevokedCertificate struct {
19822	// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
19823	*P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
19824	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19825	Name *string `json:"name,omitempty"`
19826	// Etag - A unique read-only string that changes whenever the resource is updated.
19827	Etag *string `json:"etag,omitempty"`
19828	// ID - Resource ID.
19829	ID *string `json:"id,omitempty"`
19830}
19831
19832// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRevokedCertificate.
19833func (pvscvcrc P2SVpnServerConfigVpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
19834	objectMap := make(map[string]interface{})
19835	if pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat != nil {
19836		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
19837	}
19838	if pvscvcrc.Name != nil {
19839		objectMap["name"] = pvscvcrc.Name
19840	}
19841	if pvscvcrc.Etag != nil {
19842		objectMap["etag"] = pvscvcrc.Etag
19843	}
19844	if pvscvcrc.ID != nil {
19845		objectMap["id"] = pvscvcrc.ID
19846	}
19847	return json.Marshal(objectMap)
19848}
19849
19850// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRevokedCertificate struct.
19851func (pvscvcrc *P2SVpnServerConfigVpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
19852	var m map[string]*json.RawMessage
19853	err := json.Unmarshal(body, &m)
19854	if err != nil {
19855		return err
19856	}
19857	for k, v := range m {
19858		switch k {
19859		case "properties":
19860			if v != nil {
19861				var p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
19862				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat)
19863				if err != nil {
19864					return err
19865				}
19866				pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
19867			}
19868		case "name":
19869			if v != nil {
19870				var name string
19871				err = json.Unmarshal(*v, &name)
19872				if err != nil {
19873					return err
19874				}
19875				pvscvcrc.Name = &name
19876			}
19877		case "etag":
19878			if v != nil {
19879				var etag string
19880				err = json.Unmarshal(*v, &etag)
19881				if err != nil {
19882					return err
19883				}
19884				pvscvcrc.Etag = &etag
19885			}
19886		case "id":
19887			if v != nil {
19888				var ID string
19889				err = json.Unmarshal(*v, &ID)
19890				if err != nil {
19891					return err
19892				}
19893				pvscvcrc.ID = &ID
19894			}
19895		}
19896	}
19897
19898	return nil
19899}
19900
19901// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client
19902// certificate of P2SVpnServerConfiguration.
19903type P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat struct {
19904	// Thumbprint - The revoked VPN client certificate thumbprint.
19905	Thumbprint *string `json:"thumbprint,omitempty"`
19906	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19907	ProvisioningState *string `json:"provisioningState,omitempty"`
19908}
19909
19910// P2SVpnServerConfigVpnClientRootCertificate VPN client root certificate of P2SVpnServerConfiguration.
19911type P2SVpnServerConfigVpnClientRootCertificate struct {
19912	// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration VPN client root certificate.
19913	*P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
19914	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19915	Name *string `json:"name,omitempty"`
19916	// Etag - A unique read-only string that changes whenever the resource is updated.
19917	Etag *string `json:"etag,omitempty"`
19918	// ID - Resource ID.
19919	ID *string `json:"id,omitempty"`
19920}
19921
19922// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRootCertificate.
19923func (pvscvcrc P2SVpnServerConfigVpnClientRootCertificate) MarshalJSON() ([]byte, error) {
19924	objectMap := make(map[string]interface{})
19925	if pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat != nil {
19926		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
19927	}
19928	if pvscvcrc.Name != nil {
19929		objectMap["name"] = pvscvcrc.Name
19930	}
19931	if pvscvcrc.Etag != nil {
19932		objectMap["etag"] = pvscvcrc.Etag
19933	}
19934	if pvscvcrc.ID != nil {
19935		objectMap["id"] = pvscvcrc.ID
19936	}
19937	return json.Marshal(objectMap)
19938}
19939
19940// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRootCertificate struct.
19941func (pvscvcrc *P2SVpnServerConfigVpnClientRootCertificate) UnmarshalJSON(body []byte) error {
19942	var m map[string]*json.RawMessage
19943	err := json.Unmarshal(body, &m)
19944	if err != nil {
19945		return err
19946	}
19947	for k, v := range m {
19948		switch k {
19949		case "properties":
19950			if v != nil {
19951				var p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
19952				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat)
19953				if err != nil {
19954					return err
19955				}
19956				pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
19957			}
19958		case "name":
19959			if v != nil {
19960				var name string
19961				err = json.Unmarshal(*v, &name)
19962				if err != nil {
19963					return err
19964				}
19965				pvscvcrc.Name = &name
19966			}
19967		case "etag":
19968			if v != nil {
19969				var etag string
19970				err = json.Unmarshal(*v, &etag)
19971				if err != nil {
19972					return err
19973				}
19974				pvscvcrc.Etag = &etag
19975			}
19976		case "id":
19977			if v != nil {
19978				var ID string
19979				err = json.Unmarshal(*v, &ID)
19980				if err != nil {
19981					return err
19982				}
19983				pvscvcrc.ID = &ID
19984			}
19985		}
19986	}
19987
19988	return nil
19989}
19990
19991// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat properties of VPN client root certificate of
19992// P2SVpnServerConfiguration.
19993type P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat struct {
19994	// PublicCertData - The certificate public data.
19995	PublicCertData *string `json:"publicCertData,omitempty"`
19996	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19997	ProvisioningState *string `json:"provisioningState,omitempty"`
19998}
19999
20000// PacketCapture parameters that define the create packet capture operation.
20001type PacketCapture struct {
20002	// PacketCaptureParameters - Properties of the packet capture.
20003	*PacketCaptureParameters `json:"properties,omitempty"`
20004}
20005
20006// MarshalJSON is the custom marshaler for PacketCapture.
20007func (pc PacketCapture) MarshalJSON() ([]byte, error) {
20008	objectMap := make(map[string]interface{})
20009	if pc.PacketCaptureParameters != nil {
20010		objectMap["properties"] = pc.PacketCaptureParameters
20011	}
20012	return json.Marshal(objectMap)
20013}
20014
20015// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
20016func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
20017	var m map[string]*json.RawMessage
20018	err := json.Unmarshal(body, &m)
20019	if err != nil {
20020		return err
20021	}
20022	for k, v := range m {
20023		switch k {
20024		case "properties":
20025			if v != nil {
20026				var packetCaptureParameters PacketCaptureParameters
20027				err = json.Unmarshal(*v, &packetCaptureParameters)
20028				if err != nil {
20029					return err
20030				}
20031				pc.PacketCaptureParameters = &packetCaptureParameters
20032			}
20033		}
20034	}
20035
20036	return nil
20037}
20038
20039// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
20040type PacketCaptureFilter struct {
20041	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
20042	Protocol PcProtocol `json:"protocol,omitempty"`
20043	// 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.
20044	LocalIPAddress *string `json:"localIPAddress,omitempty"`
20045	// 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.
20046	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
20047	// 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.
20048	LocalPort *string `json:"localPort,omitempty"`
20049	// 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.
20050	RemotePort *string `json:"remotePort,omitempty"`
20051}
20052
20053// PacketCaptureListResult list of packet capture sessions.
20054type PacketCaptureListResult struct {
20055	autorest.Response `json:"-"`
20056	// Value - Information about packet capture sessions.
20057	Value *[]PacketCaptureResult `json:"value,omitempty"`
20058}
20059
20060// PacketCaptureParameters parameters that define the create packet capture operation.
20061type PacketCaptureParameters struct {
20062	// Target - The ID of the targeted resource, only VM is currently supported.
20063	Target *string `json:"target,omitempty"`
20064	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
20065	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
20066	// TotalBytesPerSession - Maximum size of the capture output.
20067	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
20068	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
20069	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
20070	// StorageLocation - Describes the storage location for a packet capture session.
20071	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
20072	// Filters - A list of packet capture filters.
20073	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
20074}
20075
20076// PacketCaptureQueryStatusResult status of packet capture session.
20077type PacketCaptureQueryStatusResult struct {
20078	autorest.Response `json:"-"`
20079	// Name - The name of the packet capture resource.
20080	Name *string `json:"name,omitempty"`
20081	// ID - The ID of the packet capture resource.
20082	ID *string `json:"id,omitempty"`
20083	// CaptureStartTime - The start time of the packet capture session.
20084	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
20085	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
20086	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
20087	// StopReason - The reason the current packet capture session was stopped.
20088	StopReason *string `json:"stopReason,omitempty"`
20089	// PacketCaptureError - List of errors of packet capture session.
20090	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
20091}
20092
20093// PacketCaptureResult information about packet capture session.
20094type PacketCaptureResult struct {
20095	autorest.Response `json:"-"`
20096	// Name - READ-ONLY; Name of the packet capture session.
20097	Name *string `json:"name,omitempty"`
20098	// ID - READ-ONLY; ID of the packet capture operation.
20099	ID *string `json:"id,omitempty"`
20100	// Etag - A unique read-only string that changes whenever the resource is updated.
20101	Etag *string `json:"etag,omitempty"`
20102	// PacketCaptureResultProperties - Properties of the packet capture result.
20103	*PacketCaptureResultProperties `json:"properties,omitempty"`
20104}
20105
20106// MarshalJSON is the custom marshaler for PacketCaptureResult.
20107func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
20108	objectMap := make(map[string]interface{})
20109	if pcr.Etag != nil {
20110		objectMap["etag"] = pcr.Etag
20111	}
20112	if pcr.PacketCaptureResultProperties != nil {
20113		objectMap["properties"] = pcr.PacketCaptureResultProperties
20114	}
20115	return json.Marshal(objectMap)
20116}
20117
20118// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
20119func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
20120	var m map[string]*json.RawMessage
20121	err := json.Unmarshal(body, &m)
20122	if err != nil {
20123		return err
20124	}
20125	for k, v := range m {
20126		switch k {
20127		case "name":
20128			if v != nil {
20129				var name string
20130				err = json.Unmarshal(*v, &name)
20131				if err != nil {
20132					return err
20133				}
20134				pcr.Name = &name
20135			}
20136		case "id":
20137			if v != nil {
20138				var ID string
20139				err = json.Unmarshal(*v, &ID)
20140				if err != nil {
20141					return err
20142				}
20143				pcr.ID = &ID
20144			}
20145		case "etag":
20146			if v != nil {
20147				var etag string
20148				err = json.Unmarshal(*v, &etag)
20149				if err != nil {
20150					return err
20151				}
20152				pcr.Etag = &etag
20153			}
20154		case "properties":
20155			if v != nil {
20156				var packetCaptureResultProperties PacketCaptureResultProperties
20157				err = json.Unmarshal(*v, &packetCaptureResultProperties)
20158				if err != nil {
20159					return err
20160				}
20161				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
20162			}
20163		}
20164	}
20165
20166	return nil
20167}
20168
20169// PacketCaptureResultProperties describes the properties of a packet capture session.
20170type PacketCaptureResultProperties struct {
20171	// ProvisioningState - The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20172	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20173	// Target - The ID of the targeted resource, only VM is currently supported.
20174	Target *string `json:"target,omitempty"`
20175	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
20176	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
20177	// TotalBytesPerSession - Maximum size of the capture output.
20178	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
20179	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
20180	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
20181	// StorageLocation - Describes the storage location for a packet capture session.
20182	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
20183	// Filters - A list of packet capture filters.
20184	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
20185}
20186
20187// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
20188// operation.
20189type PacketCapturesCreateFuture struct {
20190	azure.Future
20191}
20192
20193// Result returns the result of the asynchronous operation.
20194// If the operation has not completed it will return an error.
20195func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
20196	var done bool
20197	done, err = future.DoneWithContext(context.Background(), client)
20198	if err != nil {
20199		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
20200		return
20201	}
20202	if !done {
20203		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
20204		return
20205	}
20206	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20207	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
20208		pcr, err = client.CreateResponder(pcr.Response.Response)
20209		if err != nil {
20210			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
20211		}
20212	}
20213	return
20214}
20215
20216// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20217// operation.
20218type PacketCapturesDeleteFuture struct {
20219	azure.Future
20220}
20221
20222// Result returns the result of the asynchronous operation.
20223// If the operation has not completed it will return an error.
20224func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
20225	var done bool
20226	done, err = future.DoneWithContext(context.Background(), client)
20227	if err != nil {
20228		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
20229		return
20230	}
20231	if !done {
20232		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
20233		return
20234	}
20235	ar.Response = future.Response()
20236	return
20237}
20238
20239// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
20240// operation.
20241type PacketCapturesGetStatusFuture struct {
20242	azure.Future
20243}
20244
20245// Result returns the result of the asynchronous operation.
20246// If the operation has not completed it will return an error.
20247func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
20248	var done bool
20249	done, err = future.DoneWithContext(context.Background(), client)
20250	if err != nil {
20251		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
20252		return
20253	}
20254	if !done {
20255		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
20256		return
20257	}
20258	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20259	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
20260		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
20261		if err != nil {
20262			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
20263		}
20264	}
20265	return
20266}
20267
20268// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
20269// operation.
20270type PacketCapturesStopFuture struct {
20271	azure.Future
20272}
20273
20274// Result returns the result of the asynchronous operation.
20275// If the operation has not completed it will return an error.
20276func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
20277	var done bool
20278	done, err = future.DoneWithContext(context.Background(), client)
20279	if err != nil {
20280		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
20281		return
20282	}
20283	if !done {
20284		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
20285		return
20286	}
20287	ar.Response = future.Response()
20288	return
20289}
20290
20291// PacketCaptureStorageLocation describes the storage location for a packet capture session.
20292type PacketCaptureStorageLocation struct {
20293	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
20294	StorageID *string `json:"storageId,omitempty"`
20295	// 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.
20296	StoragePath *string `json:"storagePath,omitempty"`
20297	// 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.
20298	FilePath *string `json:"filePath,omitempty"`
20299}
20300
20301// PatchRouteFilter route Filter Resource.
20302type PatchRouteFilter struct {
20303	// RouteFilterPropertiesFormat - Properties of the route filter.
20304	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
20305	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
20306	Name *string `json:"name,omitempty"`
20307	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20308	Etag *string `json:"etag,omitempty"`
20309	// Type - READ-ONLY; Resource type.
20310	Type *string `json:"type,omitempty"`
20311	// Tags - Resource tags.
20312	Tags map[string]*string `json:"tags"`
20313	// ID - Resource ID.
20314	ID *string `json:"id,omitempty"`
20315}
20316
20317// MarshalJSON is the custom marshaler for PatchRouteFilter.
20318func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
20319	objectMap := make(map[string]interface{})
20320	if prf.RouteFilterPropertiesFormat != nil {
20321		objectMap["properties"] = prf.RouteFilterPropertiesFormat
20322	}
20323	if prf.Tags != nil {
20324		objectMap["tags"] = prf.Tags
20325	}
20326	if prf.ID != nil {
20327		objectMap["id"] = prf.ID
20328	}
20329	return json.Marshal(objectMap)
20330}
20331
20332// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
20333func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
20334	var m map[string]*json.RawMessage
20335	err := json.Unmarshal(body, &m)
20336	if err != nil {
20337		return err
20338	}
20339	for k, v := range m {
20340		switch k {
20341		case "properties":
20342			if v != nil {
20343				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
20344				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
20345				if err != nil {
20346					return err
20347				}
20348				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
20349			}
20350		case "name":
20351			if v != nil {
20352				var name string
20353				err = json.Unmarshal(*v, &name)
20354				if err != nil {
20355					return err
20356				}
20357				prf.Name = &name
20358			}
20359		case "etag":
20360			if v != nil {
20361				var etag string
20362				err = json.Unmarshal(*v, &etag)
20363				if err != nil {
20364					return err
20365				}
20366				prf.Etag = &etag
20367			}
20368		case "type":
20369			if v != nil {
20370				var typeVar string
20371				err = json.Unmarshal(*v, &typeVar)
20372				if err != nil {
20373					return err
20374				}
20375				prf.Type = &typeVar
20376			}
20377		case "tags":
20378			if v != nil {
20379				var tags map[string]*string
20380				err = json.Unmarshal(*v, &tags)
20381				if err != nil {
20382					return err
20383				}
20384				prf.Tags = tags
20385			}
20386		case "id":
20387			if v != nil {
20388				var ID string
20389				err = json.Unmarshal(*v, &ID)
20390				if err != nil {
20391					return err
20392				}
20393				prf.ID = &ID
20394			}
20395		}
20396	}
20397
20398	return nil
20399}
20400
20401// PatchRouteFilterRule route Filter Rule Resource.
20402type PatchRouteFilterRule struct {
20403	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
20404	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
20405	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
20406	Name *string `json:"name,omitempty"`
20407	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20408	Etag *string `json:"etag,omitempty"`
20409	// ID - Resource ID.
20410	ID *string `json:"id,omitempty"`
20411}
20412
20413// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
20414func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
20415	objectMap := make(map[string]interface{})
20416	if prfr.RouteFilterRulePropertiesFormat != nil {
20417		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
20418	}
20419	if prfr.ID != nil {
20420		objectMap["id"] = prfr.ID
20421	}
20422	return json.Marshal(objectMap)
20423}
20424
20425// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
20426func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
20427	var m map[string]*json.RawMessage
20428	err := json.Unmarshal(body, &m)
20429	if err != nil {
20430		return err
20431	}
20432	for k, v := range m {
20433		switch k {
20434		case "properties":
20435			if v != nil {
20436				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
20437				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
20438				if err != nil {
20439					return err
20440				}
20441				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
20442			}
20443		case "name":
20444			if v != nil {
20445				var name string
20446				err = json.Unmarshal(*v, &name)
20447				if err != nil {
20448					return err
20449				}
20450				prfr.Name = &name
20451			}
20452		case "etag":
20453			if v != nil {
20454				var etag string
20455				err = json.Unmarshal(*v, &etag)
20456				if err != nil {
20457					return err
20458				}
20459				prfr.Etag = &etag
20460			}
20461		case "id":
20462			if v != nil {
20463				var ID string
20464				err = json.Unmarshal(*v, &ID)
20465				if err != nil {
20466					return err
20467				}
20468				prfr.ID = &ID
20469			}
20470		}
20471	}
20472
20473	return nil
20474}
20475
20476// PeerExpressRouteCircuitConnection peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
20477// resource.
20478type PeerExpressRouteCircuitConnection struct {
20479	autorest.Response `json:"-"`
20480	// PeerExpressRouteCircuitConnectionPropertiesFormat - Properties of the peer express route circuit connection.
20481	*PeerExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
20482	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
20483	Name *string `json:"name,omitempty"`
20484	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20485	Etag *string `json:"etag,omitempty"`
20486	// Type - READ-ONLY; Type of the resource.
20487	Type *string `json:"type,omitempty"`
20488	// ID - Resource ID.
20489	ID *string `json:"id,omitempty"`
20490}
20491
20492// MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnection.
20493func (percc PeerExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
20494	objectMap := make(map[string]interface{})
20495	if percc.PeerExpressRouteCircuitConnectionPropertiesFormat != nil {
20496		objectMap["properties"] = percc.PeerExpressRouteCircuitConnectionPropertiesFormat
20497	}
20498	if percc.Name != nil {
20499		objectMap["name"] = percc.Name
20500	}
20501	if percc.ID != nil {
20502		objectMap["id"] = percc.ID
20503	}
20504	return json.Marshal(objectMap)
20505}
20506
20507// UnmarshalJSON is the custom unmarshaler for PeerExpressRouteCircuitConnection struct.
20508func (percc *PeerExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
20509	var m map[string]*json.RawMessage
20510	err := json.Unmarshal(body, &m)
20511	if err != nil {
20512		return err
20513	}
20514	for k, v := range m {
20515		switch k {
20516		case "properties":
20517			if v != nil {
20518				var peerExpressRouteCircuitConnectionPropertiesFormat PeerExpressRouteCircuitConnectionPropertiesFormat
20519				err = json.Unmarshal(*v, &peerExpressRouteCircuitConnectionPropertiesFormat)
20520				if err != nil {
20521					return err
20522				}
20523				percc.PeerExpressRouteCircuitConnectionPropertiesFormat = &peerExpressRouteCircuitConnectionPropertiesFormat
20524			}
20525		case "name":
20526			if v != nil {
20527				var name string
20528				err = json.Unmarshal(*v, &name)
20529				if err != nil {
20530					return err
20531				}
20532				percc.Name = &name
20533			}
20534		case "etag":
20535			if v != nil {
20536				var etag string
20537				err = json.Unmarshal(*v, &etag)
20538				if err != nil {
20539					return err
20540				}
20541				percc.Etag = &etag
20542			}
20543		case "type":
20544			if v != nil {
20545				var typeVar string
20546				err = json.Unmarshal(*v, &typeVar)
20547				if err != nil {
20548					return err
20549				}
20550				percc.Type = &typeVar
20551			}
20552		case "id":
20553			if v != nil {
20554				var ID string
20555				err = json.Unmarshal(*v, &ID)
20556				if err != nil {
20557					return err
20558				}
20559				percc.ID = &ID
20560			}
20561		}
20562	}
20563
20564	return nil
20565}
20566
20567// PeerExpressRouteCircuitConnectionListResult response for ListPeeredConnections API service call
20568// retrieves all global reach peer circuit connections that belongs to a Private Peering for an
20569// ExpressRouteCircuit.
20570type PeerExpressRouteCircuitConnectionListResult struct {
20571	autorest.Response `json:"-"`
20572	// Value - The global reach peer circuit connection associated with Private Peering in an ExpressRoute Circuit.
20573	Value *[]PeerExpressRouteCircuitConnection `json:"value,omitempty"`
20574	// NextLink - The URL to get the next set of results.
20575	NextLink *string `json:"nextLink,omitempty"`
20576}
20577
20578// PeerExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
20579// PeerExpressRouteCircuitConnection values.
20580type PeerExpressRouteCircuitConnectionListResultIterator struct {
20581	i    int
20582	page PeerExpressRouteCircuitConnectionListResultPage
20583}
20584
20585// NextWithContext advances to the next value.  If there was an error making
20586// the request the iterator does not advance and the error is returned.
20587func (iter *PeerExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
20588	if tracing.IsEnabled() {
20589		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultIterator.NextWithContext")
20590		defer func() {
20591			sc := -1
20592			if iter.Response().Response.Response != nil {
20593				sc = iter.Response().Response.Response.StatusCode
20594			}
20595			tracing.EndSpan(ctx, sc, err)
20596		}()
20597	}
20598	iter.i++
20599	if iter.i < len(iter.page.Values()) {
20600		return nil
20601	}
20602	err = iter.page.NextWithContext(ctx)
20603	if err != nil {
20604		iter.i--
20605		return err
20606	}
20607	iter.i = 0
20608	return nil
20609}
20610
20611// Next advances to the next value.  If there was an error making
20612// the request the iterator does not advance and the error is returned.
20613// Deprecated: Use NextWithContext() instead.
20614func (iter *PeerExpressRouteCircuitConnectionListResultIterator) Next() error {
20615	return iter.NextWithContext(context.Background())
20616}
20617
20618// NotDone returns true if the enumeration should be started or is not yet complete.
20619func (iter PeerExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
20620	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20621}
20622
20623// Response returns the raw server response from the last page request.
20624func (iter PeerExpressRouteCircuitConnectionListResultIterator) Response() PeerExpressRouteCircuitConnectionListResult {
20625	return iter.page.Response()
20626}
20627
20628// Value returns the current value or a zero-initialized value if the
20629// iterator has advanced beyond the end of the collection.
20630func (iter PeerExpressRouteCircuitConnectionListResultIterator) Value() PeerExpressRouteCircuitConnection {
20631	if !iter.page.NotDone() {
20632		return PeerExpressRouteCircuitConnection{}
20633	}
20634	return iter.page.Values()[iter.i]
20635}
20636
20637// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultIterator type.
20638func NewPeerExpressRouteCircuitConnectionListResultIterator(page PeerExpressRouteCircuitConnectionListResultPage) PeerExpressRouteCircuitConnectionListResultIterator {
20639	return PeerExpressRouteCircuitConnectionListResultIterator{page: page}
20640}
20641
20642// IsEmpty returns true if the ListResult contains no values.
20643func (percclr PeerExpressRouteCircuitConnectionListResult) IsEmpty() bool {
20644	return percclr.Value == nil || len(*percclr.Value) == 0
20645}
20646
20647// peerExpressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
20648// It returns nil if no more results exist.
20649func (percclr PeerExpressRouteCircuitConnectionListResult) peerExpressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
20650	if percclr.NextLink == nil || len(to.String(percclr.NextLink)) < 1 {
20651		return nil, nil
20652	}
20653	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20654		autorest.AsJSON(),
20655		autorest.AsGet(),
20656		autorest.WithBaseURL(to.String(percclr.NextLink)))
20657}
20658
20659// PeerExpressRouteCircuitConnectionListResultPage contains a page of PeerExpressRouteCircuitConnection
20660// values.
20661type PeerExpressRouteCircuitConnectionListResultPage struct {
20662	fn      func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)
20663	percclr PeerExpressRouteCircuitConnectionListResult
20664}
20665
20666// NextWithContext advances to the next page of values.  If there was an error making
20667// the request the page does not advance and the error is returned.
20668func (page *PeerExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
20669	if tracing.IsEnabled() {
20670		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultPage.NextWithContext")
20671		defer func() {
20672			sc := -1
20673			if page.Response().Response.Response != nil {
20674				sc = page.Response().Response.Response.StatusCode
20675			}
20676			tracing.EndSpan(ctx, sc, err)
20677		}()
20678	}
20679	next, err := page.fn(ctx, page.percclr)
20680	if err != nil {
20681		return err
20682	}
20683	page.percclr = next
20684	return nil
20685}
20686
20687// Next advances to the next page of values.  If there was an error making
20688// the request the page does not advance and the error is returned.
20689// Deprecated: Use NextWithContext() instead.
20690func (page *PeerExpressRouteCircuitConnectionListResultPage) Next() error {
20691	return page.NextWithContext(context.Background())
20692}
20693
20694// NotDone returns true if the page enumeration should be started or is not yet complete.
20695func (page PeerExpressRouteCircuitConnectionListResultPage) NotDone() bool {
20696	return !page.percclr.IsEmpty()
20697}
20698
20699// Response returns the raw server response from the last page request.
20700func (page PeerExpressRouteCircuitConnectionListResultPage) Response() PeerExpressRouteCircuitConnectionListResult {
20701	return page.percclr
20702}
20703
20704// Values returns the slice of values for the current page or nil if there are no values.
20705func (page PeerExpressRouteCircuitConnectionListResultPage) Values() []PeerExpressRouteCircuitConnection {
20706	if page.percclr.IsEmpty() {
20707		return nil
20708	}
20709	return *page.percclr.Value
20710}
20711
20712// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultPage type.
20713func NewPeerExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)) PeerExpressRouteCircuitConnectionListResultPage {
20714	return PeerExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
20715}
20716
20717// PeerExpressRouteCircuitConnectionPropertiesFormat properties of the peer express route circuit
20718// connection.
20719type PeerExpressRouteCircuitConnectionPropertiesFormat struct {
20720	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit.
20721	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
20722	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
20723	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
20724	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
20725	AddressPrefix *string `json:"addressPrefix,omitempty"`
20726	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
20727	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
20728	// ConnectionName - The name of the express route circuit connection resource.
20729	ConnectionName *string `json:"connectionName,omitempty"`
20730	// AuthResourceGUID - The resource guid of the authorization used for the express route circuit connection.
20731	AuthResourceGUID *string `json:"authResourceGuid,omitempty"`
20732	// ProvisioningState - READ-ONLY; Provisioning state of the peer express route circuit connection resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
20733	ProvisioningState *string `json:"provisioningState,omitempty"`
20734}
20735
20736// PolicySettings defines contents of a web application firewall global configuration.
20737type PolicySettings struct {
20738	// EnabledState - Describes if the policy is in enabled state or disabled state. Possible values include: 'WebApplicationFirewallEnabledStateDisabled', 'WebApplicationFirewallEnabledStateEnabled'
20739	EnabledState WebApplicationFirewallEnabledState `json:"enabledState,omitempty"`
20740	// Mode - Describes if it is in detection mode or prevention mode at policy level. Possible values include: 'WebApplicationFirewallModePrevention', 'WebApplicationFirewallModeDetection'
20741	Mode WebApplicationFirewallMode `json:"mode,omitempty"`
20742}
20743
20744// PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet.
20745type PrepareNetworkPoliciesRequest struct {
20746	// ServiceName - The name of the service for which subnet is being prepared for.
20747	ServiceName *string `json:"serviceName,omitempty"`
20748	// ResourceGroupName - The name of the resource group where the Network Intent Policy will be stored.
20749	ResourceGroupName *string `json:"resourceGroupName,omitempty"`
20750	// NetworkIntentPolicyConfigurations - A list of NetworkIntentPolicyConfiguration.
20751	NetworkIntentPolicyConfigurations *[]IntentPolicyConfiguration `json:"networkIntentPolicyConfigurations,omitempty"`
20752}
20753
20754// PrivateEndpoint private endpoint resource.
20755type PrivateEndpoint struct {
20756	autorest.Response `json:"-"`
20757	// PrivateEndpointProperties - Properties of the private endpoint.
20758	*PrivateEndpointProperties `json:"properties,omitempty"`
20759	// Etag - A unique read-only string that changes whenever the resource is updated.
20760	Etag *string `json:"etag,omitempty"`
20761	// ID - Resource ID.
20762	ID *string `json:"id,omitempty"`
20763	// Name - READ-ONLY; Resource name.
20764	Name *string `json:"name,omitempty"`
20765	// Type - READ-ONLY; Resource type.
20766	Type *string `json:"type,omitempty"`
20767	// Location - Resource location.
20768	Location *string `json:"location,omitempty"`
20769	// Tags - Resource tags.
20770	Tags map[string]*string `json:"tags"`
20771}
20772
20773// MarshalJSON is the custom marshaler for PrivateEndpoint.
20774func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) {
20775	objectMap := make(map[string]interface{})
20776	if peVar.PrivateEndpointProperties != nil {
20777		objectMap["properties"] = peVar.PrivateEndpointProperties
20778	}
20779	if peVar.Etag != nil {
20780		objectMap["etag"] = peVar.Etag
20781	}
20782	if peVar.ID != nil {
20783		objectMap["id"] = peVar.ID
20784	}
20785	if peVar.Location != nil {
20786		objectMap["location"] = peVar.Location
20787	}
20788	if peVar.Tags != nil {
20789		objectMap["tags"] = peVar.Tags
20790	}
20791	return json.Marshal(objectMap)
20792}
20793
20794// UnmarshalJSON is the custom unmarshaler for PrivateEndpoint struct.
20795func (peVar *PrivateEndpoint) UnmarshalJSON(body []byte) error {
20796	var m map[string]*json.RawMessage
20797	err := json.Unmarshal(body, &m)
20798	if err != nil {
20799		return err
20800	}
20801	for k, v := range m {
20802		switch k {
20803		case "properties":
20804			if v != nil {
20805				var privateEndpointProperties PrivateEndpointProperties
20806				err = json.Unmarshal(*v, &privateEndpointProperties)
20807				if err != nil {
20808					return err
20809				}
20810				peVar.PrivateEndpointProperties = &privateEndpointProperties
20811			}
20812		case "etag":
20813			if v != nil {
20814				var etag string
20815				err = json.Unmarshal(*v, &etag)
20816				if err != nil {
20817					return err
20818				}
20819				peVar.Etag = &etag
20820			}
20821		case "id":
20822			if v != nil {
20823				var ID string
20824				err = json.Unmarshal(*v, &ID)
20825				if err != nil {
20826					return err
20827				}
20828				peVar.ID = &ID
20829			}
20830		case "name":
20831			if v != nil {
20832				var name string
20833				err = json.Unmarshal(*v, &name)
20834				if err != nil {
20835					return err
20836				}
20837				peVar.Name = &name
20838			}
20839		case "type":
20840			if v != nil {
20841				var typeVar string
20842				err = json.Unmarshal(*v, &typeVar)
20843				if err != nil {
20844					return err
20845				}
20846				peVar.Type = &typeVar
20847			}
20848		case "location":
20849			if v != nil {
20850				var location string
20851				err = json.Unmarshal(*v, &location)
20852				if err != nil {
20853					return err
20854				}
20855				peVar.Location = &location
20856			}
20857		case "tags":
20858			if v != nil {
20859				var tags map[string]*string
20860				err = json.Unmarshal(*v, &tags)
20861				if err != nil {
20862					return err
20863				}
20864				peVar.Tags = tags
20865			}
20866		}
20867	}
20868
20869	return nil
20870}
20871
20872// PrivateEndpointConnection privateEndpointConnection resource.
20873type PrivateEndpointConnection struct {
20874	autorest.Response `json:"-"`
20875	// PrivateEndpointConnectionProperties - Properties of the private end point connection.
20876	*PrivateEndpointConnectionProperties `json:"properties,omitempty"`
20877	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
20878	Name *string `json:"name,omitempty"`
20879	// Type - READ-ONLY; The resource type.
20880	Type *string `json:"type,omitempty"`
20881	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20882	Etag *string `json:"etag,omitempty"`
20883	// ID - Resource ID.
20884	ID *string `json:"id,omitempty"`
20885}
20886
20887// MarshalJSON is the custom marshaler for PrivateEndpointConnection.
20888func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) {
20889	objectMap := make(map[string]interface{})
20890	if pec.PrivateEndpointConnectionProperties != nil {
20891		objectMap["properties"] = pec.PrivateEndpointConnectionProperties
20892	}
20893	if pec.Name != nil {
20894		objectMap["name"] = pec.Name
20895	}
20896	if pec.ID != nil {
20897		objectMap["id"] = pec.ID
20898	}
20899	return json.Marshal(objectMap)
20900}
20901
20902// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct.
20903func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error {
20904	var m map[string]*json.RawMessage
20905	err := json.Unmarshal(body, &m)
20906	if err != nil {
20907		return err
20908	}
20909	for k, v := range m {
20910		switch k {
20911		case "properties":
20912			if v != nil {
20913				var privateEndpointConnectionProperties PrivateEndpointConnectionProperties
20914				err = json.Unmarshal(*v, &privateEndpointConnectionProperties)
20915				if err != nil {
20916					return err
20917				}
20918				pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties
20919			}
20920		case "name":
20921			if v != nil {
20922				var name string
20923				err = json.Unmarshal(*v, &name)
20924				if err != nil {
20925					return err
20926				}
20927				pec.Name = &name
20928			}
20929		case "type":
20930			if v != nil {
20931				var typeVar string
20932				err = json.Unmarshal(*v, &typeVar)
20933				if err != nil {
20934					return err
20935				}
20936				pec.Type = &typeVar
20937			}
20938		case "etag":
20939			if v != nil {
20940				var etag string
20941				err = json.Unmarshal(*v, &etag)
20942				if err != nil {
20943					return err
20944				}
20945				pec.Etag = &etag
20946			}
20947		case "id":
20948			if v != nil {
20949				var ID string
20950				err = json.Unmarshal(*v, &ID)
20951				if err != nil {
20952					return err
20953				}
20954				pec.ID = &ID
20955			}
20956		}
20957	}
20958
20959	return nil
20960}
20961
20962// PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties.
20963type PrivateEndpointConnectionProperties struct {
20964	// PrivateEndpoint - The resource of private end point.
20965	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
20966	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
20967	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
20968	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint connection. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20969	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20970}
20971
20972// PrivateEndpointListResult response for the ListPrivateEndpoints API service call.
20973type PrivateEndpointListResult struct {
20974	autorest.Response `json:"-"`
20975	// Value - Gets a list of private endpoint resources in a resource group.
20976	Value *[]PrivateEndpoint `json:"value,omitempty"`
20977	// NextLink - READ-ONLY; The URL to get the next set of results.
20978	NextLink *string `json:"nextLink,omitempty"`
20979}
20980
20981// PrivateEndpointListResultIterator provides access to a complete listing of PrivateEndpoint values.
20982type PrivateEndpointListResultIterator struct {
20983	i    int
20984	page PrivateEndpointListResultPage
20985}
20986
20987// NextWithContext advances to the next value.  If there was an error making
20988// the request the iterator does not advance and the error is returned.
20989func (iter *PrivateEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
20990	if tracing.IsEnabled() {
20991		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultIterator.NextWithContext")
20992		defer func() {
20993			sc := -1
20994			if iter.Response().Response.Response != nil {
20995				sc = iter.Response().Response.Response.StatusCode
20996			}
20997			tracing.EndSpan(ctx, sc, err)
20998		}()
20999	}
21000	iter.i++
21001	if iter.i < len(iter.page.Values()) {
21002		return nil
21003	}
21004	err = iter.page.NextWithContext(ctx)
21005	if err != nil {
21006		iter.i--
21007		return err
21008	}
21009	iter.i = 0
21010	return nil
21011}
21012
21013// Next advances to the next value.  If there was an error making
21014// the request the iterator does not advance and the error is returned.
21015// Deprecated: Use NextWithContext() instead.
21016func (iter *PrivateEndpointListResultIterator) Next() error {
21017	return iter.NextWithContext(context.Background())
21018}
21019
21020// NotDone returns true if the enumeration should be started or is not yet complete.
21021func (iter PrivateEndpointListResultIterator) NotDone() bool {
21022	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21023}
21024
21025// Response returns the raw server response from the last page request.
21026func (iter PrivateEndpointListResultIterator) Response() PrivateEndpointListResult {
21027	return iter.page.Response()
21028}
21029
21030// Value returns the current value or a zero-initialized value if the
21031// iterator has advanced beyond the end of the collection.
21032func (iter PrivateEndpointListResultIterator) Value() PrivateEndpoint {
21033	if !iter.page.NotDone() {
21034		return PrivateEndpoint{}
21035	}
21036	return iter.page.Values()[iter.i]
21037}
21038
21039// Creates a new instance of the PrivateEndpointListResultIterator type.
21040func NewPrivateEndpointListResultIterator(page PrivateEndpointListResultPage) PrivateEndpointListResultIterator {
21041	return PrivateEndpointListResultIterator{page: page}
21042}
21043
21044// IsEmpty returns true if the ListResult contains no values.
21045func (pelr PrivateEndpointListResult) IsEmpty() bool {
21046	return pelr.Value == nil || len(*pelr.Value) == 0
21047}
21048
21049// privateEndpointListResultPreparer prepares a request to retrieve the next set of results.
21050// It returns nil if no more results exist.
21051func (pelr PrivateEndpointListResult) privateEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
21052	if pelr.NextLink == nil || len(to.String(pelr.NextLink)) < 1 {
21053		return nil, nil
21054	}
21055	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21056		autorest.AsJSON(),
21057		autorest.AsGet(),
21058		autorest.WithBaseURL(to.String(pelr.NextLink)))
21059}
21060
21061// PrivateEndpointListResultPage contains a page of PrivateEndpoint values.
21062type PrivateEndpointListResultPage struct {
21063	fn   func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)
21064	pelr PrivateEndpointListResult
21065}
21066
21067// NextWithContext advances to the next page of values.  If there was an error making
21068// the request the page does not advance and the error is returned.
21069func (page *PrivateEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
21070	if tracing.IsEnabled() {
21071		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultPage.NextWithContext")
21072		defer func() {
21073			sc := -1
21074			if page.Response().Response.Response != nil {
21075				sc = page.Response().Response.Response.StatusCode
21076			}
21077			tracing.EndSpan(ctx, sc, err)
21078		}()
21079	}
21080	next, err := page.fn(ctx, page.pelr)
21081	if err != nil {
21082		return err
21083	}
21084	page.pelr = next
21085	return nil
21086}
21087
21088// Next advances to the next page of values.  If there was an error making
21089// the request the page does not advance and the error is returned.
21090// Deprecated: Use NextWithContext() instead.
21091func (page *PrivateEndpointListResultPage) Next() error {
21092	return page.NextWithContext(context.Background())
21093}
21094
21095// NotDone returns true if the page enumeration should be started or is not yet complete.
21096func (page PrivateEndpointListResultPage) NotDone() bool {
21097	return !page.pelr.IsEmpty()
21098}
21099
21100// Response returns the raw server response from the last page request.
21101func (page PrivateEndpointListResultPage) Response() PrivateEndpointListResult {
21102	return page.pelr
21103}
21104
21105// Values returns the slice of values for the current page or nil if there are no values.
21106func (page PrivateEndpointListResultPage) Values() []PrivateEndpoint {
21107	if page.pelr.IsEmpty() {
21108		return nil
21109	}
21110	return *page.pelr.Value
21111}
21112
21113// Creates a new instance of the PrivateEndpointListResultPage type.
21114func NewPrivateEndpointListResultPage(getNextPage func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)) PrivateEndpointListResultPage {
21115	return PrivateEndpointListResultPage{fn: getNextPage}
21116}
21117
21118// PrivateEndpointProperties properties of the private endpoint.
21119type PrivateEndpointProperties struct {
21120	// Subnet - The ID of the subnet from which the private IP will be allocated.
21121	Subnet *Subnet `json:"subnet,omitempty"`
21122	// NetworkInterfaces - READ-ONLY; Gets an array of references to the network interfaces created for this private endpoint.
21123	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
21124	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21125	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21126	// PrivateLinkServiceConnections - A grouping of information about the connection to the remote resource.
21127	PrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"privateLinkServiceConnections,omitempty"`
21128	// 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.
21129	ManualPrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"manualPrivateLinkServiceConnections,omitempty"`
21130}
21131
21132// PrivateEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21133// long-running operation.
21134type PrivateEndpointsCreateOrUpdateFuture struct {
21135	azure.Future
21136}
21137
21138// Result returns the result of the asynchronous operation.
21139// If the operation has not completed it will return an error.
21140func (future *PrivateEndpointsCreateOrUpdateFuture) Result(client PrivateEndpointsClient) (peVar PrivateEndpoint, err error) {
21141	var done bool
21142	done, err = future.DoneWithContext(context.Background(), client)
21143	if err != nil {
21144		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21145		return
21146	}
21147	if !done {
21148		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsCreateOrUpdateFuture")
21149		return
21150	}
21151	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21152	if peVar.Response.Response, err = future.GetResult(sender); err == nil && peVar.Response.Response.StatusCode != http.StatusNoContent {
21153		peVar, err = client.CreateOrUpdateResponder(peVar.Response.Response)
21154		if err != nil {
21155			err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", peVar.Response.Response, "Failure responding to request")
21156		}
21157	}
21158	return
21159}
21160
21161// PrivateEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21162// operation.
21163type PrivateEndpointsDeleteFuture struct {
21164	azure.Future
21165}
21166
21167// Result returns the result of the asynchronous operation.
21168// If the operation has not completed it will return an error.
21169func (future *PrivateEndpointsDeleteFuture) Result(client PrivateEndpointsClient) (ar autorest.Response, err error) {
21170	var done bool
21171	done, err = future.DoneWithContext(context.Background(), client)
21172	if err != nil {
21173		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
21174		return
21175	}
21176	if !done {
21177		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsDeleteFuture")
21178		return
21179	}
21180	ar.Response = future.Response()
21181	return
21182}
21183
21184// PrivateLinkService private link service resource.
21185type PrivateLinkService struct {
21186	autorest.Response `json:"-"`
21187	// PrivateLinkServiceProperties - Properties of the private link service.
21188	*PrivateLinkServiceProperties `json:"properties,omitempty"`
21189	// Etag - A unique read-only string that changes whenever the resource is updated.
21190	Etag *string `json:"etag,omitempty"`
21191	// ID - Resource ID.
21192	ID *string `json:"id,omitempty"`
21193	// Name - READ-ONLY; Resource name.
21194	Name *string `json:"name,omitempty"`
21195	// Type - READ-ONLY; Resource type.
21196	Type *string `json:"type,omitempty"`
21197	// Location - Resource location.
21198	Location *string `json:"location,omitempty"`
21199	// Tags - Resource tags.
21200	Tags map[string]*string `json:"tags"`
21201}
21202
21203// MarshalJSON is the custom marshaler for PrivateLinkService.
21204func (pls PrivateLinkService) MarshalJSON() ([]byte, error) {
21205	objectMap := make(map[string]interface{})
21206	if pls.PrivateLinkServiceProperties != nil {
21207		objectMap["properties"] = pls.PrivateLinkServiceProperties
21208	}
21209	if pls.Etag != nil {
21210		objectMap["etag"] = pls.Etag
21211	}
21212	if pls.ID != nil {
21213		objectMap["id"] = pls.ID
21214	}
21215	if pls.Location != nil {
21216		objectMap["location"] = pls.Location
21217	}
21218	if pls.Tags != nil {
21219		objectMap["tags"] = pls.Tags
21220	}
21221	return json.Marshal(objectMap)
21222}
21223
21224// UnmarshalJSON is the custom unmarshaler for PrivateLinkService struct.
21225func (pls *PrivateLinkService) UnmarshalJSON(body []byte) error {
21226	var m map[string]*json.RawMessage
21227	err := json.Unmarshal(body, &m)
21228	if err != nil {
21229		return err
21230	}
21231	for k, v := range m {
21232		switch k {
21233		case "properties":
21234			if v != nil {
21235				var privateLinkServiceProperties PrivateLinkServiceProperties
21236				err = json.Unmarshal(*v, &privateLinkServiceProperties)
21237				if err != nil {
21238					return err
21239				}
21240				pls.PrivateLinkServiceProperties = &privateLinkServiceProperties
21241			}
21242		case "etag":
21243			if v != nil {
21244				var etag string
21245				err = json.Unmarshal(*v, &etag)
21246				if err != nil {
21247					return err
21248				}
21249				pls.Etag = &etag
21250			}
21251		case "id":
21252			if v != nil {
21253				var ID string
21254				err = json.Unmarshal(*v, &ID)
21255				if err != nil {
21256					return err
21257				}
21258				pls.ID = &ID
21259			}
21260		case "name":
21261			if v != nil {
21262				var name string
21263				err = json.Unmarshal(*v, &name)
21264				if err != nil {
21265					return err
21266				}
21267				pls.Name = &name
21268			}
21269		case "type":
21270			if v != nil {
21271				var typeVar string
21272				err = json.Unmarshal(*v, &typeVar)
21273				if err != nil {
21274					return err
21275				}
21276				pls.Type = &typeVar
21277			}
21278		case "location":
21279			if v != nil {
21280				var location string
21281				err = json.Unmarshal(*v, &location)
21282				if err != nil {
21283					return err
21284				}
21285				pls.Location = &location
21286			}
21287		case "tags":
21288			if v != nil {
21289				var tags map[string]*string
21290				err = json.Unmarshal(*v, &tags)
21291				if err != nil {
21292					return err
21293				}
21294				pls.Tags = tags
21295			}
21296		}
21297	}
21298
21299	return nil
21300}
21301
21302// PrivateLinkServiceConnection privateLinkServiceConnection resource.
21303type PrivateLinkServiceConnection struct {
21304	// PrivateLinkServiceConnectionProperties - Properties of the private link service connection.
21305	*PrivateLinkServiceConnectionProperties `json:"properties,omitempty"`
21306	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21307	Name *string `json:"name,omitempty"`
21308	// Type - READ-ONLY; The resource type.
21309	Type *string `json:"type,omitempty"`
21310	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21311	Etag *string `json:"etag,omitempty"`
21312	// ID - Resource ID.
21313	ID *string `json:"id,omitempty"`
21314}
21315
21316// MarshalJSON is the custom marshaler for PrivateLinkServiceConnection.
21317func (plsc PrivateLinkServiceConnection) MarshalJSON() ([]byte, error) {
21318	objectMap := make(map[string]interface{})
21319	if plsc.PrivateLinkServiceConnectionProperties != nil {
21320		objectMap["properties"] = plsc.PrivateLinkServiceConnectionProperties
21321	}
21322	if plsc.Name != nil {
21323		objectMap["name"] = plsc.Name
21324	}
21325	if plsc.ID != nil {
21326		objectMap["id"] = plsc.ID
21327	}
21328	return json.Marshal(objectMap)
21329}
21330
21331// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceConnection struct.
21332func (plsc *PrivateLinkServiceConnection) UnmarshalJSON(body []byte) error {
21333	var m map[string]*json.RawMessage
21334	err := json.Unmarshal(body, &m)
21335	if err != nil {
21336		return err
21337	}
21338	for k, v := range m {
21339		switch k {
21340		case "properties":
21341			if v != nil {
21342				var privateLinkServiceConnectionProperties PrivateLinkServiceConnectionProperties
21343				err = json.Unmarshal(*v, &privateLinkServiceConnectionProperties)
21344				if err != nil {
21345					return err
21346				}
21347				plsc.PrivateLinkServiceConnectionProperties = &privateLinkServiceConnectionProperties
21348			}
21349		case "name":
21350			if v != nil {
21351				var name string
21352				err = json.Unmarshal(*v, &name)
21353				if err != nil {
21354					return err
21355				}
21356				plsc.Name = &name
21357			}
21358		case "type":
21359			if v != nil {
21360				var typeVar string
21361				err = json.Unmarshal(*v, &typeVar)
21362				if err != nil {
21363					return err
21364				}
21365				plsc.Type = &typeVar
21366			}
21367		case "etag":
21368			if v != nil {
21369				var etag string
21370				err = json.Unmarshal(*v, &etag)
21371				if err != nil {
21372					return err
21373				}
21374				plsc.Etag = &etag
21375			}
21376		case "id":
21377			if v != nil {
21378				var ID string
21379				err = json.Unmarshal(*v, &ID)
21380				if err != nil {
21381					return err
21382				}
21383				plsc.ID = &ID
21384			}
21385		}
21386	}
21387
21388	return nil
21389}
21390
21391// PrivateLinkServiceConnectionProperties properties of the PrivateLinkServiceConnection.
21392type PrivateLinkServiceConnectionProperties struct {
21393	// ProvisioningState - READ-ONLY; The provisioning state of the private link service connection. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21394	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21395	// PrivateLinkServiceID - The resource id of private link service.
21396	PrivateLinkServiceID *string `json:"privateLinkServiceId,omitempty"`
21397	// GroupIds - The ID(s) of the group(s) obtained from the remote resource that this private endpoint should connect to.
21398	GroupIds *[]string `json:"groupIds,omitempty"`
21399	// RequestMessage - A message passed to the owner of the remote resource with this connection request. Restricted to 140 chars.
21400	RequestMessage *string `json:"requestMessage,omitempty"`
21401	// PrivateLinkServiceConnectionState - A collection of read-only information about the state of the connection to the remote resource.
21402	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
21403}
21404
21405// PrivateLinkServiceConnectionState a collection of information about the state of the connection between
21406// service consumer and provider.
21407type PrivateLinkServiceConnectionState struct {
21408	// Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.
21409	Status *string `json:"status,omitempty"`
21410	// Description - The reason for approval/rejection of the connection.
21411	Description *string `json:"description,omitempty"`
21412	// ActionsRequired - A message indicating if changes on the service provider require any updates on the consumer.
21413	ActionsRequired *string `json:"actionsRequired,omitempty"`
21414}
21415
21416// PrivateLinkServiceIPConfiguration the private link service ip configuration.
21417type PrivateLinkServiceIPConfiguration struct {
21418	// PrivateLinkServiceIPConfigurationProperties - Properties of the private link service ip configuration.
21419	*PrivateLinkServiceIPConfigurationProperties `json:"properties,omitempty"`
21420	// Name - The name of private link service ip configuration.
21421	Name *string `json:"name,omitempty"`
21422	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21423	Etag *string `json:"etag,omitempty"`
21424	// Type - READ-ONLY; The resource type.
21425	Type *string `json:"type,omitempty"`
21426	// ID - Resource ID.
21427	ID *string `json:"id,omitempty"`
21428}
21429
21430// MarshalJSON is the custom marshaler for PrivateLinkServiceIPConfiguration.
21431func (plsic PrivateLinkServiceIPConfiguration) MarshalJSON() ([]byte, error) {
21432	objectMap := make(map[string]interface{})
21433	if plsic.PrivateLinkServiceIPConfigurationProperties != nil {
21434		objectMap["properties"] = plsic.PrivateLinkServiceIPConfigurationProperties
21435	}
21436	if plsic.Name != nil {
21437		objectMap["name"] = plsic.Name
21438	}
21439	if plsic.ID != nil {
21440		objectMap["id"] = plsic.ID
21441	}
21442	return json.Marshal(objectMap)
21443}
21444
21445// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceIPConfiguration struct.
21446func (plsic *PrivateLinkServiceIPConfiguration) UnmarshalJSON(body []byte) error {
21447	var m map[string]*json.RawMessage
21448	err := json.Unmarshal(body, &m)
21449	if err != nil {
21450		return err
21451	}
21452	for k, v := range m {
21453		switch k {
21454		case "properties":
21455			if v != nil {
21456				var privateLinkServiceIPConfigurationProperties PrivateLinkServiceIPConfigurationProperties
21457				err = json.Unmarshal(*v, &privateLinkServiceIPConfigurationProperties)
21458				if err != nil {
21459					return err
21460				}
21461				plsic.PrivateLinkServiceIPConfigurationProperties = &privateLinkServiceIPConfigurationProperties
21462			}
21463		case "name":
21464			if v != nil {
21465				var name string
21466				err = json.Unmarshal(*v, &name)
21467				if err != nil {
21468					return err
21469				}
21470				plsic.Name = &name
21471			}
21472		case "etag":
21473			if v != nil {
21474				var etag string
21475				err = json.Unmarshal(*v, &etag)
21476				if err != nil {
21477					return err
21478				}
21479				plsic.Etag = &etag
21480			}
21481		case "type":
21482			if v != nil {
21483				var typeVar string
21484				err = json.Unmarshal(*v, &typeVar)
21485				if err != nil {
21486					return err
21487				}
21488				plsic.Type = &typeVar
21489			}
21490		case "id":
21491			if v != nil {
21492				var ID string
21493				err = json.Unmarshal(*v, &ID)
21494				if err != nil {
21495					return err
21496				}
21497				plsic.ID = &ID
21498			}
21499		}
21500	}
21501
21502	return nil
21503}
21504
21505// PrivateLinkServiceIPConfigurationProperties properties of private link service IP configuration.
21506type PrivateLinkServiceIPConfigurationProperties struct {
21507	// PrivateIPAddress - The private IP address of the IP configuration.
21508	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
21509	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
21510	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
21511	// Subnet - The reference of the subnet resource.
21512	Subnet *Subnet `json:"subnet,omitempty"`
21513	// Primary - Whether the ip configuration is primary or not.
21514	Primary *bool `json:"primary,omitempty"`
21515	// ProvisioningState - READ-ONLY; The provisioning state of the private link service ip configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21516	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21517	// PrivateIPAddressVersion - Available from Api-Version 2016-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
21518	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
21519}
21520
21521// PrivateLinkServiceListResult response for the ListPrivateLinkService API service call.
21522type PrivateLinkServiceListResult struct {
21523	autorest.Response `json:"-"`
21524	// Value - Gets a list of PrivateLinkService resources in a resource group.
21525	Value *[]PrivateLinkService `json:"value,omitempty"`
21526	// NextLink - READ-ONLY; The URL to get the next set of results.
21527	NextLink *string `json:"nextLink,omitempty"`
21528}
21529
21530// PrivateLinkServiceListResultIterator provides access to a complete listing of PrivateLinkService values.
21531type PrivateLinkServiceListResultIterator struct {
21532	i    int
21533	page PrivateLinkServiceListResultPage
21534}
21535
21536// NextWithContext advances to the next value.  If there was an error making
21537// the request the iterator does not advance and the error is returned.
21538func (iter *PrivateLinkServiceListResultIterator) NextWithContext(ctx context.Context) (err error) {
21539	if tracing.IsEnabled() {
21540		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultIterator.NextWithContext")
21541		defer func() {
21542			sc := -1
21543			if iter.Response().Response.Response != nil {
21544				sc = iter.Response().Response.Response.StatusCode
21545			}
21546			tracing.EndSpan(ctx, sc, err)
21547		}()
21548	}
21549	iter.i++
21550	if iter.i < len(iter.page.Values()) {
21551		return nil
21552	}
21553	err = iter.page.NextWithContext(ctx)
21554	if err != nil {
21555		iter.i--
21556		return err
21557	}
21558	iter.i = 0
21559	return nil
21560}
21561
21562// Next advances to the next value.  If there was an error making
21563// the request the iterator does not advance and the error is returned.
21564// Deprecated: Use NextWithContext() instead.
21565func (iter *PrivateLinkServiceListResultIterator) Next() error {
21566	return iter.NextWithContext(context.Background())
21567}
21568
21569// NotDone returns true if the enumeration should be started or is not yet complete.
21570func (iter PrivateLinkServiceListResultIterator) NotDone() bool {
21571	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21572}
21573
21574// Response returns the raw server response from the last page request.
21575func (iter PrivateLinkServiceListResultIterator) Response() PrivateLinkServiceListResult {
21576	return iter.page.Response()
21577}
21578
21579// Value returns the current value or a zero-initialized value if the
21580// iterator has advanced beyond the end of the collection.
21581func (iter PrivateLinkServiceListResultIterator) Value() PrivateLinkService {
21582	if !iter.page.NotDone() {
21583		return PrivateLinkService{}
21584	}
21585	return iter.page.Values()[iter.i]
21586}
21587
21588// Creates a new instance of the PrivateLinkServiceListResultIterator type.
21589func NewPrivateLinkServiceListResultIterator(page PrivateLinkServiceListResultPage) PrivateLinkServiceListResultIterator {
21590	return PrivateLinkServiceListResultIterator{page: page}
21591}
21592
21593// IsEmpty returns true if the ListResult contains no values.
21594func (plslr PrivateLinkServiceListResult) IsEmpty() bool {
21595	return plslr.Value == nil || len(*plslr.Value) == 0
21596}
21597
21598// privateLinkServiceListResultPreparer prepares a request to retrieve the next set of results.
21599// It returns nil if no more results exist.
21600func (plslr PrivateLinkServiceListResult) privateLinkServiceListResultPreparer(ctx context.Context) (*http.Request, error) {
21601	if plslr.NextLink == nil || len(to.String(plslr.NextLink)) < 1 {
21602		return nil, nil
21603	}
21604	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21605		autorest.AsJSON(),
21606		autorest.AsGet(),
21607		autorest.WithBaseURL(to.String(plslr.NextLink)))
21608}
21609
21610// PrivateLinkServiceListResultPage contains a page of PrivateLinkService values.
21611type PrivateLinkServiceListResultPage struct {
21612	fn    func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)
21613	plslr PrivateLinkServiceListResult
21614}
21615
21616// NextWithContext advances to the next page of values.  If there was an error making
21617// the request the page does not advance and the error is returned.
21618func (page *PrivateLinkServiceListResultPage) NextWithContext(ctx context.Context) (err error) {
21619	if tracing.IsEnabled() {
21620		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultPage.NextWithContext")
21621		defer func() {
21622			sc := -1
21623			if page.Response().Response.Response != nil {
21624				sc = page.Response().Response.Response.StatusCode
21625			}
21626			tracing.EndSpan(ctx, sc, err)
21627		}()
21628	}
21629	next, err := page.fn(ctx, page.plslr)
21630	if err != nil {
21631		return err
21632	}
21633	page.plslr = next
21634	return nil
21635}
21636
21637// Next advances to the next page of values.  If there was an error making
21638// the request the page does not advance and the error is returned.
21639// Deprecated: Use NextWithContext() instead.
21640func (page *PrivateLinkServiceListResultPage) Next() error {
21641	return page.NextWithContext(context.Background())
21642}
21643
21644// NotDone returns true if the page enumeration should be started or is not yet complete.
21645func (page PrivateLinkServiceListResultPage) NotDone() bool {
21646	return !page.plslr.IsEmpty()
21647}
21648
21649// Response returns the raw server response from the last page request.
21650func (page PrivateLinkServiceListResultPage) Response() PrivateLinkServiceListResult {
21651	return page.plslr
21652}
21653
21654// Values returns the slice of values for the current page or nil if there are no values.
21655func (page PrivateLinkServiceListResultPage) Values() []PrivateLinkService {
21656	if page.plslr.IsEmpty() {
21657		return nil
21658	}
21659	return *page.plslr.Value
21660}
21661
21662// Creates a new instance of the PrivateLinkServiceListResultPage type.
21663func NewPrivateLinkServiceListResultPage(getNextPage func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)) PrivateLinkServiceListResultPage {
21664	return PrivateLinkServiceListResultPage{fn: getNextPage}
21665}
21666
21667// PrivateLinkServiceProperties properties of the private link service.
21668type PrivateLinkServiceProperties struct {
21669	// LoadBalancerFrontendIPConfigurations - An array of references to the load balancer IP configurations.
21670	LoadBalancerFrontendIPConfigurations *[]FrontendIPConfiguration `json:"loadBalancerFrontendIpConfigurations,omitempty"`
21671	// IPConfigurations - An array of references to the private link service IP configuration.
21672	IPConfigurations *[]PrivateLinkServiceIPConfiguration `json:"ipConfigurations,omitempty"`
21673	// NetworkInterfaces - READ-ONLY; Gets an array of references to the network interfaces created for this private link service.
21674	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
21675	// ProvisioningState - READ-ONLY; The provisioning state of the private link service. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21676	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21677	// PrivateEndpointConnections - An array of list about connections to the private endpoint.
21678	PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"`
21679	// Visibility - The visibility list of the private link service.
21680	Visibility *PrivateLinkServicePropertiesVisibility `json:"visibility,omitempty"`
21681	// AutoApproval - The auto-approval list of the private link service.
21682	AutoApproval *PrivateLinkServicePropertiesAutoApproval `json:"autoApproval,omitempty"`
21683	// Fqdns - The list of Fqdn.
21684	Fqdns *[]string `json:"fqdns,omitempty"`
21685	// Alias - READ-ONLY; The alias of the private link service.
21686	Alias *string `json:"alias,omitempty"`
21687}
21688
21689// PrivateLinkServicePropertiesAutoApproval the auto-approval list of the private link service.
21690type PrivateLinkServicePropertiesAutoApproval struct {
21691	// Subscriptions - The list of subscriptions.
21692	Subscriptions *[]string `json:"subscriptions,omitempty"`
21693}
21694
21695// PrivateLinkServicePropertiesVisibility the visibility list of the private link service.
21696type PrivateLinkServicePropertiesVisibility struct {
21697	// Subscriptions - The list of subscriptions.
21698	Subscriptions *[]string `json:"subscriptions,omitempty"`
21699}
21700
21701// PrivateLinkServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21702// long-running operation.
21703type PrivateLinkServicesCreateOrUpdateFuture 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 *PrivateLinkServicesCreateOrUpdateFuture) Result(client PrivateLinkServicesClient) (pls PrivateLinkService, err error) {
21710	var done bool
21711	done, err = future.DoneWithContext(context.Background(), client)
21712	if err != nil {
21713		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21714		return
21715	}
21716	if !done {
21717		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCreateOrUpdateFuture")
21718		return
21719	}
21720	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21721	if pls.Response.Response, err = future.GetResult(sender); err == nil && pls.Response.Response.StatusCode != http.StatusNoContent {
21722		pls, err = client.CreateOrUpdateResponder(pls.Response.Response)
21723		if err != nil {
21724			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", pls.Response.Response, "Failure responding to request")
21725		}
21726	}
21727	return
21728}
21729
21730// PrivateLinkServicesDeleteFuture an abstraction for monitoring and retrieving the results of a
21731// long-running operation.
21732type PrivateLinkServicesDeleteFuture struct {
21733	azure.Future
21734}
21735
21736// Result returns the result of the asynchronous operation.
21737// If the operation has not completed it will return an error.
21738func (future *PrivateLinkServicesDeleteFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
21739	var done bool
21740	done, err = future.DoneWithContext(context.Background(), client)
21741	if err != nil {
21742		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeleteFuture", "Result", future.Response(), "Polling failure")
21743		return
21744	}
21745	if !done {
21746		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeleteFuture")
21747		return
21748	}
21749	ar.Response = future.Response()
21750	return
21751}
21752
21753// PrivateLinkServicesDeletePrivateEndpointConnectionFuture an abstraction for monitoring and retrieving
21754// the results of a long-running operation.
21755type PrivateLinkServicesDeletePrivateEndpointConnectionFuture struct {
21756	azure.Future
21757}
21758
21759// Result returns the result of the asynchronous operation.
21760// If the operation has not completed it will return an error.
21761func (future *PrivateLinkServicesDeletePrivateEndpointConnectionFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
21762	var done bool
21763	done, err = future.DoneWithContext(context.Background(), client)
21764	if err != nil {
21765		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure")
21766		return
21767	}
21768	if !done {
21769		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture")
21770		return
21771	}
21772	ar.Response = future.Response()
21773	return
21774}
21775
21776// PrivateLinkServiceVisibility response for the CheckPrivateLinkServiceVisibility API service call.
21777type PrivateLinkServiceVisibility struct {
21778	autorest.Response `json:"-"`
21779	// Visible - Private Link Service Visibility (True/False).
21780	Visible *bool `json:"visible,omitempty"`
21781}
21782
21783// Probe a load balancer probe.
21784type Probe struct {
21785	autorest.Response `json:"-"`
21786	// ProbePropertiesFormat - Properties of load balancer probe.
21787	*ProbePropertiesFormat `json:"properties,omitempty"`
21788	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
21789	Name *string `json:"name,omitempty"`
21790	// Etag - A unique read-only string that changes whenever the resource is updated.
21791	Etag *string `json:"etag,omitempty"`
21792	// ID - Resource ID.
21793	ID *string `json:"id,omitempty"`
21794}
21795
21796// MarshalJSON is the custom marshaler for Probe.
21797func (p Probe) MarshalJSON() ([]byte, error) {
21798	objectMap := make(map[string]interface{})
21799	if p.ProbePropertiesFormat != nil {
21800		objectMap["properties"] = p.ProbePropertiesFormat
21801	}
21802	if p.Name != nil {
21803		objectMap["name"] = p.Name
21804	}
21805	if p.Etag != nil {
21806		objectMap["etag"] = p.Etag
21807	}
21808	if p.ID != nil {
21809		objectMap["id"] = p.ID
21810	}
21811	return json.Marshal(objectMap)
21812}
21813
21814// UnmarshalJSON is the custom unmarshaler for Probe struct.
21815func (p *Probe) UnmarshalJSON(body []byte) error {
21816	var m map[string]*json.RawMessage
21817	err := json.Unmarshal(body, &m)
21818	if err != nil {
21819		return err
21820	}
21821	for k, v := range m {
21822		switch k {
21823		case "properties":
21824			if v != nil {
21825				var probePropertiesFormat ProbePropertiesFormat
21826				err = json.Unmarshal(*v, &probePropertiesFormat)
21827				if err != nil {
21828					return err
21829				}
21830				p.ProbePropertiesFormat = &probePropertiesFormat
21831			}
21832		case "name":
21833			if v != nil {
21834				var name string
21835				err = json.Unmarshal(*v, &name)
21836				if err != nil {
21837					return err
21838				}
21839				p.Name = &name
21840			}
21841		case "etag":
21842			if v != nil {
21843				var etag string
21844				err = json.Unmarshal(*v, &etag)
21845				if err != nil {
21846					return err
21847				}
21848				p.Etag = &etag
21849			}
21850		case "id":
21851			if v != nil {
21852				var ID string
21853				err = json.Unmarshal(*v, &ID)
21854				if err != nil {
21855					return err
21856				}
21857				p.ID = &ID
21858			}
21859		}
21860	}
21861
21862	return nil
21863}
21864
21865// ProbePropertiesFormat load balancer probe resource.
21866type ProbePropertiesFormat struct {
21867	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
21868	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
21869	// 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'
21870	Protocol ProbeProtocol `json:"protocol,omitempty"`
21871	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
21872	Port *int32 `json:"port,omitempty"`
21873	// 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.
21874	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
21875	// 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.
21876	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
21877	// 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.
21878	RequestPath *string `json:"requestPath,omitempty"`
21879	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
21880	ProvisioningState *string `json:"provisioningState,omitempty"`
21881}
21882
21883// Profile network profile resource.
21884type Profile struct {
21885	autorest.Response `json:"-"`
21886	// ProfilePropertiesFormat - Network profile properties.
21887	*ProfilePropertiesFormat `json:"properties,omitempty"`
21888	// Etag - A unique read-only string that changes whenever the resource is updated.
21889	Etag *string `json:"etag,omitempty"`
21890	// ID - Resource ID.
21891	ID *string `json:"id,omitempty"`
21892	// Name - READ-ONLY; Resource name.
21893	Name *string `json:"name,omitempty"`
21894	// Type - READ-ONLY; Resource type.
21895	Type *string `json:"type,omitempty"`
21896	// Location - Resource location.
21897	Location *string `json:"location,omitempty"`
21898	// Tags - Resource tags.
21899	Tags map[string]*string `json:"tags"`
21900}
21901
21902// MarshalJSON is the custom marshaler for Profile.
21903func (p Profile) MarshalJSON() ([]byte, error) {
21904	objectMap := make(map[string]interface{})
21905	if p.ProfilePropertiesFormat != nil {
21906		objectMap["properties"] = p.ProfilePropertiesFormat
21907	}
21908	if p.Etag != nil {
21909		objectMap["etag"] = p.Etag
21910	}
21911	if p.ID != nil {
21912		objectMap["id"] = p.ID
21913	}
21914	if p.Location != nil {
21915		objectMap["location"] = p.Location
21916	}
21917	if p.Tags != nil {
21918		objectMap["tags"] = p.Tags
21919	}
21920	return json.Marshal(objectMap)
21921}
21922
21923// UnmarshalJSON is the custom unmarshaler for Profile struct.
21924func (p *Profile) UnmarshalJSON(body []byte) error {
21925	var m map[string]*json.RawMessage
21926	err := json.Unmarshal(body, &m)
21927	if err != nil {
21928		return err
21929	}
21930	for k, v := range m {
21931		switch k {
21932		case "properties":
21933			if v != nil {
21934				var profilePropertiesFormat ProfilePropertiesFormat
21935				err = json.Unmarshal(*v, &profilePropertiesFormat)
21936				if err != nil {
21937					return err
21938				}
21939				p.ProfilePropertiesFormat = &profilePropertiesFormat
21940			}
21941		case "etag":
21942			if v != nil {
21943				var etag string
21944				err = json.Unmarshal(*v, &etag)
21945				if err != nil {
21946					return err
21947				}
21948				p.Etag = &etag
21949			}
21950		case "id":
21951			if v != nil {
21952				var ID string
21953				err = json.Unmarshal(*v, &ID)
21954				if err != nil {
21955					return err
21956				}
21957				p.ID = &ID
21958			}
21959		case "name":
21960			if v != nil {
21961				var name string
21962				err = json.Unmarshal(*v, &name)
21963				if err != nil {
21964					return err
21965				}
21966				p.Name = &name
21967			}
21968		case "type":
21969			if v != nil {
21970				var typeVar string
21971				err = json.Unmarshal(*v, &typeVar)
21972				if err != nil {
21973					return err
21974				}
21975				p.Type = &typeVar
21976			}
21977		case "location":
21978			if v != nil {
21979				var location string
21980				err = json.Unmarshal(*v, &location)
21981				if err != nil {
21982					return err
21983				}
21984				p.Location = &location
21985			}
21986		case "tags":
21987			if v != nil {
21988				var tags map[string]*string
21989				err = json.Unmarshal(*v, &tags)
21990				if err != nil {
21991					return err
21992				}
21993				p.Tags = tags
21994			}
21995		}
21996	}
21997
21998	return nil
21999}
22000
22001// ProfileListResult response for ListNetworkProfiles API service call.
22002type ProfileListResult struct {
22003	autorest.Response `json:"-"`
22004	// Value - A list of network profiles that exist in a resource group.
22005	Value *[]Profile `json:"value,omitempty"`
22006	// NextLink - The URL to get the next set of results.
22007	NextLink *string `json:"nextLink,omitempty"`
22008}
22009
22010// ProfileListResultIterator provides access to a complete listing of Profile values.
22011type ProfileListResultIterator struct {
22012	i    int
22013	page ProfileListResultPage
22014}
22015
22016// NextWithContext advances to the next value.  If there was an error making
22017// the request the iterator does not advance and the error is returned.
22018func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
22019	if tracing.IsEnabled() {
22020		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
22021		defer func() {
22022			sc := -1
22023			if iter.Response().Response.Response != nil {
22024				sc = iter.Response().Response.Response.StatusCode
22025			}
22026			tracing.EndSpan(ctx, sc, err)
22027		}()
22028	}
22029	iter.i++
22030	if iter.i < len(iter.page.Values()) {
22031		return nil
22032	}
22033	err = iter.page.NextWithContext(ctx)
22034	if err != nil {
22035		iter.i--
22036		return err
22037	}
22038	iter.i = 0
22039	return nil
22040}
22041
22042// Next advances to the next value.  If there was an error making
22043// the request the iterator does not advance and the error is returned.
22044// Deprecated: Use NextWithContext() instead.
22045func (iter *ProfileListResultIterator) Next() error {
22046	return iter.NextWithContext(context.Background())
22047}
22048
22049// NotDone returns true if the enumeration should be started or is not yet complete.
22050func (iter ProfileListResultIterator) NotDone() bool {
22051	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22052}
22053
22054// Response returns the raw server response from the last page request.
22055func (iter ProfileListResultIterator) Response() ProfileListResult {
22056	return iter.page.Response()
22057}
22058
22059// Value returns the current value or a zero-initialized value if the
22060// iterator has advanced beyond the end of the collection.
22061func (iter ProfileListResultIterator) Value() Profile {
22062	if !iter.page.NotDone() {
22063		return Profile{}
22064	}
22065	return iter.page.Values()[iter.i]
22066}
22067
22068// Creates a new instance of the ProfileListResultIterator type.
22069func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
22070	return ProfileListResultIterator{page: page}
22071}
22072
22073// IsEmpty returns true if the ListResult contains no values.
22074func (plr ProfileListResult) IsEmpty() bool {
22075	return plr.Value == nil || len(*plr.Value) == 0
22076}
22077
22078// profileListResultPreparer prepares a request to retrieve the next set of results.
22079// It returns nil if no more results exist.
22080func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
22081	if plr.NextLink == nil || len(to.String(plr.NextLink)) < 1 {
22082		return nil, nil
22083	}
22084	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22085		autorest.AsJSON(),
22086		autorest.AsGet(),
22087		autorest.WithBaseURL(to.String(plr.NextLink)))
22088}
22089
22090// ProfileListResultPage contains a page of Profile values.
22091type ProfileListResultPage struct {
22092	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
22093	plr ProfileListResult
22094}
22095
22096// NextWithContext advances to the next page of values.  If there was an error making
22097// the request the page does not advance and the error is returned.
22098func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
22099	if tracing.IsEnabled() {
22100		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
22101		defer func() {
22102			sc := -1
22103			if page.Response().Response.Response != nil {
22104				sc = page.Response().Response.Response.StatusCode
22105			}
22106			tracing.EndSpan(ctx, sc, err)
22107		}()
22108	}
22109	next, err := page.fn(ctx, page.plr)
22110	if err != nil {
22111		return err
22112	}
22113	page.plr = next
22114	return nil
22115}
22116
22117// Next advances to the next page of values.  If there was an error making
22118// the request the page does not advance and the error is returned.
22119// Deprecated: Use NextWithContext() instead.
22120func (page *ProfileListResultPage) Next() error {
22121	return page.NextWithContext(context.Background())
22122}
22123
22124// NotDone returns true if the page enumeration should be started or is not yet complete.
22125func (page ProfileListResultPage) NotDone() bool {
22126	return !page.plr.IsEmpty()
22127}
22128
22129// Response returns the raw server response from the last page request.
22130func (page ProfileListResultPage) Response() ProfileListResult {
22131	return page.plr
22132}
22133
22134// Values returns the slice of values for the current page or nil if there are no values.
22135func (page ProfileListResultPage) Values() []Profile {
22136	if page.plr.IsEmpty() {
22137		return nil
22138	}
22139	return *page.plr.Value
22140}
22141
22142// Creates a new instance of the ProfileListResultPage type.
22143func NewProfileListResultPage(getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
22144	return ProfileListResultPage{fn: getNextPage}
22145}
22146
22147// ProfilePropertiesFormat network profile properties.
22148type ProfilePropertiesFormat struct {
22149	// ContainerNetworkInterfaces - List of child container network interfaces.
22150	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
22151	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
22152	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
22153	// ResourceGUID - READ-ONLY; The resource GUID property of the network interface resource.
22154	ResourceGUID *string `json:"resourceGuid,omitempty"`
22155	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
22156	ProvisioningState *string `json:"provisioningState,omitempty"`
22157}
22158
22159// ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22160// operation.
22161type ProfilesDeleteFuture struct {
22162	azure.Future
22163}
22164
22165// Result returns the result of the asynchronous operation.
22166// If the operation has not completed it will return an error.
22167func (future *ProfilesDeleteFuture) Result(client ProfilesClient) (ar autorest.Response, err error) {
22168	var done bool
22169	done, err = future.DoneWithContext(context.Background(), client)
22170	if err != nil {
22171		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
22172		return
22173	}
22174	if !done {
22175		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
22176		return
22177	}
22178	ar.Response = future.Response()
22179	return
22180}
22181
22182// ProtocolConfiguration configuration of the protocol.
22183type ProtocolConfiguration struct {
22184	// HTTPConfiguration - HTTP configuration of the connectivity check.
22185	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
22186}
22187
22188// ProtocolCustomSettingsFormat dDoS custom policy properties.
22189type ProtocolCustomSettingsFormat struct {
22190	// Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn'
22191	Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"`
22192	// TriggerRateOverride - The customized DDoS protection trigger rate.
22193	TriggerRateOverride *string `json:"triggerRateOverride,omitempty"`
22194	// SourceRateOverride - The customized DDoS protection source rate.
22195	SourceRateOverride *string `json:"sourceRateOverride,omitempty"`
22196	// 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'
22197	TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"`
22198}
22199
22200// PublicIPAddress public IP address resource.
22201type PublicIPAddress struct {
22202	autorest.Response `json:"-"`
22203	// Sku - The public IP address SKU.
22204	Sku *PublicIPAddressSku `json:"sku,omitempty"`
22205	// PublicIPAddressPropertiesFormat - Public IP address properties.
22206	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
22207	// Etag - A unique read-only string that changes whenever the resource is updated.
22208	Etag *string `json:"etag,omitempty"`
22209	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
22210	Zones *[]string `json:"zones,omitempty"`
22211	// ID - Resource ID.
22212	ID *string `json:"id,omitempty"`
22213	// Name - READ-ONLY; Resource name.
22214	Name *string `json:"name,omitempty"`
22215	// Type - READ-ONLY; Resource type.
22216	Type *string `json:"type,omitempty"`
22217	// Location - Resource location.
22218	Location *string `json:"location,omitempty"`
22219	// Tags - Resource tags.
22220	Tags map[string]*string `json:"tags"`
22221}
22222
22223// MarshalJSON is the custom marshaler for PublicIPAddress.
22224func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
22225	objectMap := make(map[string]interface{})
22226	if pia.Sku != nil {
22227		objectMap["sku"] = pia.Sku
22228	}
22229	if pia.PublicIPAddressPropertiesFormat != nil {
22230		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
22231	}
22232	if pia.Etag != nil {
22233		objectMap["etag"] = pia.Etag
22234	}
22235	if pia.Zones != nil {
22236		objectMap["zones"] = pia.Zones
22237	}
22238	if pia.ID != nil {
22239		objectMap["id"] = pia.ID
22240	}
22241	if pia.Location != nil {
22242		objectMap["location"] = pia.Location
22243	}
22244	if pia.Tags != nil {
22245		objectMap["tags"] = pia.Tags
22246	}
22247	return json.Marshal(objectMap)
22248}
22249
22250// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
22251func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
22252	var m map[string]*json.RawMessage
22253	err := json.Unmarshal(body, &m)
22254	if err != nil {
22255		return err
22256	}
22257	for k, v := range m {
22258		switch k {
22259		case "sku":
22260			if v != nil {
22261				var sku PublicIPAddressSku
22262				err = json.Unmarshal(*v, &sku)
22263				if err != nil {
22264					return err
22265				}
22266				pia.Sku = &sku
22267			}
22268		case "properties":
22269			if v != nil {
22270				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
22271				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
22272				if err != nil {
22273					return err
22274				}
22275				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
22276			}
22277		case "etag":
22278			if v != nil {
22279				var etag string
22280				err = json.Unmarshal(*v, &etag)
22281				if err != nil {
22282					return err
22283				}
22284				pia.Etag = &etag
22285			}
22286		case "zones":
22287			if v != nil {
22288				var zones []string
22289				err = json.Unmarshal(*v, &zones)
22290				if err != nil {
22291					return err
22292				}
22293				pia.Zones = &zones
22294			}
22295		case "id":
22296			if v != nil {
22297				var ID string
22298				err = json.Unmarshal(*v, &ID)
22299				if err != nil {
22300					return err
22301				}
22302				pia.ID = &ID
22303			}
22304		case "name":
22305			if v != nil {
22306				var name string
22307				err = json.Unmarshal(*v, &name)
22308				if err != nil {
22309					return err
22310				}
22311				pia.Name = &name
22312			}
22313		case "type":
22314			if v != nil {
22315				var typeVar string
22316				err = json.Unmarshal(*v, &typeVar)
22317				if err != nil {
22318					return err
22319				}
22320				pia.Type = &typeVar
22321			}
22322		case "location":
22323			if v != nil {
22324				var location string
22325				err = json.Unmarshal(*v, &location)
22326				if err != nil {
22327					return err
22328				}
22329				pia.Location = &location
22330			}
22331		case "tags":
22332			if v != nil {
22333				var tags map[string]*string
22334				err = json.Unmarshal(*v, &tags)
22335				if err != nil {
22336					return err
22337				}
22338				pia.Tags = tags
22339			}
22340		}
22341	}
22342
22343	return nil
22344}
22345
22346// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address.
22347type PublicIPAddressDNSSettings struct {
22348	// DomainNameLabel - Gets or sets the Domain name label.The concatenation of the domain name label and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address. If a domain name label is specified, an A DNS record is created for the public IP in the Microsoft Azure DNS system.
22349	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
22350	// Fqdn - Gets the FQDN, Fully qualified domain name of the A DNS record associated with the public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone.
22351	Fqdn *string `json:"fqdn,omitempty"`
22352	// ReverseFqdn - Gets or Sets the Reverse FQDN. A user-visible, fully qualified domain name that resolves to this public IP address. If the reverseFqdn is specified, then a PTR DNS record is created pointing from the IP address in the in-addr.arpa domain to the reverse FQDN.
22353	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
22354}
22355
22356// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22357// long-running operation.
22358type PublicIPAddressesCreateOrUpdateFuture struct {
22359	azure.Future
22360}
22361
22362// Result returns the result of the asynchronous operation.
22363// If the operation has not completed it will return an error.
22364func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
22365	var done bool
22366	done, err = future.DoneWithContext(context.Background(), client)
22367	if err != nil {
22368		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22369		return
22370	}
22371	if !done {
22372		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
22373		return
22374	}
22375	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22376	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
22377		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
22378		if err != nil {
22379			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
22380		}
22381	}
22382	return
22383}
22384
22385// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22386// operation.
22387type PublicIPAddressesDeleteFuture struct {
22388	azure.Future
22389}
22390
22391// Result returns the result of the asynchronous operation.
22392// If the operation has not completed it will return an error.
22393func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
22394	var done bool
22395	done, err = future.DoneWithContext(context.Background(), client)
22396	if err != nil {
22397		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
22398		return
22399	}
22400	if !done {
22401		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
22402		return
22403	}
22404	ar.Response = future.Response()
22405	return
22406}
22407
22408// PublicIPAddressesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
22409// long-running operation.
22410type PublicIPAddressesUpdateTagsFuture struct {
22411	azure.Future
22412}
22413
22414// Result returns the result of the asynchronous operation.
22415// If the operation has not completed it will return an error.
22416func (future *PublicIPAddressesUpdateTagsFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
22417	var done bool
22418	done, err = future.DoneWithContext(context.Background(), client)
22419	if err != nil {
22420		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
22421		return
22422	}
22423	if !done {
22424		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesUpdateTagsFuture")
22425		return
22426	}
22427	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22428	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
22429		pia, err = client.UpdateTagsResponder(pia.Response.Response)
22430		if err != nil {
22431			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", pia.Response.Response, "Failure responding to request")
22432		}
22433	}
22434	return
22435}
22436
22437// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
22438type PublicIPAddressListResult struct {
22439	autorest.Response `json:"-"`
22440	// Value - A list of public IP addresses that exists in a resource group.
22441	Value *[]PublicIPAddress `json:"value,omitempty"`
22442	// NextLink - The URL to get the next set of results.
22443	NextLink *string `json:"nextLink,omitempty"`
22444}
22445
22446// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
22447type PublicIPAddressListResultIterator struct {
22448	i    int
22449	page PublicIPAddressListResultPage
22450}
22451
22452// NextWithContext advances to the next value.  If there was an error making
22453// the request the iterator does not advance and the error is returned.
22454func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
22455	if tracing.IsEnabled() {
22456		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
22457		defer func() {
22458			sc := -1
22459			if iter.Response().Response.Response != nil {
22460				sc = iter.Response().Response.Response.StatusCode
22461			}
22462			tracing.EndSpan(ctx, sc, err)
22463		}()
22464	}
22465	iter.i++
22466	if iter.i < len(iter.page.Values()) {
22467		return nil
22468	}
22469	err = iter.page.NextWithContext(ctx)
22470	if err != nil {
22471		iter.i--
22472		return err
22473	}
22474	iter.i = 0
22475	return nil
22476}
22477
22478// Next advances to the next value.  If there was an error making
22479// the request the iterator does not advance and the error is returned.
22480// Deprecated: Use NextWithContext() instead.
22481func (iter *PublicIPAddressListResultIterator) Next() error {
22482	return iter.NextWithContext(context.Background())
22483}
22484
22485// NotDone returns true if the enumeration should be started or is not yet complete.
22486func (iter PublicIPAddressListResultIterator) NotDone() bool {
22487	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22488}
22489
22490// Response returns the raw server response from the last page request.
22491func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
22492	return iter.page.Response()
22493}
22494
22495// Value returns the current value or a zero-initialized value if the
22496// iterator has advanced beyond the end of the collection.
22497func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
22498	if !iter.page.NotDone() {
22499		return PublicIPAddress{}
22500	}
22501	return iter.page.Values()[iter.i]
22502}
22503
22504// Creates a new instance of the PublicIPAddressListResultIterator type.
22505func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
22506	return PublicIPAddressListResultIterator{page: page}
22507}
22508
22509// IsEmpty returns true if the ListResult contains no values.
22510func (pialr PublicIPAddressListResult) IsEmpty() bool {
22511	return pialr.Value == nil || len(*pialr.Value) == 0
22512}
22513
22514// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
22515// It returns nil if no more results exist.
22516func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
22517	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
22518		return nil, nil
22519	}
22520	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22521		autorest.AsJSON(),
22522		autorest.AsGet(),
22523		autorest.WithBaseURL(to.String(pialr.NextLink)))
22524}
22525
22526// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
22527type PublicIPAddressListResultPage struct {
22528	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
22529	pialr PublicIPAddressListResult
22530}
22531
22532// NextWithContext advances to the next page of values.  If there was an error making
22533// the request the page does not advance and the error is returned.
22534func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
22535	if tracing.IsEnabled() {
22536		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
22537		defer func() {
22538			sc := -1
22539			if page.Response().Response.Response != nil {
22540				sc = page.Response().Response.Response.StatusCode
22541			}
22542			tracing.EndSpan(ctx, sc, err)
22543		}()
22544	}
22545	next, err := page.fn(ctx, page.pialr)
22546	if err != nil {
22547		return err
22548	}
22549	page.pialr = next
22550	return nil
22551}
22552
22553// Next advances to the next page of values.  If there was an error making
22554// the request the page does not advance and the error is returned.
22555// Deprecated: Use NextWithContext() instead.
22556func (page *PublicIPAddressListResultPage) Next() error {
22557	return page.NextWithContext(context.Background())
22558}
22559
22560// NotDone returns true if the page enumeration should be started or is not yet complete.
22561func (page PublicIPAddressListResultPage) NotDone() bool {
22562	return !page.pialr.IsEmpty()
22563}
22564
22565// Response returns the raw server response from the last page request.
22566func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
22567	return page.pialr
22568}
22569
22570// Values returns the slice of values for the current page or nil if there are no values.
22571func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
22572	if page.pialr.IsEmpty() {
22573		return nil
22574	}
22575	return *page.pialr.Value
22576}
22577
22578// Creates a new instance of the PublicIPAddressListResultPage type.
22579func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
22580	return PublicIPAddressListResultPage{fn: getNextPage}
22581}
22582
22583// PublicIPAddressPropertiesFormat public IP address properties.
22584type PublicIPAddressPropertiesFormat struct {
22585	// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
22586	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
22587	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
22588	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
22589	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
22590	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
22591	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
22592	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
22593	// DdosSettings - The DDoS protection custom policy associated with the public IP address.
22594	DdosSettings *DdosSettings `json:"ddosSettings,omitempty"`
22595	// IPTags - The list of tags associated with the public IP address.
22596	IPTags *[]IPTag `json:"ipTags,omitempty"`
22597	// IPAddress - The IP address associated with the public IP address resource.
22598	IPAddress *string `json:"ipAddress,omitempty"`
22599	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
22600	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
22601	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
22602	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
22603	// ResourceGUID - The resource GUID property of the public IP resource.
22604	ResourceGUID *string `json:"resourceGuid,omitempty"`
22605	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
22606	ProvisioningState *string `json:"provisioningState,omitempty"`
22607}
22608
22609// PublicIPAddressSku SKU of a public IP address.
22610type PublicIPAddressSku struct {
22611	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
22612	Name PublicIPAddressSkuName `json:"name,omitempty"`
22613}
22614
22615// PublicIPPrefix public IP prefix resource.
22616type PublicIPPrefix struct {
22617	autorest.Response `json:"-"`
22618	// Sku - The public IP prefix SKU.
22619	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
22620	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
22621	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
22622	// Etag - A unique read-only string that changes whenever the resource is updated.
22623	Etag *string `json:"etag,omitempty"`
22624	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
22625	Zones *[]string `json:"zones,omitempty"`
22626	// ID - Resource ID.
22627	ID *string `json:"id,omitempty"`
22628	// Name - READ-ONLY; Resource name.
22629	Name *string `json:"name,omitempty"`
22630	// Type - READ-ONLY; Resource type.
22631	Type *string `json:"type,omitempty"`
22632	// Location - Resource location.
22633	Location *string `json:"location,omitempty"`
22634	// Tags - Resource tags.
22635	Tags map[string]*string `json:"tags"`
22636}
22637
22638// MarshalJSON is the custom marshaler for PublicIPPrefix.
22639func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
22640	objectMap := make(map[string]interface{})
22641	if pip.Sku != nil {
22642		objectMap["sku"] = pip.Sku
22643	}
22644	if pip.PublicIPPrefixPropertiesFormat != nil {
22645		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
22646	}
22647	if pip.Etag != nil {
22648		objectMap["etag"] = pip.Etag
22649	}
22650	if pip.Zones != nil {
22651		objectMap["zones"] = pip.Zones
22652	}
22653	if pip.ID != nil {
22654		objectMap["id"] = pip.ID
22655	}
22656	if pip.Location != nil {
22657		objectMap["location"] = pip.Location
22658	}
22659	if pip.Tags != nil {
22660		objectMap["tags"] = pip.Tags
22661	}
22662	return json.Marshal(objectMap)
22663}
22664
22665// UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
22666func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
22667	var m map[string]*json.RawMessage
22668	err := json.Unmarshal(body, &m)
22669	if err != nil {
22670		return err
22671	}
22672	for k, v := range m {
22673		switch k {
22674		case "sku":
22675			if v != nil {
22676				var sku PublicIPPrefixSku
22677				err = json.Unmarshal(*v, &sku)
22678				if err != nil {
22679					return err
22680				}
22681				pip.Sku = &sku
22682			}
22683		case "properties":
22684			if v != nil {
22685				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
22686				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
22687				if err != nil {
22688					return err
22689				}
22690				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
22691			}
22692		case "etag":
22693			if v != nil {
22694				var etag string
22695				err = json.Unmarshal(*v, &etag)
22696				if err != nil {
22697					return err
22698				}
22699				pip.Etag = &etag
22700			}
22701		case "zones":
22702			if v != nil {
22703				var zones []string
22704				err = json.Unmarshal(*v, &zones)
22705				if err != nil {
22706					return err
22707				}
22708				pip.Zones = &zones
22709			}
22710		case "id":
22711			if v != nil {
22712				var ID string
22713				err = json.Unmarshal(*v, &ID)
22714				if err != nil {
22715					return err
22716				}
22717				pip.ID = &ID
22718			}
22719		case "name":
22720			if v != nil {
22721				var name string
22722				err = json.Unmarshal(*v, &name)
22723				if err != nil {
22724					return err
22725				}
22726				pip.Name = &name
22727			}
22728		case "type":
22729			if v != nil {
22730				var typeVar string
22731				err = json.Unmarshal(*v, &typeVar)
22732				if err != nil {
22733					return err
22734				}
22735				pip.Type = &typeVar
22736			}
22737		case "location":
22738			if v != nil {
22739				var location string
22740				err = json.Unmarshal(*v, &location)
22741				if err != nil {
22742					return err
22743				}
22744				pip.Location = &location
22745			}
22746		case "tags":
22747			if v != nil {
22748				var tags map[string]*string
22749				err = json.Unmarshal(*v, &tags)
22750				if err != nil {
22751					return err
22752				}
22753				pip.Tags = tags
22754			}
22755		}
22756	}
22757
22758	return nil
22759}
22760
22761// PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22762// long-running operation.
22763type PublicIPPrefixesCreateOrUpdateFuture struct {
22764	azure.Future
22765}
22766
22767// Result returns the result of the asynchronous operation.
22768// If the operation has not completed it will return an error.
22769func (future *PublicIPPrefixesCreateOrUpdateFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
22770	var done bool
22771	done, err = future.DoneWithContext(context.Background(), client)
22772	if err != nil {
22773		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22774		return
22775	}
22776	if !done {
22777		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
22778		return
22779	}
22780	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22781	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
22782		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
22783		if err != nil {
22784			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
22785		}
22786	}
22787	return
22788}
22789
22790// PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22791// operation.
22792type PublicIPPrefixesDeleteFuture struct {
22793	azure.Future
22794}
22795
22796// Result returns the result of the asynchronous operation.
22797// If the operation has not completed it will return an error.
22798func (future *PublicIPPrefixesDeleteFuture) Result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
22799	var done bool
22800	done, err = future.DoneWithContext(context.Background(), client)
22801	if err != nil {
22802		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
22803		return
22804	}
22805	if !done {
22806		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
22807		return
22808	}
22809	ar.Response = future.Response()
22810	return
22811}
22812
22813// PublicIPPrefixesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
22814// long-running operation.
22815type PublicIPPrefixesUpdateTagsFuture struct {
22816	azure.Future
22817}
22818
22819// Result returns the result of the asynchronous operation.
22820// If the operation has not completed it will return an error.
22821func (future *PublicIPPrefixesUpdateTagsFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
22822	var done bool
22823	done, err = future.DoneWithContext(context.Background(), client)
22824	if err != nil {
22825		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
22826		return
22827	}
22828	if !done {
22829		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesUpdateTagsFuture")
22830		return
22831	}
22832	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22833	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
22834		pip, err = client.UpdateTagsResponder(pip.Response.Response)
22835		if err != nil {
22836			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", pip.Response.Response, "Failure responding to request")
22837		}
22838	}
22839	return
22840}
22841
22842// PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
22843type PublicIPPrefixListResult struct {
22844	autorest.Response `json:"-"`
22845	// Value - A list of public IP prefixes that exists in a resource group.
22846	Value *[]PublicIPPrefix `json:"value,omitempty"`
22847	// NextLink - The URL to get the next set of results.
22848	NextLink *string `json:"nextLink,omitempty"`
22849}
22850
22851// PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
22852type PublicIPPrefixListResultIterator struct {
22853	i    int
22854	page PublicIPPrefixListResultPage
22855}
22856
22857// NextWithContext advances to the next value.  If there was an error making
22858// the request the iterator does not advance and the error is returned.
22859func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
22860	if tracing.IsEnabled() {
22861		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
22862		defer func() {
22863			sc := -1
22864			if iter.Response().Response.Response != nil {
22865				sc = iter.Response().Response.Response.StatusCode
22866			}
22867			tracing.EndSpan(ctx, sc, err)
22868		}()
22869	}
22870	iter.i++
22871	if iter.i < len(iter.page.Values()) {
22872		return nil
22873	}
22874	err = iter.page.NextWithContext(ctx)
22875	if err != nil {
22876		iter.i--
22877		return err
22878	}
22879	iter.i = 0
22880	return nil
22881}
22882
22883// Next advances to the next value.  If there was an error making
22884// the request the iterator does not advance and the error is returned.
22885// Deprecated: Use NextWithContext() instead.
22886func (iter *PublicIPPrefixListResultIterator) Next() error {
22887	return iter.NextWithContext(context.Background())
22888}
22889
22890// NotDone returns true if the enumeration should be started or is not yet complete.
22891func (iter PublicIPPrefixListResultIterator) NotDone() bool {
22892	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22893}
22894
22895// Response returns the raw server response from the last page request.
22896func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
22897	return iter.page.Response()
22898}
22899
22900// Value returns the current value or a zero-initialized value if the
22901// iterator has advanced beyond the end of the collection.
22902func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
22903	if !iter.page.NotDone() {
22904		return PublicIPPrefix{}
22905	}
22906	return iter.page.Values()[iter.i]
22907}
22908
22909// Creates a new instance of the PublicIPPrefixListResultIterator type.
22910func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
22911	return PublicIPPrefixListResultIterator{page: page}
22912}
22913
22914// IsEmpty returns true if the ListResult contains no values.
22915func (piplr PublicIPPrefixListResult) IsEmpty() bool {
22916	return piplr.Value == nil || len(*piplr.Value) == 0
22917}
22918
22919// publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
22920// It returns nil if no more results exist.
22921func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
22922	if piplr.NextLink == nil || len(to.String(piplr.NextLink)) < 1 {
22923		return nil, nil
22924	}
22925	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22926		autorest.AsJSON(),
22927		autorest.AsGet(),
22928		autorest.WithBaseURL(to.String(piplr.NextLink)))
22929}
22930
22931// PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
22932type PublicIPPrefixListResultPage struct {
22933	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
22934	piplr PublicIPPrefixListResult
22935}
22936
22937// NextWithContext advances to the next page of values.  If there was an error making
22938// the request the page does not advance and the error is returned.
22939func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
22940	if tracing.IsEnabled() {
22941		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
22942		defer func() {
22943			sc := -1
22944			if page.Response().Response.Response != nil {
22945				sc = page.Response().Response.Response.StatusCode
22946			}
22947			tracing.EndSpan(ctx, sc, err)
22948		}()
22949	}
22950	next, err := page.fn(ctx, page.piplr)
22951	if err != nil {
22952		return err
22953	}
22954	page.piplr = next
22955	return nil
22956}
22957
22958// Next advances to the next page of values.  If there was an error making
22959// the request the page does not advance and the error is returned.
22960// Deprecated: Use NextWithContext() instead.
22961func (page *PublicIPPrefixListResultPage) Next() error {
22962	return page.NextWithContext(context.Background())
22963}
22964
22965// NotDone returns true if the page enumeration should be started or is not yet complete.
22966func (page PublicIPPrefixListResultPage) NotDone() bool {
22967	return !page.piplr.IsEmpty()
22968}
22969
22970// Response returns the raw server response from the last page request.
22971func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
22972	return page.piplr
22973}
22974
22975// Values returns the slice of values for the current page or nil if there are no values.
22976func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
22977	if page.piplr.IsEmpty() {
22978		return nil
22979	}
22980	return *page.piplr.Value
22981}
22982
22983// Creates a new instance of the PublicIPPrefixListResultPage type.
22984func NewPublicIPPrefixListResultPage(getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
22985	return PublicIPPrefixListResultPage{fn: getNextPage}
22986}
22987
22988// PublicIPPrefixPropertiesFormat public IP prefix properties.
22989type PublicIPPrefixPropertiesFormat struct {
22990	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
22991	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
22992	// IPTags - The list of tags associated with the public IP prefix.
22993	IPTags *[]IPTag `json:"ipTags,omitempty"`
22994	// PrefixLength - The Length of the Public IP Prefix.
22995	PrefixLength *int32 `json:"prefixLength,omitempty"`
22996	// IPPrefix - The allocated Prefix.
22997	IPPrefix *string `json:"ipPrefix,omitempty"`
22998	// PublicIPAddresses - The list of all referenced PublicIPAddresses.
22999	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
23000	// LoadBalancerFrontendIPConfiguration - READ-ONLY; The reference to load balancer frontend IP configuration associated with the public IP prefix.
23001	LoadBalancerFrontendIPConfiguration *SubResource `json:"loadBalancerFrontendIpConfiguration,omitempty"`
23002	// ResourceGUID - The resource GUID property of the public IP prefix resource.
23003	ResourceGUID *string `json:"resourceGuid,omitempty"`
23004	// ProvisioningState - The provisioning state of the Public IP prefix resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
23005	ProvisioningState *string `json:"provisioningState,omitempty"`
23006}
23007
23008// PublicIPPrefixSku SKU of a public IP prefix.
23009type PublicIPPrefixSku struct {
23010	// Name - Name of a public IP prefix SKU. Possible values include: 'PublicIPPrefixSkuNameStandard'
23011	Name PublicIPPrefixSkuName `json:"name,omitempty"`
23012}
23013
23014// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
23015type QueryTroubleshootingParameters struct {
23016	// TargetResourceID - The target resource ID to query the troubleshooting result.
23017	TargetResourceID *string `json:"targetResourceId,omitempty"`
23018}
23019
23020// ReferencedPublicIPAddress reference to a public IP address.
23021type ReferencedPublicIPAddress struct {
23022	// ID - The PublicIPAddress Reference.
23023	ID *string `json:"id,omitempty"`
23024}
23025
23026// Resource common resource representation.
23027type Resource struct {
23028	// ID - Resource ID.
23029	ID *string `json:"id,omitempty"`
23030	// Name - READ-ONLY; Resource name.
23031	Name *string `json:"name,omitempty"`
23032	// Type - READ-ONLY; Resource type.
23033	Type *string `json:"type,omitempty"`
23034	// Location - Resource location.
23035	Location *string `json:"location,omitempty"`
23036	// Tags - Resource tags.
23037	Tags map[string]*string `json:"tags"`
23038}
23039
23040// MarshalJSON is the custom marshaler for Resource.
23041func (r Resource) MarshalJSON() ([]byte, error) {
23042	objectMap := make(map[string]interface{})
23043	if r.ID != nil {
23044		objectMap["id"] = r.ID
23045	}
23046	if r.Location != nil {
23047		objectMap["location"] = r.Location
23048	}
23049	if r.Tags != nil {
23050		objectMap["tags"] = r.Tags
23051	}
23052	return json.Marshal(objectMap)
23053}
23054
23055// ResourceNavigationLink resourceNavigationLink resource.
23056type ResourceNavigationLink struct {
23057	// ResourceNavigationLinkFormat - Resource navigation link properties format.
23058	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
23059	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
23060	Name *string `json:"name,omitempty"`
23061	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23062	Etag *string `json:"etag,omitempty"`
23063	// Type - READ-ONLY; Resource type.
23064	Type *string `json:"type,omitempty"`
23065	// ID - Resource ID.
23066	ID *string `json:"id,omitempty"`
23067}
23068
23069// MarshalJSON is the custom marshaler for ResourceNavigationLink.
23070func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
23071	objectMap := make(map[string]interface{})
23072	if rnl.ResourceNavigationLinkFormat != nil {
23073		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
23074	}
23075	if rnl.Name != nil {
23076		objectMap["name"] = rnl.Name
23077	}
23078	if rnl.ID != nil {
23079		objectMap["id"] = rnl.ID
23080	}
23081	return json.Marshal(objectMap)
23082}
23083
23084// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
23085func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
23086	var m map[string]*json.RawMessage
23087	err := json.Unmarshal(body, &m)
23088	if err != nil {
23089		return err
23090	}
23091	for k, v := range m {
23092		switch k {
23093		case "properties":
23094			if v != nil {
23095				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
23096				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
23097				if err != nil {
23098					return err
23099				}
23100				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
23101			}
23102		case "name":
23103			if v != nil {
23104				var name string
23105				err = json.Unmarshal(*v, &name)
23106				if err != nil {
23107					return err
23108				}
23109				rnl.Name = &name
23110			}
23111		case "etag":
23112			if v != nil {
23113				var etag string
23114				err = json.Unmarshal(*v, &etag)
23115				if err != nil {
23116					return err
23117				}
23118				rnl.Etag = &etag
23119			}
23120		case "type":
23121			if v != nil {
23122				var typeVar string
23123				err = json.Unmarshal(*v, &typeVar)
23124				if err != nil {
23125					return err
23126				}
23127				rnl.Type = &typeVar
23128			}
23129		case "id":
23130			if v != nil {
23131				var ID string
23132				err = json.Unmarshal(*v, &ID)
23133				if err != nil {
23134					return err
23135				}
23136				rnl.ID = &ID
23137			}
23138		}
23139	}
23140
23141	return nil
23142}
23143
23144// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
23145type ResourceNavigationLinkFormat struct {
23146	// LinkedResourceType - Resource type of the linked resource.
23147	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
23148	// Link - Link to the external resource.
23149	Link *string `json:"link,omitempty"`
23150	// ProvisioningState - READ-ONLY; Provisioning state of the ResourceNavigationLink resource.
23151	ProvisioningState *string `json:"provisioningState,omitempty"`
23152}
23153
23154// ResourceNavigationLinksListResult response for ResourceNavigationLinks_List operation.
23155type ResourceNavigationLinksListResult struct {
23156	autorest.Response `json:"-"`
23157	// Value - The resource navigation links in a subnet.
23158	Value *[]ResourceNavigationLink `json:"value,omitempty"`
23159	// NextLink - READ-ONLY; The URL to get the next set of results.
23160	NextLink *string `json:"nextLink,omitempty"`
23161}
23162
23163// ResourceSet the base resource set for visibility and auto-approval.
23164type ResourceSet struct {
23165	// Subscriptions - The list of subscriptions.
23166	Subscriptions *[]string `json:"subscriptions,omitempty"`
23167}
23168
23169// RetentionPolicyParameters parameters that define the retention policy for flow log.
23170type RetentionPolicyParameters struct {
23171	// Days - Number of days to retain flow log records.
23172	Days *int32 `json:"days,omitempty"`
23173	// Enabled - Flag to enable/disable retention.
23174	Enabled *bool `json:"enabled,omitempty"`
23175}
23176
23177// Route route resource.
23178type Route struct {
23179	autorest.Response `json:"-"`
23180	// RoutePropertiesFormat - Properties of the route.
23181	*RoutePropertiesFormat `json:"properties,omitempty"`
23182	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23183	Name *string `json:"name,omitempty"`
23184	// Etag - A unique read-only string that changes whenever the resource is updated.
23185	Etag *string `json:"etag,omitempty"`
23186	// ID - Resource ID.
23187	ID *string `json:"id,omitempty"`
23188}
23189
23190// MarshalJSON is the custom marshaler for Route.
23191func (r Route) MarshalJSON() ([]byte, error) {
23192	objectMap := make(map[string]interface{})
23193	if r.RoutePropertiesFormat != nil {
23194		objectMap["properties"] = r.RoutePropertiesFormat
23195	}
23196	if r.Name != nil {
23197		objectMap["name"] = r.Name
23198	}
23199	if r.Etag != nil {
23200		objectMap["etag"] = r.Etag
23201	}
23202	if r.ID != nil {
23203		objectMap["id"] = r.ID
23204	}
23205	return json.Marshal(objectMap)
23206}
23207
23208// UnmarshalJSON is the custom unmarshaler for Route struct.
23209func (r *Route) UnmarshalJSON(body []byte) error {
23210	var m map[string]*json.RawMessage
23211	err := json.Unmarshal(body, &m)
23212	if err != nil {
23213		return err
23214	}
23215	for k, v := range m {
23216		switch k {
23217		case "properties":
23218			if v != nil {
23219				var routePropertiesFormat RoutePropertiesFormat
23220				err = json.Unmarshal(*v, &routePropertiesFormat)
23221				if err != nil {
23222					return err
23223				}
23224				r.RoutePropertiesFormat = &routePropertiesFormat
23225			}
23226		case "name":
23227			if v != nil {
23228				var name string
23229				err = json.Unmarshal(*v, &name)
23230				if err != nil {
23231					return err
23232				}
23233				r.Name = &name
23234			}
23235		case "etag":
23236			if v != nil {
23237				var etag string
23238				err = json.Unmarshal(*v, &etag)
23239				if err != nil {
23240					return err
23241				}
23242				r.Etag = &etag
23243			}
23244		case "id":
23245			if v != nil {
23246				var ID string
23247				err = json.Unmarshal(*v, &ID)
23248				if err != nil {
23249					return err
23250				}
23251				r.ID = &ID
23252			}
23253		}
23254	}
23255
23256	return nil
23257}
23258
23259// RouteFilter route Filter Resource.
23260type RouteFilter struct {
23261	autorest.Response `json:"-"`
23262	// RouteFilterPropertiesFormat - Properties of the route filter.
23263	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
23264	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
23265	Etag *string `json:"etag,omitempty"`
23266	// ID - Resource ID.
23267	ID *string `json:"id,omitempty"`
23268	// Name - READ-ONLY; Resource name.
23269	Name *string `json:"name,omitempty"`
23270	// Type - READ-ONLY; Resource type.
23271	Type *string `json:"type,omitempty"`
23272	// Location - Resource location.
23273	Location *string `json:"location,omitempty"`
23274	// Tags - Resource tags.
23275	Tags map[string]*string `json:"tags"`
23276}
23277
23278// MarshalJSON is the custom marshaler for RouteFilter.
23279func (rf RouteFilter) MarshalJSON() ([]byte, error) {
23280	objectMap := make(map[string]interface{})
23281	if rf.RouteFilterPropertiesFormat != nil {
23282		objectMap["properties"] = rf.RouteFilterPropertiesFormat
23283	}
23284	if rf.ID != nil {
23285		objectMap["id"] = rf.ID
23286	}
23287	if rf.Location != nil {
23288		objectMap["location"] = rf.Location
23289	}
23290	if rf.Tags != nil {
23291		objectMap["tags"] = rf.Tags
23292	}
23293	return json.Marshal(objectMap)
23294}
23295
23296// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
23297func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
23298	var m map[string]*json.RawMessage
23299	err := json.Unmarshal(body, &m)
23300	if err != nil {
23301		return err
23302	}
23303	for k, v := range m {
23304		switch k {
23305		case "properties":
23306			if v != nil {
23307				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
23308				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
23309				if err != nil {
23310					return err
23311				}
23312				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
23313			}
23314		case "etag":
23315			if v != nil {
23316				var etag string
23317				err = json.Unmarshal(*v, &etag)
23318				if err != nil {
23319					return err
23320				}
23321				rf.Etag = &etag
23322			}
23323		case "id":
23324			if v != nil {
23325				var ID string
23326				err = json.Unmarshal(*v, &ID)
23327				if err != nil {
23328					return err
23329				}
23330				rf.ID = &ID
23331			}
23332		case "name":
23333			if v != nil {
23334				var name string
23335				err = json.Unmarshal(*v, &name)
23336				if err != nil {
23337					return err
23338				}
23339				rf.Name = &name
23340			}
23341		case "type":
23342			if v != nil {
23343				var typeVar string
23344				err = json.Unmarshal(*v, &typeVar)
23345				if err != nil {
23346					return err
23347				}
23348				rf.Type = &typeVar
23349			}
23350		case "location":
23351			if v != nil {
23352				var location string
23353				err = json.Unmarshal(*v, &location)
23354				if err != nil {
23355					return err
23356				}
23357				rf.Location = &location
23358			}
23359		case "tags":
23360			if v != nil {
23361				var tags map[string]*string
23362				err = json.Unmarshal(*v, &tags)
23363				if err != nil {
23364					return err
23365				}
23366				rf.Tags = tags
23367			}
23368		}
23369	}
23370
23371	return nil
23372}
23373
23374// RouteFilterListResult response for the ListRouteFilters API service call.
23375type RouteFilterListResult struct {
23376	autorest.Response `json:"-"`
23377	// Value - Gets a list of route filters in a resource group.
23378	Value *[]RouteFilter `json:"value,omitempty"`
23379	// NextLink - The URL to get the next set of results.
23380	NextLink *string `json:"nextLink,omitempty"`
23381}
23382
23383// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
23384type RouteFilterListResultIterator struct {
23385	i    int
23386	page RouteFilterListResultPage
23387}
23388
23389// NextWithContext advances to the next value.  If there was an error making
23390// the request the iterator does not advance and the error is returned.
23391func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
23392	if tracing.IsEnabled() {
23393		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
23394		defer func() {
23395			sc := -1
23396			if iter.Response().Response.Response != nil {
23397				sc = iter.Response().Response.Response.StatusCode
23398			}
23399			tracing.EndSpan(ctx, sc, err)
23400		}()
23401	}
23402	iter.i++
23403	if iter.i < len(iter.page.Values()) {
23404		return nil
23405	}
23406	err = iter.page.NextWithContext(ctx)
23407	if err != nil {
23408		iter.i--
23409		return err
23410	}
23411	iter.i = 0
23412	return nil
23413}
23414
23415// Next advances to the next value.  If there was an error making
23416// the request the iterator does not advance and the error is returned.
23417// Deprecated: Use NextWithContext() instead.
23418func (iter *RouteFilterListResultIterator) Next() error {
23419	return iter.NextWithContext(context.Background())
23420}
23421
23422// NotDone returns true if the enumeration should be started or is not yet complete.
23423func (iter RouteFilterListResultIterator) NotDone() bool {
23424	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23425}
23426
23427// Response returns the raw server response from the last page request.
23428func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
23429	return iter.page.Response()
23430}
23431
23432// Value returns the current value or a zero-initialized value if the
23433// iterator has advanced beyond the end of the collection.
23434func (iter RouteFilterListResultIterator) Value() RouteFilter {
23435	if !iter.page.NotDone() {
23436		return RouteFilter{}
23437	}
23438	return iter.page.Values()[iter.i]
23439}
23440
23441// Creates a new instance of the RouteFilterListResultIterator type.
23442func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
23443	return RouteFilterListResultIterator{page: page}
23444}
23445
23446// IsEmpty returns true if the ListResult contains no values.
23447func (rflr RouteFilterListResult) IsEmpty() bool {
23448	return rflr.Value == nil || len(*rflr.Value) == 0
23449}
23450
23451// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
23452// It returns nil if no more results exist.
23453func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
23454	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
23455		return nil, nil
23456	}
23457	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23458		autorest.AsJSON(),
23459		autorest.AsGet(),
23460		autorest.WithBaseURL(to.String(rflr.NextLink)))
23461}
23462
23463// RouteFilterListResultPage contains a page of RouteFilter values.
23464type RouteFilterListResultPage struct {
23465	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
23466	rflr RouteFilterListResult
23467}
23468
23469// NextWithContext advances to the next page of values.  If there was an error making
23470// the request the page does not advance and the error is returned.
23471func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
23472	if tracing.IsEnabled() {
23473		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
23474		defer func() {
23475			sc := -1
23476			if page.Response().Response.Response != nil {
23477				sc = page.Response().Response.Response.StatusCode
23478			}
23479			tracing.EndSpan(ctx, sc, err)
23480		}()
23481	}
23482	next, err := page.fn(ctx, page.rflr)
23483	if err != nil {
23484		return err
23485	}
23486	page.rflr = next
23487	return nil
23488}
23489
23490// Next advances to the next page of values.  If there was an error making
23491// the request the page does not advance and the error is returned.
23492// Deprecated: Use NextWithContext() instead.
23493func (page *RouteFilterListResultPage) Next() error {
23494	return page.NextWithContext(context.Background())
23495}
23496
23497// NotDone returns true if the page enumeration should be started or is not yet complete.
23498func (page RouteFilterListResultPage) NotDone() bool {
23499	return !page.rflr.IsEmpty()
23500}
23501
23502// Response returns the raw server response from the last page request.
23503func (page RouteFilterListResultPage) Response() RouteFilterListResult {
23504	return page.rflr
23505}
23506
23507// Values returns the slice of values for the current page or nil if there are no values.
23508func (page RouteFilterListResultPage) Values() []RouteFilter {
23509	if page.rflr.IsEmpty() {
23510		return nil
23511	}
23512	return *page.rflr.Value
23513}
23514
23515// Creates a new instance of the RouteFilterListResultPage type.
23516func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
23517	return RouteFilterListResultPage{fn: getNextPage}
23518}
23519
23520// RouteFilterPropertiesFormat route Filter Resource.
23521type RouteFilterPropertiesFormat struct {
23522	// Rules - Collection of RouteFilterRules contained within a route filter.
23523	Rules *[]RouteFilterRule `json:"rules,omitempty"`
23524	// Peerings - A collection of references to express route circuit peerings.
23525	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
23526	// Ipv6Peerings - A collection of references to express route circuit ipv6 peerings.
23527	Ipv6Peerings *[]ExpressRouteCircuitPeering `json:"ipv6Peerings,omitempty"`
23528	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
23529	ProvisioningState *string `json:"provisioningState,omitempty"`
23530}
23531
23532// RouteFilterRule route Filter Rule Resource.
23533type RouteFilterRule struct {
23534	autorest.Response `json:"-"`
23535	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
23536	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
23537	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23538	Name *string `json:"name,omitempty"`
23539	// Location - Resource location.
23540	Location *string `json:"location,omitempty"`
23541	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23542	Etag *string `json:"etag,omitempty"`
23543	// ID - Resource ID.
23544	ID *string `json:"id,omitempty"`
23545}
23546
23547// MarshalJSON is the custom marshaler for RouteFilterRule.
23548func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
23549	objectMap := make(map[string]interface{})
23550	if rfr.RouteFilterRulePropertiesFormat != nil {
23551		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
23552	}
23553	if rfr.Name != nil {
23554		objectMap["name"] = rfr.Name
23555	}
23556	if rfr.Location != nil {
23557		objectMap["location"] = rfr.Location
23558	}
23559	if rfr.ID != nil {
23560		objectMap["id"] = rfr.ID
23561	}
23562	return json.Marshal(objectMap)
23563}
23564
23565// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
23566func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
23567	var m map[string]*json.RawMessage
23568	err := json.Unmarshal(body, &m)
23569	if err != nil {
23570		return err
23571	}
23572	for k, v := range m {
23573		switch k {
23574		case "properties":
23575			if v != nil {
23576				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
23577				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
23578				if err != nil {
23579					return err
23580				}
23581				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
23582			}
23583		case "name":
23584			if v != nil {
23585				var name string
23586				err = json.Unmarshal(*v, &name)
23587				if err != nil {
23588					return err
23589				}
23590				rfr.Name = &name
23591			}
23592		case "location":
23593			if v != nil {
23594				var location string
23595				err = json.Unmarshal(*v, &location)
23596				if err != nil {
23597					return err
23598				}
23599				rfr.Location = &location
23600			}
23601		case "etag":
23602			if v != nil {
23603				var etag string
23604				err = json.Unmarshal(*v, &etag)
23605				if err != nil {
23606					return err
23607				}
23608				rfr.Etag = &etag
23609			}
23610		case "id":
23611			if v != nil {
23612				var ID string
23613				err = json.Unmarshal(*v, &ID)
23614				if err != nil {
23615					return err
23616				}
23617				rfr.ID = &ID
23618			}
23619		}
23620	}
23621
23622	return nil
23623}
23624
23625// RouteFilterRuleListResult response for the ListRouteFilterRules API service call.
23626type RouteFilterRuleListResult struct {
23627	autorest.Response `json:"-"`
23628	// Value - Gets a list of RouteFilterRules in a resource group.
23629	Value *[]RouteFilterRule `json:"value,omitempty"`
23630	// NextLink - The URL to get the next set of results.
23631	NextLink *string `json:"nextLink,omitempty"`
23632}
23633
23634// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
23635type RouteFilterRuleListResultIterator struct {
23636	i    int
23637	page RouteFilterRuleListResultPage
23638}
23639
23640// NextWithContext advances to the next value.  If there was an error making
23641// the request the iterator does not advance and the error is returned.
23642func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
23643	if tracing.IsEnabled() {
23644		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
23645		defer func() {
23646			sc := -1
23647			if iter.Response().Response.Response != nil {
23648				sc = iter.Response().Response.Response.StatusCode
23649			}
23650			tracing.EndSpan(ctx, sc, err)
23651		}()
23652	}
23653	iter.i++
23654	if iter.i < len(iter.page.Values()) {
23655		return nil
23656	}
23657	err = iter.page.NextWithContext(ctx)
23658	if err != nil {
23659		iter.i--
23660		return err
23661	}
23662	iter.i = 0
23663	return nil
23664}
23665
23666// Next advances to the next value.  If there was an error making
23667// the request the iterator does not advance and the error is returned.
23668// Deprecated: Use NextWithContext() instead.
23669func (iter *RouteFilterRuleListResultIterator) Next() error {
23670	return iter.NextWithContext(context.Background())
23671}
23672
23673// NotDone returns true if the enumeration should be started or is not yet complete.
23674func (iter RouteFilterRuleListResultIterator) NotDone() bool {
23675	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23676}
23677
23678// Response returns the raw server response from the last page request.
23679func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
23680	return iter.page.Response()
23681}
23682
23683// Value returns the current value or a zero-initialized value if the
23684// iterator has advanced beyond the end of the collection.
23685func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
23686	if !iter.page.NotDone() {
23687		return RouteFilterRule{}
23688	}
23689	return iter.page.Values()[iter.i]
23690}
23691
23692// Creates a new instance of the RouteFilterRuleListResultIterator type.
23693func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
23694	return RouteFilterRuleListResultIterator{page: page}
23695}
23696
23697// IsEmpty returns true if the ListResult contains no values.
23698func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
23699	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
23700}
23701
23702// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
23703// It returns nil if no more results exist.
23704func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
23705	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
23706		return nil, nil
23707	}
23708	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23709		autorest.AsJSON(),
23710		autorest.AsGet(),
23711		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
23712}
23713
23714// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
23715type RouteFilterRuleListResultPage struct {
23716	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
23717	rfrlr RouteFilterRuleListResult
23718}
23719
23720// NextWithContext advances to the next page of values.  If there was an error making
23721// the request the page does not advance and the error is returned.
23722func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
23723	if tracing.IsEnabled() {
23724		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
23725		defer func() {
23726			sc := -1
23727			if page.Response().Response.Response != nil {
23728				sc = page.Response().Response.Response.StatusCode
23729			}
23730			tracing.EndSpan(ctx, sc, err)
23731		}()
23732	}
23733	next, err := page.fn(ctx, page.rfrlr)
23734	if err != nil {
23735		return err
23736	}
23737	page.rfrlr = next
23738	return nil
23739}
23740
23741// Next advances to the next page of values.  If there was an error making
23742// the request the page does not advance and the error is returned.
23743// Deprecated: Use NextWithContext() instead.
23744func (page *RouteFilterRuleListResultPage) Next() error {
23745	return page.NextWithContext(context.Background())
23746}
23747
23748// NotDone returns true if the page enumeration should be started or is not yet complete.
23749func (page RouteFilterRuleListResultPage) NotDone() bool {
23750	return !page.rfrlr.IsEmpty()
23751}
23752
23753// Response returns the raw server response from the last page request.
23754func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
23755	return page.rfrlr
23756}
23757
23758// Values returns the slice of values for the current page or nil if there are no values.
23759func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
23760	if page.rfrlr.IsEmpty() {
23761		return nil
23762	}
23763	return *page.rfrlr.Value
23764}
23765
23766// Creates a new instance of the RouteFilterRuleListResultPage type.
23767func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
23768	return RouteFilterRuleListResultPage{fn: getNextPage}
23769}
23770
23771// RouteFilterRulePropertiesFormat route Filter Rule Resource.
23772type RouteFilterRulePropertiesFormat struct {
23773	// Access - The access type of the rule. Possible values include: 'Allow', 'Deny'
23774	Access Access `json:"access,omitempty"`
23775	// RouteFilterRuleType - The rule type of the rule.
23776	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
23777	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
23778	Communities *[]string `json:"communities,omitempty"`
23779	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
23780	ProvisioningState *string `json:"provisioningState,omitempty"`
23781}
23782
23783// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23784// long-running operation.
23785type RouteFilterRulesCreateOrUpdateFuture struct {
23786	azure.Future
23787}
23788
23789// Result returns the result of the asynchronous operation.
23790// If the operation has not completed it will return an error.
23791func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
23792	var done bool
23793	done, err = future.DoneWithContext(context.Background(), client)
23794	if err != nil {
23795		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23796		return
23797	}
23798	if !done {
23799		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
23800		return
23801	}
23802	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23803	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
23804		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
23805		if err != nil {
23806			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
23807		}
23808	}
23809	return
23810}
23811
23812// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23813// operation.
23814type RouteFilterRulesDeleteFuture struct {
23815	azure.Future
23816}
23817
23818// Result returns the result of the asynchronous operation.
23819// If the operation has not completed it will return an error.
23820func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
23821	var done bool
23822	done, err = future.DoneWithContext(context.Background(), client)
23823	if err != nil {
23824		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
23825		return
23826	}
23827	if !done {
23828		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
23829		return
23830	}
23831	ar.Response = future.Response()
23832	return
23833}
23834
23835// RouteFilterRulesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
23836// operation.
23837type RouteFilterRulesUpdateFuture struct {
23838	azure.Future
23839}
23840
23841// Result returns the result of the asynchronous operation.
23842// If the operation has not completed it will return an error.
23843func (future *RouteFilterRulesUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
23844	var done bool
23845	done, err = future.DoneWithContext(context.Background(), client)
23846	if err != nil {
23847		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", future.Response(), "Polling failure")
23848		return
23849	}
23850	if !done {
23851		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesUpdateFuture")
23852		return
23853	}
23854	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23855	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
23856		rfr, err = client.UpdateResponder(rfr.Response.Response)
23857		if err != nil {
23858			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
23859		}
23860	}
23861	return
23862}
23863
23864// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23865// long-running operation.
23866type RouteFiltersCreateOrUpdateFuture struct {
23867	azure.Future
23868}
23869
23870// Result returns the result of the asynchronous operation.
23871// If the operation has not completed it will return an error.
23872func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
23873	var done bool
23874	done, err = future.DoneWithContext(context.Background(), client)
23875	if err != nil {
23876		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23877		return
23878	}
23879	if !done {
23880		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
23881		return
23882	}
23883	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23884	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
23885		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
23886		if err != nil {
23887			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
23888		}
23889	}
23890	return
23891}
23892
23893// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23894// operation.
23895type RouteFiltersDeleteFuture struct {
23896	azure.Future
23897}
23898
23899// Result returns the result of the asynchronous operation.
23900// If the operation has not completed it will return an error.
23901func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
23902	var done bool
23903	done, err = future.DoneWithContext(context.Background(), client)
23904	if err != nil {
23905		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
23906		return
23907	}
23908	if !done {
23909		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
23910		return
23911	}
23912	ar.Response = future.Response()
23913	return
23914}
23915
23916// RouteFiltersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
23917// operation.
23918type RouteFiltersUpdateFuture struct {
23919	azure.Future
23920}
23921
23922// Result returns the result of the asynchronous operation.
23923// If the operation has not completed it will return an error.
23924func (future *RouteFiltersUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
23925	var done bool
23926	done, err = future.DoneWithContext(context.Background(), client)
23927	if err != nil {
23928		err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", future.Response(), "Polling failure")
23929		return
23930	}
23931	if !done {
23932		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersUpdateFuture")
23933		return
23934	}
23935	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23936	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
23937		rf, err = client.UpdateResponder(rf.Response.Response)
23938		if err != nil {
23939			err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
23940		}
23941	}
23942	return
23943}
23944
23945// RouteListResult response for the ListRoute API service call.
23946type RouteListResult struct {
23947	autorest.Response `json:"-"`
23948	// Value - Gets a list of routes in a resource group.
23949	Value *[]Route `json:"value,omitempty"`
23950	// NextLink - The URL to get the next set of results.
23951	NextLink *string `json:"nextLink,omitempty"`
23952}
23953
23954// RouteListResultIterator provides access to a complete listing of Route values.
23955type RouteListResultIterator struct {
23956	i    int
23957	page RouteListResultPage
23958}
23959
23960// NextWithContext advances to the next value.  If there was an error making
23961// the request the iterator does not advance and the error is returned.
23962func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
23963	if tracing.IsEnabled() {
23964		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
23965		defer func() {
23966			sc := -1
23967			if iter.Response().Response.Response != nil {
23968				sc = iter.Response().Response.Response.StatusCode
23969			}
23970			tracing.EndSpan(ctx, sc, err)
23971		}()
23972	}
23973	iter.i++
23974	if iter.i < len(iter.page.Values()) {
23975		return nil
23976	}
23977	err = iter.page.NextWithContext(ctx)
23978	if err != nil {
23979		iter.i--
23980		return err
23981	}
23982	iter.i = 0
23983	return nil
23984}
23985
23986// Next advances to the next value.  If there was an error making
23987// the request the iterator does not advance and the error is returned.
23988// Deprecated: Use NextWithContext() instead.
23989func (iter *RouteListResultIterator) Next() error {
23990	return iter.NextWithContext(context.Background())
23991}
23992
23993// NotDone returns true if the enumeration should be started or is not yet complete.
23994func (iter RouteListResultIterator) NotDone() bool {
23995	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23996}
23997
23998// Response returns the raw server response from the last page request.
23999func (iter RouteListResultIterator) Response() RouteListResult {
24000	return iter.page.Response()
24001}
24002
24003// Value returns the current value or a zero-initialized value if the
24004// iterator has advanced beyond the end of the collection.
24005func (iter RouteListResultIterator) Value() Route {
24006	if !iter.page.NotDone() {
24007		return Route{}
24008	}
24009	return iter.page.Values()[iter.i]
24010}
24011
24012// Creates a new instance of the RouteListResultIterator type.
24013func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
24014	return RouteListResultIterator{page: page}
24015}
24016
24017// IsEmpty returns true if the ListResult contains no values.
24018func (rlr RouteListResult) IsEmpty() bool {
24019	return rlr.Value == nil || len(*rlr.Value) == 0
24020}
24021
24022// routeListResultPreparer prepares a request to retrieve the next set of results.
24023// It returns nil if no more results exist.
24024func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
24025	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
24026		return nil, nil
24027	}
24028	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24029		autorest.AsJSON(),
24030		autorest.AsGet(),
24031		autorest.WithBaseURL(to.String(rlr.NextLink)))
24032}
24033
24034// RouteListResultPage contains a page of Route values.
24035type RouteListResultPage struct {
24036	fn  func(context.Context, RouteListResult) (RouteListResult, error)
24037	rlr RouteListResult
24038}
24039
24040// NextWithContext advances to the next page of values.  If there was an error making
24041// the request the page does not advance and the error is returned.
24042func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
24043	if tracing.IsEnabled() {
24044		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
24045		defer func() {
24046			sc := -1
24047			if page.Response().Response.Response != nil {
24048				sc = page.Response().Response.Response.StatusCode
24049			}
24050			tracing.EndSpan(ctx, sc, err)
24051		}()
24052	}
24053	next, err := page.fn(ctx, page.rlr)
24054	if err != nil {
24055		return err
24056	}
24057	page.rlr = next
24058	return nil
24059}
24060
24061// Next advances to the next page of values.  If there was an error making
24062// the request the page does not advance and the error is returned.
24063// Deprecated: Use NextWithContext() instead.
24064func (page *RouteListResultPage) Next() error {
24065	return page.NextWithContext(context.Background())
24066}
24067
24068// NotDone returns true if the page enumeration should be started or is not yet complete.
24069func (page RouteListResultPage) NotDone() bool {
24070	return !page.rlr.IsEmpty()
24071}
24072
24073// Response returns the raw server response from the last page request.
24074func (page RouteListResultPage) Response() RouteListResult {
24075	return page.rlr
24076}
24077
24078// Values returns the slice of values for the current page or nil if there are no values.
24079func (page RouteListResultPage) Values() []Route {
24080	if page.rlr.IsEmpty() {
24081		return nil
24082	}
24083	return *page.rlr.Value
24084}
24085
24086// Creates a new instance of the RouteListResultPage type.
24087func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
24088	return RouteListResultPage{fn: getNextPage}
24089}
24090
24091// RoutePropertiesFormat route resource.
24092type RoutePropertiesFormat struct {
24093	// AddressPrefix - The destination CIDR to which the route applies.
24094	AddressPrefix *string `json:"addressPrefix,omitempty"`
24095	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
24096	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
24097	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
24098	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
24099	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24100	ProvisioningState *string `json:"provisioningState,omitempty"`
24101}
24102
24103// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
24104// operation.
24105type RoutesCreateOrUpdateFuture struct {
24106	azure.Future
24107}
24108
24109// Result returns the result of the asynchronous operation.
24110// If the operation has not completed it will return an error.
24111func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
24112	var done bool
24113	done, err = future.DoneWithContext(context.Background(), client)
24114	if err != nil {
24115		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24116		return
24117	}
24118	if !done {
24119		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
24120		return
24121	}
24122	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24123	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
24124		r, err = client.CreateOrUpdateResponder(r.Response.Response)
24125		if err != nil {
24126			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
24127		}
24128	}
24129	return
24130}
24131
24132// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
24133type RoutesDeleteFuture struct {
24134	azure.Future
24135}
24136
24137// Result returns the result of the asynchronous operation.
24138// If the operation has not completed it will return an error.
24139func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
24140	var done bool
24141	done, err = future.DoneWithContext(context.Background(), client)
24142	if err != nil {
24143		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
24144		return
24145	}
24146	if !done {
24147		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
24148		return
24149	}
24150	ar.Response = future.Response()
24151	return
24152}
24153
24154// RouteTable route table resource.
24155type RouteTable struct {
24156	autorest.Response `json:"-"`
24157	// RouteTablePropertiesFormat - Properties of the route table.
24158	*RouteTablePropertiesFormat `json:"properties,omitempty"`
24159	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
24160	Etag *string `json:"etag,omitempty"`
24161	// ID - Resource ID.
24162	ID *string `json:"id,omitempty"`
24163	// Name - READ-ONLY; Resource name.
24164	Name *string `json:"name,omitempty"`
24165	// Type - READ-ONLY; Resource type.
24166	Type *string `json:"type,omitempty"`
24167	// Location - Resource location.
24168	Location *string `json:"location,omitempty"`
24169	// Tags - Resource tags.
24170	Tags map[string]*string `json:"tags"`
24171}
24172
24173// MarshalJSON is the custom marshaler for RouteTable.
24174func (rt RouteTable) MarshalJSON() ([]byte, error) {
24175	objectMap := make(map[string]interface{})
24176	if rt.RouteTablePropertiesFormat != nil {
24177		objectMap["properties"] = rt.RouteTablePropertiesFormat
24178	}
24179	if rt.Etag != nil {
24180		objectMap["etag"] = rt.Etag
24181	}
24182	if rt.ID != nil {
24183		objectMap["id"] = rt.ID
24184	}
24185	if rt.Location != nil {
24186		objectMap["location"] = rt.Location
24187	}
24188	if rt.Tags != nil {
24189		objectMap["tags"] = rt.Tags
24190	}
24191	return json.Marshal(objectMap)
24192}
24193
24194// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
24195func (rt *RouteTable) UnmarshalJSON(body []byte) error {
24196	var m map[string]*json.RawMessage
24197	err := json.Unmarshal(body, &m)
24198	if err != nil {
24199		return err
24200	}
24201	for k, v := range m {
24202		switch k {
24203		case "properties":
24204			if v != nil {
24205				var routeTablePropertiesFormat RouteTablePropertiesFormat
24206				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
24207				if err != nil {
24208					return err
24209				}
24210				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
24211			}
24212		case "etag":
24213			if v != nil {
24214				var etag string
24215				err = json.Unmarshal(*v, &etag)
24216				if err != nil {
24217					return err
24218				}
24219				rt.Etag = &etag
24220			}
24221		case "id":
24222			if v != nil {
24223				var ID string
24224				err = json.Unmarshal(*v, &ID)
24225				if err != nil {
24226					return err
24227				}
24228				rt.ID = &ID
24229			}
24230		case "name":
24231			if v != nil {
24232				var name string
24233				err = json.Unmarshal(*v, &name)
24234				if err != nil {
24235					return err
24236				}
24237				rt.Name = &name
24238			}
24239		case "type":
24240			if v != nil {
24241				var typeVar string
24242				err = json.Unmarshal(*v, &typeVar)
24243				if err != nil {
24244					return err
24245				}
24246				rt.Type = &typeVar
24247			}
24248		case "location":
24249			if v != nil {
24250				var location string
24251				err = json.Unmarshal(*v, &location)
24252				if err != nil {
24253					return err
24254				}
24255				rt.Location = &location
24256			}
24257		case "tags":
24258			if v != nil {
24259				var tags map[string]*string
24260				err = json.Unmarshal(*v, &tags)
24261				if err != nil {
24262					return err
24263				}
24264				rt.Tags = tags
24265			}
24266		}
24267	}
24268
24269	return nil
24270}
24271
24272// RouteTableListResult response for the ListRouteTable API service call.
24273type RouteTableListResult struct {
24274	autorest.Response `json:"-"`
24275	// Value - Gets a list of route tables in a resource group.
24276	Value *[]RouteTable `json:"value,omitempty"`
24277	// NextLink - The URL to get the next set of results.
24278	NextLink *string `json:"nextLink,omitempty"`
24279}
24280
24281// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
24282type RouteTableListResultIterator struct {
24283	i    int
24284	page RouteTableListResultPage
24285}
24286
24287// NextWithContext advances to the next value.  If there was an error making
24288// the request the iterator does not advance and the error is returned.
24289func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
24290	if tracing.IsEnabled() {
24291		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
24292		defer func() {
24293			sc := -1
24294			if iter.Response().Response.Response != nil {
24295				sc = iter.Response().Response.Response.StatusCode
24296			}
24297			tracing.EndSpan(ctx, sc, err)
24298		}()
24299	}
24300	iter.i++
24301	if iter.i < len(iter.page.Values()) {
24302		return nil
24303	}
24304	err = iter.page.NextWithContext(ctx)
24305	if err != nil {
24306		iter.i--
24307		return err
24308	}
24309	iter.i = 0
24310	return nil
24311}
24312
24313// Next advances to the next value.  If there was an error making
24314// the request the iterator does not advance and the error is returned.
24315// Deprecated: Use NextWithContext() instead.
24316func (iter *RouteTableListResultIterator) Next() error {
24317	return iter.NextWithContext(context.Background())
24318}
24319
24320// NotDone returns true if the enumeration should be started or is not yet complete.
24321func (iter RouteTableListResultIterator) NotDone() bool {
24322	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24323}
24324
24325// Response returns the raw server response from the last page request.
24326func (iter RouteTableListResultIterator) Response() RouteTableListResult {
24327	return iter.page.Response()
24328}
24329
24330// Value returns the current value or a zero-initialized value if the
24331// iterator has advanced beyond the end of the collection.
24332func (iter RouteTableListResultIterator) Value() RouteTable {
24333	if !iter.page.NotDone() {
24334		return RouteTable{}
24335	}
24336	return iter.page.Values()[iter.i]
24337}
24338
24339// Creates a new instance of the RouteTableListResultIterator type.
24340func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
24341	return RouteTableListResultIterator{page: page}
24342}
24343
24344// IsEmpty returns true if the ListResult contains no values.
24345func (rtlr RouteTableListResult) IsEmpty() bool {
24346	return rtlr.Value == nil || len(*rtlr.Value) == 0
24347}
24348
24349// routeTableListResultPreparer prepares a request to retrieve the next set of results.
24350// It returns nil if no more results exist.
24351func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
24352	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
24353		return nil, nil
24354	}
24355	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24356		autorest.AsJSON(),
24357		autorest.AsGet(),
24358		autorest.WithBaseURL(to.String(rtlr.NextLink)))
24359}
24360
24361// RouteTableListResultPage contains a page of RouteTable values.
24362type RouteTableListResultPage struct {
24363	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
24364	rtlr RouteTableListResult
24365}
24366
24367// NextWithContext advances to the next page of values.  If there was an error making
24368// the request the page does not advance and the error is returned.
24369func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
24370	if tracing.IsEnabled() {
24371		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
24372		defer func() {
24373			sc := -1
24374			if page.Response().Response.Response != nil {
24375				sc = page.Response().Response.Response.StatusCode
24376			}
24377			tracing.EndSpan(ctx, sc, err)
24378		}()
24379	}
24380	next, err := page.fn(ctx, page.rtlr)
24381	if err != nil {
24382		return err
24383	}
24384	page.rtlr = next
24385	return nil
24386}
24387
24388// Next advances to the next page of values.  If there was an error making
24389// the request the page does not advance and the error is returned.
24390// Deprecated: Use NextWithContext() instead.
24391func (page *RouteTableListResultPage) Next() error {
24392	return page.NextWithContext(context.Background())
24393}
24394
24395// NotDone returns true if the page enumeration should be started or is not yet complete.
24396func (page RouteTableListResultPage) NotDone() bool {
24397	return !page.rtlr.IsEmpty()
24398}
24399
24400// Response returns the raw server response from the last page request.
24401func (page RouteTableListResultPage) Response() RouteTableListResult {
24402	return page.rtlr
24403}
24404
24405// Values returns the slice of values for the current page or nil if there are no values.
24406func (page RouteTableListResultPage) Values() []RouteTable {
24407	if page.rtlr.IsEmpty() {
24408		return nil
24409	}
24410	return *page.rtlr.Value
24411}
24412
24413// Creates a new instance of the RouteTableListResultPage type.
24414func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
24415	return RouteTableListResultPage{fn: getNextPage}
24416}
24417
24418// RouteTablePropertiesFormat route Table resource.
24419type RouteTablePropertiesFormat struct {
24420	// Routes - Collection of routes contained within a route table.
24421	Routes *[]Route `json:"routes,omitempty"`
24422	// Subnets - READ-ONLY; A collection of references to subnets.
24423	Subnets *[]Subnet `json:"subnets,omitempty"`
24424	// DisableBgpRoutePropagation - Gets or sets whether to disable the routes learned by BGP on that route table. True means disable.
24425	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
24426	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24427	ProvisioningState *string `json:"provisioningState,omitempty"`
24428}
24429
24430// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24431// long-running operation.
24432type RouteTablesCreateOrUpdateFuture struct {
24433	azure.Future
24434}
24435
24436// Result returns the result of the asynchronous operation.
24437// If the operation has not completed it will return an error.
24438func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
24439	var done bool
24440	done, err = future.DoneWithContext(context.Background(), client)
24441	if err != nil {
24442		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24443		return
24444	}
24445	if !done {
24446		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
24447		return
24448	}
24449	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24450	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
24451		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
24452		if err != nil {
24453			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
24454		}
24455	}
24456	return
24457}
24458
24459// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24460// operation.
24461type RouteTablesDeleteFuture struct {
24462	azure.Future
24463}
24464
24465// Result returns the result of the asynchronous operation.
24466// If the operation has not completed it will return an error.
24467func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
24468	var done bool
24469	done, err = future.DoneWithContext(context.Background(), client)
24470	if err != nil {
24471		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
24472		return
24473	}
24474	if !done {
24475		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
24476		return
24477	}
24478	ar.Response = future.Response()
24479	return
24480}
24481
24482// RouteTablesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
24483// operation.
24484type RouteTablesUpdateTagsFuture struct {
24485	azure.Future
24486}
24487
24488// Result returns the result of the asynchronous operation.
24489// If the operation has not completed it will return an error.
24490func (future *RouteTablesUpdateTagsFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
24491	var done bool
24492	done, err = future.DoneWithContext(context.Background(), client)
24493	if err != nil {
24494		err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
24495		return
24496	}
24497	if !done {
24498		err = azure.NewAsyncOpIncompleteError("network.RouteTablesUpdateTagsFuture")
24499		return
24500	}
24501	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24502	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
24503		rt, err = client.UpdateTagsResponder(rt.Response.Response)
24504		if err != nil {
24505			err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", rt.Response.Response, "Failure responding to request")
24506		}
24507	}
24508	return
24509}
24510
24511// SecurityGroup networkSecurityGroup resource.
24512type SecurityGroup struct {
24513	autorest.Response `json:"-"`
24514	// SecurityGroupPropertiesFormat - Properties of the network security group.
24515	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
24516	// Etag - A unique read-only string that changes whenever the resource is updated.
24517	Etag *string `json:"etag,omitempty"`
24518	// ID - Resource ID.
24519	ID *string `json:"id,omitempty"`
24520	// Name - READ-ONLY; Resource name.
24521	Name *string `json:"name,omitempty"`
24522	// Type - READ-ONLY; Resource type.
24523	Type *string `json:"type,omitempty"`
24524	// Location - Resource location.
24525	Location *string `json:"location,omitempty"`
24526	// Tags - Resource tags.
24527	Tags map[string]*string `json:"tags"`
24528}
24529
24530// MarshalJSON is the custom marshaler for SecurityGroup.
24531func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
24532	objectMap := make(map[string]interface{})
24533	if sg.SecurityGroupPropertiesFormat != nil {
24534		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
24535	}
24536	if sg.Etag != nil {
24537		objectMap["etag"] = sg.Etag
24538	}
24539	if sg.ID != nil {
24540		objectMap["id"] = sg.ID
24541	}
24542	if sg.Location != nil {
24543		objectMap["location"] = sg.Location
24544	}
24545	if sg.Tags != nil {
24546		objectMap["tags"] = sg.Tags
24547	}
24548	return json.Marshal(objectMap)
24549}
24550
24551// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
24552func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
24553	var m map[string]*json.RawMessage
24554	err := json.Unmarshal(body, &m)
24555	if err != nil {
24556		return err
24557	}
24558	for k, v := range m {
24559		switch k {
24560		case "properties":
24561			if v != nil {
24562				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
24563				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
24564				if err != nil {
24565					return err
24566				}
24567				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
24568			}
24569		case "etag":
24570			if v != nil {
24571				var etag string
24572				err = json.Unmarshal(*v, &etag)
24573				if err != nil {
24574					return err
24575				}
24576				sg.Etag = &etag
24577			}
24578		case "id":
24579			if v != nil {
24580				var ID string
24581				err = json.Unmarshal(*v, &ID)
24582				if err != nil {
24583					return err
24584				}
24585				sg.ID = &ID
24586			}
24587		case "name":
24588			if v != nil {
24589				var name string
24590				err = json.Unmarshal(*v, &name)
24591				if err != nil {
24592					return err
24593				}
24594				sg.Name = &name
24595			}
24596		case "type":
24597			if v != nil {
24598				var typeVar string
24599				err = json.Unmarshal(*v, &typeVar)
24600				if err != nil {
24601					return err
24602				}
24603				sg.Type = &typeVar
24604			}
24605		case "location":
24606			if v != nil {
24607				var location string
24608				err = json.Unmarshal(*v, &location)
24609				if err != nil {
24610					return err
24611				}
24612				sg.Location = &location
24613			}
24614		case "tags":
24615			if v != nil {
24616				var tags map[string]*string
24617				err = json.Unmarshal(*v, &tags)
24618				if err != nil {
24619					return err
24620				}
24621				sg.Tags = tags
24622			}
24623		}
24624	}
24625
24626	return nil
24627}
24628
24629// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
24630type SecurityGroupListResult struct {
24631	autorest.Response `json:"-"`
24632	// Value - A list of NetworkSecurityGroup resources.
24633	Value *[]SecurityGroup `json:"value,omitempty"`
24634	// NextLink - The URL to get the next set of results.
24635	NextLink *string `json:"nextLink,omitempty"`
24636}
24637
24638// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
24639type SecurityGroupListResultIterator struct {
24640	i    int
24641	page SecurityGroupListResultPage
24642}
24643
24644// NextWithContext advances to the next value.  If there was an error making
24645// the request the iterator does not advance and the error is returned.
24646func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
24647	if tracing.IsEnabled() {
24648		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
24649		defer func() {
24650			sc := -1
24651			if iter.Response().Response.Response != nil {
24652				sc = iter.Response().Response.Response.StatusCode
24653			}
24654			tracing.EndSpan(ctx, sc, err)
24655		}()
24656	}
24657	iter.i++
24658	if iter.i < len(iter.page.Values()) {
24659		return nil
24660	}
24661	err = iter.page.NextWithContext(ctx)
24662	if err != nil {
24663		iter.i--
24664		return err
24665	}
24666	iter.i = 0
24667	return nil
24668}
24669
24670// Next advances to the next value.  If there was an error making
24671// the request the iterator does not advance and the error is returned.
24672// Deprecated: Use NextWithContext() instead.
24673func (iter *SecurityGroupListResultIterator) Next() error {
24674	return iter.NextWithContext(context.Background())
24675}
24676
24677// NotDone returns true if the enumeration should be started or is not yet complete.
24678func (iter SecurityGroupListResultIterator) NotDone() bool {
24679	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24680}
24681
24682// Response returns the raw server response from the last page request.
24683func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
24684	return iter.page.Response()
24685}
24686
24687// Value returns the current value or a zero-initialized value if the
24688// iterator has advanced beyond the end of the collection.
24689func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
24690	if !iter.page.NotDone() {
24691		return SecurityGroup{}
24692	}
24693	return iter.page.Values()[iter.i]
24694}
24695
24696// Creates a new instance of the SecurityGroupListResultIterator type.
24697func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
24698	return SecurityGroupListResultIterator{page: page}
24699}
24700
24701// IsEmpty returns true if the ListResult contains no values.
24702func (sglr SecurityGroupListResult) IsEmpty() bool {
24703	return sglr.Value == nil || len(*sglr.Value) == 0
24704}
24705
24706// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
24707// It returns nil if no more results exist.
24708func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
24709	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
24710		return nil, nil
24711	}
24712	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24713		autorest.AsJSON(),
24714		autorest.AsGet(),
24715		autorest.WithBaseURL(to.String(sglr.NextLink)))
24716}
24717
24718// SecurityGroupListResultPage contains a page of SecurityGroup values.
24719type SecurityGroupListResultPage struct {
24720	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
24721	sglr SecurityGroupListResult
24722}
24723
24724// NextWithContext advances to the next page of values.  If there was an error making
24725// the request the page does not advance and the error is returned.
24726func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
24727	if tracing.IsEnabled() {
24728		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
24729		defer func() {
24730			sc := -1
24731			if page.Response().Response.Response != nil {
24732				sc = page.Response().Response.Response.StatusCode
24733			}
24734			tracing.EndSpan(ctx, sc, err)
24735		}()
24736	}
24737	next, err := page.fn(ctx, page.sglr)
24738	if err != nil {
24739		return err
24740	}
24741	page.sglr = next
24742	return nil
24743}
24744
24745// Next advances to the next page of values.  If there was an error making
24746// the request the page does not advance and the error is returned.
24747// Deprecated: Use NextWithContext() instead.
24748func (page *SecurityGroupListResultPage) Next() error {
24749	return page.NextWithContext(context.Background())
24750}
24751
24752// NotDone returns true if the page enumeration should be started or is not yet complete.
24753func (page SecurityGroupListResultPage) NotDone() bool {
24754	return !page.sglr.IsEmpty()
24755}
24756
24757// Response returns the raw server response from the last page request.
24758func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
24759	return page.sglr
24760}
24761
24762// Values returns the slice of values for the current page or nil if there are no values.
24763func (page SecurityGroupListResultPage) Values() []SecurityGroup {
24764	if page.sglr.IsEmpty() {
24765		return nil
24766	}
24767	return *page.sglr.Value
24768}
24769
24770// Creates a new instance of the SecurityGroupListResultPage type.
24771func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
24772	return SecurityGroupListResultPage{fn: getNextPage}
24773}
24774
24775// SecurityGroupNetworkInterface network interface and all its associated security rules.
24776type SecurityGroupNetworkInterface struct {
24777	// ID - ID of the network interface.
24778	ID *string `json:"id,omitempty"`
24779	// SecurityRuleAssociations - All security rules associated with the network interface.
24780	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
24781}
24782
24783// SecurityGroupPropertiesFormat network Security Group resource.
24784type SecurityGroupPropertiesFormat struct {
24785	// SecurityRules - A collection of security rules of the network security group.
24786	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
24787	// DefaultSecurityRules - The default security rules of network security group.
24788	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
24789	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
24790	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
24791	// Subnets - READ-ONLY; A collection of references to subnets.
24792	Subnets *[]Subnet `json:"subnets,omitempty"`
24793	// ResourceGUID - The resource GUID property of the network security group resource.
24794	ResourceGUID *string `json:"resourceGuid,omitempty"`
24795	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24796	ProvisioningState *string `json:"provisioningState,omitempty"`
24797}
24798
24799// SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
24800type SecurityGroupResult struct {
24801	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
24802	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
24803	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
24804	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
24805}
24806
24807// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24808// long-running operation.
24809type SecurityGroupsCreateOrUpdateFuture struct {
24810	azure.Future
24811}
24812
24813// Result returns the result of the asynchronous operation.
24814// If the operation has not completed it will return an error.
24815func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
24816	var done bool
24817	done, err = future.DoneWithContext(context.Background(), client)
24818	if err != nil {
24819		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24820		return
24821	}
24822	if !done {
24823		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
24824		return
24825	}
24826	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24827	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
24828		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
24829		if err != nil {
24830			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
24831		}
24832	}
24833	return
24834}
24835
24836// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24837// operation.
24838type SecurityGroupsDeleteFuture struct {
24839	azure.Future
24840}
24841
24842// Result returns the result of the asynchronous operation.
24843// If the operation has not completed it will return an error.
24844func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
24845	var done bool
24846	done, err = future.DoneWithContext(context.Background(), client)
24847	if err != nil {
24848		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
24849		return
24850	}
24851	if !done {
24852		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
24853		return
24854	}
24855	ar.Response = future.Response()
24856	return
24857}
24858
24859// SecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
24860// long-running operation.
24861type SecurityGroupsUpdateTagsFuture struct {
24862	azure.Future
24863}
24864
24865// Result returns the result of the asynchronous operation.
24866// If the operation has not completed it will return an error.
24867func (future *SecurityGroupsUpdateTagsFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
24868	var done bool
24869	done, err = future.DoneWithContext(context.Background(), client)
24870	if err != nil {
24871		err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
24872		return
24873	}
24874	if !done {
24875		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsUpdateTagsFuture")
24876		return
24877	}
24878	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24879	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
24880		sg, err = client.UpdateTagsResponder(sg.Response.Response)
24881		if err != nil {
24882			err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", sg.Response.Response, "Failure responding to request")
24883		}
24884	}
24885	return
24886}
24887
24888// SecurityGroupViewParameters parameters that define the VM to check security groups for.
24889type SecurityGroupViewParameters struct {
24890	// TargetResourceID - ID of the target VM.
24891	TargetResourceID *string `json:"targetResourceId,omitempty"`
24892}
24893
24894// SecurityGroupViewResult the information about security rules applied to the specified VM.
24895type SecurityGroupViewResult struct {
24896	autorest.Response `json:"-"`
24897	// NetworkInterfaces - List of network interfaces on the specified VM.
24898	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
24899}
24900
24901// SecurityRule network security rule.
24902type SecurityRule struct {
24903	autorest.Response `json:"-"`
24904	// SecurityRulePropertiesFormat - Properties of the security rule.
24905	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
24906	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
24907	Name *string `json:"name,omitempty"`
24908	// Etag - A unique read-only string that changes whenever the resource is updated.
24909	Etag *string `json:"etag,omitempty"`
24910	// ID - Resource ID.
24911	ID *string `json:"id,omitempty"`
24912}
24913
24914// MarshalJSON is the custom marshaler for SecurityRule.
24915func (sr SecurityRule) MarshalJSON() ([]byte, error) {
24916	objectMap := make(map[string]interface{})
24917	if sr.SecurityRulePropertiesFormat != nil {
24918		objectMap["properties"] = sr.SecurityRulePropertiesFormat
24919	}
24920	if sr.Name != nil {
24921		objectMap["name"] = sr.Name
24922	}
24923	if sr.Etag != nil {
24924		objectMap["etag"] = sr.Etag
24925	}
24926	if sr.ID != nil {
24927		objectMap["id"] = sr.ID
24928	}
24929	return json.Marshal(objectMap)
24930}
24931
24932// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
24933func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
24934	var m map[string]*json.RawMessage
24935	err := json.Unmarshal(body, &m)
24936	if err != nil {
24937		return err
24938	}
24939	for k, v := range m {
24940		switch k {
24941		case "properties":
24942			if v != nil {
24943				var securityRulePropertiesFormat SecurityRulePropertiesFormat
24944				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
24945				if err != nil {
24946					return err
24947				}
24948				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
24949			}
24950		case "name":
24951			if v != nil {
24952				var name string
24953				err = json.Unmarshal(*v, &name)
24954				if err != nil {
24955					return err
24956				}
24957				sr.Name = &name
24958			}
24959		case "etag":
24960			if v != nil {
24961				var etag string
24962				err = json.Unmarshal(*v, &etag)
24963				if err != nil {
24964					return err
24965				}
24966				sr.Etag = &etag
24967			}
24968		case "id":
24969			if v != nil {
24970				var ID string
24971				err = json.Unmarshal(*v, &ID)
24972				if err != nil {
24973					return err
24974				}
24975				sr.ID = &ID
24976			}
24977		}
24978	}
24979
24980	return nil
24981}
24982
24983// SecurityRuleAssociations all security rules associated with the network interface.
24984type SecurityRuleAssociations struct {
24985	// NetworkInterfaceAssociation - Network interface and it's custom security rules.
24986	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
24987	// SubnetAssociation - Subnet and it's custom security rules.
24988	SubnetAssociation *SubnetAssociation `json:"subnetAssociation,omitempty"`
24989	// DefaultSecurityRules - Collection of default security rules of the network security group.
24990	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
24991	// EffectiveSecurityRules - Collection of effective security rules.
24992	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
24993}
24994
24995// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
24996// belongs to a network security group.
24997type SecurityRuleListResult struct {
24998	autorest.Response `json:"-"`
24999	// Value - The security rules in a network security group.
25000	Value *[]SecurityRule `json:"value,omitempty"`
25001	// NextLink - The URL to get the next set of results.
25002	NextLink *string `json:"nextLink,omitempty"`
25003}
25004
25005// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
25006type SecurityRuleListResultIterator struct {
25007	i    int
25008	page SecurityRuleListResultPage
25009}
25010
25011// NextWithContext advances to the next value.  If there was an error making
25012// the request the iterator does not advance and the error is returned.
25013func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
25014	if tracing.IsEnabled() {
25015		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
25016		defer func() {
25017			sc := -1
25018			if iter.Response().Response.Response != nil {
25019				sc = iter.Response().Response.Response.StatusCode
25020			}
25021			tracing.EndSpan(ctx, sc, err)
25022		}()
25023	}
25024	iter.i++
25025	if iter.i < len(iter.page.Values()) {
25026		return nil
25027	}
25028	err = iter.page.NextWithContext(ctx)
25029	if err != nil {
25030		iter.i--
25031		return err
25032	}
25033	iter.i = 0
25034	return nil
25035}
25036
25037// Next advances to the next value.  If there was an error making
25038// the request the iterator does not advance and the error is returned.
25039// Deprecated: Use NextWithContext() instead.
25040func (iter *SecurityRuleListResultIterator) Next() error {
25041	return iter.NextWithContext(context.Background())
25042}
25043
25044// NotDone returns true if the enumeration should be started or is not yet complete.
25045func (iter SecurityRuleListResultIterator) NotDone() bool {
25046	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25047}
25048
25049// Response returns the raw server response from the last page request.
25050func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
25051	return iter.page.Response()
25052}
25053
25054// Value returns the current value or a zero-initialized value if the
25055// iterator has advanced beyond the end of the collection.
25056func (iter SecurityRuleListResultIterator) Value() SecurityRule {
25057	if !iter.page.NotDone() {
25058		return SecurityRule{}
25059	}
25060	return iter.page.Values()[iter.i]
25061}
25062
25063// Creates a new instance of the SecurityRuleListResultIterator type.
25064func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
25065	return SecurityRuleListResultIterator{page: page}
25066}
25067
25068// IsEmpty returns true if the ListResult contains no values.
25069func (srlr SecurityRuleListResult) IsEmpty() bool {
25070	return srlr.Value == nil || len(*srlr.Value) == 0
25071}
25072
25073// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
25074// It returns nil if no more results exist.
25075func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
25076	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
25077		return nil, nil
25078	}
25079	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25080		autorest.AsJSON(),
25081		autorest.AsGet(),
25082		autorest.WithBaseURL(to.String(srlr.NextLink)))
25083}
25084
25085// SecurityRuleListResultPage contains a page of SecurityRule values.
25086type SecurityRuleListResultPage struct {
25087	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
25088	srlr SecurityRuleListResult
25089}
25090
25091// NextWithContext advances to the next page of values.  If there was an error making
25092// the request the page does not advance and the error is returned.
25093func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
25094	if tracing.IsEnabled() {
25095		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
25096		defer func() {
25097			sc := -1
25098			if page.Response().Response.Response != nil {
25099				sc = page.Response().Response.Response.StatusCode
25100			}
25101			tracing.EndSpan(ctx, sc, err)
25102		}()
25103	}
25104	next, err := page.fn(ctx, page.srlr)
25105	if err != nil {
25106		return err
25107	}
25108	page.srlr = next
25109	return nil
25110}
25111
25112// Next advances to the next page of values.  If there was an error making
25113// the request the page does not advance and the error is returned.
25114// Deprecated: Use NextWithContext() instead.
25115func (page *SecurityRuleListResultPage) Next() error {
25116	return page.NextWithContext(context.Background())
25117}
25118
25119// NotDone returns true if the page enumeration should be started or is not yet complete.
25120func (page SecurityRuleListResultPage) NotDone() bool {
25121	return !page.srlr.IsEmpty()
25122}
25123
25124// Response returns the raw server response from the last page request.
25125func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
25126	return page.srlr
25127}
25128
25129// Values returns the slice of values for the current page or nil if there are no values.
25130func (page SecurityRuleListResultPage) Values() []SecurityRule {
25131	if page.srlr.IsEmpty() {
25132		return nil
25133	}
25134	return *page.srlr.Value
25135}
25136
25137// Creates a new instance of the SecurityRuleListResultPage type.
25138func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
25139	return SecurityRuleListResultPage{fn: getNextPage}
25140}
25141
25142// SecurityRulePropertiesFormat security rule resource.
25143type SecurityRulePropertiesFormat struct {
25144	// Description - A description for this rule. Restricted to 140 chars.
25145	Description *string `json:"description,omitempty"`
25146	// Protocol - Network protocol this rule applies to. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolIcmp', 'SecurityRuleProtocolEsp', 'SecurityRuleProtocolAsterisk'
25147	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
25148	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
25149	SourcePortRange *string `json:"sourcePortRange,omitempty"`
25150	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
25151	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
25152	// 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.
25153	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
25154	// SourceAddressPrefixes - The CIDR or source IP ranges.
25155	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
25156	// SourceApplicationSecurityGroups - The application security group specified as source.
25157	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
25158	// 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.
25159	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
25160	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
25161	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
25162	// DestinationApplicationSecurityGroups - The application security group specified as destination.
25163	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
25164	// SourcePortRanges - The source port ranges.
25165	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
25166	// DestinationPortRanges - The destination port ranges.
25167	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
25168	// Access - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
25169	Access SecurityRuleAccess `json:"access,omitempty"`
25170	// 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.
25171	Priority *int32 `json:"priority,omitempty"`
25172	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
25173	Direction SecurityRuleDirection `json:"direction,omitempty"`
25174	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
25175	ProvisioningState *string `json:"provisioningState,omitempty"`
25176}
25177
25178// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25179// long-running operation.
25180type SecurityRulesCreateOrUpdateFuture struct {
25181	azure.Future
25182}
25183
25184// Result returns the result of the asynchronous operation.
25185// If the operation has not completed it will return an error.
25186func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
25187	var done bool
25188	done, err = future.DoneWithContext(context.Background(), client)
25189	if err != nil {
25190		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25191		return
25192	}
25193	if !done {
25194		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
25195		return
25196	}
25197	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25198	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
25199		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
25200		if err != nil {
25201			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
25202		}
25203	}
25204	return
25205}
25206
25207// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25208// operation.
25209type SecurityRulesDeleteFuture struct {
25210	azure.Future
25211}
25212
25213// Result returns the result of the asynchronous operation.
25214// If the operation has not completed it will return an error.
25215func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
25216	var done bool
25217	done, err = future.DoneWithContext(context.Background(), client)
25218	if err != nil {
25219		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
25220		return
25221	}
25222	if !done {
25223		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
25224		return
25225	}
25226	ar.Response = future.Response()
25227	return
25228}
25229
25230// SecurityRulesEvaluationResult network security rules evaluation result.
25231type SecurityRulesEvaluationResult struct {
25232	// Name - Name of the network security rule.
25233	Name *string `json:"name,omitempty"`
25234	// ProtocolMatched - Value indicating whether protocol is matched.
25235	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
25236	// SourceMatched - Value indicating whether source is matched.
25237	SourceMatched *bool `json:"sourceMatched,omitempty"`
25238	// SourcePortMatched - Value indicating whether source port is matched.
25239	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
25240	// DestinationMatched - Value indicating whether destination is matched.
25241	DestinationMatched *bool `json:"destinationMatched,omitempty"`
25242	// DestinationPortMatched - Value indicating whether destination port is matched.
25243	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
25244}
25245
25246// ServiceAssociationLink serviceAssociationLink resource.
25247type ServiceAssociationLink struct {
25248	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
25249	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
25250	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
25251	Name *string `json:"name,omitempty"`
25252	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25253	Etag *string `json:"etag,omitempty"`
25254	// Type - Resource type.
25255	Type *string `json:"type,omitempty"`
25256	// ID - Resource ID.
25257	ID *string `json:"id,omitempty"`
25258}
25259
25260// MarshalJSON is the custom marshaler for ServiceAssociationLink.
25261func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
25262	objectMap := make(map[string]interface{})
25263	if sal.ServiceAssociationLinkPropertiesFormat != nil {
25264		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
25265	}
25266	if sal.Name != nil {
25267		objectMap["name"] = sal.Name
25268	}
25269	if sal.Type != nil {
25270		objectMap["type"] = sal.Type
25271	}
25272	if sal.ID != nil {
25273		objectMap["id"] = sal.ID
25274	}
25275	return json.Marshal(objectMap)
25276}
25277
25278// UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
25279func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
25280	var m map[string]*json.RawMessage
25281	err := json.Unmarshal(body, &m)
25282	if err != nil {
25283		return err
25284	}
25285	for k, v := range m {
25286		switch k {
25287		case "properties":
25288			if v != nil {
25289				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
25290				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
25291				if err != nil {
25292					return err
25293				}
25294				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
25295			}
25296		case "name":
25297			if v != nil {
25298				var name string
25299				err = json.Unmarshal(*v, &name)
25300				if err != nil {
25301					return err
25302				}
25303				sal.Name = &name
25304			}
25305		case "etag":
25306			if v != nil {
25307				var etag string
25308				err = json.Unmarshal(*v, &etag)
25309				if err != nil {
25310					return err
25311				}
25312				sal.Etag = &etag
25313			}
25314		case "type":
25315			if v != nil {
25316				var typeVar string
25317				err = json.Unmarshal(*v, &typeVar)
25318				if err != nil {
25319					return err
25320				}
25321				sal.Type = &typeVar
25322			}
25323		case "id":
25324			if v != nil {
25325				var ID string
25326				err = json.Unmarshal(*v, &ID)
25327				if err != nil {
25328					return err
25329				}
25330				sal.ID = &ID
25331			}
25332		}
25333	}
25334
25335	return nil
25336}
25337
25338// ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
25339type ServiceAssociationLinkPropertiesFormat struct {
25340	// LinkedResourceType - Resource type of the linked resource.
25341	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
25342	// Link - Link to the external resource.
25343	Link *string `json:"link,omitempty"`
25344	// ProvisioningState - READ-ONLY; Provisioning state of the ServiceAssociationLink resource.
25345	ProvisioningState *string `json:"provisioningState,omitempty"`
25346	// AllowDelete - If true, the resource can be deleted.
25347	AllowDelete *bool `json:"allowDelete,omitempty"`
25348	// Locations - A list of locations.
25349	Locations *[]string `json:"locations,omitempty"`
25350}
25351
25352// ServiceAssociationLinksListResult response for ServiceAssociationLinks_List operation.
25353type ServiceAssociationLinksListResult struct {
25354	autorest.Response `json:"-"`
25355	// Value - The service association links in a subnet.
25356	Value *[]ServiceAssociationLink `json:"value,omitempty"`
25357	// NextLink - READ-ONLY; The URL to get the next set of results.
25358	NextLink *string `json:"nextLink,omitempty"`
25359}
25360
25361// ServiceDelegationPropertiesFormat properties of a service delegation.
25362type ServiceDelegationPropertiesFormat struct {
25363	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers).
25364	ServiceName *string `json:"serviceName,omitempty"`
25365	// Actions - Describes the actions permitted to the service upon delegation.
25366	Actions *[]string `json:"actions,omitempty"`
25367	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
25368	ProvisioningState *string `json:"provisioningState,omitempty"`
25369}
25370
25371// ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
25372// a long-running operation.
25373type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
25374	azure.Future
25375}
25376
25377// Result returns the result of the asynchronous operation.
25378// If the operation has not completed it will return an error.
25379func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
25380	var done bool
25381	done, err = future.DoneWithContext(context.Background(), client)
25382	if err != nil {
25383		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25384		return
25385	}
25386	if !done {
25387		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
25388		return
25389	}
25390	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25391	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
25392		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
25393		if err != nil {
25394			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
25395		}
25396	}
25397	return
25398}
25399
25400// ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
25401// long-running operation.
25402type ServiceEndpointPoliciesDeleteFuture struct {
25403	azure.Future
25404}
25405
25406// Result returns the result of the asynchronous operation.
25407// If the operation has not completed it will return an error.
25408func (future *ServiceEndpointPoliciesDeleteFuture) Result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
25409	var done bool
25410	done, err = future.DoneWithContext(context.Background(), client)
25411	if err != nil {
25412		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
25413		return
25414	}
25415	if !done {
25416		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
25417		return
25418	}
25419	ar.Response = future.Response()
25420	return
25421}
25422
25423// ServiceEndpointPoliciesUpdateFuture an abstraction for monitoring and retrieving the results of a
25424// long-running operation.
25425type ServiceEndpointPoliciesUpdateFuture struct {
25426	azure.Future
25427}
25428
25429// Result returns the result of the asynchronous operation.
25430// If the operation has not completed it will return an error.
25431func (future *ServiceEndpointPoliciesUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
25432	var done bool
25433	done, err = future.DoneWithContext(context.Background(), client)
25434	if err != nil {
25435		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", future.Response(), "Polling failure")
25436		return
25437	}
25438	if !done {
25439		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesUpdateFuture")
25440		return
25441	}
25442	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25443	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
25444		sep, err = client.UpdateResponder(sep.Response.Response)
25445		if err != nil {
25446			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
25447		}
25448	}
25449	return
25450}
25451
25452// ServiceEndpointPolicy service End point policy resource.
25453type ServiceEndpointPolicy struct {
25454	autorest.Response `json:"-"`
25455	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy.
25456	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
25457	// Etag - A unique read-only string that changes whenever the resource is updated.
25458	Etag *string `json:"etag,omitempty"`
25459	// ID - Resource ID.
25460	ID *string `json:"id,omitempty"`
25461	// Name - READ-ONLY; Resource name.
25462	Name *string `json:"name,omitempty"`
25463	// Type - READ-ONLY; Resource type.
25464	Type *string `json:"type,omitempty"`
25465	// Location - Resource location.
25466	Location *string `json:"location,omitempty"`
25467	// Tags - Resource tags.
25468	Tags map[string]*string `json:"tags"`
25469}
25470
25471// MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
25472func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
25473	objectMap := make(map[string]interface{})
25474	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
25475		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
25476	}
25477	if sep.Etag != nil {
25478		objectMap["etag"] = sep.Etag
25479	}
25480	if sep.ID != nil {
25481		objectMap["id"] = sep.ID
25482	}
25483	if sep.Location != nil {
25484		objectMap["location"] = sep.Location
25485	}
25486	if sep.Tags != nil {
25487		objectMap["tags"] = sep.Tags
25488	}
25489	return json.Marshal(objectMap)
25490}
25491
25492// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
25493func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
25494	var m map[string]*json.RawMessage
25495	err := json.Unmarshal(body, &m)
25496	if err != nil {
25497		return err
25498	}
25499	for k, v := range m {
25500		switch k {
25501		case "properties":
25502			if v != nil {
25503				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
25504				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
25505				if err != nil {
25506					return err
25507				}
25508				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
25509			}
25510		case "etag":
25511			if v != nil {
25512				var etag string
25513				err = json.Unmarshal(*v, &etag)
25514				if err != nil {
25515					return err
25516				}
25517				sep.Etag = &etag
25518			}
25519		case "id":
25520			if v != nil {
25521				var ID string
25522				err = json.Unmarshal(*v, &ID)
25523				if err != nil {
25524					return err
25525				}
25526				sep.ID = &ID
25527			}
25528		case "name":
25529			if v != nil {
25530				var name string
25531				err = json.Unmarshal(*v, &name)
25532				if err != nil {
25533					return err
25534				}
25535				sep.Name = &name
25536			}
25537		case "type":
25538			if v != nil {
25539				var typeVar string
25540				err = json.Unmarshal(*v, &typeVar)
25541				if err != nil {
25542					return err
25543				}
25544				sep.Type = &typeVar
25545			}
25546		case "location":
25547			if v != nil {
25548				var location string
25549				err = json.Unmarshal(*v, &location)
25550				if err != nil {
25551					return err
25552				}
25553				sep.Location = &location
25554			}
25555		case "tags":
25556			if v != nil {
25557				var tags map[string]*string
25558				err = json.Unmarshal(*v, &tags)
25559				if err != nil {
25560					return err
25561				}
25562				sep.Tags = tags
25563			}
25564		}
25565	}
25566
25567	return nil
25568}
25569
25570// ServiceEndpointPolicyDefinition service Endpoint policy definitions.
25571type ServiceEndpointPolicyDefinition struct {
25572	autorest.Response `json:"-"`
25573	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition.
25574	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
25575	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
25576	Name *string `json:"name,omitempty"`
25577	// Etag - A unique read-only string that changes whenever the resource is updated.
25578	Etag *string `json:"etag,omitempty"`
25579	// ID - Resource ID.
25580	ID *string `json:"id,omitempty"`
25581}
25582
25583// MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
25584func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
25585	objectMap := make(map[string]interface{})
25586	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
25587		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
25588	}
25589	if sepd.Name != nil {
25590		objectMap["name"] = sepd.Name
25591	}
25592	if sepd.Etag != nil {
25593		objectMap["etag"] = sepd.Etag
25594	}
25595	if sepd.ID != nil {
25596		objectMap["id"] = sepd.ID
25597	}
25598	return json.Marshal(objectMap)
25599}
25600
25601// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
25602func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
25603	var m map[string]*json.RawMessage
25604	err := json.Unmarshal(body, &m)
25605	if err != nil {
25606		return err
25607	}
25608	for k, v := range m {
25609		switch k {
25610		case "properties":
25611			if v != nil {
25612				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
25613				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
25614				if err != nil {
25615					return err
25616				}
25617				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
25618			}
25619		case "name":
25620			if v != nil {
25621				var name string
25622				err = json.Unmarshal(*v, &name)
25623				if err != nil {
25624					return err
25625				}
25626				sepd.Name = &name
25627			}
25628		case "etag":
25629			if v != nil {
25630				var etag string
25631				err = json.Unmarshal(*v, &etag)
25632				if err != nil {
25633					return err
25634				}
25635				sepd.Etag = &etag
25636			}
25637		case "id":
25638			if v != nil {
25639				var ID string
25640				err = json.Unmarshal(*v, &ID)
25641				if err != nil {
25642					return err
25643				}
25644				sepd.ID = &ID
25645			}
25646		}
25647	}
25648
25649	return nil
25650}
25651
25652// ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
25653// call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
25654type ServiceEndpointPolicyDefinitionListResult struct {
25655	autorest.Response `json:"-"`
25656	// Value - The service endpoint policy definition in a service endpoint policy.
25657	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
25658	// NextLink - The URL to get the next set of results.
25659	NextLink *string `json:"nextLink,omitempty"`
25660}
25661
25662// ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
25663// ServiceEndpointPolicyDefinition values.
25664type ServiceEndpointPolicyDefinitionListResultIterator struct {
25665	i    int
25666	page ServiceEndpointPolicyDefinitionListResultPage
25667}
25668
25669// NextWithContext advances to the next value.  If there was an error making
25670// the request the iterator does not advance and the error is returned.
25671func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
25672	if tracing.IsEnabled() {
25673		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
25674		defer func() {
25675			sc := -1
25676			if iter.Response().Response.Response != nil {
25677				sc = iter.Response().Response.Response.StatusCode
25678			}
25679			tracing.EndSpan(ctx, sc, err)
25680		}()
25681	}
25682	iter.i++
25683	if iter.i < len(iter.page.Values()) {
25684		return nil
25685	}
25686	err = iter.page.NextWithContext(ctx)
25687	if err != nil {
25688		iter.i--
25689		return err
25690	}
25691	iter.i = 0
25692	return nil
25693}
25694
25695// Next advances to the next value.  If there was an error making
25696// the request the iterator does not advance and the error is returned.
25697// Deprecated: Use NextWithContext() instead.
25698func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
25699	return iter.NextWithContext(context.Background())
25700}
25701
25702// NotDone returns true if the enumeration should be started or is not yet complete.
25703func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
25704	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25705}
25706
25707// Response returns the raw server response from the last page request.
25708func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
25709	return iter.page.Response()
25710}
25711
25712// Value returns the current value or a zero-initialized value if the
25713// iterator has advanced beyond the end of the collection.
25714func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
25715	if !iter.page.NotDone() {
25716		return ServiceEndpointPolicyDefinition{}
25717	}
25718	return iter.page.Values()[iter.i]
25719}
25720
25721// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
25722func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
25723	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
25724}
25725
25726// IsEmpty returns true if the ListResult contains no values.
25727func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
25728	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
25729}
25730
25731// serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
25732// It returns nil if no more results exist.
25733func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
25734	if sepdlr.NextLink == nil || len(to.String(sepdlr.NextLink)) < 1 {
25735		return nil, nil
25736	}
25737	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25738		autorest.AsJSON(),
25739		autorest.AsGet(),
25740		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
25741}
25742
25743// ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
25744type ServiceEndpointPolicyDefinitionListResultPage struct {
25745	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
25746	sepdlr ServiceEndpointPolicyDefinitionListResult
25747}
25748
25749// NextWithContext advances to the next page of values.  If there was an error making
25750// the request the page does not advance and the error is returned.
25751func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
25752	if tracing.IsEnabled() {
25753		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
25754		defer func() {
25755			sc := -1
25756			if page.Response().Response.Response != nil {
25757				sc = page.Response().Response.Response.StatusCode
25758			}
25759			tracing.EndSpan(ctx, sc, err)
25760		}()
25761	}
25762	next, err := page.fn(ctx, page.sepdlr)
25763	if err != nil {
25764		return err
25765	}
25766	page.sepdlr = next
25767	return nil
25768}
25769
25770// Next advances to the next page of values.  If there was an error making
25771// the request the page does not advance and the error is returned.
25772// Deprecated: Use NextWithContext() instead.
25773func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
25774	return page.NextWithContext(context.Background())
25775}
25776
25777// NotDone returns true if the page enumeration should be started or is not yet complete.
25778func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
25779	return !page.sepdlr.IsEmpty()
25780}
25781
25782// Response returns the raw server response from the last page request.
25783func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
25784	return page.sepdlr
25785}
25786
25787// Values returns the slice of values for the current page or nil if there are no values.
25788func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
25789	if page.sepdlr.IsEmpty() {
25790		return nil
25791	}
25792	return *page.sepdlr.Value
25793}
25794
25795// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
25796func NewServiceEndpointPolicyDefinitionListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
25797	return ServiceEndpointPolicyDefinitionListResultPage{fn: getNextPage}
25798}
25799
25800// ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
25801type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
25802	// Description - A description for this rule. Restricted to 140 chars.
25803	Description *string `json:"description,omitempty"`
25804	// Service - Service endpoint name.
25805	Service *string `json:"service,omitempty"`
25806	// ServiceResources - A list of service resources.
25807	ServiceResources *[]string `json:"serviceResources,omitempty"`
25808	// ProvisioningState - READ-ONLY; The provisioning state of the service end point policy definition. Possible values are: 'Updating', 'Deleting', and 'Failed'.
25809	ProvisioningState *string `json:"provisioningState,omitempty"`
25810}
25811
25812// ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
25813// results of a long-running operation.
25814type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
25815	azure.Future
25816}
25817
25818// Result returns the result of the asynchronous operation.
25819// If the operation has not completed it will return an error.
25820func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
25821	var done bool
25822	done, err = future.DoneWithContext(context.Background(), client)
25823	if err != nil {
25824		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25825		return
25826	}
25827	if !done {
25828		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
25829		return
25830	}
25831	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25832	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
25833		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
25834		if err != nil {
25835			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
25836		}
25837	}
25838	return
25839}
25840
25841// ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
25842// a long-running operation.
25843type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
25844	azure.Future
25845}
25846
25847// Result returns the result of the asynchronous operation.
25848// If the operation has not completed it will return an error.
25849func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
25850	var done bool
25851	done, err = future.DoneWithContext(context.Background(), client)
25852	if err != nil {
25853		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
25854		return
25855	}
25856	if !done {
25857		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
25858		return
25859	}
25860	ar.Response = future.Response()
25861	return
25862}
25863
25864// ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
25865type ServiceEndpointPolicyListResult struct {
25866	autorest.Response `json:"-"`
25867	// Value - A list of ServiceEndpointPolicy resources.
25868	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
25869	// NextLink - READ-ONLY; The URL to get the next set of results.
25870	NextLink *string `json:"nextLink,omitempty"`
25871}
25872
25873// ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
25874// values.
25875type ServiceEndpointPolicyListResultIterator struct {
25876	i    int
25877	page ServiceEndpointPolicyListResultPage
25878}
25879
25880// NextWithContext advances to the next value.  If there was an error making
25881// the request the iterator does not advance and the error is returned.
25882func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
25883	if tracing.IsEnabled() {
25884		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
25885		defer func() {
25886			sc := -1
25887			if iter.Response().Response.Response != nil {
25888				sc = iter.Response().Response.Response.StatusCode
25889			}
25890			tracing.EndSpan(ctx, sc, err)
25891		}()
25892	}
25893	iter.i++
25894	if iter.i < len(iter.page.Values()) {
25895		return nil
25896	}
25897	err = iter.page.NextWithContext(ctx)
25898	if err != nil {
25899		iter.i--
25900		return err
25901	}
25902	iter.i = 0
25903	return nil
25904}
25905
25906// Next advances to the next value.  If there was an error making
25907// the request the iterator does not advance and the error is returned.
25908// Deprecated: Use NextWithContext() instead.
25909func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
25910	return iter.NextWithContext(context.Background())
25911}
25912
25913// NotDone returns true if the enumeration should be started or is not yet complete.
25914func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
25915	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25916}
25917
25918// Response returns the raw server response from the last page request.
25919func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
25920	return iter.page.Response()
25921}
25922
25923// Value returns the current value or a zero-initialized value if the
25924// iterator has advanced beyond the end of the collection.
25925func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
25926	if !iter.page.NotDone() {
25927		return ServiceEndpointPolicy{}
25928	}
25929	return iter.page.Values()[iter.i]
25930}
25931
25932// Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
25933func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
25934	return ServiceEndpointPolicyListResultIterator{page: page}
25935}
25936
25937// IsEmpty returns true if the ListResult contains no values.
25938func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
25939	return seplr.Value == nil || len(*seplr.Value) == 0
25940}
25941
25942// serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
25943// It returns nil if no more results exist.
25944func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
25945	if seplr.NextLink == nil || len(to.String(seplr.NextLink)) < 1 {
25946		return nil, nil
25947	}
25948	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25949		autorest.AsJSON(),
25950		autorest.AsGet(),
25951		autorest.WithBaseURL(to.String(seplr.NextLink)))
25952}
25953
25954// ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
25955type ServiceEndpointPolicyListResultPage struct {
25956	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
25957	seplr ServiceEndpointPolicyListResult
25958}
25959
25960// NextWithContext advances to the next page of values.  If there was an error making
25961// the request the page does not advance and the error is returned.
25962func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
25963	if tracing.IsEnabled() {
25964		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
25965		defer func() {
25966			sc := -1
25967			if page.Response().Response.Response != nil {
25968				sc = page.Response().Response.Response.StatusCode
25969			}
25970			tracing.EndSpan(ctx, sc, err)
25971		}()
25972	}
25973	next, err := page.fn(ctx, page.seplr)
25974	if err != nil {
25975		return err
25976	}
25977	page.seplr = next
25978	return nil
25979}
25980
25981// Next advances to the next page of values.  If there was an error making
25982// the request the page does not advance and the error is returned.
25983// Deprecated: Use NextWithContext() instead.
25984func (page *ServiceEndpointPolicyListResultPage) Next() error {
25985	return page.NextWithContext(context.Background())
25986}
25987
25988// NotDone returns true if the page enumeration should be started or is not yet complete.
25989func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
25990	return !page.seplr.IsEmpty()
25991}
25992
25993// Response returns the raw server response from the last page request.
25994func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
25995	return page.seplr
25996}
25997
25998// Values returns the slice of values for the current page or nil if there are no values.
25999func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
26000	if page.seplr.IsEmpty() {
26001		return nil
26002	}
26003	return *page.seplr.Value
26004}
26005
26006// Creates a new instance of the ServiceEndpointPolicyListResultPage type.
26007func NewServiceEndpointPolicyListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
26008	return ServiceEndpointPolicyListResultPage{fn: getNextPage}
26009}
26010
26011// ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
26012type ServiceEndpointPolicyPropertiesFormat struct {
26013	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
26014	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
26015	// Subnets - READ-ONLY; A collection of references to subnets.
26016	Subnets *[]Subnet `json:"subnets,omitempty"`
26017	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
26018	ResourceGUID *string `json:"resourceGuid,omitempty"`
26019	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy. Possible values are: 'Updating', 'Deleting', and 'Failed'.
26020	ProvisioningState *string `json:"provisioningState,omitempty"`
26021}
26022
26023// ServiceEndpointPropertiesFormat the service endpoint properties.
26024type ServiceEndpointPropertiesFormat struct {
26025	// Service - The type of the endpoint service.
26026	Service *string `json:"service,omitempty"`
26027	// Locations - A list of locations.
26028	Locations *[]string `json:"locations,omitempty"`
26029	// ProvisioningState - The provisioning state of the resource.
26030	ProvisioningState *string `json:"provisioningState,omitempty"`
26031}
26032
26033// ServiceTagInformation the service tag information.
26034type ServiceTagInformation struct {
26035	// Properties - READ-ONLY; Properties of the service tag information.
26036	Properties *ServiceTagInformationPropertiesFormat `json:"properties,omitempty"`
26037	// Name - READ-ONLY; The name of service tag.
26038	Name *string `json:"name,omitempty"`
26039	// ID - READ-ONLY; The ID of service tag.
26040	ID *string `json:"id,omitempty"`
26041}
26042
26043// ServiceTagInformationPropertiesFormat properties of the service tag information.
26044type ServiceTagInformationPropertiesFormat struct {
26045	// ChangeNumber - READ-ONLY; The iteration number of service tag.
26046	ChangeNumber *string `json:"changeNumber,omitempty"`
26047	// Region - READ-ONLY; The region of service tag.
26048	Region *string `json:"region,omitempty"`
26049	// SystemService - READ-ONLY; The name of system service.
26050	SystemService *string `json:"systemService,omitempty"`
26051	// AddressPrefixes - READ-ONLY; The list of IP address prefixes.
26052	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
26053}
26054
26055// ServiceTagsListResult response for the ListServiceTags API service call.
26056type ServiceTagsListResult struct {
26057	autorest.Response `json:"-"`
26058	// Name - READ-ONLY; The name of the cloud.
26059	Name *string `json:"name,omitempty"`
26060	// ID - READ-ONLY; The ID of the cloud.
26061	ID *string `json:"id,omitempty"`
26062	// Type - READ-ONLY; The azure resource type.
26063	Type *string `json:"type,omitempty"`
26064	// ChangeNumber - READ-ONLY; The iteration number.
26065	ChangeNumber *string `json:"changeNumber,omitempty"`
26066	// Cloud - READ-ONLY; The name of the cloud.
26067	Cloud *string `json:"cloud,omitempty"`
26068	// Values - READ-ONLY; The list of service tag information resources.
26069	Values *[]ServiceTagInformation `json:"values,omitempty"`
26070}
26071
26072// String ...
26073type String struct {
26074	autorest.Response `json:"-"`
26075	Value             *string `json:"value,omitempty"`
26076}
26077
26078// Subnet subnet in a virtual network resource.
26079type Subnet struct {
26080	autorest.Response `json:"-"`
26081	// SubnetPropertiesFormat - Properties of the subnet.
26082	*SubnetPropertiesFormat `json:"properties,omitempty"`
26083	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26084	Name *string `json:"name,omitempty"`
26085	// Etag - A unique read-only string that changes whenever the resource is updated.
26086	Etag *string `json:"etag,omitempty"`
26087	// ID - Resource ID.
26088	ID *string `json:"id,omitempty"`
26089}
26090
26091// MarshalJSON is the custom marshaler for Subnet.
26092func (s Subnet) MarshalJSON() ([]byte, error) {
26093	objectMap := make(map[string]interface{})
26094	if s.SubnetPropertiesFormat != nil {
26095		objectMap["properties"] = s.SubnetPropertiesFormat
26096	}
26097	if s.Name != nil {
26098		objectMap["name"] = s.Name
26099	}
26100	if s.Etag != nil {
26101		objectMap["etag"] = s.Etag
26102	}
26103	if s.ID != nil {
26104		objectMap["id"] = s.ID
26105	}
26106	return json.Marshal(objectMap)
26107}
26108
26109// UnmarshalJSON is the custom unmarshaler for Subnet struct.
26110func (s *Subnet) UnmarshalJSON(body []byte) error {
26111	var m map[string]*json.RawMessage
26112	err := json.Unmarshal(body, &m)
26113	if err != nil {
26114		return err
26115	}
26116	for k, v := range m {
26117		switch k {
26118		case "properties":
26119			if v != nil {
26120				var subnetPropertiesFormat SubnetPropertiesFormat
26121				err = json.Unmarshal(*v, &subnetPropertiesFormat)
26122				if err != nil {
26123					return err
26124				}
26125				s.SubnetPropertiesFormat = &subnetPropertiesFormat
26126			}
26127		case "name":
26128			if v != nil {
26129				var name string
26130				err = json.Unmarshal(*v, &name)
26131				if err != nil {
26132					return err
26133				}
26134				s.Name = &name
26135			}
26136		case "etag":
26137			if v != nil {
26138				var etag string
26139				err = json.Unmarshal(*v, &etag)
26140				if err != nil {
26141					return err
26142				}
26143				s.Etag = &etag
26144			}
26145		case "id":
26146			if v != nil {
26147				var ID string
26148				err = json.Unmarshal(*v, &ID)
26149				if err != nil {
26150					return err
26151				}
26152				s.ID = &ID
26153			}
26154		}
26155	}
26156
26157	return nil
26158}
26159
26160// SubnetAssociation subnet and it's custom security rules.
26161type SubnetAssociation struct {
26162	// ID - READ-ONLY; Subnet ID.
26163	ID *string `json:"id,omitempty"`
26164	// SecurityRules - Collection of custom security rules.
26165	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
26166}
26167
26168// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
26169// network.
26170type SubnetListResult struct {
26171	autorest.Response `json:"-"`
26172	// Value - The subnets in a virtual network.
26173	Value *[]Subnet `json:"value,omitempty"`
26174	// NextLink - The URL to get the next set of results.
26175	NextLink *string `json:"nextLink,omitempty"`
26176}
26177
26178// SubnetListResultIterator provides access to a complete listing of Subnet values.
26179type SubnetListResultIterator struct {
26180	i    int
26181	page SubnetListResultPage
26182}
26183
26184// NextWithContext advances to the next value.  If there was an error making
26185// the request the iterator does not advance and the error is returned.
26186func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
26187	if tracing.IsEnabled() {
26188		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
26189		defer func() {
26190			sc := -1
26191			if iter.Response().Response.Response != nil {
26192				sc = iter.Response().Response.Response.StatusCode
26193			}
26194			tracing.EndSpan(ctx, sc, err)
26195		}()
26196	}
26197	iter.i++
26198	if iter.i < len(iter.page.Values()) {
26199		return nil
26200	}
26201	err = iter.page.NextWithContext(ctx)
26202	if err != nil {
26203		iter.i--
26204		return err
26205	}
26206	iter.i = 0
26207	return nil
26208}
26209
26210// Next advances to the next value.  If there was an error making
26211// the request the iterator does not advance and the error is returned.
26212// Deprecated: Use NextWithContext() instead.
26213func (iter *SubnetListResultIterator) Next() error {
26214	return iter.NextWithContext(context.Background())
26215}
26216
26217// NotDone returns true if the enumeration should be started or is not yet complete.
26218func (iter SubnetListResultIterator) NotDone() bool {
26219	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26220}
26221
26222// Response returns the raw server response from the last page request.
26223func (iter SubnetListResultIterator) Response() SubnetListResult {
26224	return iter.page.Response()
26225}
26226
26227// Value returns the current value or a zero-initialized value if the
26228// iterator has advanced beyond the end of the collection.
26229func (iter SubnetListResultIterator) Value() Subnet {
26230	if !iter.page.NotDone() {
26231		return Subnet{}
26232	}
26233	return iter.page.Values()[iter.i]
26234}
26235
26236// Creates a new instance of the SubnetListResultIterator type.
26237func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
26238	return SubnetListResultIterator{page: page}
26239}
26240
26241// IsEmpty returns true if the ListResult contains no values.
26242func (slr SubnetListResult) IsEmpty() bool {
26243	return slr.Value == nil || len(*slr.Value) == 0
26244}
26245
26246// subnetListResultPreparer prepares a request to retrieve the next set of results.
26247// It returns nil if no more results exist.
26248func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
26249	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
26250		return nil, nil
26251	}
26252	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26253		autorest.AsJSON(),
26254		autorest.AsGet(),
26255		autorest.WithBaseURL(to.String(slr.NextLink)))
26256}
26257
26258// SubnetListResultPage contains a page of Subnet values.
26259type SubnetListResultPage struct {
26260	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
26261	slr SubnetListResult
26262}
26263
26264// NextWithContext advances to the next page of values.  If there was an error making
26265// the request the page does not advance and the error is returned.
26266func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
26267	if tracing.IsEnabled() {
26268		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
26269		defer func() {
26270			sc := -1
26271			if page.Response().Response.Response != nil {
26272				sc = page.Response().Response.Response.StatusCode
26273			}
26274			tracing.EndSpan(ctx, sc, err)
26275		}()
26276	}
26277	next, err := page.fn(ctx, page.slr)
26278	if err != nil {
26279		return err
26280	}
26281	page.slr = next
26282	return nil
26283}
26284
26285// Next advances to the next page of values.  If there was an error making
26286// the request the page does not advance and the error is returned.
26287// Deprecated: Use NextWithContext() instead.
26288func (page *SubnetListResultPage) Next() error {
26289	return page.NextWithContext(context.Background())
26290}
26291
26292// NotDone returns true if the page enumeration should be started or is not yet complete.
26293func (page SubnetListResultPage) NotDone() bool {
26294	return !page.slr.IsEmpty()
26295}
26296
26297// Response returns the raw server response from the last page request.
26298func (page SubnetListResultPage) Response() SubnetListResult {
26299	return page.slr
26300}
26301
26302// Values returns the slice of values for the current page or nil if there are no values.
26303func (page SubnetListResultPage) Values() []Subnet {
26304	if page.slr.IsEmpty() {
26305		return nil
26306	}
26307	return *page.slr.Value
26308}
26309
26310// Creates a new instance of the SubnetListResultPage type.
26311func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
26312	return SubnetListResultPage{fn: getNextPage}
26313}
26314
26315// SubnetPropertiesFormat properties of the subnet.
26316type SubnetPropertiesFormat struct {
26317	// AddressPrefix - The address prefix for the subnet.
26318	AddressPrefix *string `json:"addressPrefix,omitempty"`
26319	// AddressPrefixes - List of address prefixes for the subnet.
26320	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
26321	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
26322	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
26323	// RouteTable - The reference of the RouteTable resource.
26324	RouteTable *RouteTable `json:"routeTable,omitempty"`
26325	// NatGateway - Nat gateway associated with this subnet.
26326	NatGateway *SubResource `json:"natGateway,omitempty"`
26327	// ServiceEndpoints - An array of service endpoints.
26328	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
26329	// ServiceEndpointPolicies - An array of service endpoint policies.
26330	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
26331	// PrivateEndpoints - READ-ONLY; An array of references to private endpoints.
26332	PrivateEndpoints *[]PrivateEndpoint `json:"privateEndpoints,omitempty"`
26333	// IPConfigurations - READ-ONLY; Gets an array of references to the network interface IP configurations using subnet.
26334	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
26335	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
26336	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
26337	// ResourceNavigationLinks - Gets an array of references to the external resources using subnet.
26338	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
26339	// ServiceAssociationLinks - Gets an array of references to services injecting into this subnet.
26340	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
26341	// Delegations - Gets an array of references to the delegations on the subnet.
26342	Delegations *[]Delegation `json:"delegations,omitempty"`
26343	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
26344	Purpose *string `json:"purpose,omitempty"`
26345	// ProvisioningState - The provisioning state of the resource.
26346	ProvisioningState *string `json:"provisioningState,omitempty"`
26347	// PrivateEndpointNetworkPolicies - Enable or Disable private end point on the subnet.
26348	PrivateEndpointNetworkPolicies *string `json:"privateEndpointNetworkPolicies,omitempty"`
26349	// PrivateLinkServiceNetworkPolicies - Enable or Disable private link service on the subnet.
26350	PrivateLinkServiceNetworkPolicies *string `json:"privateLinkServiceNetworkPolicies,omitempty"`
26351}
26352
26353// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
26354// operation.
26355type SubnetsCreateOrUpdateFuture struct {
26356	azure.Future
26357}
26358
26359// Result returns the result of the asynchronous operation.
26360// If the operation has not completed it will return an error.
26361func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
26362	var done bool
26363	done, err = future.DoneWithContext(context.Background(), client)
26364	if err != nil {
26365		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26366		return
26367	}
26368	if !done {
26369		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
26370		return
26371	}
26372	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26373	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
26374		s, err = client.CreateOrUpdateResponder(s.Response.Response)
26375		if err != nil {
26376			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
26377		}
26378	}
26379	return
26380}
26381
26382// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26383// operation.
26384type SubnetsDeleteFuture struct {
26385	azure.Future
26386}
26387
26388// Result returns the result of the asynchronous operation.
26389// If the operation has not completed it will return an error.
26390func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
26391	var done bool
26392	done, err = future.DoneWithContext(context.Background(), client)
26393	if err != nil {
26394		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
26395		return
26396	}
26397	if !done {
26398		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
26399		return
26400	}
26401	ar.Response = future.Response()
26402	return
26403}
26404
26405// SubnetsPrepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
26406// long-running operation.
26407type SubnetsPrepareNetworkPoliciesFuture struct {
26408	azure.Future
26409}
26410
26411// Result returns the result of the asynchronous operation.
26412// If the operation has not completed it will return an error.
26413func (future *SubnetsPrepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
26414	var done bool
26415	done, err = future.DoneWithContext(context.Background(), client)
26416	if err != nil {
26417		err = autorest.NewErrorWithError(err, "network.SubnetsPrepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
26418		return
26419	}
26420	if !done {
26421		err = azure.NewAsyncOpIncompleteError("network.SubnetsPrepareNetworkPoliciesFuture")
26422		return
26423	}
26424	ar.Response = future.Response()
26425	return
26426}
26427
26428// SubResource reference to another subresource.
26429type SubResource struct {
26430	// ID - Resource ID.
26431	ID *string `json:"id,omitempty"`
26432}
26433
26434// TagsObject tags object for patch operations.
26435type TagsObject struct {
26436	// Tags - Resource tags.
26437	Tags map[string]*string `json:"tags"`
26438}
26439
26440// MarshalJSON is the custom marshaler for TagsObject.
26441func (toVar TagsObject) MarshalJSON() ([]byte, error) {
26442	objectMap := make(map[string]interface{})
26443	if toVar.Tags != nil {
26444		objectMap["tags"] = toVar.Tags
26445	}
26446	return json.Marshal(objectMap)
26447}
26448
26449// Topology topology of the specified resource group.
26450type Topology struct {
26451	autorest.Response `json:"-"`
26452	// ID - READ-ONLY; GUID representing the operation id.
26453	ID *string `json:"id,omitempty"`
26454	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
26455	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
26456	// LastModified - READ-ONLY; The datetime when the topology was last modified.
26457	LastModified *date.Time `json:"lastModified,omitempty"`
26458	// Resources - A list of topology resources.
26459	Resources *[]TopologyResource `json:"resources,omitempty"`
26460}
26461
26462// TopologyAssociation resources that have an association with the parent resource.
26463type TopologyAssociation struct {
26464	// Name - The name of the resource that is associated with the parent resource.
26465	Name *string `json:"name,omitempty"`
26466	// ResourceID - The ID of the resource that is associated with the parent resource.
26467	ResourceID *string `json:"resourceId,omitempty"`
26468	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
26469	AssociationType AssociationType `json:"associationType,omitempty"`
26470}
26471
26472// TopologyParameters parameters that define the representation of topology.
26473type TopologyParameters struct {
26474	// TargetResourceGroupName - The name of the target resource group to perform topology on.
26475	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
26476	// TargetVirtualNetwork - The reference of the Virtual Network resource.
26477	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
26478	// TargetSubnet - The reference of the Subnet resource.
26479	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
26480}
26481
26482// TopologyResource the network resource topology information for the given resource group.
26483type TopologyResource struct {
26484	// Name - Name of the resource.
26485	Name *string `json:"name,omitempty"`
26486	// ID - ID of the resource.
26487	ID *string `json:"id,omitempty"`
26488	// Location - Resource location.
26489	Location *string `json:"location,omitempty"`
26490	// Associations - Holds the associations the resource has with other resources in the resource group.
26491	Associations *[]TopologyAssociation `json:"associations,omitempty"`
26492}
26493
26494// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
26495type TrafficAnalyticsConfigurationProperties struct {
26496	// Enabled - Flag to enable/disable traffic analytics.
26497	Enabled *bool `json:"enabled,omitempty"`
26498	// WorkspaceID - The resource guid of the attached workspace.
26499	WorkspaceID *string `json:"workspaceId,omitempty"`
26500	// WorkspaceRegion - The location of the attached workspace.
26501	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
26502	// WorkspaceResourceID - Resource Id of the attached workspace.
26503	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
26504	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics.
26505	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
26506}
26507
26508// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
26509type TrafficAnalyticsProperties struct {
26510	// NetworkWatcherFlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
26511	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
26512}
26513
26514// TroubleshootingDetails information gained from troubleshooting of specified resource.
26515type TroubleshootingDetails struct {
26516	// ID - The id of the get troubleshoot operation.
26517	ID *string `json:"id,omitempty"`
26518	// ReasonType - Reason type of failure.
26519	ReasonType *string `json:"reasonType,omitempty"`
26520	// Summary - A summary of troubleshooting.
26521	Summary *string `json:"summary,omitempty"`
26522	// Detail - Details on troubleshooting results.
26523	Detail *string `json:"detail,omitempty"`
26524	// RecommendedActions - List of recommended actions.
26525	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
26526}
26527
26528// TroubleshootingParameters parameters that define the resource to troubleshoot.
26529type TroubleshootingParameters struct {
26530	// TargetResourceID - The target resource to troubleshoot.
26531	TargetResourceID *string `json:"targetResourceId,omitempty"`
26532	// TroubleshootingProperties - Properties of the troubleshooting resource.
26533	*TroubleshootingProperties `json:"properties,omitempty"`
26534}
26535
26536// MarshalJSON is the custom marshaler for TroubleshootingParameters.
26537func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
26538	objectMap := make(map[string]interface{})
26539	if tp.TargetResourceID != nil {
26540		objectMap["targetResourceId"] = tp.TargetResourceID
26541	}
26542	if tp.TroubleshootingProperties != nil {
26543		objectMap["properties"] = tp.TroubleshootingProperties
26544	}
26545	return json.Marshal(objectMap)
26546}
26547
26548// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
26549func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
26550	var m map[string]*json.RawMessage
26551	err := json.Unmarshal(body, &m)
26552	if err != nil {
26553		return err
26554	}
26555	for k, v := range m {
26556		switch k {
26557		case "targetResourceId":
26558			if v != nil {
26559				var targetResourceID string
26560				err = json.Unmarshal(*v, &targetResourceID)
26561				if err != nil {
26562					return err
26563				}
26564				tp.TargetResourceID = &targetResourceID
26565			}
26566		case "properties":
26567			if v != nil {
26568				var troubleshootingProperties TroubleshootingProperties
26569				err = json.Unmarshal(*v, &troubleshootingProperties)
26570				if err != nil {
26571					return err
26572				}
26573				tp.TroubleshootingProperties = &troubleshootingProperties
26574			}
26575		}
26576	}
26577
26578	return nil
26579}
26580
26581// TroubleshootingProperties storage location provided for troubleshoot.
26582type TroubleshootingProperties struct {
26583	// StorageID - The ID for the storage account to save the troubleshoot result.
26584	StorageID *string `json:"storageId,omitempty"`
26585	// StoragePath - The path to the blob to save the troubleshoot result in.
26586	StoragePath *string `json:"storagePath,omitempty"`
26587}
26588
26589// TroubleshootingRecommendedActions recommended actions based on discovered issues.
26590type TroubleshootingRecommendedActions struct {
26591	// ActionID - ID of the recommended action.
26592	ActionID *string `json:"actionId,omitempty"`
26593	// ActionText - Description of recommended actions.
26594	ActionText *string `json:"actionText,omitempty"`
26595	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
26596	ActionURI *string `json:"actionUri,omitempty"`
26597	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
26598	ActionURIText *string `json:"actionUriText,omitempty"`
26599}
26600
26601// TroubleshootingResult troubleshooting information gained from specified resource.
26602type TroubleshootingResult struct {
26603	autorest.Response `json:"-"`
26604	// StartTime - The start time of the troubleshooting.
26605	StartTime *date.Time `json:"startTime,omitempty"`
26606	// EndTime - The end time of the troubleshooting.
26607	EndTime *date.Time `json:"endTime,omitempty"`
26608	// Code - The result code of the troubleshooting.
26609	Code *string `json:"code,omitempty"`
26610	// Results - Information from troubleshooting.
26611	Results *[]TroubleshootingDetails `json:"results,omitempty"`
26612}
26613
26614// TunnelConnectionHealth virtualNetworkGatewayConnection properties.
26615type TunnelConnectionHealth struct {
26616	// Tunnel - READ-ONLY; Tunnel name.
26617	Tunnel *string `json:"tunnel,omitempty"`
26618	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
26619	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
26620	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection.
26621	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
26622	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection.
26623	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
26624	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
26625	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
26626}
26627
26628// Usage describes network resource usage.
26629type Usage struct {
26630	// ID - READ-ONLY; Resource identifier.
26631	ID *string `json:"id,omitempty"`
26632	// Unit - An enum describing the unit of measurement.
26633	Unit *string `json:"unit,omitempty"`
26634	// CurrentValue - The current value of the usage.
26635	CurrentValue *int64 `json:"currentValue,omitempty"`
26636	// Limit - The limit of usage.
26637	Limit *int64 `json:"limit,omitempty"`
26638	// Name - The name of the type of usage.
26639	Name *UsageName `json:"name,omitempty"`
26640}
26641
26642// UsageName the usage names.
26643type UsageName struct {
26644	// Value - A string describing the resource name.
26645	Value *string `json:"value,omitempty"`
26646	// LocalizedValue - A localized string describing the resource name.
26647	LocalizedValue *string `json:"localizedValue,omitempty"`
26648}
26649
26650// UsagesListResult the list usages operation response.
26651type UsagesListResult struct {
26652	autorest.Response `json:"-"`
26653	// Value - The list network resource usages.
26654	Value *[]Usage `json:"value,omitempty"`
26655	// NextLink - URL to get the next set of results.
26656	NextLink *string `json:"nextLink,omitempty"`
26657}
26658
26659// UsagesListResultIterator provides access to a complete listing of Usage values.
26660type UsagesListResultIterator struct {
26661	i    int
26662	page UsagesListResultPage
26663}
26664
26665// NextWithContext advances to the next value.  If there was an error making
26666// the request the iterator does not advance and the error is returned.
26667func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
26668	if tracing.IsEnabled() {
26669		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
26670		defer func() {
26671			sc := -1
26672			if iter.Response().Response.Response != nil {
26673				sc = iter.Response().Response.Response.StatusCode
26674			}
26675			tracing.EndSpan(ctx, sc, err)
26676		}()
26677	}
26678	iter.i++
26679	if iter.i < len(iter.page.Values()) {
26680		return nil
26681	}
26682	err = iter.page.NextWithContext(ctx)
26683	if err != nil {
26684		iter.i--
26685		return err
26686	}
26687	iter.i = 0
26688	return nil
26689}
26690
26691// Next advances to the next value.  If there was an error making
26692// the request the iterator does not advance and the error is returned.
26693// Deprecated: Use NextWithContext() instead.
26694func (iter *UsagesListResultIterator) Next() error {
26695	return iter.NextWithContext(context.Background())
26696}
26697
26698// NotDone returns true if the enumeration should be started or is not yet complete.
26699func (iter UsagesListResultIterator) NotDone() bool {
26700	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26701}
26702
26703// Response returns the raw server response from the last page request.
26704func (iter UsagesListResultIterator) Response() UsagesListResult {
26705	return iter.page.Response()
26706}
26707
26708// Value returns the current value or a zero-initialized value if the
26709// iterator has advanced beyond the end of the collection.
26710func (iter UsagesListResultIterator) Value() Usage {
26711	if !iter.page.NotDone() {
26712		return Usage{}
26713	}
26714	return iter.page.Values()[iter.i]
26715}
26716
26717// Creates a new instance of the UsagesListResultIterator type.
26718func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
26719	return UsagesListResultIterator{page: page}
26720}
26721
26722// IsEmpty returns true if the ListResult contains no values.
26723func (ulr UsagesListResult) IsEmpty() bool {
26724	return ulr.Value == nil || len(*ulr.Value) == 0
26725}
26726
26727// usagesListResultPreparer prepares a request to retrieve the next set of results.
26728// It returns nil if no more results exist.
26729func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
26730	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
26731		return nil, nil
26732	}
26733	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26734		autorest.AsJSON(),
26735		autorest.AsGet(),
26736		autorest.WithBaseURL(to.String(ulr.NextLink)))
26737}
26738
26739// UsagesListResultPage contains a page of Usage values.
26740type UsagesListResultPage struct {
26741	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
26742	ulr UsagesListResult
26743}
26744
26745// NextWithContext advances to the next page of values.  If there was an error making
26746// the request the page does not advance and the error is returned.
26747func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
26748	if tracing.IsEnabled() {
26749		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
26750		defer func() {
26751			sc := -1
26752			if page.Response().Response.Response != nil {
26753				sc = page.Response().Response.Response.StatusCode
26754			}
26755			tracing.EndSpan(ctx, sc, err)
26756		}()
26757	}
26758	next, err := page.fn(ctx, page.ulr)
26759	if err != nil {
26760		return err
26761	}
26762	page.ulr = next
26763	return nil
26764}
26765
26766// Next advances to the next page of values.  If there was an error making
26767// the request the page does not advance and the error is returned.
26768// Deprecated: Use NextWithContext() instead.
26769func (page *UsagesListResultPage) Next() error {
26770	return page.NextWithContext(context.Background())
26771}
26772
26773// NotDone returns true if the page enumeration should be started or is not yet complete.
26774func (page UsagesListResultPage) NotDone() bool {
26775	return !page.ulr.IsEmpty()
26776}
26777
26778// Response returns the raw server response from the last page request.
26779func (page UsagesListResultPage) Response() UsagesListResult {
26780	return page.ulr
26781}
26782
26783// Values returns the slice of values for the current page or nil if there are no values.
26784func (page UsagesListResultPage) Values() []Usage {
26785	if page.ulr.IsEmpty() {
26786		return nil
26787	}
26788	return *page.ulr.Value
26789}
26790
26791// Creates a new instance of the UsagesListResultPage type.
26792func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
26793	return UsagesListResultPage{fn: getNextPage}
26794}
26795
26796// VerificationIPFlowParameters parameters that define the IP flow to be verified.
26797type VerificationIPFlowParameters struct {
26798	// TargetResourceID - The ID of the target resource to perform next-hop on.
26799	TargetResourceID *string `json:"targetResourceId,omitempty"`
26800	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
26801	Direction Direction `json:"direction,omitempty"`
26802	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
26803	Protocol IPFlowProtocol `json:"protocol,omitempty"`
26804	// 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.
26805	LocalPort *string `json:"localPort,omitempty"`
26806	// 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.
26807	RemotePort *string `json:"remotePort,omitempty"`
26808	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
26809	LocalIPAddress *string `json:"localIPAddress,omitempty"`
26810	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
26811	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
26812	// 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).
26813	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
26814}
26815
26816// VerificationIPFlowResult results of IP flow verification on the target resource.
26817type VerificationIPFlowResult struct {
26818	autorest.Response `json:"-"`
26819	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
26820	Access Access `json:"access,omitempty"`
26821	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
26822	RuleName *string `json:"ruleName,omitempty"`
26823}
26824
26825// VirtualHub virtualHub Resource.
26826type VirtualHub struct {
26827	autorest.Response `json:"-"`
26828	// VirtualHubProperties - Properties of the virtual hub.
26829	*VirtualHubProperties `json:"properties,omitempty"`
26830	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
26831	Etag *string `json:"etag,omitempty"`
26832	// ID - Resource ID.
26833	ID *string `json:"id,omitempty"`
26834	// Name - READ-ONLY; Resource name.
26835	Name *string `json:"name,omitempty"`
26836	// Type - READ-ONLY; Resource type.
26837	Type *string `json:"type,omitempty"`
26838	// Location - Resource location.
26839	Location *string `json:"location,omitempty"`
26840	// Tags - Resource tags.
26841	Tags map[string]*string `json:"tags"`
26842}
26843
26844// MarshalJSON is the custom marshaler for VirtualHub.
26845func (vh VirtualHub) MarshalJSON() ([]byte, error) {
26846	objectMap := make(map[string]interface{})
26847	if vh.VirtualHubProperties != nil {
26848		objectMap["properties"] = vh.VirtualHubProperties
26849	}
26850	if vh.ID != nil {
26851		objectMap["id"] = vh.ID
26852	}
26853	if vh.Location != nil {
26854		objectMap["location"] = vh.Location
26855	}
26856	if vh.Tags != nil {
26857		objectMap["tags"] = vh.Tags
26858	}
26859	return json.Marshal(objectMap)
26860}
26861
26862// UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
26863func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
26864	var m map[string]*json.RawMessage
26865	err := json.Unmarshal(body, &m)
26866	if err != nil {
26867		return err
26868	}
26869	for k, v := range m {
26870		switch k {
26871		case "properties":
26872			if v != nil {
26873				var virtualHubProperties VirtualHubProperties
26874				err = json.Unmarshal(*v, &virtualHubProperties)
26875				if err != nil {
26876					return err
26877				}
26878				vh.VirtualHubProperties = &virtualHubProperties
26879			}
26880		case "etag":
26881			if v != nil {
26882				var etag string
26883				err = json.Unmarshal(*v, &etag)
26884				if err != nil {
26885					return err
26886				}
26887				vh.Etag = &etag
26888			}
26889		case "id":
26890			if v != nil {
26891				var ID string
26892				err = json.Unmarshal(*v, &ID)
26893				if err != nil {
26894					return err
26895				}
26896				vh.ID = &ID
26897			}
26898		case "name":
26899			if v != nil {
26900				var name string
26901				err = json.Unmarshal(*v, &name)
26902				if err != nil {
26903					return err
26904				}
26905				vh.Name = &name
26906			}
26907		case "type":
26908			if v != nil {
26909				var typeVar string
26910				err = json.Unmarshal(*v, &typeVar)
26911				if err != nil {
26912					return err
26913				}
26914				vh.Type = &typeVar
26915			}
26916		case "location":
26917			if v != nil {
26918				var location string
26919				err = json.Unmarshal(*v, &location)
26920				if err != nil {
26921					return err
26922				}
26923				vh.Location = &location
26924			}
26925		case "tags":
26926			if v != nil {
26927				var tags map[string]*string
26928				err = json.Unmarshal(*v, &tags)
26929				if err != nil {
26930					return err
26931				}
26932				vh.Tags = tags
26933			}
26934		}
26935	}
26936
26937	return nil
26938}
26939
26940// VirtualHubID virtual Hub identifier.
26941type VirtualHubID struct {
26942	// 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.
26943	ID *string `json:"id,omitempty"`
26944}
26945
26946// VirtualHubProperties parameters for VirtualHub.
26947type VirtualHubProperties struct {
26948	// VirtualWan - The VirtualWAN to which the VirtualHub belongs.
26949	VirtualWan *SubResource `json:"virtualWan,omitempty"`
26950	// VpnGateway - The VpnGateway associated with this VirtualHub.
26951	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
26952	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub.
26953	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
26954	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub.
26955	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
26956	// VirtualNetworkConnections - List of all vnet connections with this VirtualHub.
26957	VirtualNetworkConnections *[]HubVirtualNetworkConnection `json:"virtualNetworkConnections,omitempty"`
26958	// AddressPrefix - Address-prefix for this VirtualHub.
26959	AddressPrefix *string `json:"addressPrefix,omitempty"`
26960	// RouteTable - The routeTable associated with this virtual hub.
26961	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
26962	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26963	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26964}
26965
26966// VirtualHubRoute virtualHub route.
26967type VirtualHubRoute struct {
26968	// AddressPrefixes - List of all addressPrefixes.
26969	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
26970	// NextHopIPAddress - NextHop ip address.
26971	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
26972}
26973
26974// VirtualHubRouteTable virtualHub route table.
26975type VirtualHubRouteTable struct {
26976	// Routes - List of all routes.
26977	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
26978}
26979
26980// VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26981// long-running operation.
26982type VirtualHubsCreateOrUpdateFuture 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 *VirtualHubsCreateOrUpdateFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
26989	var done bool
26990	done, err = future.DoneWithContext(context.Background(), client)
26991	if err != nil {
26992		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26993		return
26994	}
26995	if !done {
26996		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
26997		return
26998	}
26999	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27000	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
27001		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
27002		if err != nil {
27003			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
27004		}
27005	}
27006	return
27007}
27008
27009// VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27010// operation.
27011type VirtualHubsDeleteFuture struct {
27012	azure.Future
27013}
27014
27015// Result returns the result of the asynchronous operation.
27016// If the operation has not completed it will return an error.
27017func (future *VirtualHubsDeleteFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
27018	var done bool
27019	done, err = future.DoneWithContext(context.Background(), client)
27020	if err != nil {
27021		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
27022		return
27023	}
27024	if !done {
27025		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
27026		return
27027	}
27028	ar.Response = future.Response()
27029	return
27030}
27031
27032// VirtualHubsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
27033// operation.
27034type VirtualHubsUpdateTagsFuture 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 *VirtualHubsUpdateTagsFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
27041	var done bool
27042	done, err = future.DoneWithContext(context.Background(), client)
27043	if err != nil {
27044		err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
27045		return
27046	}
27047	if !done {
27048		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsUpdateTagsFuture")
27049		return
27050	}
27051	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27052	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
27053		vh, err = client.UpdateTagsResponder(vh.Response.Response)
27054		if err != nil {
27055			err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", vh.Response.Response, "Failure responding to request")
27056		}
27057	}
27058	return
27059}
27060
27061// VirtualNetwork virtual Network resource.
27062type VirtualNetwork struct {
27063	autorest.Response `json:"-"`
27064	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
27065	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
27066	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
27067	Etag *string `json:"etag,omitempty"`
27068	// ID - Resource ID.
27069	ID *string `json:"id,omitempty"`
27070	// Name - READ-ONLY; Resource name.
27071	Name *string `json:"name,omitempty"`
27072	// Type - READ-ONLY; Resource type.
27073	Type *string `json:"type,omitempty"`
27074	// Location - Resource location.
27075	Location *string `json:"location,omitempty"`
27076	// Tags - Resource tags.
27077	Tags map[string]*string `json:"tags"`
27078}
27079
27080// MarshalJSON is the custom marshaler for VirtualNetwork.
27081func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
27082	objectMap := make(map[string]interface{})
27083	if vn.VirtualNetworkPropertiesFormat != nil {
27084		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
27085	}
27086	if vn.Etag != nil {
27087		objectMap["etag"] = vn.Etag
27088	}
27089	if vn.ID != nil {
27090		objectMap["id"] = vn.ID
27091	}
27092	if vn.Location != nil {
27093		objectMap["location"] = vn.Location
27094	}
27095	if vn.Tags != nil {
27096		objectMap["tags"] = vn.Tags
27097	}
27098	return json.Marshal(objectMap)
27099}
27100
27101// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
27102func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
27103	var m map[string]*json.RawMessage
27104	err := json.Unmarshal(body, &m)
27105	if err != nil {
27106		return err
27107	}
27108	for k, v := range m {
27109		switch k {
27110		case "properties":
27111			if v != nil {
27112				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
27113				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
27114				if err != nil {
27115					return err
27116				}
27117				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
27118			}
27119		case "etag":
27120			if v != nil {
27121				var etag string
27122				err = json.Unmarshal(*v, &etag)
27123				if err != nil {
27124					return err
27125				}
27126				vn.Etag = &etag
27127			}
27128		case "id":
27129			if v != nil {
27130				var ID string
27131				err = json.Unmarshal(*v, &ID)
27132				if err != nil {
27133					return err
27134				}
27135				vn.ID = &ID
27136			}
27137		case "name":
27138			if v != nil {
27139				var name string
27140				err = json.Unmarshal(*v, &name)
27141				if err != nil {
27142					return err
27143				}
27144				vn.Name = &name
27145			}
27146		case "type":
27147			if v != nil {
27148				var typeVar string
27149				err = json.Unmarshal(*v, &typeVar)
27150				if err != nil {
27151					return err
27152				}
27153				vn.Type = &typeVar
27154			}
27155		case "location":
27156			if v != nil {
27157				var location string
27158				err = json.Unmarshal(*v, &location)
27159				if err != nil {
27160					return err
27161				}
27162				vn.Location = &location
27163			}
27164		case "tags":
27165			if v != nil {
27166				var tags map[string]*string
27167				err = json.Unmarshal(*v, &tags)
27168				if err != nil {
27169					return err
27170				}
27171				vn.Tags = tags
27172			}
27173		}
27174	}
27175
27176	return nil
27177}
27178
27179// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
27180// resource.
27181type VirtualNetworkConnectionGatewayReference struct {
27182	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
27183	ID *string `json:"id,omitempty"`
27184}
27185
27186// VirtualNetworkGateway a common class for general resource information.
27187type VirtualNetworkGateway struct {
27188	autorest.Response `json:"-"`
27189	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
27190	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
27191	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
27192	Etag *string `json:"etag,omitempty"`
27193	// ID - Resource ID.
27194	ID *string `json:"id,omitempty"`
27195	// Name - READ-ONLY; Resource name.
27196	Name *string `json:"name,omitempty"`
27197	// Type - READ-ONLY; Resource type.
27198	Type *string `json:"type,omitempty"`
27199	// Location - Resource location.
27200	Location *string `json:"location,omitempty"`
27201	// Tags - Resource tags.
27202	Tags map[string]*string `json:"tags"`
27203}
27204
27205// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
27206func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
27207	objectMap := make(map[string]interface{})
27208	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
27209		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
27210	}
27211	if vng.Etag != nil {
27212		objectMap["etag"] = vng.Etag
27213	}
27214	if vng.ID != nil {
27215		objectMap["id"] = vng.ID
27216	}
27217	if vng.Location != nil {
27218		objectMap["location"] = vng.Location
27219	}
27220	if vng.Tags != nil {
27221		objectMap["tags"] = vng.Tags
27222	}
27223	return json.Marshal(objectMap)
27224}
27225
27226// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
27227func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
27228	var m map[string]*json.RawMessage
27229	err := json.Unmarshal(body, &m)
27230	if err != nil {
27231		return err
27232	}
27233	for k, v := range m {
27234		switch k {
27235		case "properties":
27236			if v != nil {
27237				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
27238				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
27239				if err != nil {
27240					return err
27241				}
27242				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
27243			}
27244		case "etag":
27245			if v != nil {
27246				var etag string
27247				err = json.Unmarshal(*v, &etag)
27248				if err != nil {
27249					return err
27250				}
27251				vng.Etag = &etag
27252			}
27253		case "id":
27254			if v != nil {
27255				var ID string
27256				err = json.Unmarshal(*v, &ID)
27257				if err != nil {
27258					return err
27259				}
27260				vng.ID = &ID
27261			}
27262		case "name":
27263			if v != nil {
27264				var name string
27265				err = json.Unmarshal(*v, &name)
27266				if err != nil {
27267					return err
27268				}
27269				vng.Name = &name
27270			}
27271		case "type":
27272			if v != nil {
27273				var typeVar string
27274				err = json.Unmarshal(*v, &typeVar)
27275				if err != nil {
27276					return err
27277				}
27278				vng.Type = &typeVar
27279			}
27280		case "location":
27281			if v != nil {
27282				var location string
27283				err = json.Unmarshal(*v, &location)
27284				if err != nil {
27285					return err
27286				}
27287				vng.Location = &location
27288			}
27289		case "tags":
27290			if v != nil {
27291				var tags map[string]*string
27292				err = json.Unmarshal(*v, &tags)
27293				if err != nil {
27294					return err
27295				}
27296				vng.Tags = tags
27297			}
27298		}
27299	}
27300
27301	return nil
27302}
27303
27304// VirtualNetworkGatewayConnection a common class for general resource information.
27305type VirtualNetworkGatewayConnection struct {
27306	autorest.Response `json:"-"`
27307	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
27308	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
27309	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
27310	Etag *string `json:"etag,omitempty"`
27311	// ID - Resource ID.
27312	ID *string `json:"id,omitempty"`
27313	// Name - READ-ONLY; Resource name.
27314	Name *string `json:"name,omitempty"`
27315	// Type - READ-ONLY; Resource type.
27316	Type *string `json:"type,omitempty"`
27317	// Location - Resource location.
27318	Location *string `json:"location,omitempty"`
27319	// Tags - Resource tags.
27320	Tags map[string]*string `json:"tags"`
27321}
27322
27323// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
27324func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
27325	objectMap := make(map[string]interface{})
27326	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
27327		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
27328	}
27329	if vngc.Etag != nil {
27330		objectMap["etag"] = vngc.Etag
27331	}
27332	if vngc.ID != nil {
27333		objectMap["id"] = vngc.ID
27334	}
27335	if vngc.Location != nil {
27336		objectMap["location"] = vngc.Location
27337	}
27338	if vngc.Tags != nil {
27339		objectMap["tags"] = vngc.Tags
27340	}
27341	return json.Marshal(objectMap)
27342}
27343
27344// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
27345func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
27346	var m map[string]*json.RawMessage
27347	err := json.Unmarshal(body, &m)
27348	if err != nil {
27349		return err
27350	}
27351	for k, v := range m {
27352		switch k {
27353		case "properties":
27354			if v != nil {
27355				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
27356				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
27357				if err != nil {
27358					return err
27359				}
27360				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
27361			}
27362		case "etag":
27363			if v != nil {
27364				var etag string
27365				err = json.Unmarshal(*v, &etag)
27366				if err != nil {
27367					return err
27368				}
27369				vngc.Etag = &etag
27370			}
27371		case "id":
27372			if v != nil {
27373				var ID string
27374				err = json.Unmarshal(*v, &ID)
27375				if err != nil {
27376					return err
27377				}
27378				vngc.ID = &ID
27379			}
27380		case "name":
27381			if v != nil {
27382				var name string
27383				err = json.Unmarshal(*v, &name)
27384				if err != nil {
27385					return err
27386				}
27387				vngc.Name = &name
27388			}
27389		case "type":
27390			if v != nil {
27391				var typeVar string
27392				err = json.Unmarshal(*v, &typeVar)
27393				if err != nil {
27394					return err
27395				}
27396				vngc.Type = &typeVar
27397			}
27398		case "location":
27399			if v != nil {
27400				var location string
27401				err = json.Unmarshal(*v, &location)
27402				if err != nil {
27403					return err
27404				}
27405				vngc.Location = &location
27406			}
27407		case "tags":
27408			if v != nil {
27409				var tags map[string]*string
27410				err = json.Unmarshal(*v, &tags)
27411				if err != nil {
27412					return err
27413				}
27414				vngc.Tags = tags
27415			}
27416		}
27417	}
27418
27419	return nil
27420}
27421
27422// VirtualNetworkGatewayConnectionListEntity a common class for general resource information.
27423type VirtualNetworkGatewayConnectionListEntity struct {
27424	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
27425	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
27426	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
27427	Etag *string `json:"etag,omitempty"`
27428	// ID - Resource ID.
27429	ID *string `json:"id,omitempty"`
27430	// Name - READ-ONLY; Resource name.
27431	Name *string `json:"name,omitempty"`
27432	// Type - READ-ONLY; Resource type.
27433	Type *string `json:"type,omitempty"`
27434	// Location - Resource location.
27435	Location *string `json:"location,omitempty"`
27436	// Tags - Resource tags.
27437	Tags map[string]*string `json:"tags"`
27438}
27439
27440// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
27441func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
27442	objectMap := make(map[string]interface{})
27443	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
27444		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
27445	}
27446	if vngcle.Etag != nil {
27447		objectMap["etag"] = vngcle.Etag
27448	}
27449	if vngcle.ID != nil {
27450		objectMap["id"] = vngcle.ID
27451	}
27452	if vngcle.Location != nil {
27453		objectMap["location"] = vngcle.Location
27454	}
27455	if vngcle.Tags != nil {
27456		objectMap["tags"] = vngcle.Tags
27457	}
27458	return json.Marshal(objectMap)
27459}
27460
27461// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
27462func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
27463	var m map[string]*json.RawMessage
27464	err := json.Unmarshal(body, &m)
27465	if err != nil {
27466		return err
27467	}
27468	for k, v := range m {
27469		switch k {
27470		case "properties":
27471			if v != nil {
27472				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
27473				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
27474				if err != nil {
27475					return err
27476				}
27477				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
27478			}
27479		case "etag":
27480			if v != nil {
27481				var etag string
27482				err = json.Unmarshal(*v, &etag)
27483				if err != nil {
27484					return err
27485				}
27486				vngcle.Etag = &etag
27487			}
27488		case "id":
27489			if v != nil {
27490				var ID string
27491				err = json.Unmarshal(*v, &ID)
27492				if err != nil {
27493					return err
27494				}
27495				vngcle.ID = &ID
27496			}
27497		case "name":
27498			if v != nil {
27499				var name string
27500				err = json.Unmarshal(*v, &name)
27501				if err != nil {
27502					return err
27503				}
27504				vngcle.Name = &name
27505			}
27506		case "type":
27507			if v != nil {
27508				var typeVar string
27509				err = json.Unmarshal(*v, &typeVar)
27510				if err != nil {
27511					return err
27512				}
27513				vngcle.Type = &typeVar
27514			}
27515		case "location":
27516			if v != nil {
27517				var location string
27518				err = json.Unmarshal(*v, &location)
27519				if err != nil {
27520					return err
27521				}
27522				vngcle.Location = &location
27523			}
27524		case "tags":
27525			if v != nil {
27526				var tags map[string]*string
27527				err = json.Unmarshal(*v, &tags)
27528				if err != nil {
27529					return err
27530				}
27531				vngcle.Tags = tags
27532			}
27533		}
27534	}
27535
27536	return nil
27537}
27538
27539// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties.
27540type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
27541	// AuthorizationKey - The authorizationKey.
27542	AuthorizationKey *string `json:"authorizationKey,omitempty"`
27543	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
27544	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
27545	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
27546	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
27547	// LocalNetworkGateway2 - The reference to local network gateway resource.
27548	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
27549	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
27550	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
27551	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
27552	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
27553	// RoutingWeight - The routing weight.
27554	RoutingWeight *int32 `json:"routingWeight,omitempty"`
27555	// SharedKey - The IPSec shared key.
27556	SharedKey *string `json:"sharedKey,omitempty"`
27557	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
27558	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
27559	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
27560	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
27561	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
27562	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
27563	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
27564	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
27565	// Peer - The reference to peerings resource.
27566	Peer *SubResource `json:"peer,omitempty"`
27567	// EnableBgp - EnableBgp flag.
27568	EnableBgp *bool `json:"enableBgp,omitempty"`
27569	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
27570	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
27571	// IpsecPolicies - The IPSec Policies to be considered by this connection.
27572	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
27573	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
27574	ResourceGUID *string `json:"resourceGuid,omitempty"`
27575	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
27576	ProvisioningState *string `json:"provisioningState,omitempty"`
27577	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
27578	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
27579}
27580
27581// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
27582// service call.
27583type VirtualNetworkGatewayConnectionListResult struct {
27584	autorest.Response `json:"-"`
27585	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
27586	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
27587	// NextLink - READ-ONLY; The URL to get the next set of results.
27588	NextLink *string `json:"nextLink,omitempty"`
27589}
27590
27591// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
27592// VirtualNetworkGatewayConnection values.
27593type VirtualNetworkGatewayConnectionListResultIterator struct {
27594	i    int
27595	page VirtualNetworkGatewayConnectionListResultPage
27596}
27597
27598// NextWithContext advances to the next value.  If there was an error making
27599// the request the iterator does not advance and the error is returned.
27600func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
27601	if tracing.IsEnabled() {
27602		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
27603		defer func() {
27604			sc := -1
27605			if iter.Response().Response.Response != nil {
27606				sc = iter.Response().Response.Response.StatusCode
27607			}
27608			tracing.EndSpan(ctx, sc, err)
27609		}()
27610	}
27611	iter.i++
27612	if iter.i < len(iter.page.Values()) {
27613		return nil
27614	}
27615	err = iter.page.NextWithContext(ctx)
27616	if err != nil {
27617		iter.i--
27618		return err
27619	}
27620	iter.i = 0
27621	return nil
27622}
27623
27624// Next advances to the next value.  If there was an error making
27625// the request the iterator does not advance and the error is returned.
27626// Deprecated: Use NextWithContext() instead.
27627func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
27628	return iter.NextWithContext(context.Background())
27629}
27630
27631// NotDone returns true if the enumeration should be started or is not yet complete.
27632func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
27633	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27634}
27635
27636// Response returns the raw server response from the last page request.
27637func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
27638	return iter.page.Response()
27639}
27640
27641// Value returns the current value or a zero-initialized value if the
27642// iterator has advanced beyond the end of the collection.
27643func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
27644	if !iter.page.NotDone() {
27645		return VirtualNetworkGatewayConnection{}
27646	}
27647	return iter.page.Values()[iter.i]
27648}
27649
27650// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
27651func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
27652	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
27653}
27654
27655// IsEmpty returns true if the ListResult contains no values.
27656func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
27657	return vngclr.Value == nil || len(*vngclr.Value) == 0
27658}
27659
27660// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
27661// It returns nil if no more results exist.
27662func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
27663	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
27664		return nil, nil
27665	}
27666	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27667		autorest.AsJSON(),
27668		autorest.AsGet(),
27669		autorest.WithBaseURL(to.String(vngclr.NextLink)))
27670}
27671
27672// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
27673type VirtualNetworkGatewayConnectionListResultPage struct {
27674	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
27675	vngclr VirtualNetworkGatewayConnectionListResult
27676}
27677
27678// NextWithContext advances to the next page of values.  If there was an error making
27679// the request the page does not advance and the error is returned.
27680func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
27681	if tracing.IsEnabled() {
27682		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
27683		defer func() {
27684			sc := -1
27685			if page.Response().Response.Response != nil {
27686				sc = page.Response().Response.Response.StatusCode
27687			}
27688			tracing.EndSpan(ctx, sc, err)
27689		}()
27690	}
27691	next, err := page.fn(ctx, page.vngclr)
27692	if err != nil {
27693		return err
27694	}
27695	page.vngclr = next
27696	return nil
27697}
27698
27699// Next advances to the next page of values.  If there was an error making
27700// the request the page does not advance and the error is returned.
27701// Deprecated: Use NextWithContext() instead.
27702func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
27703	return page.NextWithContext(context.Background())
27704}
27705
27706// NotDone returns true if the page enumeration should be started or is not yet complete.
27707func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
27708	return !page.vngclr.IsEmpty()
27709}
27710
27711// Response returns the raw server response from the last page request.
27712func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
27713	return page.vngclr
27714}
27715
27716// Values returns the slice of values for the current page or nil if there are no values.
27717func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
27718	if page.vngclr.IsEmpty() {
27719		return nil
27720	}
27721	return *page.vngclr.Value
27722}
27723
27724// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
27725func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
27726	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
27727}
27728
27729// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties.
27730type VirtualNetworkGatewayConnectionPropertiesFormat struct {
27731	// AuthorizationKey - The authorizationKey.
27732	AuthorizationKey *string `json:"authorizationKey,omitempty"`
27733	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
27734	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
27735	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
27736	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
27737	// LocalNetworkGateway2 - The reference to local network gateway resource.
27738	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
27739	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
27740	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
27741	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
27742	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
27743	// RoutingWeight - The routing weight.
27744	RoutingWeight *int32 `json:"routingWeight,omitempty"`
27745	// SharedKey - The IPSec shared key.
27746	SharedKey *string `json:"sharedKey,omitempty"`
27747	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
27748	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
27749	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
27750	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
27751	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
27752	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
27753	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
27754	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
27755	// Peer - The reference to peerings resource.
27756	Peer *SubResource `json:"peer,omitempty"`
27757	// EnableBgp - EnableBgp flag.
27758	EnableBgp *bool `json:"enableBgp,omitempty"`
27759	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
27760	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
27761	// IpsecPolicies - The IPSec Policies to be considered by this connection.
27762	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
27763	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
27764	ResourceGUID *string `json:"resourceGuid,omitempty"`
27765	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
27766	ProvisioningState *string `json:"provisioningState,omitempty"`
27767	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
27768	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
27769}
27770
27771// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
27772// results of a long-running operation.
27773type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
27774	azure.Future
27775}
27776
27777// Result returns the result of the asynchronous operation.
27778// If the operation has not completed it will return an error.
27779func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
27780	var done bool
27781	done, err = future.DoneWithContext(context.Background(), client)
27782	if err != nil {
27783		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27784		return
27785	}
27786	if !done {
27787		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
27788		return
27789	}
27790	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27791	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
27792		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
27793		if err != nil {
27794			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
27795		}
27796	}
27797	return
27798}
27799
27800// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
27801// a long-running operation.
27802type VirtualNetworkGatewayConnectionsDeleteFuture struct {
27803	azure.Future
27804}
27805
27806// Result returns the result of the asynchronous operation.
27807// If the operation has not completed it will return an error.
27808func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
27809	var done bool
27810	done, err = future.DoneWithContext(context.Background(), client)
27811	if err != nil {
27812		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
27813		return
27814	}
27815	if !done {
27816		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
27817		return
27818	}
27819	ar.Response = future.Response()
27820	return
27821}
27822
27823// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
27824// results of a long-running operation.
27825type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
27826	azure.Future
27827}
27828
27829// Result returns the result of the asynchronous operation.
27830// If the operation has not completed it will return an error.
27831func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
27832	var done bool
27833	done, err = future.DoneWithContext(context.Background(), client)
27834	if err != nil {
27835		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
27836		return
27837	}
27838	if !done {
27839		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
27840		return
27841	}
27842	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27843	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
27844		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
27845		if err != nil {
27846			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
27847		}
27848	}
27849	return
27850}
27851
27852// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
27853// results of a long-running operation.
27854type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
27855	azure.Future
27856}
27857
27858// Result returns the result of the asynchronous operation.
27859// If the operation has not completed it will return an error.
27860func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
27861	var done bool
27862	done, err = future.DoneWithContext(context.Background(), client)
27863	if err != nil {
27864		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
27865		return
27866	}
27867	if !done {
27868		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
27869		return
27870	}
27871	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27872	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
27873		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
27874		if err != nil {
27875			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
27876		}
27877	}
27878	return
27879}
27880
27881// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
27882// results of a long-running operation.
27883type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
27884	azure.Future
27885}
27886
27887// Result returns the result of the asynchronous operation.
27888// If the operation has not completed it will return an error.
27889func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
27890	var done bool
27891	done, err = future.DoneWithContext(context.Background(), client)
27892	if err != nil {
27893		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
27894		return
27895	}
27896	if !done {
27897		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
27898		return
27899	}
27900	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27901	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
27902		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
27903		if err != nil {
27904			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
27905		}
27906	}
27907	return
27908}
27909
27910// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway.
27911type VirtualNetworkGatewayIPConfiguration struct {
27912	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
27913	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
27914	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27915	Name *string `json:"name,omitempty"`
27916	// Etag - A unique read-only string that changes whenever the resource is updated.
27917	Etag *string `json:"etag,omitempty"`
27918	// ID - Resource ID.
27919	ID *string `json:"id,omitempty"`
27920}
27921
27922// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
27923func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
27924	objectMap := make(map[string]interface{})
27925	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
27926		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
27927	}
27928	if vngic.Name != nil {
27929		objectMap["name"] = vngic.Name
27930	}
27931	if vngic.Etag != nil {
27932		objectMap["etag"] = vngic.Etag
27933	}
27934	if vngic.ID != nil {
27935		objectMap["id"] = vngic.ID
27936	}
27937	return json.Marshal(objectMap)
27938}
27939
27940// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
27941func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
27942	var m map[string]*json.RawMessage
27943	err := json.Unmarshal(body, &m)
27944	if err != nil {
27945		return err
27946	}
27947	for k, v := range m {
27948		switch k {
27949		case "properties":
27950			if v != nil {
27951				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
27952				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
27953				if err != nil {
27954					return err
27955				}
27956				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
27957			}
27958		case "name":
27959			if v != nil {
27960				var name string
27961				err = json.Unmarshal(*v, &name)
27962				if err != nil {
27963					return err
27964				}
27965				vngic.Name = &name
27966			}
27967		case "etag":
27968			if v != nil {
27969				var etag string
27970				err = json.Unmarshal(*v, &etag)
27971				if err != nil {
27972					return err
27973				}
27974				vngic.Etag = &etag
27975			}
27976		case "id":
27977			if v != nil {
27978				var ID string
27979				err = json.Unmarshal(*v, &ID)
27980				if err != nil {
27981					return err
27982				}
27983				vngic.ID = &ID
27984			}
27985		}
27986	}
27987
27988	return nil
27989}
27990
27991// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration.
27992type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
27993	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
27994	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
27995	// Subnet - The reference of the subnet resource.
27996	Subnet *SubResource `json:"subnet,omitempty"`
27997	// PublicIPAddress - The reference of the public IP resource.
27998	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
27999	// ProvisioningState - READ-ONLY; The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
28000	ProvisioningState *string `json:"provisioningState,omitempty"`
28001}
28002
28003// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
28004// service call.
28005type VirtualNetworkGatewayListConnectionsResult struct {
28006	autorest.Response `json:"-"`
28007	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
28008	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
28009	// NextLink - READ-ONLY; The URL to get the next set of results.
28010	NextLink *string `json:"nextLink,omitempty"`
28011}
28012
28013// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
28014// VirtualNetworkGatewayConnectionListEntity values.
28015type VirtualNetworkGatewayListConnectionsResultIterator struct {
28016	i    int
28017	page VirtualNetworkGatewayListConnectionsResultPage
28018}
28019
28020// NextWithContext advances to the next value.  If there was an error making
28021// the request the iterator does not advance and the error is returned.
28022func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
28023	if tracing.IsEnabled() {
28024		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
28025		defer func() {
28026			sc := -1
28027			if iter.Response().Response.Response != nil {
28028				sc = iter.Response().Response.Response.StatusCode
28029			}
28030			tracing.EndSpan(ctx, sc, err)
28031		}()
28032	}
28033	iter.i++
28034	if iter.i < len(iter.page.Values()) {
28035		return nil
28036	}
28037	err = iter.page.NextWithContext(ctx)
28038	if err != nil {
28039		iter.i--
28040		return err
28041	}
28042	iter.i = 0
28043	return nil
28044}
28045
28046// Next advances to the next value.  If there was an error making
28047// the request the iterator does not advance and the error is returned.
28048// Deprecated: Use NextWithContext() instead.
28049func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
28050	return iter.NextWithContext(context.Background())
28051}
28052
28053// NotDone returns true if the enumeration should be started or is not yet complete.
28054func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
28055	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28056}
28057
28058// Response returns the raw server response from the last page request.
28059func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
28060	return iter.page.Response()
28061}
28062
28063// Value returns the current value or a zero-initialized value if the
28064// iterator has advanced beyond the end of the collection.
28065func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
28066	if !iter.page.NotDone() {
28067		return VirtualNetworkGatewayConnectionListEntity{}
28068	}
28069	return iter.page.Values()[iter.i]
28070}
28071
28072// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
28073func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
28074	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
28075}
28076
28077// IsEmpty returns true if the ListResult contains no values.
28078func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
28079	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
28080}
28081
28082// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
28083// It returns nil if no more results exist.
28084func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
28085	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
28086		return nil, nil
28087	}
28088	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28089		autorest.AsJSON(),
28090		autorest.AsGet(),
28091		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
28092}
28093
28094// VirtualNetworkGatewayListConnectionsResultPage contains a page of
28095// VirtualNetworkGatewayConnectionListEntity values.
28096type VirtualNetworkGatewayListConnectionsResultPage struct {
28097	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
28098	vnglcr VirtualNetworkGatewayListConnectionsResult
28099}
28100
28101// NextWithContext advances to the next page of values.  If there was an error making
28102// the request the page does not advance and the error is returned.
28103func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
28104	if tracing.IsEnabled() {
28105		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
28106		defer func() {
28107			sc := -1
28108			if page.Response().Response.Response != nil {
28109				sc = page.Response().Response.Response.StatusCode
28110			}
28111			tracing.EndSpan(ctx, sc, err)
28112		}()
28113	}
28114	next, err := page.fn(ctx, page.vnglcr)
28115	if err != nil {
28116		return err
28117	}
28118	page.vnglcr = next
28119	return nil
28120}
28121
28122// Next advances to the next page of values.  If there was an error making
28123// the request the page does not advance and the error is returned.
28124// Deprecated: Use NextWithContext() instead.
28125func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
28126	return page.NextWithContext(context.Background())
28127}
28128
28129// NotDone returns true if the page enumeration should be started or is not yet complete.
28130func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
28131	return !page.vnglcr.IsEmpty()
28132}
28133
28134// Response returns the raw server response from the last page request.
28135func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
28136	return page.vnglcr
28137}
28138
28139// Values returns the slice of values for the current page or nil if there are no values.
28140func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
28141	if page.vnglcr.IsEmpty() {
28142		return nil
28143	}
28144	return *page.vnglcr.Value
28145}
28146
28147// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
28148func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
28149	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
28150}
28151
28152// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
28153type VirtualNetworkGatewayListResult struct {
28154	autorest.Response `json:"-"`
28155	// Value - Gets a list of VirtualNetworkGateway resources that exists in a resource group.
28156	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
28157	// NextLink - READ-ONLY; The URL to get the next set of results.
28158	NextLink *string `json:"nextLink,omitempty"`
28159}
28160
28161// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
28162// values.
28163type VirtualNetworkGatewayListResultIterator struct {
28164	i    int
28165	page VirtualNetworkGatewayListResultPage
28166}
28167
28168// NextWithContext advances to the next value.  If there was an error making
28169// the request the iterator does not advance and the error is returned.
28170func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
28171	if tracing.IsEnabled() {
28172		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
28173		defer func() {
28174			sc := -1
28175			if iter.Response().Response.Response != nil {
28176				sc = iter.Response().Response.Response.StatusCode
28177			}
28178			tracing.EndSpan(ctx, sc, err)
28179		}()
28180	}
28181	iter.i++
28182	if iter.i < len(iter.page.Values()) {
28183		return nil
28184	}
28185	err = iter.page.NextWithContext(ctx)
28186	if err != nil {
28187		iter.i--
28188		return err
28189	}
28190	iter.i = 0
28191	return nil
28192}
28193
28194// Next advances to the next value.  If there was an error making
28195// the request the iterator does not advance and the error is returned.
28196// Deprecated: Use NextWithContext() instead.
28197func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
28198	return iter.NextWithContext(context.Background())
28199}
28200
28201// NotDone returns true if the enumeration should be started or is not yet complete.
28202func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
28203	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28204}
28205
28206// Response returns the raw server response from the last page request.
28207func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
28208	return iter.page.Response()
28209}
28210
28211// Value returns the current value or a zero-initialized value if the
28212// iterator has advanced beyond the end of the collection.
28213func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
28214	if !iter.page.NotDone() {
28215		return VirtualNetworkGateway{}
28216	}
28217	return iter.page.Values()[iter.i]
28218}
28219
28220// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
28221func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
28222	return VirtualNetworkGatewayListResultIterator{page: page}
28223}
28224
28225// IsEmpty returns true if the ListResult contains no values.
28226func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
28227	return vnglr.Value == nil || len(*vnglr.Value) == 0
28228}
28229
28230// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
28231// It returns nil if no more results exist.
28232func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
28233	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
28234		return nil, nil
28235	}
28236	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28237		autorest.AsJSON(),
28238		autorest.AsGet(),
28239		autorest.WithBaseURL(to.String(vnglr.NextLink)))
28240}
28241
28242// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
28243type VirtualNetworkGatewayListResultPage struct {
28244	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
28245	vnglr VirtualNetworkGatewayListResult
28246}
28247
28248// NextWithContext advances to the next page of values.  If there was an error making
28249// the request the page does not advance and the error is returned.
28250func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
28251	if tracing.IsEnabled() {
28252		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
28253		defer func() {
28254			sc := -1
28255			if page.Response().Response.Response != nil {
28256				sc = page.Response().Response.Response.StatusCode
28257			}
28258			tracing.EndSpan(ctx, sc, err)
28259		}()
28260	}
28261	next, err := page.fn(ctx, page.vnglr)
28262	if err != nil {
28263		return err
28264	}
28265	page.vnglr = next
28266	return nil
28267}
28268
28269// Next advances to the next page of values.  If there was an error making
28270// the request the page does not advance and the error is returned.
28271// Deprecated: Use NextWithContext() instead.
28272func (page *VirtualNetworkGatewayListResultPage) Next() error {
28273	return page.NextWithContext(context.Background())
28274}
28275
28276// NotDone returns true if the page enumeration should be started or is not yet complete.
28277func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
28278	return !page.vnglr.IsEmpty()
28279}
28280
28281// Response returns the raw server response from the last page request.
28282func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
28283	return page.vnglr
28284}
28285
28286// Values returns the slice of values for the current page or nil if there are no values.
28287func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
28288	if page.vnglr.IsEmpty() {
28289		return nil
28290	}
28291	return *page.vnglr.Value
28292}
28293
28294// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
28295func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
28296	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
28297}
28298
28299// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties.
28300type VirtualNetworkGatewayPropertiesFormat struct {
28301	// IPConfigurations - IP configurations for virtual network gateway.
28302	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
28303	// GatewayType - The type of this virtual network gateway. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
28304	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
28305	// VpnType - The type of this virtual network gateway. Possible values include: 'PolicyBased', 'RouteBased'
28306	VpnType VpnType `json:"vpnType,omitempty"`
28307	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
28308	EnableBgp *bool `json:"enableBgp,omitempty"`
28309	// ActiveActive - ActiveActive flag.
28310	ActiveActive *bool `json:"activeActive,omitempty"`
28311	// GatewayDefaultSite - The reference of the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.
28312	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
28313	// Sku - The reference of the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
28314	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
28315	// VpnClientConfiguration - The reference of the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
28316	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
28317	// BgpSettings - Virtual network gateway's BGP speaker settings.
28318	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
28319	// CustomRoutes - The reference of the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.
28320	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
28321	// ResourceGUID - The resource GUID property of the VirtualNetworkGateway resource.
28322	ResourceGUID *string `json:"resourceGuid,omitempty"`
28323	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
28324	ProvisioningState *string `json:"provisioningState,omitempty"`
28325}
28326
28327// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28328// long-running operation.
28329type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
28330	azure.Future
28331}
28332
28333// Result returns the result of the asynchronous operation.
28334// If the operation has not completed it will return an error.
28335func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
28336	var done bool
28337	done, err = future.DoneWithContext(context.Background(), client)
28338	if err != nil {
28339		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28340		return
28341	}
28342	if !done {
28343		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
28344		return
28345	}
28346	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28347	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
28348		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
28349		if err != nil {
28350			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
28351		}
28352	}
28353	return
28354}
28355
28356// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
28357// long-running operation.
28358type VirtualNetworkGatewaysDeleteFuture struct {
28359	azure.Future
28360}
28361
28362// Result returns the result of the asynchronous operation.
28363// If the operation has not completed it will return an error.
28364func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
28365	var done bool
28366	done, err = future.DoneWithContext(context.Background(), client)
28367	if err != nil {
28368		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
28369		return
28370	}
28371	if !done {
28372		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
28373		return
28374	}
28375	ar.Response = future.Response()
28376	return
28377}
28378
28379// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
28380// results of a long-running operation.
28381type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
28382	azure.Future
28383}
28384
28385// Result returns the result of the asynchronous operation.
28386// If the operation has not completed it will return an error.
28387func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
28388	var done bool
28389	done, err = future.DoneWithContext(context.Background(), client)
28390	if err != nil {
28391		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
28392		return
28393	}
28394	if !done {
28395		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
28396		return
28397	}
28398	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28399	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
28400		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
28401		if err != nil {
28402			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
28403		}
28404	}
28405	return
28406}
28407
28408// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
28409// of a long-running operation.
28410type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
28411	azure.Future
28412}
28413
28414// Result returns the result of the asynchronous operation.
28415// If the operation has not completed it will return an error.
28416func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
28417	var done bool
28418	done, err = future.DoneWithContext(context.Background(), client)
28419	if err != nil {
28420		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
28421		return
28422	}
28423	if !done {
28424		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
28425		return
28426	}
28427	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28428	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
28429		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
28430		if err != nil {
28431			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
28432		}
28433	}
28434	return
28435}
28436
28437// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
28438// of a long-running operation.
28439type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
28440	azure.Future
28441}
28442
28443// Result returns the result of the asynchronous operation.
28444// If the operation has not completed it will return an error.
28445func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
28446	var done bool
28447	done, err = future.DoneWithContext(context.Background(), client)
28448	if err != nil {
28449		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
28450		return
28451	}
28452	if !done {
28453		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
28454		return
28455	}
28456	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28457	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
28458		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
28459		if err != nil {
28460			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
28461		}
28462	}
28463	return
28464}
28465
28466// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
28467// a long-running operation.
28468type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
28469	azure.Future
28470}
28471
28472// Result returns the result of the asynchronous operation.
28473// If the operation has not completed it will return an error.
28474func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
28475	var done bool
28476	done, err = future.DoneWithContext(context.Background(), client)
28477	if err != nil {
28478		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
28479		return
28480	}
28481	if !done {
28482		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
28483		return
28484	}
28485	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28486	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
28487		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
28488		if err != nil {
28489			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
28490		}
28491	}
28492	return
28493}
28494
28495// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
28496// a long-running operation.
28497type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
28498	azure.Future
28499}
28500
28501// Result returns the result of the asynchronous operation.
28502// If the operation has not completed it will return an error.
28503func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
28504	var done bool
28505	done, err = future.DoneWithContext(context.Background(), client)
28506	if err != nil {
28507		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
28508		return
28509	}
28510	if !done {
28511		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
28512		return
28513	}
28514	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28515	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
28516		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
28517		if err != nil {
28518			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
28519		}
28520	}
28521	return
28522}
28523
28524// VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture an abstraction for monitoring and retrieving
28525// the results of a long-running operation.
28526type VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture struct {
28527	azure.Future
28528}
28529
28530// Result returns the result of the asynchronous operation.
28531// If the operation has not completed it will return an error.
28532func (future *VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture) Result(client VirtualNetworkGatewaysClient) (vcchdlr VpnClientConnectionHealthDetailListResult, err error) {
28533	var done bool
28534	done, err = future.DoneWithContext(context.Background(), client)
28535	if err != nil {
28536		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", future.Response(), "Polling failure")
28537		return
28538	}
28539	if !done {
28540		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture")
28541		return
28542	}
28543	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28544	if vcchdlr.Response.Response, err = future.GetResult(sender); err == nil && vcchdlr.Response.Response.StatusCode != http.StatusNoContent {
28545		vcchdlr, err = client.GetVpnclientConnectionHealthResponder(vcchdlr.Response.Response)
28546		if err != nil {
28547			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", vcchdlr.Response.Response, "Failure responding to request")
28548		}
28549	}
28550	return
28551}
28552
28553// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
28554// results of a long-running operation.
28555type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
28556	azure.Future
28557}
28558
28559// Result returns the result of the asynchronous operation.
28560// If the operation has not completed it will return an error.
28561func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
28562	var done bool
28563	done, err = future.DoneWithContext(context.Background(), client)
28564	if err != nil {
28565		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
28566		return
28567	}
28568	if !done {
28569		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
28570		return
28571	}
28572	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28573	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
28574		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
28575		if err != nil {
28576			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
28577		}
28578	}
28579	return
28580}
28581
28582// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
28583// results of a long-running operation.
28584type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
28585	azure.Future
28586}
28587
28588// Result returns the result of the asynchronous operation.
28589// If the operation has not completed it will return an error.
28590func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
28591	var done bool
28592	done, err = future.DoneWithContext(context.Background(), client)
28593	if err != nil {
28594		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
28595		return
28596	}
28597	if !done {
28598		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
28599		return
28600	}
28601	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28602	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
28603		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
28604		if err != nil {
28605			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
28606		}
28607	}
28608	return
28609}
28610
28611// VirtualNetworkGatewaySku virtualNetworkGatewaySku details.
28612type VirtualNetworkGatewaySku struct {
28613	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
28614	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
28615	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
28616	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
28617	// Capacity - The capacity.
28618	Capacity *int32 `json:"capacity,omitempty"`
28619}
28620
28621// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
28622// long-running operation.
28623type VirtualNetworkGatewaysResetFuture struct {
28624	azure.Future
28625}
28626
28627// Result returns the result of the asynchronous operation.
28628// If the operation has not completed it will return an error.
28629func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
28630	var done bool
28631	done, err = future.DoneWithContext(context.Background(), client)
28632	if err != nil {
28633		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
28634		return
28635	}
28636	if !done {
28637		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
28638		return
28639	}
28640	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28641	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
28642		vng, err = client.ResetResponder(vng.Response.Response)
28643		if err != nil {
28644			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
28645		}
28646	}
28647	return
28648}
28649
28650// VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
28651// results of a long-running operation.
28652type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
28653	azure.Future
28654}
28655
28656// Result returns the result of the asynchronous operation.
28657// If the operation has not completed it will return an error.
28658func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
28659	var done bool
28660	done, err = future.DoneWithContext(context.Background(), client)
28661	if err != nil {
28662		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
28663		return
28664	}
28665	if !done {
28666		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
28667		return
28668	}
28669	ar.Response = future.Response()
28670	return
28671}
28672
28673// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
28674// results of a long-running operation.
28675type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
28676	azure.Future
28677}
28678
28679// Result returns the result of the asynchronous operation.
28680// If the operation has not completed it will return an error.
28681func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
28682	var done bool
28683	done, err = future.DoneWithContext(context.Background(), client)
28684	if err != nil {
28685		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
28686		return
28687	}
28688	if !done {
28689		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
28690		return
28691	}
28692	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28693	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
28694		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
28695		if err != nil {
28696			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
28697		}
28698	}
28699	return
28700}
28701
28702// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
28703// long-running operation.
28704type VirtualNetworkGatewaysUpdateTagsFuture struct {
28705	azure.Future
28706}
28707
28708// Result returns the result of the asynchronous operation.
28709// If the operation has not completed it will return an error.
28710func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
28711	var done bool
28712	done, err = future.DoneWithContext(context.Background(), client)
28713	if err != nil {
28714		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
28715		return
28716	}
28717	if !done {
28718		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
28719		return
28720	}
28721	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28722	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
28723		vng, err = client.UpdateTagsResponder(vng.Response.Response)
28724		if err != nil {
28725			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
28726		}
28727	}
28728	return
28729}
28730
28731// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
28732type VirtualNetworkListResult struct {
28733	autorest.Response `json:"-"`
28734	// Value - Gets a list of VirtualNetwork resources in a resource group.
28735	Value *[]VirtualNetwork `json:"value,omitempty"`
28736	// NextLink - The URL to get the next set of results.
28737	NextLink *string `json:"nextLink,omitempty"`
28738}
28739
28740// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
28741type VirtualNetworkListResultIterator struct {
28742	i    int
28743	page VirtualNetworkListResultPage
28744}
28745
28746// NextWithContext advances to the next value.  If there was an error making
28747// the request the iterator does not advance and the error is returned.
28748func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
28749	if tracing.IsEnabled() {
28750		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
28751		defer func() {
28752			sc := -1
28753			if iter.Response().Response.Response != nil {
28754				sc = iter.Response().Response.Response.StatusCode
28755			}
28756			tracing.EndSpan(ctx, sc, err)
28757		}()
28758	}
28759	iter.i++
28760	if iter.i < len(iter.page.Values()) {
28761		return nil
28762	}
28763	err = iter.page.NextWithContext(ctx)
28764	if err != nil {
28765		iter.i--
28766		return err
28767	}
28768	iter.i = 0
28769	return nil
28770}
28771
28772// Next advances to the next value.  If there was an error making
28773// the request the iterator does not advance and the error is returned.
28774// Deprecated: Use NextWithContext() instead.
28775func (iter *VirtualNetworkListResultIterator) Next() error {
28776	return iter.NextWithContext(context.Background())
28777}
28778
28779// NotDone returns true if the enumeration should be started or is not yet complete.
28780func (iter VirtualNetworkListResultIterator) NotDone() bool {
28781	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28782}
28783
28784// Response returns the raw server response from the last page request.
28785func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
28786	return iter.page.Response()
28787}
28788
28789// Value returns the current value or a zero-initialized value if the
28790// iterator has advanced beyond the end of the collection.
28791func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
28792	if !iter.page.NotDone() {
28793		return VirtualNetwork{}
28794	}
28795	return iter.page.Values()[iter.i]
28796}
28797
28798// Creates a new instance of the VirtualNetworkListResultIterator type.
28799func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
28800	return VirtualNetworkListResultIterator{page: page}
28801}
28802
28803// IsEmpty returns true if the ListResult contains no values.
28804func (vnlr VirtualNetworkListResult) IsEmpty() bool {
28805	return vnlr.Value == nil || len(*vnlr.Value) == 0
28806}
28807
28808// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
28809// It returns nil if no more results exist.
28810func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
28811	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
28812		return nil, nil
28813	}
28814	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28815		autorest.AsJSON(),
28816		autorest.AsGet(),
28817		autorest.WithBaseURL(to.String(vnlr.NextLink)))
28818}
28819
28820// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
28821type VirtualNetworkListResultPage struct {
28822	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
28823	vnlr VirtualNetworkListResult
28824}
28825
28826// NextWithContext advances to the next page of values.  If there was an error making
28827// the request the page does not advance and the error is returned.
28828func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
28829	if tracing.IsEnabled() {
28830		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
28831		defer func() {
28832			sc := -1
28833			if page.Response().Response.Response != nil {
28834				sc = page.Response().Response.Response.StatusCode
28835			}
28836			tracing.EndSpan(ctx, sc, err)
28837		}()
28838	}
28839	next, err := page.fn(ctx, page.vnlr)
28840	if err != nil {
28841		return err
28842	}
28843	page.vnlr = next
28844	return nil
28845}
28846
28847// Next advances to the next page of values.  If there was an error making
28848// the request the page does not advance and the error is returned.
28849// Deprecated: Use NextWithContext() instead.
28850func (page *VirtualNetworkListResultPage) Next() error {
28851	return page.NextWithContext(context.Background())
28852}
28853
28854// NotDone returns true if the page enumeration should be started or is not yet complete.
28855func (page VirtualNetworkListResultPage) NotDone() bool {
28856	return !page.vnlr.IsEmpty()
28857}
28858
28859// Response returns the raw server response from the last page request.
28860func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
28861	return page.vnlr
28862}
28863
28864// Values returns the slice of values for the current page or nil if there are no values.
28865func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
28866	if page.vnlr.IsEmpty() {
28867		return nil
28868	}
28869	return *page.vnlr.Value
28870}
28871
28872// Creates a new instance of the VirtualNetworkListResultPage type.
28873func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
28874	return VirtualNetworkListResultPage{fn: getNextPage}
28875}
28876
28877// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
28878type VirtualNetworkListUsageResult struct {
28879	autorest.Response `json:"-"`
28880	// Value - READ-ONLY; VirtualNetwork usage stats.
28881	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
28882	// NextLink - The URL to get the next set of results.
28883	NextLink *string `json:"nextLink,omitempty"`
28884}
28885
28886// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
28887// values.
28888type VirtualNetworkListUsageResultIterator struct {
28889	i    int
28890	page VirtualNetworkListUsageResultPage
28891}
28892
28893// NextWithContext advances to the next value.  If there was an error making
28894// the request the iterator does not advance and the error is returned.
28895func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
28896	if tracing.IsEnabled() {
28897		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
28898		defer func() {
28899			sc := -1
28900			if iter.Response().Response.Response != nil {
28901				sc = iter.Response().Response.Response.StatusCode
28902			}
28903			tracing.EndSpan(ctx, sc, err)
28904		}()
28905	}
28906	iter.i++
28907	if iter.i < len(iter.page.Values()) {
28908		return nil
28909	}
28910	err = iter.page.NextWithContext(ctx)
28911	if err != nil {
28912		iter.i--
28913		return err
28914	}
28915	iter.i = 0
28916	return nil
28917}
28918
28919// Next advances to the next value.  If there was an error making
28920// the request the iterator does not advance and the error is returned.
28921// Deprecated: Use NextWithContext() instead.
28922func (iter *VirtualNetworkListUsageResultIterator) Next() error {
28923	return iter.NextWithContext(context.Background())
28924}
28925
28926// NotDone returns true if the enumeration should be started or is not yet complete.
28927func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
28928	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28929}
28930
28931// Response returns the raw server response from the last page request.
28932func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
28933	return iter.page.Response()
28934}
28935
28936// Value returns the current value or a zero-initialized value if the
28937// iterator has advanced beyond the end of the collection.
28938func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
28939	if !iter.page.NotDone() {
28940		return VirtualNetworkUsage{}
28941	}
28942	return iter.page.Values()[iter.i]
28943}
28944
28945// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
28946func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
28947	return VirtualNetworkListUsageResultIterator{page: page}
28948}
28949
28950// IsEmpty returns true if the ListResult contains no values.
28951func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
28952	return vnlur.Value == nil || len(*vnlur.Value) == 0
28953}
28954
28955// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
28956// It returns nil if no more results exist.
28957func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
28958	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
28959		return nil, nil
28960	}
28961	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28962		autorest.AsJSON(),
28963		autorest.AsGet(),
28964		autorest.WithBaseURL(to.String(vnlur.NextLink)))
28965}
28966
28967// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
28968type VirtualNetworkListUsageResultPage struct {
28969	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
28970	vnlur VirtualNetworkListUsageResult
28971}
28972
28973// NextWithContext advances to the next page of values.  If there was an error making
28974// the request the page does not advance and the error is returned.
28975func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
28976	if tracing.IsEnabled() {
28977		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
28978		defer func() {
28979			sc := -1
28980			if page.Response().Response.Response != nil {
28981				sc = page.Response().Response.Response.StatusCode
28982			}
28983			tracing.EndSpan(ctx, sc, err)
28984		}()
28985	}
28986	next, err := page.fn(ctx, page.vnlur)
28987	if err != nil {
28988		return err
28989	}
28990	page.vnlur = next
28991	return nil
28992}
28993
28994// Next advances to the next page of values.  If there was an error making
28995// the request the page does not advance and the error is returned.
28996// Deprecated: Use NextWithContext() instead.
28997func (page *VirtualNetworkListUsageResultPage) Next() error {
28998	return page.NextWithContext(context.Background())
28999}
29000
29001// NotDone returns true if the page enumeration should be started or is not yet complete.
29002func (page VirtualNetworkListUsageResultPage) NotDone() bool {
29003	return !page.vnlur.IsEmpty()
29004}
29005
29006// Response returns the raw server response from the last page request.
29007func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
29008	return page.vnlur
29009}
29010
29011// Values returns the slice of values for the current page or nil if there are no values.
29012func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
29013	if page.vnlur.IsEmpty() {
29014		return nil
29015	}
29016	return *page.vnlur.Value
29017}
29018
29019// Creates a new instance of the VirtualNetworkListUsageResultPage type.
29020func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
29021	return VirtualNetworkListUsageResultPage{fn: getNextPage}
29022}
29023
29024// VirtualNetworkPeering peerings in a virtual network resource.
29025type VirtualNetworkPeering struct {
29026	autorest.Response `json:"-"`
29027	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
29028	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
29029	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
29030	Name *string `json:"name,omitempty"`
29031	// Etag - A unique read-only string that changes whenever the resource is updated.
29032	Etag *string `json:"etag,omitempty"`
29033	// ID - Resource ID.
29034	ID *string `json:"id,omitempty"`
29035}
29036
29037// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
29038func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
29039	objectMap := make(map[string]interface{})
29040	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
29041		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
29042	}
29043	if vnp.Name != nil {
29044		objectMap["name"] = vnp.Name
29045	}
29046	if vnp.Etag != nil {
29047		objectMap["etag"] = vnp.Etag
29048	}
29049	if vnp.ID != nil {
29050		objectMap["id"] = vnp.ID
29051	}
29052	return json.Marshal(objectMap)
29053}
29054
29055// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
29056func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
29057	var m map[string]*json.RawMessage
29058	err := json.Unmarshal(body, &m)
29059	if err != nil {
29060		return err
29061	}
29062	for k, v := range m {
29063		switch k {
29064		case "properties":
29065			if v != nil {
29066				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
29067				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
29068				if err != nil {
29069					return err
29070				}
29071				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
29072			}
29073		case "name":
29074			if v != nil {
29075				var name string
29076				err = json.Unmarshal(*v, &name)
29077				if err != nil {
29078					return err
29079				}
29080				vnp.Name = &name
29081			}
29082		case "etag":
29083			if v != nil {
29084				var etag string
29085				err = json.Unmarshal(*v, &etag)
29086				if err != nil {
29087					return err
29088				}
29089				vnp.Etag = &etag
29090			}
29091		case "id":
29092			if v != nil {
29093				var ID string
29094				err = json.Unmarshal(*v, &ID)
29095				if err != nil {
29096					return err
29097				}
29098				vnp.ID = &ID
29099			}
29100		}
29101	}
29102
29103	return nil
29104}
29105
29106// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
29107// belong to a virtual network.
29108type VirtualNetworkPeeringListResult struct {
29109	autorest.Response `json:"-"`
29110	// Value - The peerings in a virtual network.
29111	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
29112	// NextLink - The URL to get the next set of results.
29113	NextLink *string `json:"nextLink,omitempty"`
29114}
29115
29116// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
29117// values.
29118type VirtualNetworkPeeringListResultIterator struct {
29119	i    int
29120	page VirtualNetworkPeeringListResultPage
29121}
29122
29123// NextWithContext advances to the next value.  If there was an error making
29124// the request the iterator does not advance and the error is returned.
29125func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
29126	if tracing.IsEnabled() {
29127		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
29128		defer func() {
29129			sc := -1
29130			if iter.Response().Response.Response != nil {
29131				sc = iter.Response().Response.Response.StatusCode
29132			}
29133			tracing.EndSpan(ctx, sc, err)
29134		}()
29135	}
29136	iter.i++
29137	if iter.i < len(iter.page.Values()) {
29138		return nil
29139	}
29140	err = iter.page.NextWithContext(ctx)
29141	if err != nil {
29142		iter.i--
29143		return err
29144	}
29145	iter.i = 0
29146	return nil
29147}
29148
29149// Next advances to the next value.  If there was an error making
29150// the request the iterator does not advance and the error is returned.
29151// Deprecated: Use NextWithContext() instead.
29152func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
29153	return iter.NextWithContext(context.Background())
29154}
29155
29156// NotDone returns true if the enumeration should be started or is not yet complete.
29157func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
29158	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29159}
29160
29161// Response returns the raw server response from the last page request.
29162func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
29163	return iter.page.Response()
29164}
29165
29166// Value returns the current value or a zero-initialized value if the
29167// iterator has advanced beyond the end of the collection.
29168func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
29169	if !iter.page.NotDone() {
29170		return VirtualNetworkPeering{}
29171	}
29172	return iter.page.Values()[iter.i]
29173}
29174
29175// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
29176func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
29177	return VirtualNetworkPeeringListResultIterator{page: page}
29178}
29179
29180// IsEmpty returns true if the ListResult contains no values.
29181func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
29182	return vnplr.Value == nil || len(*vnplr.Value) == 0
29183}
29184
29185// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
29186// It returns nil if no more results exist.
29187func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
29188	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
29189		return nil, nil
29190	}
29191	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29192		autorest.AsJSON(),
29193		autorest.AsGet(),
29194		autorest.WithBaseURL(to.String(vnplr.NextLink)))
29195}
29196
29197// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
29198type VirtualNetworkPeeringListResultPage struct {
29199	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
29200	vnplr VirtualNetworkPeeringListResult
29201}
29202
29203// NextWithContext advances to the next page of values.  If there was an error making
29204// the request the page does not advance and the error is returned.
29205func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
29206	if tracing.IsEnabled() {
29207		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
29208		defer func() {
29209			sc := -1
29210			if page.Response().Response.Response != nil {
29211				sc = page.Response().Response.Response.StatusCode
29212			}
29213			tracing.EndSpan(ctx, sc, err)
29214		}()
29215	}
29216	next, err := page.fn(ctx, page.vnplr)
29217	if err != nil {
29218		return err
29219	}
29220	page.vnplr = next
29221	return nil
29222}
29223
29224// Next advances to the next page of values.  If there was an error making
29225// the request the page does not advance and the error is returned.
29226// Deprecated: Use NextWithContext() instead.
29227func (page *VirtualNetworkPeeringListResultPage) Next() error {
29228	return page.NextWithContext(context.Background())
29229}
29230
29231// NotDone returns true if the page enumeration should be started or is not yet complete.
29232func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
29233	return !page.vnplr.IsEmpty()
29234}
29235
29236// Response returns the raw server response from the last page request.
29237func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
29238	return page.vnplr
29239}
29240
29241// Values returns the slice of values for the current page or nil if there are no values.
29242func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
29243	if page.vnplr.IsEmpty() {
29244		return nil
29245	}
29246	return *page.vnplr.Value
29247}
29248
29249// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
29250func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
29251	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
29252}
29253
29254// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
29255type VirtualNetworkPeeringPropertiesFormat struct {
29256	// AllowVirtualNetworkAccess - Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.
29257	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
29258	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.
29259	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
29260	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
29261	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
29262	// 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.
29263	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
29264	// RemoteVirtualNetwork - The reference of the remote virtual network. The remote virtual network can be in the same or different region (preview). See here to register for the preview and learn more (https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-create-peering).
29265	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
29266	// RemoteAddressSpace - The reference of the remote virtual network address space.
29267	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
29268	// PeeringState - The status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
29269	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
29270	// ProvisioningState - The provisioning state of the resource.
29271	ProvisioningState *string `json:"provisioningState,omitempty"`
29272}
29273
29274// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
29275// long-running operation.
29276type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
29277	azure.Future
29278}
29279
29280// Result returns the result of the asynchronous operation.
29281// If the operation has not completed it will return an error.
29282func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
29283	var done bool
29284	done, err = future.DoneWithContext(context.Background(), client)
29285	if err != nil {
29286		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29287		return
29288	}
29289	if !done {
29290		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
29291		return
29292	}
29293	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29294	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
29295		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
29296		if err != nil {
29297			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
29298		}
29299	}
29300	return
29301}
29302
29303// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
29304// long-running operation.
29305type VirtualNetworkPeeringsDeleteFuture struct {
29306	azure.Future
29307}
29308
29309// Result returns the result of the asynchronous operation.
29310// If the operation has not completed it will return an error.
29311func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
29312	var done bool
29313	done, err = future.DoneWithContext(context.Background(), client)
29314	if err != nil {
29315		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
29316		return
29317	}
29318	if !done {
29319		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
29320		return
29321	}
29322	ar.Response = future.Response()
29323	return
29324}
29325
29326// VirtualNetworkPropertiesFormat properties of the virtual network.
29327type VirtualNetworkPropertiesFormat struct {
29328	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
29329	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
29330	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
29331	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
29332	// Subnets - A list of subnets in a Virtual Network.
29333	Subnets *[]Subnet `json:"subnets,omitempty"`
29334	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
29335	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
29336	// ResourceGUID - The resourceGuid property of the Virtual Network resource.
29337	ResourceGUID *string `json:"resourceGuid,omitempty"`
29338	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
29339	ProvisioningState *string `json:"provisioningState,omitempty"`
29340	// 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.
29341	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
29342	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
29343	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
29344	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
29345	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
29346}
29347
29348// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
29349// long-running operation.
29350type VirtualNetworksCreateOrUpdateFuture struct {
29351	azure.Future
29352}
29353
29354// Result returns the result of the asynchronous operation.
29355// If the operation has not completed it will return an error.
29356func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
29357	var done bool
29358	done, err = future.DoneWithContext(context.Background(), client)
29359	if err != nil {
29360		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29361		return
29362	}
29363	if !done {
29364		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
29365		return
29366	}
29367	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29368	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
29369		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
29370		if err != nil {
29371			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
29372		}
29373	}
29374	return
29375}
29376
29377// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
29378// operation.
29379type VirtualNetworksDeleteFuture struct {
29380	azure.Future
29381}
29382
29383// Result returns the result of the asynchronous operation.
29384// If the operation has not completed it will return an error.
29385func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
29386	var done bool
29387	done, err = future.DoneWithContext(context.Background(), client)
29388	if err != nil {
29389		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
29390		return
29391	}
29392	if !done {
29393		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
29394		return
29395	}
29396	ar.Response = future.Response()
29397	return
29398}
29399
29400// VirtualNetworksUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
29401// long-running operation.
29402type VirtualNetworksUpdateTagsFuture struct {
29403	azure.Future
29404}
29405
29406// Result returns the result of the asynchronous operation.
29407// If the operation has not completed it will return an error.
29408func (future *VirtualNetworksUpdateTagsFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
29409	var done bool
29410	done, err = future.DoneWithContext(context.Background(), client)
29411	if err != nil {
29412		err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", future.Response(), "Polling failure")
29413		return
29414	}
29415	if !done {
29416		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksUpdateTagsFuture")
29417		return
29418	}
29419	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29420	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
29421		vn, err = client.UpdateTagsResponder(vn.Response.Response)
29422		if err != nil {
29423			err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", vn.Response.Response, "Failure responding to request")
29424		}
29425	}
29426	return
29427}
29428
29429// VirtualNetworkTap virtual Network Tap resource.
29430type VirtualNetworkTap struct {
29431	autorest.Response `json:"-"`
29432	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
29433	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
29434	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
29435	Etag *string `json:"etag,omitempty"`
29436	// ID - Resource ID.
29437	ID *string `json:"id,omitempty"`
29438	// Name - READ-ONLY; Resource name.
29439	Name *string `json:"name,omitempty"`
29440	// Type - READ-ONLY; Resource type.
29441	Type *string `json:"type,omitempty"`
29442	// Location - Resource location.
29443	Location *string `json:"location,omitempty"`
29444	// Tags - Resource tags.
29445	Tags map[string]*string `json:"tags"`
29446}
29447
29448// MarshalJSON is the custom marshaler for VirtualNetworkTap.
29449func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
29450	objectMap := make(map[string]interface{})
29451	if vnt.VirtualNetworkTapPropertiesFormat != nil {
29452		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
29453	}
29454	if vnt.Etag != nil {
29455		objectMap["etag"] = vnt.Etag
29456	}
29457	if vnt.ID != nil {
29458		objectMap["id"] = vnt.ID
29459	}
29460	if vnt.Location != nil {
29461		objectMap["location"] = vnt.Location
29462	}
29463	if vnt.Tags != nil {
29464		objectMap["tags"] = vnt.Tags
29465	}
29466	return json.Marshal(objectMap)
29467}
29468
29469// UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
29470func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
29471	var m map[string]*json.RawMessage
29472	err := json.Unmarshal(body, &m)
29473	if err != nil {
29474		return err
29475	}
29476	for k, v := range m {
29477		switch k {
29478		case "properties":
29479			if v != nil {
29480				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
29481				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
29482				if err != nil {
29483					return err
29484				}
29485				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
29486			}
29487		case "etag":
29488			if v != nil {
29489				var etag string
29490				err = json.Unmarshal(*v, &etag)
29491				if err != nil {
29492					return err
29493				}
29494				vnt.Etag = &etag
29495			}
29496		case "id":
29497			if v != nil {
29498				var ID string
29499				err = json.Unmarshal(*v, &ID)
29500				if err != nil {
29501					return err
29502				}
29503				vnt.ID = &ID
29504			}
29505		case "name":
29506			if v != nil {
29507				var name string
29508				err = json.Unmarshal(*v, &name)
29509				if err != nil {
29510					return err
29511				}
29512				vnt.Name = &name
29513			}
29514		case "type":
29515			if v != nil {
29516				var typeVar string
29517				err = json.Unmarshal(*v, &typeVar)
29518				if err != nil {
29519					return err
29520				}
29521				vnt.Type = &typeVar
29522			}
29523		case "location":
29524			if v != nil {
29525				var location string
29526				err = json.Unmarshal(*v, &location)
29527				if err != nil {
29528					return err
29529				}
29530				vnt.Location = &location
29531			}
29532		case "tags":
29533			if v != nil {
29534				var tags map[string]*string
29535				err = json.Unmarshal(*v, &tags)
29536				if err != nil {
29537					return err
29538				}
29539				vnt.Tags = tags
29540			}
29541		}
29542	}
29543
29544	return nil
29545}
29546
29547// VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
29548type VirtualNetworkTapListResult struct {
29549	autorest.Response `json:"-"`
29550	// Value - A list of VirtualNetworkTaps in a resource group.
29551	Value *[]VirtualNetworkTap `json:"value,omitempty"`
29552	// NextLink - The URL to get the next set of results.
29553	NextLink *string `json:"nextLink,omitempty"`
29554}
29555
29556// VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
29557type VirtualNetworkTapListResultIterator struct {
29558	i    int
29559	page VirtualNetworkTapListResultPage
29560}
29561
29562// NextWithContext advances to the next value.  If there was an error making
29563// the request the iterator does not advance and the error is returned.
29564func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
29565	if tracing.IsEnabled() {
29566		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
29567		defer func() {
29568			sc := -1
29569			if iter.Response().Response.Response != nil {
29570				sc = iter.Response().Response.Response.StatusCode
29571			}
29572			tracing.EndSpan(ctx, sc, err)
29573		}()
29574	}
29575	iter.i++
29576	if iter.i < len(iter.page.Values()) {
29577		return nil
29578	}
29579	err = iter.page.NextWithContext(ctx)
29580	if err != nil {
29581		iter.i--
29582		return err
29583	}
29584	iter.i = 0
29585	return nil
29586}
29587
29588// Next advances to the next value.  If there was an error making
29589// the request the iterator does not advance and the error is returned.
29590// Deprecated: Use NextWithContext() instead.
29591func (iter *VirtualNetworkTapListResultIterator) Next() error {
29592	return iter.NextWithContext(context.Background())
29593}
29594
29595// NotDone returns true if the enumeration should be started or is not yet complete.
29596func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
29597	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29598}
29599
29600// Response returns the raw server response from the last page request.
29601func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
29602	return iter.page.Response()
29603}
29604
29605// Value returns the current value or a zero-initialized value if the
29606// iterator has advanced beyond the end of the collection.
29607func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
29608	if !iter.page.NotDone() {
29609		return VirtualNetworkTap{}
29610	}
29611	return iter.page.Values()[iter.i]
29612}
29613
29614// Creates a new instance of the VirtualNetworkTapListResultIterator type.
29615func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
29616	return VirtualNetworkTapListResultIterator{page: page}
29617}
29618
29619// IsEmpty returns true if the ListResult contains no values.
29620func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
29621	return vntlr.Value == nil || len(*vntlr.Value) == 0
29622}
29623
29624// virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
29625// It returns nil if no more results exist.
29626func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
29627	if vntlr.NextLink == nil || len(to.String(vntlr.NextLink)) < 1 {
29628		return nil, nil
29629	}
29630	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29631		autorest.AsJSON(),
29632		autorest.AsGet(),
29633		autorest.WithBaseURL(to.String(vntlr.NextLink)))
29634}
29635
29636// VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
29637type VirtualNetworkTapListResultPage struct {
29638	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
29639	vntlr VirtualNetworkTapListResult
29640}
29641
29642// NextWithContext advances to the next page of values.  If there was an error making
29643// the request the page does not advance and the error is returned.
29644func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
29645	if tracing.IsEnabled() {
29646		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
29647		defer func() {
29648			sc := -1
29649			if page.Response().Response.Response != nil {
29650				sc = page.Response().Response.Response.StatusCode
29651			}
29652			tracing.EndSpan(ctx, sc, err)
29653		}()
29654	}
29655	next, err := page.fn(ctx, page.vntlr)
29656	if err != nil {
29657		return err
29658	}
29659	page.vntlr = next
29660	return nil
29661}
29662
29663// Next advances to the next page of values.  If there was an error making
29664// the request the page does not advance and the error is returned.
29665// Deprecated: Use NextWithContext() instead.
29666func (page *VirtualNetworkTapListResultPage) Next() error {
29667	return page.NextWithContext(context.Background())
29668}
29669
29670// NotDone returns true if the page enumeration should be started or is not yet complete.
29671func (page VirtualNetworkTapListResultPage) NotDone() bool {
29672	return !page.vntlr.IsEmpty()
29673}
29674
29675// Response returns the raw server response from the last page request.
29676func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
29677	return page.vntlr
29678}
29679
29680// Values returns the slice of values for the current page or nil if there are no values.
29681func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
29682	if page.vntlr.IsEmpty() {
29683		return nil
29684	}
29685	return *page.vntlr.Value
29686}
29687
29688// Creates a new instance of the VirtualNetworkTapListResultPage type.
29689func NewVirtualNetworkTapListResultPage(getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
29690	return VirtualNetworkTapListResultPage{fn: getNextPage}
29691}
29692
29693// VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
29694type VirtualNetworkTapPropertiesFormat struct {
29695	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
29696	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
29697	// ResourceGUID - READ-ONLY; The resourceGuid property of the virtual network tap.
29698	ResourceGUID *string `json:"resourceGuid,omitempty"`
29699	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap. Possible values are: 'Updating', 'Deleting', and 'Failed'.
29700	ProvisioningState *string `json:"provisioningState,omitempty"`
29701	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap.
29702	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
29703	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap.
29704	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
29705	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
29706	DestinationPort *int32 `json:"destinationPort,omitempty"`
29707}
29708
29709// VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
29710// long-running operation.
29711type VirtualNetworkTapsCreateOrUpdateFuture struct {
29712	azure.Future
29713}
29714
29715// Result returns the result of the asynchronous operation.
29716// If the operation has not completed it will return an error.
29717func (future *VirtualNetworkTapsCreateOrUpdateFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
29718	var done bool
29719	done, err = future.DoneWithContext(context.Background(), client)
29720	if err != nil {
29721		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29722		return
29723	}
29724	if !done {
29725		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
29726		return
29727	}
29728	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29729	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
29730		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
29731		if err != nil {
29732			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
29733		}
29734	}
29735	return
29736}
29737
29738// VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
29739// long-running operation.
29740type VirtualNetworkTapsDeleteFuture struct {
29741	azure.Future
29742}
29743
29744// Result returns the result of the asynchronous operation.
29745// If the operation has not completed it will return an error.
29746func (future *VirtualNetworkTapsDeleteFuture) Result(client VirtualNetworkTapsClient) (ar autorest.Response, err error) {
29747	var done bool
29748	done, err = future.DoneWithContext(context.Background(), client)
29749	if err != nil {
29750		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
29751		return
29752	}
29753	if !done {
29754		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
29755		return
29756	}
29757	ar.Response = future.Response()
29758	return
29759}
29760
29761// VirtualNetworkTapsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
29762// long-running operation.
29763type VirtualNetworkTapsUpdateTagsFuture struct {
29764	azure.Future
29765}
29766
29767// Result returns the result of the asynchronous operation.
29768// If the operation has not completed it will return an error.
29769func (future *VirtualNetworkTapsUpdateTagsFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
29770	var done bool
29771	done, err = future.DoneWithContext(context.Background(), client)
29772	if err != nil {
29773		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
29774		return
29775	}
29776	if !done {
29777		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsUpdateTagsFuture")
29778		return
29779	}
29780	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29781	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
29782		vnt, err = client.UpdateTagsResponder(vnt.Response.Response)
29783		if err != nil {
29784			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", vnt.Response.Response, "Failure responding to request")
29785		}
29786	}
29787	return
29788}
29789
29790// VirtualNetworkUsage usage details for subnet.
29791type VirtualNetworkUsage struct {
29792	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
29793	CurrentValue *float64 `json:"currentValue,omitempty"`
29794	// ID - READ-ONLY; Subnet identifier.
29795	ID *string `json:"id,omitempty"`
29796	// Limit - READ-ONLY; Indicates the size of the subnet.
29797	Limit *float64 `json:"limit,omitempty"`
29798	// Name - READ-ONLY; The name containing common and localized value for usage.
29799	Name *VirtualNetworkUsageName `json:"name,omitempty"`
29800	// Unit - READ-ONLY; Usage units. Returns 'Count'.
29801	Unit *string `json:"unit,omitempty"`
29802}
29803
29804// VirtualNetworkUsageName usage strings container.
29805type VirtualNetworkUsageName struct {
29806	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
29807	LocalizedValue *string `json:"localizedValue,omitempty"`
29808	// Value - READ-ONLY; Subnet size and usage string.
29809	Value *string `json:"value,omitempty"`
29810}
29811
29812// VirtualWAN virtualWAN Resource.
29813type VirtualWAN struct {
29814	autorest.Response `json:"-"`
29815	// VirtualWanProperties - Properties of the virtual WAN.
29816	*VirtualWanProperties `json:"properties,omitempty"`
29817	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
29818	Etag *string `json:"etag,omitempty"`
29819	// ID - Resource ID.
29820	ID *string `json:"id,omitempty"`
29821	// Name - READ-ONLY; Resource name.
29822	Name *string `json:"name,omitempty"`
29823	// Type - READ-ONLY; Resource type.
29824	Type *string `json:"type,omitempty"`
29825	// Location - Resource location.
29826	Location *string `json:"location,omitempty"`
29827	// Tags - Resource tags.
29828	Tags map[string]*string `json:"tags"`
29829}
29830
29831// MarshalJSON is the custom marshaler for VirtualWAN.
29832func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
29833	objectMap := make(map[string]interface{})
29834	if vw.VirtualWanProperties != nil {
29835		objectMap["properties"] = vw.VirtualWanProperties
29836	}
29837	if vw.ID != nil {
29838		objectMap["id"] = vw.ID
29839	}
29840	if vw.Location != nil {
29841		objectMap["location"] = vw.Location
29842	}
29843	if vw.Tags != nil {
29844		objectMap["tags"] = vw.Tags
29845	}
29846	return json.Marshal(objectMap)
29847}
29848
29849// UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
29850func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
29851	var m map[string]*json.RawMessage
29852	err := json.Unmarshal(body, &m)
29853	if err != nil {
29854		return err
29855	}
29856	for k, v := range m {
29857		switch k {
29858		case "properties":
29859			if v != nil {
29860				var virtualWanProperties VirtualWanProperties
29861				err = json.Unmarshal(*v, &virtualWanProperties)
29862				if err != nil {
29863					return err
29864				}
29865				vw.VirtualWanProperties = &virtualWanProperties
29866			}
29867		case "etag":
29868			if v != nil {
29869				var etag string
29870				err = json.Unmarshal(*v, &etag)
29871				if err != nil {
29872					return err
29873				}
29874				vw.Etag = &etag
29875			}
29876		case "id":
29877			if v != nil {
29878				var ID string
29879				err = json.Unmarshal(*v, &ID)
29880				if err != nil {
29881					return err
29882				}
29883				vw.ID = &ID
29884			}
29885		case "name":
29886			if v != nil {
29887				var name string
29888				err = json.Unmarshal(*v, &name)
29889				if err != nil {
29890					return err
29891				}
29892				vw.Name = &name
29893			}
29894		case "type":
29895			if v != nil {
29896				var typeVar string
29897				err = json.Unmarshal(*v, &typeVar)
29898				if err != nil {
29899					return err
29900				}
29901				vw.Type = &typeVar
29902			}
29903		case "location":
29904			if v != nil {
29905				var location string
29906				err = json.Unmarshal(*v, &location)
29907				if err != nil {
29908					return err
29909				}
29910				vw.Location = &location
29911			}
29912		case "tags":
29913			if v != nil {
29914				var tags map[string]*string
29915				err = json.Unmarshal(*v, &tags)
29916				if err != nil {
29917					return err
29918				}
29919				vw.Tags = tags
29920			}
29921		}
29922	}
29923
29924	return nil
29925}
29926
29927// VirtualWanProperties parameters for VirtualWAN.
29928type VirtualWanProperties struct {
29929	// DisableVpnEncryption - Vpn encryption to be disabled or not.
29930	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
29931	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
29932	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
29933	// VpnSites - READ-ONLY; List of VpnSites in the VirtualWAN.
29934	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
29935	// SecurityProviderName - The Security Provider name.
29936	SecurityProviderName *string `json:"securityProviderName,omitempty"`
29937	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
29938	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
29939	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
29940	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
29941	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
29942	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
29943	// P2SVpnServerConfigurations - List of all P2SVpnServerConfigurations associated with the virtual wan.
29944	P2SVpnServerConfigurations *[]P2SVpnServerConfiguration `json:"p2SVpnServerConfigurations,omitempty"`
29945	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29946	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29947}
29948
29949// VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
29950// long-running operation.
29951type VirtualWansCreateOrUpdateFuture struct {
29952	azure.Future
29953}
29954
29955// Result returns the result of the asynchronous operation.
29956// If the operation has not completed it will return an error.
29957func (future *VirtualWansCreateOrUpdateFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
29958	var done bool
29959	done, err = future.DoneWithContext(context.Background(), client)
29960	if err != nil {
29961		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29962		return
29963	}
29964	if !done {
29965		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
29966		return
29967	}
29968	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29969	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
29970		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
29971		if err != nil {
29972			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
29973		}
29974	}
29975	return
29976}
29977
29978// VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
29979// operation.
29980type VirtualWansDeleteFuture struct {
29981	azure.Future
29982}
29983
29984// Result returns the result of the asynchronous operation.
29985// If the operation has not completed it will return an error.
29986func (future *VirtualWansDeleteFuture) Result(client VirtualWansClient) (ar autorest.Response, err error) {
29987	var done bool
29988	done, err = future.DoneWithContext(context.Background(), client)
29989	if err != nil {
29990		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
29991		return
29992	}
29993	if !done {
29994		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
29995		return
29996	}
29997	ar.Response = future.Response()
29998	return
29999}
30000
30001// VirtualWanSecurityProvider collection of SecurityProviders.
30002type VirtualWanSecurityProvider struct {
30003	// Name - Name of the security provider.
30004	Name *string `json:"name,omitempty"`
30005	// URL - Url of the security provider.
30006	URL *string `json:"url,omitempty"`
30007	// Type - Name of the security provider. Possible values include: 'External', 'Native'
30008	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
30009}
30010
30011// VirtualWanSecurityProviders collection of SecurityProviders.
30012type VirtualWanSecurityProviders struct {
30013	autorest.Response `json:"-"`
30014	// SupportedProviders - List of VirtualWAN security providers.
30015	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
30016}
30017
30018// VirtualWansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
30019// operation.
30020type VirtualWansUpdateTagsFuture struct {
30021	azure.Future
30022}
30023
30024// Result returns the result of the asynchronous operation.
30025// If the operation has not completed it will return an error.
30026func (future *VirtualWansUpdateTagsFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
30027	var done bool
30028	done, err = future.DoneWithContext(context.Background(), client)
30029	if err != nil {
30030		err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
30031		return
30032	}
30033	if !done {
30034		err = azure.NewAsyncOpIncompleteError("network.VirtualWansUpdateTagsFuture")
30035		return
30036	}
30037	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30038	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
30039		vw, err = client.UpdateTagsResponder(vw.Response.Response)
30040		if err != nil {
30041			err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", vw.Response.Response, "Failure responding to request")
30042		}
30043	}
30044	return
30045}
30046
30047// VpnClientConfiguration vpnClientConfiguration for P2S client.
30048type VpnClientConfiguration struct {
30049	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
30050	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
30051	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
30052	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
30053	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
30054	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
30055	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
30056	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
30057	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
30058	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
30059	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
30060	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
30061	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
30062	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
30063	// AadTenant - The AADTenant property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
30064	AadTenant *string `json:"aadTenant,omitempty"`
30065	// AadAudience - The AADAudience property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
30066	AadAudience *string `json:"aadAudience,omitempty"`
30067	// AadIssuer - The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
30068	AadIssuer *string `json:"aadIssuer,omitempty"`
30069}
30070
30071// VpnClientConnectionHealth vpnClientConnectionHealth properties.
30072type VpnClientConnectionHealth struct {
30073	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection.
30074	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
30075	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection.
30076	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
30077	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
30078	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
30079	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
30080	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
30081}
30082
30083// VpnClientConnectionHealthDetail VPN client connection health detail.
30084type VpnClientConnectionHealthDetail struct {
30085	// VpnConnectionID - READ-ONLY; The vpn client Id.
30086	VpnConnectionID *string `json:"vpnConnectionId,omitempty"`
30087	// VpnConnectionDuration - READ-ONLY; The duration time of a connected vpn client.
30088	VpnConnectionDuration *int64 `json:"vpnConnectionDuration,omitempty"`
30089	// VpnConnectionTime - READ-ONLY; The start time of a connected vpn client.
30090	VpnConnectionTime *string `json:"vpnConnectionTime,omitempty"`
30091	// PublicIPAddress - READ-ONLY; The public Ip of a connected vpn client.
30092	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
30093	// PrivateIPAddress - READ-ONLY; The assigned private Ip of a connected vpn client.
30094	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
30095	// VpnUserName - READ-ONLY; The user name of a connected vpn client.
30096	VpnUserName *string `json:"vpnUserName,omitempty"`
30097	// MaxBandwidth - READ-ONLY; The max band width.
30098	MaxBandwidth *int64 `json:"maxBandwidth,omitempty"`
30099	// EgressPacketsTransferred - READ-ONLY; The egress packets per second.
30100	EgressPacketsTransferred *int64 `json:"egressPacketsTransferred,omitempty"`
30101	// EgressBytesTransferred - READ-ONLY; The egress bytes per second.
30102	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
30103	// IngressPacketsTransferred - READ-ONLY; The ingress packets per second.
30104	IngressPacketsTransferred *int64 `json:"ingressPacketsTransferred,omitempty"`
30105	// IngressBytesTransferred - READ-ONLY; The ingress bytes per second.
30106	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
30107	// MaxPacketsPerSecond - READ-ONLY; The max packets transferred per second.
30108	MaxPacketsPerSecond *int64 `json:"maxPacketsPerSecond,omitempty"`
30109}
30110
30111// VpnClientConnectionHealthDetailListResult list of virtual network gateway vpn client connection health.
30112type VpnClientConnectionHealthDetailListResult struct {
30113	autorest.Response `json:"-"`
30114	// Value - List of vpn client connection health.
30115	Value *[]VpnClientConnectionHealthDetail `json:"value,omitempty"`
30116}
30117
30118// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
30119type VpnClientIPsecParameters struct {
30120	autorest.Response `json:"-"`
30121	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
30122	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
30123	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
30124	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
30125	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
30126	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
30127	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
30128	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
30129	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
30130	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
30131	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
30132	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
30133	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
30134	DhGroup DhGroup `json:"dhGroup,omitempty"`
30135	// 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'
30136	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
30137}
30138
30139// VpnClientParameters vpn Client Parameters for package generation.
30140type VpnClientParameters struct {
30141	// ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'Amd64', 'X86'
30142	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
30143	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
30144	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
30145	// 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.
30146	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
30147	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
30148	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
30149}
30150
30151// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
30152type VpnClientRevokedCertificate struct {
30153	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
30154	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
30155	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
30156	Name *string `json:"name,omitempty"`
30157	// Etag - A unique read-only string that changes whenever the resource is updated.
30158	Etag *string `json:"etag,omitempty"`
30159	// ID - Resource ID.
30160	ID *string `json:"id,omitempty"`
30161}
30162
30163// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
30164func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
30165	objectMap := make(map[string]interface{})
30166	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
30167		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
30168	}
30169	if vcrc.Name != nil {
30170		objectMap["name"] = vcrc.Name
30171	}
30172	if vcrc.Etag != nil {
30173		objectMap["etag"] = vcrc.Etag
30174	}
30175	if vcrc.ID != nil {
30176		objectMap["id"] = vcrc.ID
30177	}
30178	return json.Marshal(objectMap)
30179}
30180
30181// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
30182func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
30183	var m map[string]*json.RawMessage
30184	err := json.Unmarshal(body, &m)
30185	if err != nil {
30186		return err
30187	}
30188	for k, v := range m {
30189		switch k {
30190		case "properties":
30191			if v != nil {
30192				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
30193				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
30194				if err != nil {
30195					return err
30196				}
30197				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
30198			}
30199		case "name":
30200			if v != nil {
30201				var name string
30202				err = json.Unmarshal(*v, &name)
30203				if err != nil {
30204					return err
30205				}
30206				vcrc.Name = &name
30207			}
30208		case "etag":
30209			if v != nil {
30210				var etag string
30211				err = json.Unmarshal(*v, &etag)
30212				if err != nil {
30213					return err
30214				}
30215				vcrc.Etag = &etag
30216			}
30217		case "id":
30218			if v != nil {
30219				var ID string
30220				err = json.Unmarshal(*v, &ID)
30221				if err != nil {
30222					return err
30223				}
30224				vcrc.ID = &ID
30225			}
30226		}
30227	}
30228
30229	return nil
30230}
30231
30232// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
30233// network gateway.
30234type VpnClientRevokedCertificatePropertiesFormat struct {
30235	// Thumbprint - The revoked VPN client certificate thumbprint.
30236	Thumbprint *string `json:"thumbprint,omitempty"`
30237	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
30238	ProvisioningState *string `json:"provisioningState,omitempty"`
30239}
30240
30241// VpnClientRootCertificate VPN client root certificate of virtual network gateway.
30242type VpnClientRootCertificate struct {
30243	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
30244	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
30245	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
30246	Name *string `json:"name,omitempty"`
30247	// Etag - A unique read-only string that changes whenever the resource is updated.
30248	Etag *string `json:"etag,omitempty"`
30249	// ID - Resource ID.
30250	ID *string `json:"id,omitempty"`
30251}
30252
30253// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
30254func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
30255	objectMap := make(map[string]interface{})
30256	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
30257		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
30258	}
30259	if vcrc.Name != nil {
30260		objectMap["name"] = vcrc.Name
30261	}
30262	if vcrc.Etag != nil {
30263		objectMap["etag"] = vcrc.Etag
30264	}
30265	if vcrc.ID != nil {
30266		objectMap["id"] = vcrc.ID
30267	}
30268	return json.Marshal(objectMap)
30269}
30270
30271// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
30272func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
30273	var m map[string]*json.RawMessage
30274	err := json.Unmarshal(body, &m)
30275	if err != nil {
30276		return err
30277	}
30278	for k, v := range m {
30279		switch k {
30280		case "properties":
30281			if v != nil {
30282				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
30283				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
30284				if err != nil {
30285					return err
30286				}
30287				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
30288			}
30289		case "name":
30290			if v != nil {
30291				var name string
30292				err = json.Unmarshal(*v, &name)
30293				if err != nil {
30294					return err
30295				}
30296				vcrc.Name = &name
30297			}
30298		case "etag":
30299			if v != nil {
30300				var etag string
30301				err = json.Unmarshal(*v, &etag)
30302				if err != nil {
30303					return err
30304				}
30305				vcrc.Etag = &etag
30306			}
30307		case "id":
30308			if v != nil {
30309				var ID string
30310				err = json.Unmarshal(*v, &ID)
30311				if err != nil {
30312					return err
30313				}
30314				vcrc.ID = &ID
30315			}
30316		}
30317	}
30318
30319	return nil
30320}
30321
30322// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway.
30323type VpnClientRootCertificatePropertiesFormat struct {
30324	// PublicCertData - The certificate public data.
30325	PublicCertData *string `json:"publicCertData,omitempty"`
30326	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
30327	ProvisioningState *string `json:"provisioningState,omitempty"`
30328}
30329
30330// VpnConnection vpnConnection Resource.
30331type VpnConnection struct {
30332	autorest.Response `json:"-"`
30333	// VpnConnectionProperties - Properties of the VPN connection.
30334	*VpnConnectionProperties `json:"properties,omitempty"`
30335	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
30336	Name *string `json:"name,omitempty"`
30337	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
30338	Etag *string `json:"etag,omitempty"`
30339	// ID - Resource ID.
30340	ID *string `json:"id,omitempty"`
30341}
30342
30343// MarshalJSON is the custom marshaler for VpnConnection.
30344func (vc VpnConnection) MarshalJSON() ([]byte, error) {
30345	objectMap := make(map[string]interface{})
30346	if vc.VpnConnectionProperties != nil {
30347		objectMap["properties"] = vc.VpnConnectionProperties
30348	}
30349	if vc.Name != nil {
30350		objectMap["name"] = vc.Name
30351	}
30352	if vc.ID != nil {
30353		objectMap["id"] = vc.ID
30354	}
30355	return json.Marshal(objectMap)
30356}
30357
30358// UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
30359func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
30360	var m map[string]*json.RawMessage
30361	err := json.Unmarshal(body, &m)
30362	if err != nil {
30363		return err
30364	}
30365	for k, v := range m {
30366		switch k {
30367		case "properties":
30368			if v != nil {
30369				var vpnConnectionProperties VpnConnectionProperties
30370				err = json.Unmarshal(*v, &vpnConnectionProperties)
30371				if err != nil {
30372					return err
30373				}
30374				vc.VpnConnectionProperties = &vpnConnectionProperties
30375			}
30376		case "name":
30377			if v != nil {
30378				var name string
30379				err = json.Unmarshal(*v, &name)
30380				if err != nil {
30381					return err
30382				}
30383				vc.Name = &name
30384			}
30385		case "etag":
30386			if v != nil {
30387				var etag string
30388				err = json.Unmarshal(*v, &etag)
30389				if err != nil {
30390					return err
30391				}
30392				vc.Etag = &etag
30393			}
30394		case "id":
30395			if v != nil {
30396				var ID string
30397				err = json.Unmarshal(*v, &ID)
30398				if err != nil {
30399					return err
30400				}
30401				vc.ID = &ID
30402			}
30403		}
30404	}
30405
30406	return nil
30407}
30408
30409// VpnConnectionProperties parameters for VpnConnection.
30410type VpnConnectionProperties struct {
30411	// RemoteVpnSite - Id of the connected vpn site.
30412	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
30413	// RoutingWeight - Routing weight for vpn connection.
30414	RoutingWeight *int32 `json:"routingWeight,omitempty"`
30415	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
30416	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
30417	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
30418	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
30419	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
30420	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
30421	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
30422	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
30423	// ConnectionBandwidth - Expected bandwidth in MBPS.
30424	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
30425	// SharedKey - SharedKey for the vpn connection.
30426	SharedKey *string `json:"sharedKey,omitempty"`
30427	// EnableBgp - EnableBgp flag.
30428	EnableBgp *bool `json:"enableBgp,omitempty"`
30429	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
30430	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
30431	// IpsecPolicies - The IPSec Policies to be considered by this connection.
30432	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
30433	// EnableRateLimiting - EnableBgp flag.
30434	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
30435	// EnableInternetSecurity - Enable internet security.
30436	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
30437	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
30438	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
30439	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30440	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30441}
30442
30443// VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30444// long-running operation.
30445type VpnConnectionsCreateOrUpdateFuture struct {
30446	azure.Future
30447}
30448
30449// Result returns the result of the asynchronous operation.
30450// If the operation has not completed it will return an error.
30451func (future *VpnConnectionsCreateOrUpdateFuture) Result(client VpnConnectionsClient) (vc VpnConnection, err error) {
30452	var done bool
30453	done, err = future.DoneWithContext(context.Background(), client)
30454	if err != nil {
30455		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30456		return
30457	}
30458	if !done {
30459		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
30460		return
30461	}
30462	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30463	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
30464		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
30465		if err != nil {
30466			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
30467		}
30468	}
30469	return
30470}
30471
30472// VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
30473// operation.
30474type VpnConnectionsDeleteFuture struct {
30475	azure.Future
30476}
30477
30478// Result returns the result of the asynchronous operation.
30479// If the operation has not completed it will return an error.
30480func (future *VpnConnectionsDeleteFuture) Result(client VpnConnectionsClient) (ar autorest.Response, err error) {
30481	var done bool
30482	done, err = future.DoneWithContext(context.Background(), client)
30483	if err != nil {
30484		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
30485		return
30486	}
30487	if !done {
30488		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
30489		return
30490	}
30491	ar.Response = future.Response()
30492	return
30493}
30494
30495// VpnDeviceScriptParameters vpn device configuration script generation parameters.
30496type VpnDeviceScriptParameters struct {
30497	// Vendor - The vendor for the vpn device.
30498	Vendor *string `json:"vendor,omitempty"`
30499	// DeviceFamily - The device family for the vpn device.
30500	DeviceFamily *string `json:"deviceFamily,omitempty"`
30501	// FirmwareVersion - The firmware version for the vpn device.
30502	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
30503}
30504
30505// VpnGateway vpnGateway Resource.
30506type VpnGateway struct {
30507	autorest.Response `json:"-"`
30508	// VpnGatewayProperties - Properties of the VPN gateway.
30509	*VpnGatewayProperties `json:"properties,omitempty"`
30510	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
30511	Etag *string `json:"etag,omitempty"`
30512	// ID - Resource ID.
30513	ID *string `json:"id,omitempty"`
30514	// Name - READ-ONLY; Resource name.
30515	Name *string `json:"name,omitempty"`
30516	// Type - READ-ONLY; Resource type.
30517	Type *string `json:"type,omitempty"`
30518	// Location - Resource location.
30519	Location *string `json:"location,omitempty"`
30520	// Tags - Resource tags.
30521	Tags map[string]*string `json:"tags"`
30522}
30523
30524// MarshalJSON is the custom marshaler for VpnGateway.
30525func (vg VpnGateway) MarshalJSON() ([]byte, error) {
30526	objectMap := make(map[string]interface{})
30527	if vg.VpnGatewayProperties != nil {
30528		objectMap["properties"] = vg.VpnGatewayProperties
30529	}
30530	if vg.ID != nil {
30531		objectMap["id"] = vg.ID
30532	}
30533	if vg.Location != nil {
30534		objectMap["location"] = vg.Location
30535	}
30536	if vg.Tags != nil {
30537		objectMap["tags"] = vg.Tags
30538	}
30539	return json.Marshal(objectMap)
30540}
30541
30542// UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
30543func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
30544	var m map[string]*json.RawMessage
30545	err := json.Unmarshal(body, &m)
30546	if err != nil {
30547		return err
30548	}
30549	for k, v := range m {
30550		switch k {
30551		case "properties":
30552			if v != nil {
30553				var vpnGatewayProperties VpnGatewayProperties
30554				err = json.Unmarshal(*v, &vpnGatewayProperties)
30555				if err != nil {
30556					return err
30557				}
30558				vg.VpnGatewayProperties = &vpnGatewayProperties
30559			}
30560		case "etag":
30561			if v != nil {
30562				var etag string
30563				err = json.Unmarshal(*v, &etag)
30564				if err != nil {
30565					return err
30566				}
30567				vg.Etag = &etag
30568			}
30569		case "id":
30570			if v != nil {
30571				var ID string
30572				err = json.Unmarshal(*v, &ID)
30573				if err != nil {
30574					return err
30575				}
30576				vg.ID = &ID
30577			}
30578		case "name":
30579			if v != nil {
30580				var name string
30581				err = json.Unmarshal(*v, &name)
30582				if err != nil {
30583					return err
30584				}
30585				vg.Name = &name
30586			}
30587		case "type":
30588			if v != nil {
30589				var typeVar string
30590				err = json.Unmarshal(*v, &typeVar)
30591				if err != nil {
30592					return err
30593				}
30594				vg.Type = &typeVar
30595			}
30596		case "location":
30597			if v != nil {
30598				var location string
30599				err = json.Unmarshal(*v, &location)
30600				if err != nil {
30601					return err
30602				}
30603				vg.Location = &location
30604			}
30605		case "tags":
30606			if v != nil {
30607				var tags map[string]*string
30608				err = json.Unmarshal(*v, &tags)
30609				if err != nil {
30610					return err
30611				}
30612				vg.Tags = tags
30613			}
30614		}
30615	}
30616
30617	return nil
30618}
30619
30620// VpnGatewayProperties parameters for VpnGateway.
30621type VpnGatewayProperties struct {
30622	// VirtualHub - The VirtualHub to which the gateway belongs.
30623	VirtualHub *SubResource `json:"virtualHub,omitempty"`
30624	// Connections - List of all vpn connections to the gateway.
30625	Connections *[]VpnConnection `json:"connections,omitempty"`
30626	// BgpSettings - Local network gateway's BGP speaker settings.
30627	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
30628	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30629	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30630	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
30631	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
30632}
30633
30634// VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30635// long-running operation.
30636type VpnGatewaysCreateOrUpdateFuture struct {
30637	azure.Future
30638}
30639
30640// Result returns the result of the asynchronous operation.
30641// If the operation has not completed it will return an error.
30642func (future *VpnGatewaysCreateOrUpdateFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
30643	var done bool
30644	done, err = future.DoneWithContext(context.Background(), client)
30645	if err != nil {
30646		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30647		return
30648	}
30649	if !done {
30650		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
30651		return
30652	}
30653	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30654	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
30655		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
30656		if err != nil {
30657			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
30658		}
30659	}
30660	return
30661}
30662
30663// VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
30664// operation.
30665type VpnGatewaysDeleteFuture struct {
30666	azure.Future
30667}
30668
30669// Result returns the result of the asynchronous operation.
30670// If the operation has not completed it will return an error.
30671func (future *VpnGatewaysDeleteFuture) Result(client VpnGatewaysClient) (ar autorest.Response, err error) {
30672	var done bool
30673	done, err = future.DoneWithContext(context.Background(), client)
30674	if err != nil {
30675		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
30676		return
30677	}
30678	if !done {
30679		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
30680		return
30681	}
30682	ar.Response = future.Response()
30683	return
30684}
30685
30686// VpnGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running
30687// operation.
30688type VpnGatewaysResetFuture struct {
30689	azure.Future
30690}
30691
30692// Result returns the result of the asynchronous operation.
30693// If the operation has not completed it will return an error.
30694func (future *VpnGatewaysResetFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
30695	var done bool
30696	done, err = future.DoneWithContext(context.Background(), client)
30697	if err != nil {
30698		err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", future.Response(), "Polling failure")
30699		return
30700	}
30701	if !done {
30702		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysResetFuture")
30703		return
30704	}
30705	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30706	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
30707		vg, err = client.ResetResponder(vg.Response.Response)
30708		if err != nil {
30709			err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", vg.Response.Response, "Failure responding to request")
30710		}
30711	}
30712	return
30713}
30714
30715// VpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
30716// operation.
30717type VpnGatewaysUpdateTagsFuture struct {
30718	azure.Future
30719}
30720
30721// Result returns the result of the asynchronous operation.
30722// If the operation has not completed it will return an error.
30723func (future *VpnGatewaysUpdateTagsFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
30724	var done bool
30725	done, err = future.DoneWithContext(context.Background(), client)
30726	if err != nil {
30727		err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
30728		return
30729	}
30730	if !done {
30731		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysUpdateTagsFuture")
30732		return
30733	}
30734	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30735	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
30736		vg, err = client.UpdateTagsResponder(vg.Response.Response)
30737		if err != nil {
30738			err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", vg.Response.Response, "Failure responding to request")
30739		}
30740	}
30741	return
30742}
30743
30744// VpnProfileResponse vpn Profile Response for package generation.
30745type VpnProfileResponse struct {
30746	autorest.Response `json:"-"`
30747	// ProfileURL - URL to the VPN profile.
30748	ProfileURL *string `json:"profileUrl,omitempty"`
30749}
30750
30751// VpnSite vpnSite Resource.
30752type VpnSite struct {
30753	autorest.Response `json:"-"`
30754	// VpnSiteProperties - Properties of the VPN site.
30755	*VpnSiteProperties `json:"properties,omitempty"`
30756	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
30757	Etag *string `json:"etag,omitempty"`
30758	// ID - Resource ID.
30759	ID *string `json:"id,omitempty"`
30760	// Name - READ-ONLY; Resource name.
30761	Name *string `json:"name,omitempty"`
30762	// Type - READ-ONLY; Resource type.
30763	Type *string `json:"type,omitempty"`
30764	// Location - Resource location.
30765	Location *string `json:"location,omitempty"`
30766	// Tags - Resource tags.
30767	Tags map[string]*string `json:"tags"`
30768}
30769
30770// MarshalJSON is the custom marshaler for VpnSite.
30771func (vs VpnSite) MarshalJSON() ([]byte, error) {
30772	objectMap := make(map[string]interface{})
30773	if vs.VpnSiteProperties != nil {
30774		objectMap["properties"] = vs.VpnSiteProperties
30775	}
30776	if vs.ID != nil {
30777		objectMap["id"] = vs.ID
30778	}
30779	if vs.Location != nil {
30780		objectMap["location"] = vs.Location
30781	}
30782	if vs.Tags != nil {
30783		objectMap["tags"] = vs.Tags
30784	}
30785	return json.Marshal(objectMap)
30786}
30787
30788// UnmarshalJSON is the custom unmarshaler for VpnSite struct.
30789func (vs *VpnSite) UnmarshalJSON(body []byte) error {
30790	var m map[string]*json.RawMessage
30791	err := json.Unmarshal(body, &m)
30792	if err != nil {
30793		return err
30794	}
30795	for k, v := range m {
30796		switch k {
30797		case "properties":
30798			if v != nil {
30799				var vpnSiteProperties VpnSiteProperties
30800				err = json.Unmarshal(*v, &vpnSiteProperties)
30801				if err != nil {
30802					return err
30803				}
30804				vs.VpnSiteProperties = &vpnSiteProperties
30805			}
30806		case "etag":
30807			if v != nil {
30808				var etag string
30809				err = json.Unmarshal(*v, &etag)
30810				if err != nil {
30811					return err
30812				}
30813				vs.Etag = &etag
30814			}
30815		case "id":
30816			if v != nil {
30817				var ID string
30818				err = json.Unmarshal(*v, &ID)
30819				if err != nil {
30820					return err
30821				}
30822				vs.ID = &ID
30823			}
30824		case "name":
30825			if v != nil {
30826				var name string
30827				err = json.Unmarshal(*v, &name)
30828				if err != nil {
30829					return err
30830				}
30831				vs.Name = &name
30832			}
30833		case "type":
30834			if v != nil {
30835				var typeVar string
30836				err = json.Unmarshal(*v, &typeVar)
30837				if err != nil {
30838					return err
30839				}
30840				vs.Type = &typeVar
30841			}
30842		case "location":
30843			if v != nil {
30844				var location string
30845				err = json.Unmarshal(*v, &location)
30846				if err != nil {
30847					return err
30848				}
30849				vs.Location = &location
30850			}
30851		case "tags":
30852			if v != nil {
30853				var tags map[string]*string
30854				err = json.Unmarshal(*v, &tags)
30855				if err != nil {
30856					return err
30857				}
30858				vs.Tags = tags
30859			}
30860		}
30861	}
30862
30863	return nil
30864}
30865
30866// VpnSiteID vpnSite Resource.
30867type VpnSiteID struct {
30868	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
30869	VpnSite *string `json:"vpnSite,omitempty"`
30870}
30871
30872// VpnSiteProperties parameters for VpnSite.
30873type VpnSiteProperties struct {
30874	// VirtualWan - The VirtualWAN to which the vpnSite belongs.
30875	VirtualWan *SubResource `json:"virtualWan,omitempty"`
30876	// DeviceProperties - The device properties.
30877	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
30878	// IPAddress - The ip-address for the vpn-site.
30879	IPAddress *string `json:"ipAddress,omitempty"`
30880	// SiteKey - The key for vpn-site that can be used for connections.
30881	SiteKey *string `json:"siteKey,omitempty"`
30882	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
30883	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
30884	// BgpProperties - The set of bgp properties.
30885	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
30886	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30887	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30888	// IsSecuritySite - IsSecuritySite flag.
30889	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
30890}
30891
30892// VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
30893// long-running operation.
30894type VpnSitesConfigurationDownloadFuture struct {
30895	azure.Future
30896}
30897
30898// Result returns the result of the asynchronous operation.
30899// If the operation has not completed it will return an error.
30900func (future *VpnSitesConfigurationDownloadFuture) Result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
30901	var done bool
30902	done, err = future.DoneWithContext(context.Background(), client)
30903	if err != nil {
30904		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
30905		return
30906	}
30907	if !done {
30908		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
30909		return
30910	}
30911	ar.Response = future.Response()
30912	return
30913}
30914
30915// VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
30916// operation.
30917type VpnSitesCreateOrUpdateFuture struct {
30918	azure.Future
30919}
30920
30921// Result returns the result of the asynchronous operation.
30922// If the operation has not completed it will return an error.
30923func (future *VpnSitesCreateOrUpdateFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
30924	var done bool
30925	done, err = future.DoneWithContext(context.Background(), client)
30926	if err != nil {
30927		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30928		return
30929	}
30930	if !done {
30931		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
30932		return
30933	}
30934	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30935	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
30936		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
30937		if err != nil {
30938			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
30939		}
30940	}
30941	return
30942}
30943
30944// VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
30945// operation.
30946type VpnSitesDeleteFuture struct {
30947	azure.Future
30948}
30949
30950// Result returns the result of the asynchronous operation.
30951// If the operation has not completed it will return an error.
30952func (future *VpnSitesDeleteFuture) Result(client VpnSitesClient) (ar autorest.Response, err error) {
30953	var done bool
30954	done, err = future.DoneWithContext(context.Background(), client)
30955	if err != nil {
30956		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
30957		return
30958	}
30959	if !done {
30960		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
30961		return
30962	}
30963	ar.Response = future.Response()
30964	return
30965}
30966
30967// VpnSitesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
30968// operation.
30969type VpnSitesUpdateTagsFuture struct {
30970	azure.Future
30971}
30972
30973// Result returns the result of the asynchronous operation.
30974// If the operation has not completed it will return an error.
30975func (future *VpnSitesUpdateTagsFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
30976	var done bool
30977	done, err = future.DoneWithContext(context.Background(), client)
30978	if err != nil {
30979		err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
30980		return
30981	}
30982	if !done {
30983		err = azure.NewAsyncOpIncompleteError("network.VpnSitesUpdateTagsFuture")
30984		return
30985	}
30986	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30987	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
30988		vs, err = client.UpdateTagsResponder(vs.Response.Response)
30989		if err != nil {
30990			err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", vs.Response.Response, "Failure responding to request")
30991		}
30992	}
30993	return
30994}
30995
30996// Watcher network watcher in a resource group.
30997type Watcher struct {
30998	autorest.Response `json:"-"`
30999	// Etag - A unique read-only string that changes whenever the resource is updated.
31000	Etag *string `json:"etag,omitempty"`
31001	// WatcherPropertiesFormat - Properties of the network watcher.
31002	*WatcherPropertiesFormat `json:"properties,omitempty"`
31003	// ID - Resource ID.
31004	ID *string `json:"id,omitempty"`
31005	// Name - READ-ONLY; Resource name.
31006	Name *string `json:"name,omitempty"`
31007	// Type - READ-ONLY; Resource type.
31008	Type *string `json:"type,omitempty"`
31009	// Location - Resource location.
31010	Location *string `json:"location,omitempty"`
31011	// Tags - Resource tags.
31012	Tags map[string]*string `json:"tags"`
31013}
31014
31015// MarshalJSON is the custom marshaler for Watcher.
31016func (w Watcher) MarshalJSON() ([]byte, error) {
31017	objectMap := make(map[string]interface{})
31018	if w.Etag != nil {
31019		objectMap["etag"] = w.Etag
31020	}
31021	if w.WatcherPropertiesFormat != nil {
31022		objectMap["properties"] = w.WatcherPropertiesFormat
31023	}
31024	if w.ID != nil {
31025		objectMap["id"] = w.ID
31026	}
31027	if w.Location != nil {
31028		objectMap["location"] = w.Location
31029	}
31030	if w.Tags != nil {
31031		objectMap["tags"] = w.Tags
31032	}
31033	return json.Marshal(objectMap)
31034}
31035
31036// UnmarshalJSON is the custom unmarshaler for Watcher struct.
31037func (w *Watcher) UnmarshalJSON(body []byte) error {
31038	var m map[string]*json.RawMessage
31039	err := json.Unmarshal(body, &m)
31040	if err != nil {
31041		return err
31042	}
31043	for k, v := range m {
31044		switch k {
31045		case "etag":
31046			if v != nil {
31047				var etag string
31048				err = json.Unmarshal(*v, &etag)
31049				if err != nil {
31050					return err
31051				}
31052				w.Etag = &etag
31053			}
31054		case "properties":
31055			if v != nil {
31056				var watcherPropertiesFormat WatcherPropertiesFormat
31057				err = json.Unmarshal(*v, &watcherPropertiesFormat)
31058				if err != nil {
31059					return err
31060				}
31061				w.WatcherPropertiesFormat = &watcherPropertiesFormat
31062			}
31063		case "id":
31064			if v != nil {
31065				var ID string
31066				err = json.Unmarshal(*v, &ID)
31067				if err != nil {
31068					return err
31069				}
31070				w.ID = &ID
31071			}
31072		case "name":
31073			if v != nil {
31074				var name string
31075				err = json.Unmarshal(*v, &name)
31076				if err != nil {
31077					return err
31078				}
31079				w.Name = &name
31080			}
31081		case "type":
31082			if v != nil {
31083				var typeVar string
31084				err = json.Unmarshal(*v, &typeVar)
31085				if err != nil {
31086					return err
31087				}
31088				w.Type = &typeVar
31089			}
31090		case "location":
31091			if v != nil {
31092				var location string
31093				err = json.Unmarshal(*v, &location)
31094				if err != nil {
31095					return err
31096				}
31097				w.Location = &location
31098			}
31099		case "tags":
31100			if v != nil {
31101				var tags map[string]*string
31102				err = json.Unmarshal(*v, &tags)
31103				if err != nil {
31104					return err
31105				}
31106				w.Tags = tags
31107			}
31108		}
31109	}
31110
31111	return nil
31112}
31113
31114// WatcherListResult response for ListNetworkWatchers API service call.
31115type WatcherListResult struct {
31116	autorest.Response `json:"-"`
31117	// Value - List of network watcher resources.
31118	Value *[]Watcher `json:"value,omitempty"`
31119}
31120
31121// WatcherPropertiesFormat the network watcher properties.
31122type WatcherPropertiesFormat struct {
31123	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31124	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31125}
31126
31127// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
31128// long-running operation.
31129type WatchersCheckConnectivityFuture struct {
31130	azure.Future
31131}
31132
31133// Result returns the result of the asynchronous operation.
31134// If the operation has not completed it will return an error.
31135func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
31136	var done bool
31137	done, err = future.DoneWithContext(context.Background(), client)
31138	if err != nil {
31139		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
31140		return
31141	}
31142	if !done {
31143		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
31144		return
31145	}
31146	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31147	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
31148		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
31149		if err != nil {
31150			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
31151		}
31152	}
31153	return
31154}
31155
31156// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
31157// operation.
31158type WatchersDeleteFuture struct {
31159	azure.Future
31160}
31161
31162// Result returns the result of the asynchronous operation.
31163// If the operation has not completed it will return an error.
31164func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
31165	var done bool
31166	done, err = future.DoneWithContext(context.Background(), client)
31167	if err != nil {
31168		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
31169		return
31170	}
31171	if !done {
31172		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
31173		return
31174	}
31175	ar.Response = future.Response()
31176	return
31177}
31178
31179// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
31180// long-running operation.
31181type WatchersGetAzureReachabilityReportFuture struct {
31182	azure.Future
31183}
31184
31185// Result returns the result of the asynchronous operation.
31186// If the operation has not completed it will return an error.
31187func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
31188	var done bool
31189	done, err = future.DoneWithContext(context.Background(), client)
31190	if err != nil {
31191		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
31192		return
31193	}
31194	if !done {
31195		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
31196		return
31197	}
31198	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31199	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
31200		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
31201		if err != nil {
31202			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
31203		}
31204	}
31205	return
31206}
31207
31208// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
31209// long-running operation.
31210type WatchersGetFlowLogStatusFuture struct {
31211	azure.Future
31212}
31213
31214// Result returns the result of the asynchronous operation.
31215// If the operation has not completed it will return an error.
31216func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
31217	var done bool
31218	done, err = future.DoneWithContext(context.Background(), client)
31219	if err != nil {
31220		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
31221		return
31222	}
31223	if !done {
31224		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
31225		return
31226	}
31227	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31228	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
31229		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
31230		if err != nil {
31231			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
31232		}
31233	}
31234	return
31235}
31236
31237// WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
31238// of a long-running operation.
31239type WatchersGetNetworkConfigurationDiagnosticFuture struct {
31240	azure.Future
31241}
31242
31243// Result returns the result of the asynchronous operation.
31244// If the operation has not completed it will return an error.
31245func (future *WatchersGetNetworkConfigurationDiagnosticFuture) Result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
31246	var done bool
31247	done, err = future.DoneWithContext(context.Background(), client)
31248	if err != nil {
31249		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
31250		return
31251	}
31252	if !done {
31253		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
31254		return
31255	}
31256	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31257	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
31258		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
31259		if err != nil {
31260			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
31261		}
31262	}
31263	return
31264}
31265
31266// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
31267// operation.
31268type WatchersGetNextHopFuture struct {
31269	azure.Future
31270}
31271
31272// Result returns the result of the asynchronous operation.
31273// If the operation has not completed it will return an error.
31274func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
31275	var done bool
31276	done, err = future.DoneWithContext(context.Background(), client)
31277	if err != nil {
31278		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
31279		return
31280	}
31281	if !done {
31282		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
31283		return
31284	}
31285	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31286	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
31287		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
31288		if err != nil {
31289			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
31290		}
31291	}
31292	return
31293}
31294
31295// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
31296// long-running operation.
31297type WatchersGetTroubleshootingFuture struct {
31298	azure.Future
31299}
31300
31301// Result returns the result of the asynchronous operation.
31302// If the operation has not completed it will return an error.
31303func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
31304	var done bool
31305	done, err = future.DoneWithContext(context.Background(), client)
31306	if err != nil {
31307		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
31308		return
31309	}
31310	if !done {
31311		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
31312		return
31313	}
31314	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31315	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
31316		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
31317		if err != nil {
31318			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
31319		}
31320	}
31321	return
31322}
31323
31324// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
31325// long-running operation.
31326type WatchersGetTroubleshootingResultFuture struct {
31327	azure.Future
31328}
31329
31330// Result returns the result of the asynchronous operation.
31331// If the operation has not completed it will return an error.
31332func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
31333	var done bool
31334	done, err = future.DoneWithContext(context.Background(), client)
31335	if err != nil {
31336		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
31337		return
31338	}
31339	if !done {
31340		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
31341		return
31342	}
31343	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31344	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
31345		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
31346		if err != nil {
31347			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
31348		}
31349	}
31350	return
31351}
31352
31353// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
31354// long-running operation.
31355type WatchersGetVMSecurityRulesFuture struct {
31356	azure.Future
31357}
31358
31359// Result returns the result of the asynchronous operation.
31360// If the operation has not completed it will return an error.
31361func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
31362	var done bool
31363	done, err = future.DoneWithContext(context.Background(), client)
31364	if err != nil {
31365		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
31366		return
31367	}
31368	if !done {
31369		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
31370		return
31371	}
31372	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31373	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
31374		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
31375		if err != nil {
31376			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
31377		}
31378	}
31379	return
31380}
31381
31382// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
31383// long-running operation.
31384type WatchersListAvailableProvidersFuture struct {
31385	azure.Future
31386}
31387
31388// Result returns the result of the asynchronous operation.
31389// If the operation has not completed it will return an error.
31390func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
31391	var done bool
31392	done, err = future.DoneWithContext(context.Background(), client)
31393	if err != nil {
31394		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
31395		return
31396	}
31397	if !done {
31398		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
31399		return
31400	}
31401	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31402	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
31403		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
31404		if err != nil {
31405			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
31406		}
31407	}
31408	return
31409}
31410
31411// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
31412// long-running operation.
31413type WatchersSetFlowLogConfigurationFuture struct {
31414	azure.Future
31415}
31416
31417// Result returns the result of the asynchronous operation.
31418// If the operation has not completed it will return an error.
31419func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
31420	var done bool
31421	done, err = future.DoneWithContext(context.Background(), client)
31422	if err != nil {
31423		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
31424		return
31425	}
31426	if !done {
31427		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
31428		return
31429	}
31430	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31431	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
31432		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
31433		if err != nil {
31434			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
31435		}
31436	}
31437	return
31438}
31439
31440// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
31441// operation.
31442type WatchersVerifyIPFlowFuture struct {
31443	azure.Future
31444}
31445
31446// Result returns the result of the asynchronous operation.
31447// If the operation has not completed it will return an error.
31448func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
31449	var done bool
31450	done, err = future.DoneWithContext(context.Background(), client)
31451	if err != nil {
31452		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
31453		return
31454	}
31455	if !done {
31456		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
31457		return
31458	}
31459	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31460	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
31461		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
31462		if err != nil {
31463			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
31464		}
31465	}
31466	return
31467}
31468
31469// WebApplicationFirewallCustomRule defines contents of a web application rule.
31470type WebApplicationFirewallCustomRule struct {
31471	// Name - Gets name of the resource that is unique within a policy. This name can be used to access the resource.
31472	Name *string `json:"name,omitempty"`
31473	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
31474	Etag *string `json:"etag,omitempty"`
31475	// Priority - Describes priority of the rule. Rules with a lower value will be evaluated before rules with a higher value.
31476	Priority *int32 `json:"priority,omitempty"`
31477	// RuleType - Describes type of rule. Possible values include: 'WebApplicationFirewallRuleTypeMatchRule', 'WebApplicationFirewallRuleTypeInvalid'
31478	RuleType WebApplicationFirewallRuleType `json:"ruleType,omitempty"`
31479	// MatchConditions - List of match conditions.
31480	MatchConditions *[]MatchCondition `json:"matchConditions,omitempty"`
31481	// Action - Type of Actions. Possible values include: 'WebApplicationFirewallActionAllow', 'WebApplicationFirewallActionBlock', 'WebApplicationFirewallActionLog'
31482	Action WebApplicationFirewallAction `json:"action,omitempty"`
31483}
31484
31485// WebApplicationFirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
31486// long-running operation.
31487type WebApplicationFirewallPoliciesDeleteFuture struct {
31488	azure.Future
31489}
31490
31491// Result returns the result of the asynchronous operation.
31492// If the operation has not completed it will return an error.
31493func (future *WebApplicationFirewallPoliciesDeleteFuture) Result(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
31494	var done bool
31495	done, err = future.DoneWithContext(context.Background(), client)
31496	if err != nil {
31497		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
31498		return
31499	}
31500	if !done {
31501		err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
31502		return
31503	}
31504	ar.Response = future.Response()
31505	return
31506}
31507
31508// WebApplicationFirewallPolicy defines web application firewall policy.
31509type WebApplicationFirewallPolicy struct {
31510	autorest.Response `json:"-"`
31511	// WebApplicationFirewallPolicyPropertiesFormat - Properties of the web application firewall policy.
31512	*WebApplicationFirewallPolicyPropertiesFormat `json:"properties,omitempty"`
31513	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
31514	Etag *string `json:"etag,omitempty"`
31515	// ID - Resource ID.
31516	ID *string `json:"id,omitempty"`
31517	// Name - READ-ONLY; Resource name.
31518	Name *string `json:"name,omitempty"`
31519	// Type - READ-ONLY; Resource type.
31520	Type *string `json:"type,omitempty"`
31521	// Location - Resource location.
31522	Location *string `json:"location,omitempty"`
31523	// Tags - Resource tags.
31524	Tags map[string]*string `json:"tags"`
31525}
31526
31527// MarshalJSON is the custom marshaler for WebApplicationFirewallPolicy.
31528func (wafp WebApplicationFirewallPolicy) MarshalJSON() ([]byte, error) {
31529	objectMap := make(map[string]interface{})
31530	if wafp.WebApplicationFirewallPolicyPropertiesFormat != nil {
31531		objectMap["properties"] = wafp.WebApplicationFirewallPolicyPropertiesFormat
31532	}
31533	if wafp.Etag != nil {
31534		objectMap["etag"] = wafp.Etag
31535	}
31536	if wafp.ID != nil {
31537		objectMap["id"] = wafp.ID
31538	}
31539	if wafp.Location != nil {
31540		objectMap["location"] = wafp.Location
31541	}
31542	if wafp.Tags != nil {
31543		objectMap["tags"] = wafp.Tags
31544	}
31545	return json.Marshal(objectMap)
31546}
31547
31548// UnmarshalJSON is the custom unmarshaler for WebApplicationFirewallPolicy struct.
31549func (wafp *WebApplicationFirewallPolicy) UnmarshalJSON(body []byte) error {
31550	var m map[string]*json.RawMessage
31551	err := json.Unmarshal(body, &m)
31552	if err != nil {
31553		return err
31554	}
31555	for k, v := range m {
31556		switch k {
31557		case "properties":
31558			if v != nil {
31559				var webApplicationFirewallPolicyPropertiesFormat WebApplicationFirewallPolicyPropertiesFormat
31560				err = json.Unmarshal(*v, &webApplicationFirewallPolicyPropertiesFormat)
31561				if err != nil {
31562					return err
31563				}
31564				wafp.WebApplicationFirewallPolicyPropertiesFormat = &webApplicationFirewallPolicyPropertiesFormat
31565			}
31566		case "etag":
31567			if v != nil {
31568				var etag string
31569				err = json.Unmarshal(*v, &etag)
31570				if err != nil {
31571					return err
31572				}
31573				wafp.Etag = &etag
31574			}
31575		case "id":
31576			if v != nil {
31577				var ID string
31578				err = json.Unmarshal(*v, &ID)
31579				if err != nil {
31580					return err
31581				}
31582				wafp.ID = &ID
31583			}
31584		case "name":
31585			if v != nil {
31586				var name string
31587				err = json.Unmarshal(*v, &name)
31588				if err != nil {
31589					return err
31590				}
31591				wafp.Name = &name
31592			}
31593		case "type":
31594			if v != nil {
31595				var typeVar string
31596				err = json.Unmarshal(*v, &typeVar)
31597				if err != nil {
31598					return err
31599				}
31600				wafp.Type = &typeVar
31601			}
31602		case "location":
31603			if v != nil {
31604				var location string
31605				err = json.Unmarshal(*v, &location)
31606				if err != nil {
31607					return err
31608				}
31609				wafp.Location = &location
31610			}
31611		case "tags":
31612			if v != nil {
31613				var tags map[string]*string
31614				err = json.Unmarshal(*v, &tags)
31615				if err != nil {
31616					return err
31617				}
31618				wafp.Tags = tags
31619			}
31620		}
31621	}
31622
31623	return nil
31624}
31625
31626// WebApplicationFirewallPolicyListResult result of the request to list WebApplicationFirewallPolicies. It
31627// contains a list of WebApplicationFirewallPolicy objects and a URL link to get the next set of results.
31628type WebApplicationFirewallPolicyListResult struct {
31629	autorest.Response `json:"-"`
31630	// Value - READ-ONLY; List of WebApplicationFirewallPolicies within a resource group.
31631	Value *[]WebApplicationFirewallPolicy `json:"value,omitempty"`
31632	// NextLink - READ-ONLY; URL to get the next set of WebApplicationFirewallPolicy objects if there are any.
31633	NextLink *string `json:"nextLink,omitempty"`
31634}
31635
31636// WebApplicationFirewallPolicyListResultIterator provides access to a complete listing of
31637// WebApplicationFirewallPolicy values.
31638type WebApplicationFirewallPolicyListResultIterator struct {
31639	i    int
31640	page WebApplicationFirewallPolicyListResultPage
31641}
31642
31643// NextWithContext advances to the next value.  If there was an error making
31644// the request the iterator does not advance and the error is returned.
31645func (iter *WebApplicationFirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
31646	if tracing.IsEnabled() {
31647		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultIterator.NextWithContext")
31648		defer func() {
31649			sc := -1
31650			if iter.Response().Response.Response != nil {
31651				sc = iter.Response().Response.Response.StatusCode
31652			}
31653			tracing.EndSpan(ctx, sc, err)
31654		}()
31655	}
31656	iter.i++
31657	if iter.i < len(iter.page.Values()) {
31658		return nil
31659	}
31660	err = iter.page.NextWithContext(ctx)
31661	if err != nil {
31662		iter.i--
31663		return err
31664	}
31665	iter.i = 0
31666	return nil
31667}
31668
31669// Next advances to the next value.  If there was an error making
31670// the request the iterator does not advance and the error is returned.
31671// Deprecated: Use NextWithContext() instead.
31672func (iter *WebApplicationFirewallPolicyListResultIterator) Next() error {
31673	return iter.NextWithContext(context.Background())
31674}
31675
31676// NotDone returns true if the enumeration should be started or is not yet complete.
31677func (iter WebApplicationFirewallPolicyListResultIterator) NotDone() bool {
31678	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31679}
31680
31681// Response returns the raw server response from the last page request.
31682func (iter WebApplicationFirewallPolicyListResultIterator) Response() WebApplicationFirewallPolicyListResult {
31683	return iter.page.Response()
31684}
31685
31686// Value returns the current value or a zero-initialized value if the
31687// iterator has advanced beyond the end of the collection.
31688func (iter WebApplicationFirewallPolicyListResultIterator) Value() WebApplicationFirewallPolicy {
31689	if !iter.page.NotDone() {
31690		return WebApplicationFirewallPolicy{}
31691	}
31692	return iter.page.Values()[iter.i]
31693}
31694
31695// Creates a new instance of the WebApplicationFirewallPolicyListResultIterator type.
31696func NewWebApplicationFirewallPolicyListResultIterator(page WebApplicationFirewallPolicyListResultPage) WebApplicationFirewallPolicyListResultIterator {
31697	return WebApplicationFirewallPolicyListResultIterator{page: page}
31698}
31699
31700// IsEmpty returns true if the ListResult contains no values.
31701func (wafplr WebApplicationFirewallPolicyListResult) IsEmpty() bool {
31702	return wafplr.Value == nil || len(*wafplr.Value) == 0
31703}
31704
31705// webApplicationFirewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
31706// It returns nil if no more results exist.
31707func (wafplr WebApplicationFirewallPolicyListResult) webApplicationFirewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
31708	if wafplr.NextLink == nil || len(to.String(wafplr.NextLink)) < 1 {
31709		return nil, nil
31710	}
31711	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31712		autorest.AsJSON(),
31713		autorest.AsGet(),
31714		autorest.WithBaseURL(to.String(wafplr.NextLink)))
31715}
31716
31717// WebApplicationFirewallPolicyListResultPage contains a page of WebApplicationFirewallPolicy values.
31718type WebApplicationFirewallPolicyListResultPage struct {
31719	fn     func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)
31720	wafplr WebApplicationFirewallPolicyListResult
31721}
31722
31723// NextWithContext advances to the next page of values.  If there was an error making
31724// the request the page does not advance and the error is returned.
31725func (page *WebApplicationFirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
31726	if tracing.IsEnabled() {
31727		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultPage.NextWithContext")
31728		defer func() {
31729			sc := -1
31730			if page.Response().Response.Response != nil {
31731				sc = page.Response().Response.Response.StatusCode
31732			}
31733			tracing.EndSpan(ctx, sc, err)
31734		}()
31735	}
31736	next, err := page.fn(ctx, page.wafplr)
31737	if err != nil {
31738		return err
31739	}
31740	page.wafplr = next
31741	return nil
31742}
31743
31744// Next advances to the next page of values.  If there was an error making
31745// the request the page does not advance and the error is returned.
31746// Deprecated: Use NextWithContext() instead.
31747func (page *WebApplicationFirewallPolicyListResultPage) Next() error {
31748	return page.NextWithContext(context.Background())
31749}
31750
31751// NotDone returns true if the page enumeration should be started or is not yet complete.
31752func (page WebApplicationFirewallPolicyListResultPage) NotDone() bool {
31753	return !page.wafplr.IsEmpty()
31754}
31755
31756// Response returns the raw server response from the last page request.
31757func (page WebApplicationFirewallPolicyListResultPage) Response() WebApplicationFirewallPolicyListResult {
31758	return page.wafplr
31759}
31760
31761// Values returns the slice of values for the current page or nil if there are no values.
31762func (page WebApplicationFirewallPolicyListResultPage) Values() []WebApplicationFirewallPolicy {
31763	if page.wafplr.IsEmpty() {
31764		return nil
31765	}
31766	return *page.wafplr.Value
31767}
31768
31769// Creates a new instance of the WebApplicationFirewallPolicyListResultPage type.
31770func NewWebApplicationFirewallPolicyListResultPage(getNextPage func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)) WebApplicationFirewallPolicyListResultPage {
31771	return WebApplicationFirewallPolicyListResultPage{fn: getNextPage}
31772}
31773
31774// WebApplicationFirewallPolicyPropertiesFormat defines web application firewall policy properties.
31775type WebApplicationFirewallPolicyPropertiesFormat struct {
31776	// PolicySettings - Describes policySettings for policy.
31777	PolicySettings *PolicySettings `json:"policySettings,omitempty"`
31778	// CustomRules - Describes custom rules inside the policy.
31779	CustomRules *[]WebApplicationFirewallCustomRule `json:"customRules,omitempty"`
31780	// ApplicationGateways - READ-ONLY; A collection of references to application gateways.
31781	ApplicationGateways *[]ApplicationGateway `json:"applicationGateways,omitempty"`
31782	// ProvisioningState - READ-ONLY; Provisioning state of the WebApplicationFirewallPolicy.
31783	ProvisioningState *string `json:"provisioningState,omitempty"`
31784	// ResourceState - READ-ONLY; Resource status of the policy. Possible values include: 'WebApplicationFirewallPolicyResourceStateCreating', 'WebApplicationFirewallPolicyResourceStateEnabling', 'WebApplicationFirewallPolicyResourceStateEnabled', 'WebApplicationFirewallPolicyResourceStateDisabling', 'WebApplicationFirewallPolicyResourceStateDisabled', 'WebApplicationFirewallPolicyResourceStateDeleting'
31785	ResourceState WebApplicationFirewallPolicyResourceState `json:"resourceState,omitempty"`
31786}
31787