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/2018-10-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// BgpPeerState enumerates the values for bgp peer state.
457type BgpPeerState string
458
459const (
460	// BgpPeerStateConnected ...
461	BgpPeerStateConnected BgpPeerState = "Connected"
462	// BgpPeerStateConnecting ...
463	BgpPeerStateConnecting BgpPeerState = "Connecting"
464	// BgpPeerStateIdle ...
465	BgpPeerStateIdle BgpPeerState = "Idle"
466	// BgpPeerStateStopped ...
467	BgpPeerStateStopped BgpPeerState = "Stopped"
468	// BgpPeerStateUnknown ...
469	BgpPeerStateUnknown BgpPeerState = "Unknown"
470)
471
472// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
473func PossibleBgpPeerStateValues() []BgpPeerState {
474	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
475}
476
477// CircuitConnectionStatus enumerates the values for circuit connection status.
478type CircuitConnectionStatus string
479
480const (
481	// Connected ...
482	Connected CircuitConnectionStatus = "Connected"
483	// Connecting ...
484	Connecting CircuitConnectionStatus = "Connecting"
485	// Disconnected ...
486	Disconnected CircuitConnectionStatus = "Disconnected"
487)
488
489// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
490func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
491	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
492}
493
494// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
495type ConnectionMonitorSourceStatus string
496
497const (
498	// Active ...
499	Active ConnectionMonitorSourceStatus = "Active"
500	// Inactive ...
501	Inactive ConnectionMonitorSourceStatus = "Inactive"
502	// Uknown ...
503	Uknown ConnectionMonitorSourceStatus = "Uknown"
504)
505
506// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
507func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
508	return []ConnectionMonitorSourceStatus{Active, Inactive, Uknown}
509}
510
511// ConnectionState enumerates the values for connection state.
512type ConnectionState string
513
514const (
515	// ConnectionStateReachable ...
516	ConnectionStateReachable ConnectionState = "Reachable"
517	// ConnectionStateUnknown ...
518	ConnectionStateUnknown ConnectionState = "Unknown"
519	// ConnectionStateUnreachable ...
520	ConnectionStateUnreachable ConnectionState = "Unreachable"
521)
522
523// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
524func PossibleConnectionStateValues() []ConnectionState {
525	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
526}
527
528// ConnectionStatus enumerates the values for connection status.
529type ConnectionStatus string
530
531const (
532	// ConnectionStatusConnected ...
533	ConnectionStatusConnected ConnectionStatus = "Connected"
534	// ConnectionStatusDegraded ...
535	ConnectionStatusDegraded ConnectionStatus = "Degraded"
536	// ConnectionStatusDisconnected ...
537	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
538	// ConnectionStatusUnknown ...
539	ConnectionStatusUnknown ConnectionStatus = "Unknown"
540)
541
542// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
543func PossibleConnectionStatusValues() []ConnectionStatus {
544	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
545}
546
547// DhGroup enumerates the values for dh group.
548type DhGroup string
549
550const (
551	// DHGroup1 ...
552	DHGroup1 DhGroup = "DHGroup1"
553	// DHGroup14 ...
554	DHGroup14 DhGroup = "DHGroup14"
555	// DHGroup2 ...
556	DHGroup2 DhGroup = "DHGroup2"
557	// DHGroup2048 ...
558	DHGroup2048 DhGroup = "DHGroup2048"
559	// DHGroup24 ...
560	DHGroup24 DhGroup = "DHGroup24"
561	// ECP256 ...
562	ECP256 DhGroup = "ECP256"
563	// ECP384 ...
564	ECP384 DhGroup = "ECP384"
565	// None ...
566	None DhGroup = "None"
567)
568
569// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
570func PossibleDhGroupValues() []DhGroup {
571	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
572}
573
574// Direction enumerates the values for direction.
575type Direction string
576
577const (
578	// Inbound ...
579	Inbound Direction = "Inbound"
580	// Outbound ...
581	Outbound Direction = "Outbound"
582)
583
584// PossibleDirectionValues returns an array of possible values for the Direction const type.
585func PossibleDirectionValues() []Direction {
586	return []Direction{Inbound, Outbound}
587}
588
589// EffectiveRouteSource enumerates the values for effective route source.
590type EffectiveRouteSource string
591
592const (
593	// EffectiveRouteSourceDefault ...
594	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
595	// EffectiveRouteSourceUnknown ...
596	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
597	// EffectiveRouteSourceUser ...
598	EffectiveRouteSourceUser EffectiveRouteSource = "User"
599	// EffectiveRouteSourceVirtualNetworkGateway ...
600	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
601)
602
603// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
604func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
605	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
606}
607
608// EffectiveRouteState enumerates the values for effective route state.
609type EffectiveRouteState string
610
611const (
612	// EffectiveRouteStateActive ...
613	EffectiveRouteStateActive EffectiveRouteState = "Active"
614	// EffectiveRouteStateInvalid ...
615	EffectiveRouteStateInvalid EffectiveRouteState = "Invalid"
616)
617
618// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
619func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
620	return []EffectiveRouteState{EffectiveRouteStateActive, EffectiveRouteStateInvalid}
621}
622
623// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
624type EffectiveSecurityRuleProtocol string
625
626const (
627	// EffectiveSecurityRuleProtocolAll ...
628	EffectiveSecurityRuleProtocolAll EffectiveSecurityRuleProtocol = "All"
629	// EffectiveSecurityRuleProtocolTCP ...
630	EffectiveSecurityRuleProtocolTCP EffectiveSecurityRuleProtocol = "Tcp"
631	// EffectiveSecurityRuleProtocolUDP ...
632	EffectiveSecurityRuleProtocolUDP EffectiveSecurityRuleProtocol = "Udp"
633)
634
635// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
636func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
637	return []EffectiveSecurityRuleProtocol{EffectiveSecurityRuleProtocolAll, EffectiveSecurityRuleProtocolTCP, EffectiveSecurityRuleProtocolUDP}
638}
639
640// EvaluationState enumerates the values for evaluation state.
641type EvaluationState string
642
643const (
644	// Completed ...
645	Completed EvaluationState = "Completed"
646	// InProgress ...
647	InProgress EvaluationState = "InProgress"
648	// NotStarted ...
649	NotStarted EvaluationState = "NotStarted"
650)
651
652// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
653func PossibleEvaluationStateValues() []EvaluationState {
654	return []EvaluationState{Completed, InProgress, NotStarted}
655}
656
657// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
658// peering advertised public prefix state.
659type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
660
661const (
662	// Configured ...
663	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
664	// Configuring ...
665	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
666	// NotConfigured ...
667	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
668	// ValidationNeeded ...
669	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
670)
671
672// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
673func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
674	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
675}
676
677// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
678type ExpressRouteCircuitPeeringState string
679
680const (
681	// ExpressRouteCircuitPeeringStateDisabled ...
682	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
683	// ExpressRouteCircuitPeeringStateEnabled ...
684	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
685)
686
687// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
688func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
689	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
690}
691
692// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
693type ExpressRouteCircuitSkuFamily string
694
695const (
696	// MeteredData ...
697	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
698	// UnlimitedData ...
699	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
700)
701
702// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
703func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
704	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
705}
706
707// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
708type ExpressRouteCircuitSkuTier string
709
710const (
711	// ExpressRouteCircuitSkuTierBasic ...
712	ExpressRouteCircuitSkuTierBasic ExpressRouteCircuitSkuTier = "Basic"
713	// ExpressRouteCircuitSkuTierPremium ...
714	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
715	// ExpressRouteCircuitSkuTierStandard ...
716	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
717)
718
719// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
720func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
721	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierBasic, ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
722}
723
724// ExpressRouteLinkAdminState enumerates the values for express route link admin state.
725type ExpressRouteLinkAdminState string
726
727const (
728	// ExpressRouteLinkAdminStateDisabled ...
729	ExpressRouteLinkAdminStateDisabled ExpressRouteLinkAdminState = "Disabled"
730	// ExpressRouteLinkAdminStateEnabled ...
731	ExpressRouteLinkAdminStateEnabled ExpressRouteLinkAdminState = "Enabled"
732)
733
734// PossibleExpressRouteLinkAdminStateValues returns an array of possible values for the ExpressRouteLinkAdminState const type.
735func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState {
736	return []ExpressRouteLinkAdminState{ExpressRouteLinkAdminStateDisabled, ExpressRouteLinkAdminStateEnabled}
737}
738
739// ExpressRouteLinkConnectorType enumerates the values for express route link connector type.
740type ExpressRouteLinkConnectorType string
741
742const (
743	// LC ...
744	LC ExpressRouteLinkConnectorType = "LC"
745	// SC ...
746	SC ExpressRouteLinkConnectorType = "SC"
747)
748
749// PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type.
750func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType {
751	return []ExpressRouteLinkConnectorType{LC, SC}
752}
753
754// ExpressRoutePeeringState enumerates the values for express route peering state.
755type ExpressRoutePeeringState string
756
757const (
758	// ExpressRoutePeeringStateDisabled ...
759	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
760	// ExpressRoutePeeringStateEnabled ...
761	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
762)
763
764// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
765func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
766	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
767}
768
769// ExpressRoutePeeringType enumerates the values for express route peering type.
770type ExpressRoutePeeringType string
771
772const (
773	// AzurePrivatePeering ...
774	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
775	// AzurePublicPeering ...
776	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
777	// MicrosoftPeering ...
778	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
779)
780
781// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
782func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
783	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
784}
785
786// ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation.
787type ExpressRoutePortsEncapsulation string
788
789const (
790	// Dot1Q ...
791	Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q"
792	// QinQ ...
793	QinQ ExpressRoutePortsEncapsulation = "QinQ"
794)
795
796// PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type.
797func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation {
798	return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ}
799}
800
801// FlowLogFormatType enumerates the values for flow log format type.
802type FlowLogFormatType string
803
804const (
805	// JSON ...
806	JSON FlowLogFormatType = "JSON"
807)
808
809// PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type.
810func PossibleFlowLogFormatTypeValues() []FlowLogFormatType {
811	return []FlowLogFormatType{JSON}
812}
813
814// HTTPMethod enumerates the values for http method.
815type HTTPMethod string
816
817const (
818	// Get ...
819	Get HTTPMethod = "Get"
820)
821
822// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
823func PossibleHTTPMethodValues() []HTTPMethod {
824	return []HTTPMethod{Get}
825}
826
827// HubVirtualNetworkConnectionStatus enumerates the values for hub virtual network connection status.
828type HubVirtualNetworkConnectionStatus string
829
830const (
831	// HubVirtualNetworkConnectionStatusConnected ...
832	HubVirtualNetworkConnectionStatusConnected HubVirtualNetworkConnectionStatus = "Connected"
833	// HubVirtualNetworkConnectionStatusConnecting ...
834	HubVirtualNetworkConnectionStatusConnecting HubVirtualNetworkConnectionStatus = "Connecting"
835	// HubVirtualNetworkConnectionStatusNotConnected ...
836	HubVirtualNetworkConnectionStatusNotConnected HubVirtualNetworkConnectionStatus = "NotConnected"
837	// HubVirtualNetworkConnectionStatusUnknown ...
838	HubVirtualNetworkConnectionStatusUnknown HubVirtualNetworkConnectionStatus = "Unknown"
839)
840
841// PossibleHubVirtualNetworkConnectionStatusValues returns an array of possible values for the HubVirtualNetworkConnectionStatus const type.
842func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnectionStatus {
843	return []HubVirtualNetworkConnectionStatus{HubVirtualNetworkConnectionStatusConnected, HubVirtualNetworkConnectionStatusConnecting, HubVirtualNetworkConnectionStatusNotConnected, HubVirtualNetworkConnectionStatusUnknown}
844}
845
846// IkeEncryption enumerates the values for ike encryption.
847type IkeEncryption string
848
849const (
850	// AES128 ...
851	AES128 IkeEncryption = "AES128"
852	// AES192 ...
853	AES192 IkeEncryption = "AES192"
854	// AES256 ...
855	AES256 IkeEncryption = "AES256"
856	// DES ...
857	DES IkeEncryption = "DES"
858	// DES3 ...
859	DES3 IkeEncryption = "DES3"
860	// GCMAES128 ...
861	GCMAES128 IkeEncryption = "GCMAES128"
862	// GCMAES256 ...
863	GCMAES256 IkeEncryption = "GCMAES256"
864)
865
866// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
867func PossibleIkeEncryptionValues() []IkeEncryption {
868	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
869}
870
871// IkeIntegrity enumerates the values for ike integrity.
872type IkeIntegrity string
873
874const (
875	// IkeIntegrityGCMAES128 ...
876	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
877	// IkeIntegrityGCMAES256 ...
878	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
879	// IkeIntegrityMD5 ...
880	IkeIntegrityMD5 IkeIntegrity = "MD5"
881	// IkeIntegritySHA1 ...
882	IkeIntegritySHA1 IkeIntegrity = "SHA1"
883	// IkeIntegritySHA256 ...
884	IkeIntegritySHA256 IkeIntegrity = "SHA256"
885	// IkeIntegritySHA384 ...
886	IkeIntegritySHA384 IkeIntegrity = "SHA384"
887)
888
889// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
890func PossibleIkeIntegrityValues() []IkeIntegrity {
891	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
892}
893
894// IPAllocationMethod enumerates the values for ip allocation method.
895type IPAllocationMethod string
896
897const (
898	// Dynamic ...
899	Dynamic IPAllocationMethod = "Dynamic"
900	// Static ...
901	Static IPAllocationMethod = "Static"
902)
903
904// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
905func PossibleIPAllocationMethodValues() []IPAllocationMethod {
906	return []IPAllocationMethod{Dynamic, Static}
907}
908
909// IPFlowProtocol enumerates the values for ip flow protocol.
910type IPFlowProtocol string
911
912const (
913	// IPFlowProtocolTCP ...
914	IPFlowProtocolTCP IPFlowProtocol = "TCP"
915	// IPFlowProtocolUDP ...
916	IPFlowProtocolUDP IPFlowProtocol = "UDP"
917)
918
919// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
920func PossibleIPFlowProtocolValues() []IPFlowProtocol {
921	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
922}
923
924// IpsecEncryption enumerates the values for ipsec encryption.
925type IpsecEncryption string
926
927const (
928	// IpsecEncryptionAES128 ...
929	IpsecEncryptionAES128 IpsecEncryption = "AES128"
930	// IpsecEncryptionAES192 ...
931	IpsecEncryptionAES192 IpsecEncryption = "AES192"
932	// IpsecEncryptionAES256 ...
933	IpsecEncryptionAES256 IpsecEncryption = "AES256"
934	// IpsecEncryptionDES ...
935	IpsecEncryptionDES IpsecEncryption = "DES"
936	// IpsecEncryptionDES3 ...
937	IpsecEncryptionDES3 IpsecEncryption = "DES3"
938	// IpsecEncryptionGCMAES128 ...
939	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
940	// IpsecEncryptionGCMAES192 ...
941	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
942	// IpsecEncryptionGCMAES256 ...
943	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
944	// IpsecEncryptionNone ...
945	IpsecEncryptionNone IpsecEncryption = "None"
946)
947
948// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
949func PossibleIpsecEncryptionValues() []IpsecEncryption {
950	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
951}
952
953// IpsecIntegrity enumerates the values for ipsec integrity.
954type IpsecIntegrity string
955
956const (
957	// IpsecIntegrityGCMAES128 ...
958	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
959	// IpsecIntegrityGCMAES192 ...
960	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
961	// IpsecIntegrityGCMAES256 ...
962	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
963	// IpsecIntegrityMD5 ...
964	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
965	// IpsecIntegritySHA1 ...
966	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
967	// IpsecIntegritySHA256 ...
968	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
969)
970
971// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
972func PossibleIpsecIntegrityValues() []IpsecIntegrity {
973	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
974}
975
976// IPVersion enumerates the values for ip version.
977type IPVersion string
978
979const (
980	// IPv4 ...
981	IPv4 IPVersion = "IPv4"
982	// IPv6 ...
983	IPv6 IPVersion = "IPv6"
984)
985
986// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
987func PossibleIPVersionValues() []IPVersion {
988	return []IPVersion{IPv4, IPv6}
989}
990
991// IssueType enumerates the values for issue type.
992type IssueType string
993
994const (
995	// IssueTypeAgentStopped ...
996	IssueTypeAgentStopped IssueType = "AgentStopped"
997	// IssueTypeDNSResolution ...
998	IssueTypeDNSResolution IssueType = "DnsResolution"
999	// IssueTypeGuestFirewall ...
1000	IssueTypeGuestFirewall IssueType = "GuestFirewall"
1001	// IssueTypeNetworkSecurityRule ...
1002	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
1003	// IssueTypePlatform ...
1004	IssueTypePlatform IssueType = "Platform"
1005	// IssueTypePortThrottled ...
1006	IssueTypePortThrottled IssueType = "PortThrottled"
1007	// IssueTypeSocketBind ...
1008	IssueTypeSocketBind IssueType = "SocketBind"
1009	// IssueTypeUnknown ...
1010	IssueTypeUnknown IssueType = "Unknown"
1011	// IssueTypeUserDefinedRoute ...
1012	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
1013)
1014
1015// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
1016func PossibleIssueTypeValues() []IssueType {
1017	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
1018}
1019
1020// LoadBalancerSkuName enumerates the values for load balancer sku name.
1021type LoadBalancerSkuName string
1022
1023const (
1024	// LoadBalancerSkuNameBasic ...
1025	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
1026	// LoadBalancerSkuNameStandard ...
1027	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
1028)
1029
1030// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
1031func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
1032	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
1033}
1034
1035// LoadDistribution enumerates the values for load distribution.
1036type LoadDistribution string
1037
1038const (
1039	// Default ...
1040	Default LoadDistribution = "Default"
1041	// SourceIP ...
1042	SourceIP LoadDistribution = "SourceIP"
1043	// SourceIPProtocol ...
1044	SourceIPProtocol LoadDistribution = "SourceIPProtocol"
1045)
1046
1047// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
1048func PossibleLoadDistributionValues() []LoadDistribution {
1049	return []LoadDistribution{Default, SourceIP, SourceIPProtocol}
1050}
1051
1052// NextHopType enumerates the values for next hop type.
1053type NextHopType string
1054
1055const (
1056	// NextHopTypeHyperNetGateway ...
1057	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
1058	// NextHopTypeInternet ...
1059	NextHopTypeInternet NextHopType = "Internet"
1060	// NextHopTypeNone ...
1061	NextHopTypeNone NextHopType = "None"
1062	// NextHopTypeVirtualAppliance ...
1063	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
1064	// NextHopTypeVirtualNetworkGateway ...
1065	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
1066	// NextHopTypeVnetLocal ...
1067	NextHopTypeVnetLocal NextHopType = "VnetLocal"
1068)
1069
1070// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
1071func PossibleNextHopTypeValues() []NextHopType {
1072	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
1073}
1074
1075// OfficeTrafficCategory enumerates the values for office traffic category.
1076type OfficeTrafficCategory string
1077
1078const (
1079	// OfficeTrafficCategoryAll ...
1080	OfficeTrafficCategoryAll OfficeTrafficCategory = "All"
1081	// OfficeTrafficCategoryNone ...
1082	OfficeTrafficCategoryNone OfficeTrafficCategory = "None"
1083	// OfficeTrafficCategoryOptimize ...
1084	OfficeTrafficCategoryOptimize OfficeTrafficCategory = "Optimize"
1085	// OfficeTrafficCategoryOptimizeAndAllow ...
1086	OfficeTrafficCategoryOptimizeAndAllow OfficeTrafficCategory = "OptimizeAndAllow"
1087)
1088
1089// PossibleOfficeTrafficCategoryValues returns an array of possible values for the OfficeTrafficCategory const type.
1090func PossibleOfficeTrafficCategoryValues() []OfficeTrafficCategory {
1091	return []OfficeTrafficCategory{OfficeTrafficCategoryAll, OfficeTrafficCategoryNone, OfficeTrafficCategoryOptimize, OfficeTrafficCategoryOptimizeAndAllow}
1092}
1093
1094// OperationStatus enumerates the values for operation status.
1095type OperationStatus string
1096
1097const (
1098	// OperationStatusFailed ...
1099	OperationStatusFailed OperationStatus = "Failed"
1100	// OperationStatusInProgress ...
1101	OperationStatusInProgress OperationStatus = "InProgress"
1102	// OperationStatusSucceeded ...
1103	OperationStatusSucceeded OperationStatus = "Succeeded"
1104)
1105
1106// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
1107func PossibleOperationStatusValues() []OperationStatus {
1108	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
1109}
1110
1111// Origin enumerates the values for origin.
1112type Origin string
1113
1114const (
1115	// OriginInbound ...
1116	OriginInbound Origin = "Inbound"
1117	// OriginLocal ...
1118	OriginLocal Origin = "Local"
1119	// OriginOutbound ...
1120	OriginOutbound Origin = "Outbound"
1121)
1122
1123// PossibleOriginValues returns an array of possible values for the Origin const type.
1124func PossibleOriginValues() []Origin {
1125	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
1126}
1127
1128// PcError enumerates the values for pc error.
1129type PcError string
1130
1131const (
1132	// AgentStopped ...
1133	AgentStopped PcError = "AgentStopped"
1134	// CaptureFailed ...
1135	CaptureFailed PcError = "CaptureFailed"
1136	// InternalError ...
1137	InternalError PcError = "InternalError"
1138	// LocalFileFailed ...
1139	LocalFileFailed PcError = "LocalFileFailed"
1140	// StorageFailed ...
1141	StorageFailed PcError = "StorageFailed"
1142)
1143
1144// PossiblePcErrorValues returns an array of possible values for the PcError const type.
1145func PossiblePcErrorValues() []PcError {
1146	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
1147}
1148
1149// PcProtocol enumerates the values for pc protocol.
1150type PcProtocol string
1151
1152const (
1153	// PcProtocolAny ...
1154	PcProtocolAny PcProtocol = "Any"
1155	// PcProtocolTCP ...
1156	PcProtocolTCP PcProtocol = "TCP"
1157	// PcProtocolUDP ...
1158	PcProtocolUDP PcProtocol = "UDP"
1159)
1160
1161// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
1162func PossiblePcProtocolValues() []PcProtocol {
1163	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
1164}
1165
1166// PcStatus enumerates the values for pc status.
1167type PcStatus string
1168
1169const (
1170	// PcStatusError ...
1171	PcStatusError PcStatus = "Error"
1172	// PcStatusNotStarted ...
1173	PcStatusNotStarted PcStatus = "NotStarted"
1174	// PcStatusRunning ...
1175	PcStatusRunning PcStatus = "Running"
1176	// PcStatusStopped ...
1177	PcStatusStopped PcStatus = "Stopped"
1178	// PcStatusUnknown ...
1179	PcStatusUnknown PcStatus = "Unknown"
1180)
1181
1182// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
1183func PossiblePcStatusValues() []PcStatus {
1184	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
1185}
1186
1187// PfsGroup enumerates the values for pfs group.
1188type PfsGroup string
1189
1190const (
1191	// PfsGroupECP256 ...
1192	PfsGroupECP256 PfsGroup = "ECP256"
1193	// PfsGroupECP384 ...
1194	PfsGroupECP384 PfsGroup = "ECP384"
1195	// PfsGroupNone ...
1196	PfsGroupNone PfsGroup = "None"
1197	// PfsGroupPFS1 ...
1198	PfsGroupPFS1 PfsGroup = "PFS1"
1199	// PfsGroupPFS14 ...
1200	PfsGroupPFS14 PfsGroup = "PFS14"
1201	// PfsGroupPFS2 ...
1202	PfsGroupPFS2 PfsGroup = "PFS2"
1203	// PfsGroupPFS2048 ...
1204	PfsGroupPFS2048 PfsGroup = "PFS2048"
1205	// PfsGroupPFS24 ...
1206	PfsGroupPFS24 PfsGroup = "PFS24"
1207	// PfsGroupPFSMM ...
1208	PfsGroupPFSMM PfsGroup = "PFSMM"
1209)
1210
1211// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1212func PossiblePfsGroupValues() []PfsGroup {
1213	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1214}
1215
1216// ProbeProtocol enumerates the values for probe protocol.
1217type ProbeProtocol string
1218
1219const (
1220	// ProbeProtocolHTTP ...
1221	ProbeProtocolHTTP ProbeProtocol = "Http"
1222	// ProbeProtocolHTTPS ...
1223	ProbeProtocolHTTPS ProbeProtocol = "Https"
1224	// ProbeProtocolTCP ...
1225	ProbeProtocolTCP ProbeProtocol = "Tcp"
1226)
1227
1228// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1229func PossibleProbeProtocolValues() []ProbeProtocol {
1230	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1231}
1232
1233// ProcessorArchitecture enumerates the values for processor architecture.
1234type ProcessorArchitecture string
1235
1236const (
1237	// Amd64 ...
1238	Amd64 ProcessorArchitecture = "Amd64"
1239	// X86 ...
1240	X86 ProcessorArchitecture = "X86"
1241)
1242
1243// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1244func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1245	return []ProcessorArchitecture{Amd64, X86}
1246}
1247
1248// Protocol enumerates the values for protocol.
1249type Protocol string
1250
1251const (
1252	// ProtocolHTTP ...
1253	ProtocolHTTP Protocol = "Http"
1254	// ProtocolHTTPS ...
1255	ProtocolHTTPS Protocol = "Https"
1256	// ProtocolIcmp ...
1257	ProtocolIcmp Protocol = "Icmp"
1258	// ProtocolTCP ...
1259	ProtocolTCP Protocol = "Tcp"
1260)
1261
1262// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1263func PossibleProtocolValues() []Protocol {
1264	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1265}
1266
1267// Protocol1 enumerates the values for protocol 1.
1268type Protocol1 string
1269
1270const (
1271	// Protocol1All ...
1272	Protocol1All Protocol1 = "All"
1273	// Protocol1TCP ...
1274	Protocol1TCP Protocol1 = "Tcp"
1275	// Protocol1UDP ...
1276	Protocol1UDP Protocol1 = "Udp"
1277)
1278
1279// PossibleProtocol1Values returns an array of possible values for the Protocol1 const type.
1280func PossibleProtocol1Values() []Protocol1 {
1281	return []Protocol1{Protocol1All, Protocol1TCP, Protocol1UDP}
1282}
1283
1284// ProvisioningState enumerates the values for provisioning state.
1285type ProvisioningState string
1286
1287const (
1288	// Deleting ...
1289	Deleting ProvisioningState = "Deleting"
1290	// Failed ...
1291	Failed ProvisioningState = "Failed"
1292	// Succeeded ...
1293	Succeeded ProvisioningState = "Succeeded"
1294	// Updating ...
1295	Updating ProvisioningState = "Updating"
1296)
1297
1298// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1299func PossibleProvisioningStateValues() []ProvisioningState {
1300	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1301}
1302
1303// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1304type PublicIPAddressSkuName string
1305
1306const (
1307	// PublicIPAddressSkuNameBasic ...
1308	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1309	// PublicIPAddressSkuNameStandard ...
1310	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1311)
1312
1313// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1314func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1315	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1316}
1317
1318// PublicIPPrefixSkuName enumerates the values for public ip prefix sku name.
1319type PublicIPPrefixSkuName string
1320
1321const (
1322	// Standard ...
1323	Standard PublicIPPrefixSkuName = "Standard"
1324)
1325
1326// PossiblePublicIPPrefixSkuNameValues returns an array of possible values for the PublicIPPrefixSkuName const type.
1327func PossiblePublicIPPrefixSkuNameValues() []PublicIPPrefixSkuName {
1328	return []PublicIPPrefixSkuName{Standard}
1329}
1330
1331// ResourceIdentityType enumerates the values for resource identity type.
1332type ResourceIdentityType string
1333
1334const (
1335	// ResourceIdentityTypeNone ...
1336	ResourceIdentityTypeNone ResourceIdentityType = "None"
1337	// ResourceIdentityTypeSystemAssigned ...
1338	ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned"
1339	// ResourceIdentityTypeSystemAssignedUserAssigned ...
1340	ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned"
1341	// ResourceIdentityTypeUserAssigned ...
1342	ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned"
1343)
1344
1345// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type.
1346func PossibleResourceIdentityTypeValues() []ResourceIdentityType {
1347	return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned}
1348}
1349
1350// RouteNextHopType enumerates the values for route next hop type.
1351type RouteNextHopType string
1352
1353const (
1354	// RouteNextHopTypeInternet ...
1355	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1356	// RouteNextHopTypeNone ...
1357	RouteNextHopTypeNone RouteNextHopType = "None"
1358	// RouteNextHopTypeVirtualAppliance ...
1359	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1360	// RouteNextHopTypeVirtualNetworkGateway ...
1361	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1362	// RouteNextHopTypeVnetLocal ...
1363	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1364)
1365
1366// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1367func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1368	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1369}
1370
1371// SecurityRuleAccess enumerates the values for security rule access.
1372type SecurityRuleAccess string
1373
1374const (
1375	// SecurityRuleAccessAllow ...
1376	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1377	// SecurityRuleAccessDeny ...
1378	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1379)
1380
1381// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1382func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1383	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1384}
1385
1386// SecurityRuleDirection enumerates the values for security rule direction.
1387type SecurityRuleDirection string
1388
1389const (
1390	// SecurityRuleDirectionInbound ...
1391	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1392	// SecurityRuleDirectionOutbound ...
1393	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1394)
1395
1396// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1397func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1398	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1399}
1400
1401// SecurityRuleProtocol enumerates the values for security rule protocol.
1402type SecurityRuleProtocol string
1403
1404const (
1405	// SecurityRuleProtocolAsterisk ...
1406	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1407	// SecurityRuleProtocolTCP ...
1408	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1409	// SecurityRuleProtocolUDP ...
1410	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1411)
1412
1413// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1414func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1415	return []SecurityRuleProtocol{SecurityRuleProtocolAsterisk, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1416}
1417
1418// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1419type ServiceProviderProvisioningState string
1420
1421const (
1422	// Deprovisioning ...
1423	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1424	// NotProvisioned ...
1425	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1426	// Provisioned ...
1427	Provisioned ServiceProviderProvisioningState = "Provisioned"
1428	// Provisioning ...
1429	Provisioning ServiceProviderProvisioningState = "Provisioning"
1430)
1431
1432// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1433func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1434	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1435}
1436
1437// Severity enumerates the values for severity.
1438type Severity string
1439
1440const (
1441	// SeverityError ...
1442	SeverityError Severity = "Error"
1443	// SeverityWarning ...
1444	SeverityWarning Severity = "Warning"
1445)
1446
1447// PossibleSeverityValues returns an array of possible values for the Severity const type.
1448func PossibleSeverityValues() []Severity {
1449	return []Severity{SeverityError, SeverityWarning}
1450}
1451
1452// TransportProtocol enumerates the values for transport protocol.
1453type TransportProtocol string
1454
1455const (
1456	// TransportProtocolAll ...
1457	TransportProtocolAll TransportProtocol = "All"
1458	// TransportProtocolTCP ...
1459	TransportProtocolTCP TransportProtocol = "Tcp"
1460	// TransportProtocolUDP ...
1461	TransportProtocolUDP TransportProtocol = "Udp"
1462)
1463
1464// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1465func PossibleTransportProtocolValues() []TransportProtocol {
1466	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1467}
1468
1469// TunnelConnectionStatus enumerates the values for tunnel connection status.
1470type TunnelConnectionStatus string
1471
1472const (
1473	// TunnelConnectionStatusConnected ...
1474	TunnelConnectionStatusConnected TunnelConnectionStatus = "Connected"
1475	// TunnelConnectionStatusConnecting ...
1476	TunnelConnectionStatusConnecting TunnelConnectionStatus = "Connecting"
1477	// TunnelConnectionStatusNotConnected ...
1478	TunnelConnectionStatusNotConnected TunnelConnectionStatus = "NotConnected"
1479	// TunnelConnectionStatusUnknown ...
1480	TunnelConnectionStatusUnknown TunnelConnectionStatus = "Unknown"
1481)
1482
1483// PossibleTunnelConnectionStatusValues returns an array of possible values for the TunnelConnectionStatus const type.
1484func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus {
1485	return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown}
1486}
1487
1488// VerbosityLevel enumerates the values for verbosity level.
1489type VerbosityLevel string
1490
1491const (
1492	// Full ...
1493	Full VerbosityLevel = "Full"
1494	// Minimum ...
1495	Minimum VerbosityLevel = "Minimum"
1496	// Normal ...
1497	Normal VerbosityLevel = "Normal"
1498)
1499
1500// PossibleVerbosityLevelValues returns an array of possible values for the VerbosityLevel const type.
1501func PossibleVerbosityLevelValues() []VerbosityLevel {
1502	return []VerbosityLevel{Full, Minimum, Normal}
1503}
1504
1505// VirtualNetworkGatewayConnectionProtocol enumerates the values for virtual network gateway connection
1506// protocol.
1507type VirtualNetworkGatewayConnectionProtocol string
1508
1509const (
1510	// IKEv1 ...
1511	IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1"
1512	// IKEv2 ...
1513	IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2"
1514)
1515
1516// PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type.
1517func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol {
1518	return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2}
1519}
1520
1521// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1522type VirtualNetworkGatewayConnectionStatus string
1523
1524const (
1525	// VirtualNetworkGatewayConnectionStatusConnected ...
1526	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1527	// VirtualNetworkGatewayConnectionStatusConnecting ...
1528	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1529	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1530	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1531	// VirtualNetworkGatewayConnectionStatusUnknown ...
1532	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1533)
1534
1535// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1536func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1537	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1538}
1539
1540// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1541type VirtualNetworkGatewayConnectionType string
1542
1543const (
1544	// ExpressRoute ...
1545	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1546	// IPsec ...
1547	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1548	// Vnet2Vnet ...
1549	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1550	// VPNClient ...
1551	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1552)
1553
1554// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1555func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1556	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1557}
1558
1559// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1560type VirtualNetworkGatewaySkuName string
1561
1562const (
1563	// VirtualNetworkGatewaySkuNameBasic ...
1564	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1565	// VirtualNetworkGatewaySkuNameErGw1AZ ...
1566	VirtualNetworkGatewaySkuNameErGw1AZ VirtualNetworkGatewaySkuName = "ErGw1AZ"
1567	// VirtualNetworkGatewaySkuNameErGw2AZ ...
1568	VirtualNetworkGatewaySkuNameErGw2AZ VirtualNetworkGatewaySkuName = "ErGw2AZ"
1569	// VirtualNetworkGatewaySkuNameErGw3AZ ...
1570	VirtualNetworkGatewaySkuNameErGw3AZ VirtualNetworkGatewaySkuName = "ErGw3AZ"
1571	// VirtualNetworkGatewaySkuNameHighPerformance ...
1572	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1573	// VirtualNetworkGatewaySkuNameStandard ...
1574	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1575	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1576	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1577	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1578	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1579	// VirtualNetworkGatewaySkuNameVpnGw1AZ ...
1580	VirtualNetworkGatewaySkuNameVpnGw1AZ VirtualNetworkGatewaySkuName = "VpnGw1AZ"
1581	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1582	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1583	// VirtualNetworkGatewaySkuNameVpnGw2AZ ...
1584	VirtualNetworkGatewaySkuNameVpnGw2AZ VirtualNetworkGatewaySkuName = "VpnGw2AZ"
1585	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1586	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1587	// VirtualNetworkGatewaySkuNameVpnGw3AZ ...
1588	VirtualNetworkGatewaySkuNameVpnGw3AZ VirtualNetworkGatewaySkuName = "VpnGw3AZ"
1589)
1590
1591// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
1592func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
1593	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameErGw1AZ, VirtualNetworkGatewaySkuNameErGw2AZ, VirtualNetworkGatewaySkuNameErGw3AZ, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw1AZ, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw2AZ, VirtualNetworkGatewaySkuNameVpnGw3, VirtualNetworkGatewaySkuNameVpnGw3AZ}
1594}
1595
1596// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
1597type VirtualNetworkGatewaySkuTier string
1598
1599const (
1600	// VirtualNetworkGatewaySkuTierBasic ...
1601	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
1602	// VirtualNetworkGatewaySkuTierErGw1AZ ...
1603	VirtualNetworkGatewaySkuTierErGw1AZ VirtualNetworkGatewaySkuTier = "ErGw1AZ"
1604	// VirtualNetworkGatewaySkuTierErGw2AZ ...
1605	VirtualNetworkGatewaySkuTierErGw2AZ VirtualNetworkGatewaySkuTier = "ErGw2AZ"
1606	// VirtualNetworkGatewaySkuTierErGw3AZ ...
1607	VirtualNetworkGatewaySkuTierErGw3AZ VirtualNetworkGatewaySkuTier = "ErGw3AZ"
1608	// VirtualNetworkGatewaySkuTierHighPerformance ...
1609	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
1610	// VirtualNetworkGatewaySkuTierStandard ...
1611	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
1612	// VirtualNetworkGatewaySkuTierUltraPerformance ...
1613	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
1614	// VirtualNetworkGatewaySkuTierVpnGw1 ...
1615	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
1616	// VirtualNetworkGatewaySkuTierVpnGw1AZ ...
1617	VirtualNetworkGatewaySkuTierVpnGw1AZ VirtualNetworkGatewaySkuTier = "VpnGw1AZ"
1618	// VirtualNetworkGatewaySkuTierVpnGw2 ...
1619	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
1620	// VirtualNetworkGatewaySkuTierVpnGw2AZ ...
1621	VirtualNetworkGatewaySkuTierVpnGw2AZ VirtualNetworkGatewaySkuTier = "VpnGw2AZ"
1622	// VirtualNetworkGatewaySkuTierVpnGw3 ...
1623	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
1624	// VirtualNetworkGatewaySkuTierVpnGw3AZ ...
1625	VirtualNetworkGatewaySkuTierVpnGw3AZ VirtualNetworkGatewaySkuTier = "VpnGw3AZ"
1626)
1627
1628// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
1629func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
1630	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierErGw1AZ, VirtualNetworkGatewaySkuTierErGw2AZ, VirtualNetworkGatewaySkuTierErGw3AZ, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw1AZ, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw2AZ, VirtualNetworkGatewaySkuTierVpnGw3, VirtualNetworkGatewaySkuTierVpnGw3AZ}
1631}
1632
1633// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
1634type VirtualNetworkGatewayType string
1635
1636const (
1637	// VirtualNetworkGatewayTypeExpressRoute ...
1638	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
1639	// VirtualNetworkGatewayTypeVpn ...
1640	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
1641)
1642
1643// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
1644func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
1645	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
1646}
1647
1648// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
1649type VirtualNetworkPeeringState string
1650
1651const (
1652	// VirtualNetworkPeeringStateConnected ...
1653	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
1654	// VirtualNetworkPeeringStateDisconnected ...
1655	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
1656	// VirtualNetworkPeeringStateInitiated ...
1657	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
1658)
1659
1660// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
1661func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
1662	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
1663}
1664
1665// VirtualWanSecurityProviderType enumerates the values for virtual wan security provider type.
1666type VirtualWanSecurityProviderType string
1667
1668const (
1669	// External ...
1670	External VirtualWanSecurityProviderType = "External"
1671	// Native ...
1672	Native VirtualWanSecurityProviderType = "Native"
1673)
1674
1675// PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type.
1676func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType {
1677	return []VirtualWanSecurityProviderType{External, Native}
1678}
1679
1680// VpnClientProtocol enumerates the values for vpn client protocol.
1681type VpnClientProtocol string
1682
1683const (
1684	// IkeV2 ...
1685	IkeV2 VpnClientProtocol = "IkeV2"
1686	// OpenVPN ...
1687	OpenVPN VpnClientProtocol = "OpenVPN"
1688	// SSTP ...
1689	SSTP VpnClientProtocol = "SSTP"
1690)
1691
1692// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
1693func PossibleVpnClientProtocolValues() []VpnClientProtocol {
1694	return []VpnClientProtocol{IkeV2, OpenVPN, SSTP}
1695}
1696
1697// VpnConnectionStatus enumerates the values for vpn connection status.
1698type VpnConnectionStatus string
1699
1700const (
1701	// VpnConnectionStatusConnected ...
1702	VpnConnectionStatusConnected VpnConnectionStatus = "Connected"
1703	// VpnConnectionStatusConnecting ...
1704	VpnConnectionStatusConnecting VpnConnectionStatus = "Connecting"
1705	// VpnConnectionStatusNotConnected ...
1706	VpnConnectionStatusNotConnected VpnConnectionStatus = "NotConnected"
1707	// VpnConnectionStatusUnknown ...
1708	VpnConnectionStatusUnknown VpnConnectionStatus = "Unknown"
1709)
1710
1711// PossibleVpnConnectionStatusValues returns an array of possible values for the VpnConnectionStatus const type.
1712func PossibleVpnConnectionStatusValues() []VpnConnectionStatus {
1713	return []VpnConnectionStatus{VpnConnectionStatusConnected, VpnConnectionStatusConnecting, VpnConnectionStatusNotConnected, VpnConnectionStatusUnknown}
1714}
1715
1716// VpnGatewayTunnelingProtocol enumerates the values for vpn gateway tunneling protocol.
1717type VpnGatewayTunnelingProtocol string
1718
1719const (
1720	// VpnGatewayTunnelingProtocolIkeV2 ...
1721	VpnGatewayTunnelingProtocolIkeV2 VpnGatewayTunnelingProtocol = "IkeV2"
1722	// VpnGatewayTunnelingProtocolOpenVPN ...
1723	VpnGatewayTunnelingProtocolOpenVPN VpnGatewayTunnelingProtocol = "OpenVPN"
1724)
1725
1726// PossibleVpnGatewayTunnelingProtocolValues returns an array of possible values for the VpnGatewayTunnelingProtocol const type.
1727func PossibleVpnGatewayTunnelingProtocolValues() []VpnGatewayTunnelingProtocol {
1728	return []VpnGatewayTunnelingProtocol{VpnGatewayTunnelingProtocolIkeV2, VpnGatewayTunnelingProtocolOpenVPN}
1729}
1730
1731// VpnType enumerates the values for vpn type.
1732type VpnType string
1733
1734const (
1735	// PolicyBased ...
1736	PolicyBased VpnType = "PolicyBased"
1737	// RouteBased ...
1738	RouteBased VpnType = "RouteBased"
1739)
1740
1741// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
1742func PossibleVpnTypeValues() []VpnType {
1743	return []VpnType{PolicyBased, RouteBased}
1744}
1745
1746// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
1747// virtual network.
1748type AddressSpace struct {
1749	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
1750	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
1751}
1752
1753// ApplicationGateway application gateway resource
1754type ApplicationGateway struct {
1755	autorest.Response                   `json:"-"`
1756	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
1757	// Etag - A unique read-only string that changes whenever the resource is updated.
1758	Etag *string `json:"etag,omitempty"`
1759	// Zones - A list of availability zones denoting where the resource needs to come from.
1760	Zones *[]string `json:"zones,omitempty"`
1761	// Identity - The identity of the application gateway, if configured.
1762	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
1763	// ID - Resource ID.
1764	ID *string `json:"id,omitempty"`
1765	// Name - READ-ONLY; Resource name.
1766	Name *string `json:"name,omitempty"`
1767	// Type - READ-ONLY; Resource type.
1768	Type *string `json:"type,omitempty"`
1769	// Location - Resource location.
1770	Location *string `json:"location,omitempty"`
1771	// Tags - Resource tags.
1772	Tags map[string]*string `json:"tags"`
1773}
1774
1775// MarshalJSON is the custom marshaler for ApplicationGateway.
1776func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
1777	objectMap := make(map[string]interface{})
1778	if ag.ApplicationGatewayPropertiesFormat != nil {
1779		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
1780	}
1781	if ag.Etag != nil {
1782		objectMap["etag"] = ag.Etag
1783	}
1784	if ag.Zones != nil {
1785		objectMap["zones"] = ag.Zones
1786	}
1787	if ag.Identity != nil {
1788		objectMap["identity"] = ag.Identity
1789	}
1790	if ag.ID != nil {
1791		objectMap["id"] = ag.ID
1792	}
1793	if ag.Location != nil {
1794		objectMap["location"] = ag.Location
1795	}
1796	if ag.Tags != nil {
1797		objectMap["tags"] = ag.Tags
1798	}
1799	return json.Marshal(objectMap)
1800}
1801
1802// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
1803func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
1804	var m map[string]*json.RawMessage
1805	err := json.Unmarshal(body, &m)
1806	if err != nil {
1807		return err
1808	}
1809	for k, v := range m {
1810		switch k {
1811		case "properties":
1812			if v != nil {
1813				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
1814				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
1815				if err != nil {
1816					return err
1817				}
1818				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
1819			}
1820		case "etag":
1821			if v != nil {
1822				var etag string
1823				err = json.Unmarshal(*v, &etag)
1824				if err != nil {
1825					return err
1826				}
1827				ag.Etag = &etag
1828			}
1829		case "zones":
1830			if v != nil {
1831				var zones []string
1832				err = json.Unmarshal(*v, &zones)
1833				if err != nil {
1834					return err
1835				}
1836				ag.Zones = &zones
1837			}
1838		case "identity":
1839			if v != nil {
1840				var identity ManagedServiceIdentity
1841				err = json.Unmarshal(*v, &identity)
1842				if err != nil {
1843					return err
1844				}
1845				ag.Identity = &identity
1846			}
1847		case "id":
1848			if v != nil {
1849				var ID string
1850				err = json.Unmarshal(*v, &ID)
1851				if err != nil {
1852					return err
1853				}
1854				ag.ID = &ID
1855			}
1856		case "name":
1857			if v != nil {
1858				var name string
1859				err = json.Unmarshal(*v, &name)
1860				if err != nil {
1861					return err
1862				}
1863				ag.Name = &name
1864			}
1865		case "type":
1866			if v != nil {
1867				var typeVar string
1868				err = json.Unmarshal(*v, &typeVar)
1869				if err != nil {
1870					return err
1871				}
1872				ag.Type = &typeVar
1873			}
1874		case "location":
1875			if v != nil {
1876				var location string
1877				err = json.Unmarshal(*v, &location)
1878				if err != nil {
1879					return err
1880				}
1881				ag.Location = &location
1882			}
1883		case "tags":
1884			if v != nil {
1885				var tags map[string]*string
1886				err = json.Unmarshal(*v, &tags)
1887				if err != nil {
1888					return err
1889				}
1890				ag.Tags = tags
1891			}
1892		}
1893	}
1894
1895	return nil
1896}
1897
1898// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
1899type ApplicationGatewayAuthenticationCertificate struct {
1900	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
1901	// Name - Name of the authentication certificate that is unique within an Application Gateway.
1902	Name *string `json:"name,omitempty"`
1903	// Etag - A unique read-only string that changes whenever the resource is updated.
1904	Etag *string `json:"etag,omitempty"`
1905	// Type - Type of the resource.
1906	Type *string `json:"type,omitempty"`
1907	// ID - Resource ID.
1908	ID *string `json:"id,omitempty"`
1909}
1910
1911// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
1912func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
1913	objectMap := make(map[string]interface{})
1914	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
1915		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
1916	}
1917	if agac.Name != nil {
1918		objectMap["name"] = agac.Name
1919	}
1920	if agac.Etag != nil {
1921		objectMap["etag"] = agac.Etag
1922	}
1923	if agac.Type != nil {
1924		objectMap["type"] = agac.Type
1925	}
1926	if agac.ID != nil {
1927		objectMap["id"] = agac.ID
1928	}
1929	return json.Marshal(objectMap)
1930}
1931
1932// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
1933func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
1934	var m map[string]*json.RawMessage
1935	err := json.Unmarshal(body, &m)
1936	if err != nil {
1937		return err
1938	}
1939	for k, v := range m {
1940		switch k {
1941		case "properties":
1942			if v != nil {
1943				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
1944				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
1945				if err != nil {
1946					return err
1947				}
1948				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
1949			}
1950		case "name":
1951			if v != nil {
1952				var name string
1953				err = json.Unmarshal(*v, &name)
1954				if err != nil {
1955					return err
1956				}
1957				agac.Name = &name
1958			}
1959		case "etag":
1960			if v != nil {
1961				var etag string
1962				err = json.Unmarshal(*v, &etag)
1963				if err != nil {
1964					return err
1965				}
1966				agac.Etag = &etag
1967			}
1968		case "type":
1969			if v != nil {
1970				var typeVar string
1971				err = json.Unmarshal(*v, &typeVar)
1972				if err != nil {
1973					return err
1974				}
1975				agac.Type = &typeVar
1976			}
1977		case "id":
1978			if v != nil {
1979				var ID string
1980				err = json.Unmarshal(*v, &ID)
1981				if err != nil {
1982					return err
1983				}
1984				agac.ID = &ID
1985			}
1986		}
1987	}
1988
1989	return nil
1990}
1991
1992// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
1993// application gateway.
1994type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
1995	// Data - Certificate public data.
1996	Data *string `json:"data,omitempty"`
1997	// ProvisioningState - Provisioning state of the authentication certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
1998	ProvisioningState *string `json:"provisioningState,omitempty"`
1999}
2000
2001// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
2002type ApplicationGatewayAutoscaleConfiguration struct {
2003	// MinCapacity - Lower bound on number of Application Gateway instances
2004	MinCapacity *int32 `json:"minCapacity,omitempty"`
2005}
2006
2007// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
2008// call.
2009type ApplicationGatewayAvailableSslOptions struct {
2010	autorest.Response                                      `json:"-"`
2011	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
2012	// ID - Resource ID.
2013	ID *string `json:"id,omitempty"`
2014	// Name - READ-ONLY; Resource name.
2015	Name *string `json:"name,omitempty"`
2016	// Type - READ-ONLY; Resource type.
2017	Type *string `json:"type,omitempty"`
2018	// Location - Resource location.
2019	Location *string `json:"location,omitempty"`
2020	// Tags - Resource tags.
2021	Tags map[string]*string `json:"tags"`
2022}
2023
2024// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
2025func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
2026	objectMap := make(map[string]interface{})
2027	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
2028		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
2029	}
2030	if agaso.ID != nil {
2031		objectMap["id"] = agaso.ID
2032	}
2033	if agaso.Location != nil {
2034		objectMap["location"] = agaso.Location
2035	}
2036	if agaso.Tags != nil {
2037		objectMap["tags"] = agaso.Tags
2038	}
2039	return json.Marshal(objectMap)
2040}
2041
2042// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
2043func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
2044	var m map[string]*json.RawMessage
2045	err := json.Unmarshal(body, &m)
2046	if err != nil {
2047		return err
2048	}
2049	for k, v := range m {
2050		switch k {
2051		case "properties":
2052			if v != nil {
2053				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
2054				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
2055				if err != nil {
2056					return err
2057				}
2058				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
2059			}
2060		case "id":
2061			if v != nil {
2062				var ID string
2063				err = json.Unmarshal(*v, &ID)
2064				if err != nil {
2065					return err
2066				}
2067				agaso.ID = &ID
2068			}
2069		case "name":
2070			if v != nil {
2071				var name string
2072				err = json.Unmarshal(*v, &name)
2073				if err != nil {
2074					return err
2075				}
2076				agaso.Name = &name
2077			}
2078		case "type":
2079			if v != nil {
2080				var typeVar string
2081				err = json.Unmarshal(*v, &typeVar)
2082				if err != nil {
2083					return err
2084				}
2085				agaso.Type = &typeVar
2086			}
2087		case "location":
2088			if v != nil {
2089				var location string
2090				err = json.Unmarshal(*v, &location)
2091				if err != nil {
2092					return err
2093				}
2094				agaso.Location = &location
2095			}
2096		case "tags":
2097			if v != nil {
2098				var tags map[string]*string
2099				err = json.Unmarshal(*v, &tags)
2100				if err != nil {
2101					return err
2102				}
2103				agaso.Tags = tags
2104			}
2105		}
2106	}
2107
2108	return nil
2109}
2110
2111// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
2112// ApplicationGatewayAvailableSslOptions
2113type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
2114	// PredefinedPolicies - List of available Ssl predefined policy.
2115	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
2116	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
2117	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
2118	// AvailableCipherSuites - List of available Ssl cipher suites.
2119	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
2120	// AvailableProtocols - List of available Ssl protocols.
2121	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
2122}
2123
2124// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
2125// service call.
2126type ApplicationGatewayAvailableSslPredefinedPolicies struct {
2127	autorest.Response `json:"-"`
2128	// Value - List of available Ssl predefined policy.
2129	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
2130	// NextLink - URL to get the next set of results.
2131	NextLink *string `json:"nextLink,omitempty"`
2132}
2133
2134// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
2135// ApplicationGatewaySslPredefinedPolicy values.
2136type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
2137	i    int
2138	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
2139}
2140
2141// NextWithContext advances to the next value.  If there was an error making
2142// the request the iterator does not advance and the error is returned.
2143func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
2144	if tracing.IsEnabled() {
2145		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
2146		defer func() {
2147			sc := -1
2148			if iter.Response().Response.Response != nil {
2149				sc = iter.Response().Response.Response.StatusCode
2150			}
2151			tracing.EndSpan(ctx, sc, err)
2152		}()
2153	}
2154	iter.i++
2155	if iter.i < len(iter.page.Values()) {
2156		return nil
2157	}
2158	err = iter.page.NextWithContext(ctx)
2159	if err != nil {
2160		iter.i--
2161		return err
2162	}
2163	iter.i = 0
2164	return nil
2165}
2166
2167// Next advances to the next value.  If there was an error making
2168// the request the iterator does not advance and the error is returned.
2169// Deprecated: Use NextWithContext() instead.
2170func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
2171	return iter.NextWithContext(context.Background())
2172}
2173
2174// NotDone returns true if the enumeration should be started or is not yet complete.
2175func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
2176	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2177}
2178
2179// Response returns the raw server response from the last page request.
2180func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2181	return iter.page.Response()
2182}
2183
2184// Value returns the current value or a zero-initialized value if the
2185// iterator has advanced beyond the end of the collection.
2186func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
2187	if !iter.page.NotDone() {
2188		return ApplicationGatewaySslPredefinedPolicy{}
2189	}
2190	return iter.page.Values()[iter.i]
2191}
2192
2193// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
2194func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
2195	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
2196}
2197
2198// IsEmpty returns true if the ListResult contains no values.
2199func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
2200	return agaspp.Value == nil || len(*agaspp.Value) == 0
2201}
2202
2203// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
2204// It returns nil if no more results exist.
2205func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
2206	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
2207		return nil, nil
2208	}
2209	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2210		autorest.AsJSON(),
2211		autorest.AsGet(),
2212		autorest.WithBaseURL(to.String(agaspp.NextLink)))
2213}
2214
2215// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
2216// ApplicationGatewaySslPredefinedPolicy values.
2217type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
2218	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
2219	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
2220}
2221
2222// NextWithContext advances to the next page of values.  If there was an error making
2223// the request the page does not advance and the error is returned.
2224func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
2225	if tracing.IsEnabled() {
2226		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
2227		defer func() {
2228			sc := -1
2229			if page.Response().Response.Response != nil {
2230				sc = page.Response().Response.Response.StatusCode
2231			}
2232			tracing.EndSpan(ctx, sc, err)
2233		}()
2234	}
2235	next, err := page.fn(ctx, page.agaspp)
2236	if err != nil {
2237		return err
2238	}
2239	page.agaspp = next
2240	return nil
2241}
2242
2243// Next advances to the next page of values.  If there was an error making
2244// the request the page does not advance and the error is returned.
2245// Deprecated: Use NextWithContext() instead.
2246func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
2247	return page.NextWithContext(context.Background())
2248}
2249
2250// NotDone returns true if the page enumeration should be started or is not yet complete.
2251func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
2252	return !page.agaspp.IsEmpty()
2253}
2254
2255// Response returns the raw server response from the last page request.
2256func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2257	return page.agaspp
2258}
2259
2260// Values returns the slice of values for the current page or nil if there are no values.
2261func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
2262	if page.agaspp.IsEmpty() {
2263		return nil
2264	}
2265	return *page.agaspp.Value
2266}
2267
2268// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
2269func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
2270	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
2271}
2272
2273// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
2274// service call.
2275type ApplicationGatewayAvailableWafRuleSetsResult struct {
2276	autorest.Response `json:"-"`
2277	// Value - The list of application gateway rule sets.
2278	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
2279}
2280
2281// ApplicationGatewayBackendAddress backend address of an application gateway.
2282type ApplicationGatewayBackendAddress struct {
2283	// Fqdn - Fully qualified domain name (FQDN).
2284	Fqdn *string `json:"fqdn,omitempty"`
2285	// IPAddress - IP address
2286	IPAddress *string `json:"ipAddress,omitempty"`
2287}
2288
2289// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
2290type ApplicationGatewayBackendAddressPool struct {
2291	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
2292	// Name - Name of the backend address pool that is unique within an Application Gateway.
2293	Name *string `json:"name,omitempty"`
2294	// Etag - A unique read-only string that changes whenever the resource is updated.
2295	Etag *string `json:"etag,omitempty"`
2296	// Type - Type of the resource.
2297	Type *string `json:"type,omitempty"`
2298	// ID - Resource ID.
2299	ID *string `json:"id,omitempty"`
2300}
2301
2302// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
2303func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
2304	objectMap := make(map[string]interface{})
2305	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
2306		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
2307	}
2308	if agbap.Name != nil {
2309		objectMap["name"] = agbap.Name
2310	}
2311	if agbap.Etag != nil {
2312		objectMap["etag"] = agbap.Etag
2313	}
2314	if agbap.Type != nil {
2315		objectMap["type"] = agbap.Type
2316	}
2317	if agbap.ID != nil {
2318		objectMap["id"] = agbap.ID
2319	}
2320	return json.Marshal(objectMap)
2321}
2322
2323// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
2324func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
2325	var m map[string]*json.RawMessage
2326	err := json.Unmarshal(body, &m)
2327	if err != nil {
2328		return err
2329	}
2330	for k, v := range m {
2331		switch k {
2332		case "properties":
2333			if v != nil {
2334				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
2335				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
2336				if err != nil {
2337					return err
2338				}
2339				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
2340			}
2341		case "name":
2342			if v != nil {
2343				var name string
2344				err = json.Unmarshal(*v, &name)
2345				if err != nil {
2346					return err
2347				}
2348				agbap.Name = &name
2349			}
2350		case "etag":
2351			if v != nil {
2352				var etag string
2353				err = json.Unmarshal(*v, &etag)
2354				if err != nil {
2355					return err
2356				}
2357				agbap.Etag = &etag
2358			}
2359		case "type":
2360			if v != nil {
2361				var typeVar string
2362				err = json.Unmarshal(*v, &typeVar)
2363				if err != nil {
2364					return err
2365				}
2366				agbap.Type = &typeVar
2367			}
2368		case "id":
2369			if v != nil {
2370				var ID string
2371				err = json.Unmarshal(*v, &ID)
2372				if err != nil {
2373					return err
2374				}
2375				agbap.ID = &ID
2376			}
2377		}
2378	}
2379
2380	return nil
2381}
2382
2383// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
2384// application gateway.
2385type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
2386	// BackendIPConfigurations - Collection of references to IPs defined in network interfaces.
2387	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
2388	// BackendAddresses - Backend addresses
2389	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
2390	// ProvisioningState - Provisioning state of the backend address pool resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2391	ProvisioningState *string `json:"provisioningState,omitempty"`
2392}
2393
2394// ApplicationGatewayBackendHealth list of ApplicationGatewayBackendHealthPool resources.
2395type ApplicationGatewayBackendHealth struct {
2396	autorest.Response   `json:"-"`
2397	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
2398}
2399
2400// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
2401type ApplicationGatewayBackendHealthHTTPSettings struct {
2402	// BackendHTTPSettings - Reference of an ApplicationGatewayBackendHttpSettings resource.
2403	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
2404	// Servers - List of ApplicationGatewayBackendHealthServer resources.
2405	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
2406}
2407
2408// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
2409type ApplicationGatewayBackendHealthPool struct {
2410	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2411	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2412	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
2413	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
2414}
2415
2416// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
2417type ApplicationGatewayBackendHealthServer struct {
2418	// Address - IP address or FQDN of backend server.
2419	Address *string `json:"address,omitempty"`
2420	// IPConfiguration - Reference of IP configuration of backend server.
2421	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
2422	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
2423	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
2424}
2425
2426// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
2427type ApplicationGatewayBackendHTTPSettings struct {
2428	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
2429	// Name - Name of the backend http settings that is unique within an Application Gateway.
2430	Name *string `json:"name,omitempty"`
2431	// Etag - A unique read-only string that changes whenever the resource is updated.
2432	Etag *string `json:"etag,omitempty"`
2433	// Type - Type of the resource.
2434	Type *string `json:"type,omitempty"`
2435	// ID - Resource ID.
2436	ID *string `json:"id,omitempty"`
2437}
2438
2439// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
2440func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
2441	objectMap := make(map[string]interface{})
2442	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
2443		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2444	}
2445	if agbhs.Name != nil {
2446		objectMap["name"] = agbhs.Name
2447	}
2448	if agbhs.Etag != nil {
2449		objectMap["etag"] = agbhs.Etag
2450	}
2451	if agbhs.Type != nil {
2452		objectMap["type"] = agbhs.Type
2453	}
2454	if agbhs.ID != nil {
2455		objectMap["id"] = agbhs.ID
2456	}
2457	return json.Marshal(objectMap)
2458}
2459
2460// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
2461func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
2462	var m map[string]*json.RawMessage
2463	err := json.Unmarshal(body, &m)
2464	if err != nil {
2465		return err
2466	}
2467	for k, v := range m {
2468		switch k {
2469		case "properties":
2470			if v != nil {
2471				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2472				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
2473				if err != nil {
2474					return err
2475				}
2476				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
2477			}
2478		case "name":
2479			if v != nil {
2480				var name string
2481				err = json.Unmarshal(*v, &name)
2482				if err != nil {
2483					return err
2484				}
2485				agbhs.Name = &name
2486			}
2487		case "etag":
2488			if v != nil {
2489				var etag string
2490				err = json.Unmarshal(*v, &etag)
2491				if err != nil {
2492					return err
2493				}
2494				agbhs.Etag = &etag
2495			}
2496		case "type":
2497			if v != nil {
2498				var typeVar string
2499				err = json.Unmarshal(*v, &typeVar)
2500				if err != nil {
2501					return err
2502				}
2503				agbhs.Type = &typeVar
2504			}
2505		case "id":
2506			if v != nil {
2507				var ID string
2508				err = json.Unmarshal(*v, &ID)
2509				if err != nil {
2510					return err
2511				}
2512				agbhs.ID = &ID
2513			}
2514		}
2515	}
2516
2517	return nil
2518}
2519
2520// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
2521// application gateway.
2522type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
2523	// Port - The destination port on the backend.
2524	Port *int32 `json:"port,omitempty"`
2525	// Protocol - The protocol used to communicate with the backend. Possible values are 'Http' and 'Https'. Possible values include: 'HTTP', 'HTTPS'
2526	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2527	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
2528	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
2529	// 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.
2530	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
2531	// Probe - Probe resource of an application gateway.
2532	Probe *SubResource `json:"probe,omitempty"`
2533	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
2534	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
2535	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
2536	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
2537	// ConnectionDraining - Connection draining of the backend http settings resource.
2538	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
2539	// HostName - Host header to be sent to the backend servers.
2540	HostName *string `json:"hostName,omitempty"`
2541	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
2542	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
2543	// AffinityCookieName - Cookie name to use for the affinity cookie.
2544	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
2545	// ProbeEnabled - Whether the probe is enabled. Default value is false.
2546	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
2547	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
2548	Path *string `json:"path,omitempty"`
2549	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2550	ProvisioningState *string `json:"provisioningState,omitempty"`
2551}
2552
2553// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
2554// be active for a specified time after the backend server got removed from the configuration.
2555type ApplicationGatewayConnectionDraining struct {
2556	// Enabled - Whether connection draining is enabled or not.
2557	Enabled *bool `json:"enabled,omitempty"`
2558	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
2559	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
2560}
2561
2562// ApplicationGatewayCustomError customer error of an application gateway.
2563type ApplicationGatewayCustomError struct {
2564	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
2565	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
2566	// CustomErrorPageURL - Error page URL of the application gateway customer error.
2567	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
2568}
2569
2570// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
2571// rule group.
2572type ApplicationGatewayFirewallDisabledRuleGroup struct {
2573	// RuleGroupName - The name of the rule group that will be disabled.
2574	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2575	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
2576	Rules *[]int32 `json:"rules,omitempty"`
2577}
2578
2579// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
2580// check
2581type ApplicationGatewayFirewallExclusion struct {
2582	// MatchVariable - The variable to be excluded.
2583	MatchVariable *string `json:"matchVariable,omitempty"`
2584	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
2585	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
2586	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
2587	Selector *string `json:"selector,omitempty"`
2588}
2589
2590// ApplicationGatewayFirewallRule a web application firewall rule.
2591type ApplicationGatewayFirewallRule struct {
2592	// RuleID - The identifier of the web application firewall rule.
2593	RuleID *int32 `json:"ruleId,omitempty"`
2594	// Description - The description of the web application firewall rule.
2595	Description *string `json:"description,omitempty"`
2596}
2597
2598// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
2599type ApplicationGatewayFirewallRuleGroup struct {
2600	// RuleGroupName - The name of the web application firewall rule group.
2601	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2602	// Description - The description of the web application firewall rule group.
2603	Description *string `json:"description,omitempty"`
2604	// Rules - The rules of the web application firewall rule group.
2605	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
2606}
2607
2608// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
2609type ApplicationGatewayFirewallRuleSet struct {
2610	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
2611	// ID - Resource ID.
2612	ID *string `json:"id,omitempty"`
2613	// Name - READ-ONLY; Resource name.
2614	Name *string `json:"name,omitempty"`
2615	// Type - READ-ONLY; Resource type.
2616	Type *string `json:"type,omitempty"`
2617	// Location - Resource location.
2618	Location *string `json:"location,omitempty"`
2619	// Tags - Resource tags.
2620	Tags map[string]*string `json:"tags"`
2621}
2622
2623// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
2624func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
2625	objectMap := make(map[string]interface{})
2626	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
2627		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
2628	}
2629	if agfrs.ID != nil {
2630		objectMap["id"] = agfrs.ID
2631	}
2632	if agfrs.Location != nil {
2633		objectMap["location"] = agfrs.Location
2634	}
2635	if agfrs.Tags != nil {
2636		objectMap["tags"] = agfrs.Tags
2637	}
2638	return json.Marshal(objectMap)
2639}
2640
2641// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
2642func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
2643	var m map[string]*json.RawMessage
2644	err := json.Unmarshal(body, &m)
2645	if err != nil {
2646		return err
2647	}
2648	for k, v := range m {
2649		switch k {
2650		case "properties":
2651			if v != nil {
2652				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
2653				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
2654				if err != nil {
2655					return err
2656				}
2657				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
2658			}
2659		case "id":
2660			if v != nil {
2661				var ID string
2662				err = json.Unmarshal(*v, &ID)
2663				if err != nil {
2664					return err
2665				}
2666				agfrs.ID = &ID
2667			}
2668		case "name":
2669			if v != nil {
2670				var name string
2671				err = json.Unmarshal(*v, &name)
2672				if err != nil {
2673					return err
2674				}
2675				agfrs.Name = &name
2676			}
2677		case "type":
2678			if v != nil {
2679				var typeVar string
2680				err = json.Unmarshal(*v, &typeVar)
2681				if err != nil {
2682					return err
2683				}
2684				agfrs.Type = &typeVar
2685			}
2686		case "location":
2687			if v != nil {
2688				var location string
2689				err = json.Unmarshal(*v, &location)
2690				if err != nil {
2691					return err
2692				}
2693				agfrs.Location = &location
2694			}
2695		case "tags":
2696			if v != nil {
2697				var tags map[string]*string
2698				err = json.Unmarshal(*v, &tags)
2699				if err != nil {
2700					return err
2701				}
2702				agfrs.Tags = tags
2703			}
2704		}
2705	}
2706
2707	return nil
2708}
2709
2710// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
2711type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
2712	// ProvisioningState - The provisioning state of the web application firewall rule set.
2713	ProvisioningState *string `json:"provisioningState,omitempty"`
2714	// RuleSetType - The type of the web application firewall rule set.
2715	RuleSetType *string `json:"ruleSetType,omitempty"`
2716	// RuleSetVersion - The version of the web application firewall rule set type.
2717	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
2718	// RuleGroups - The rule groups of the web application firewall rule set.
2719	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
2720}
2721
2722// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
2723type ApplicationGatewayFrontendIPConfiguration struct {
2724	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
2725	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
2726	Name *string `json:"name,omitempty"`
2727	// Etag - A unique read-only string that changes whenever the resource is updated.
2728	Etag *string `json:"etag,omitempty"`
2729	// Type - Type of the resource.
2730	Type *string `json:"type,omitempty"`
2731	// ID - Resource ID.
2732	ID *string `json:"id,omitempty"`
2733}
2734
2735// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
2736func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
2737	objectMap := make(map[string]interface{})
2738	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
2739		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
2740	}
2741	if agfic.Name != nil {
2742		objectMap["name"] = agfic.Name
2743	}
2744	if agfic.Etag != nil {
2745		objectMap["etag"] = agfic.Etag
2746	}
2747	if agfic.Type != nil {
2748		objectMap["type"] = agfic.Type
2749	}
2750	if agfic.ID != nil {
2751		objectMap["id"] = agfic.ID
2752	}
2753	return json.Marshal(objectMap)
2754}
2755
2756// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
2757func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
2758	var m map[string]*json.RawMessage
2759	err := json.Unmarshal(body, &m)
2760	if err != nil {
2761		return err
2762	}
2763	for k, v := range m {
2764		switch k {
2765		case "properties":
2766			if v != nil {
2767				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
2768				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
2769				if err != nil {
2770					return err
2771				}
2772				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
2773			}
2774		case "name":
2775			if v != nil {
2776				var name string
2777				err = json.Unmarshal(*v, &name)
2778				if err != nil {
2779					return err
2780				}
2781				agfic.Name = &name
2782			}
2783		case "etag":
2784			if v != nil {
2785				var etag string
2786				err = json.Unmarshal(*v, &etag)
2787				if err != nil {
2788					return err
2789				}
2790				agfic.Etag = &etag
2791			}
2792		case "type":
2793			if v != nil {
2794				var typeVar string
2795				err = json.Unmarshal(*v, &typeVar)
2796				if err != nil {
2797					return err
2798				}
2799				agfic.Type = &typeVar
2800			}
2801		case "id":
2802			if v != nil {
2803				var ID string
2804				err = json.Unmarshal(*v, &ID)
2805				if err != nil {
2806					return err
2807				}
2808				agfic.ID = &ID
2809			}
2810		}
2811	}
2812
2813	return nil
2814}
2815
2816// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
2817// application gateway.
2818type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
2819	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
2820	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
2821	// PrivateIPAllocationMethod - PrivateIP allocation method. Possible values include: 'Static', 'Dynamic'
2822	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
2823	// Subnet - Reference of the subnet resource.
2824	Subnet *SubResource `json:"subnet,omitempty"`
2825	// PublicIPAddress - Reference of the PublicIP resource.
2826	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
2827	// ProvisioningState - Provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2828	ProvisioningState *string `json:"provisioningState,omitempty"`
2829}
2830
2831// ApplicationGatewayFrontendPort frontend port of an application gateway.
2832type ApplicationGatewayFrontendPort struct {
2833	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
2834	// Name - Name of the frontend port that is unique within an Application Gateway
2835	Name *string `json:"name,omitempty"`
2836	// Etag - A unique read-only string that changes whenever the resource is updated.
2837	Etag *string `json:"etag,omitempty"`
2838	// Type - Type of the resource.
2839	Type *string `json:"type,omitempty"`
2840	// ID - Resource ID.
2841	ID *string `json:"id,omitempty"`
2842}
2843
2844// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
2845func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
2846	objectMap := make(map[string]interface{})
2847	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
2848		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
2849	}
2850	if agfp.Name != nil {
2851		objectMap["name"] = agfp.Name
2852	}
2853	if agfp.Etag != nil {
2854		objectMap["etag"] = agfp.Etag
2855	}
2856	if agfp.Type != nil {
2857		objectMap["type"] = agfp.Type
2858	}
2859	if agfp.ID != nil {
2860		objectMap["id"] = agfp.ID
2861	}
2862	return json.Marshal(objectMap)
2863}
2864
2865// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
2866func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
2867	var m map[string]*json.RawMessage
2868	err := json.Unmarshal(body, &m)
2869	if err != nil {
2870		return err
2871	}
2872	for k, v := range m {
2873		switch k {
2874		case "properties":
2875			if v != nil {
2876				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
2877				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
2878				if err != nil {
2879					return err
2880				}
2881				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
2882			}
2883		case "name":
2884			if v != nil {
2885				var name string
2886				err = json.Unmarshal(*v, &name)
2887				if err != nil {
2888					return err
2889				}
2890				agfp.Name = &name
2891			}
2892		case "etag":
2893			if v != nil {
2894				var etag string
2895				err = json.Unmarshal(*v, &etag)
2896				if err != nil {
2897					return err
2898				}
2899				agfp.Etag = &etag
2900			}
2901		case "type":
2902			if v != nil {
2903				var typeVar string
2904				err = json.Unmarshal(*v, &typeVar)
2905				if err != nil {
2906					return err
2907				}
2908				agfp.Type = &typeVar
2909			}
2910		case "id":
2911			if v != nil {
2912				var ID string
2913				err = json.Unmarshal(*v, &ID)
2914				if err != nil {
2915					return err
2916				}
2917				agfp.ID = &ID
2918			}
2919		}
2920	}
2921
2922	return nil
2923}
2924
2925// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
2926type ApplicationGatewayFrontendPortPropertiesFormat struct {
2927	// Port - Frontend port
2928	Port *int32 `json:"port,omitempty"`
2929	// ProvisioningState - Provisioning state of the frontend port resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2930	ProvisioningState *string `json:"provisioningState,omitempty"`
2931}
2932
2933// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
2934type ApplicationGatewayHeaderConfiguration struct {
2935	// HeaderName - Header name of the header configuration
2936	HeaderName *string `json:"headerName,omitempty"`
2937	// HeaderValue - Header value of the header configuration
2938	HeaderValue *string `json:"headerValue,omitempty"`
2939}
2940
2941// ApplicationGatewayHTTPListener http listener of an application gateway.
2942type ApplicationGatewayHTTPListener struct {
2943	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
2944	// Name - Name of the HTTP listener that is unique within an Application Gateway.
2945	Name *string `json:"name,omitempty"`
2946	// Etag - A unique read-only string that changes whenever the resource is updated.
2947	Etag *string `json:"etag,omitempty"`
2948	// Type - Type of the resource.
2949	Type *string `json:"type,omitempty"`
2950	// ID - Resource ID.
2951	ID *string `json:"id,omitempty"`
2952}
2953
2954// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
2955func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
2956	objectMap := make(map[string]interface{})
2957	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
2958		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
2959	}
2960	if aghl.Name != nil {
2961		objectMap["name"] = aghl.Name
2962	}
2963	if aghl.Etag != nil {
2964		objectMap["etag"] = aghl.Etag
2965	}
2966	if aghl.Type != nil {
2967		objectMap["type"] = aghl.Type
2968	}
2969	if aghl.ID != nil {
2970		objectMap["id"] = aghl.ID
2971	}
2972	return json.Marshal(objectMap)
2973}
2974
2975// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
2976func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
2977	var m map[string]*json.RawMessage
2978	err := json.Unmarshal(body, &m)
2979	if err != nil {
2980		return err
2981	}
2982	for k, v := range m {
2983		switch k {
2984		case "properties":
2985			if v != nil {
2986				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
2987				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
2988				if err != nil {
2989					return err
2990				}
2991				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
2992			}
2993		case "name":
2994			if v != nil {
2995				var name string
2996				err = json.Unmarshal(*v, &name)
2997				if err != nil {
2998					return err
2999				}
3000				aghl.Name = &name
3001			}
3002		case "etag":
3003			if v != nil {
3004				var etag string
3005				err = json.Unmarshal(*v, &etag)
3006				if err != nil {
3007					return err
3008				}
3009				aghl.Etag = &etag
3010			}
3011		case "type":
3012			if v != nil {
3013				var typeVar string
3014				err = json.Unmarshal(*v, &typeVar)
3015				if err != nil {
3016					return err
3017				}
3018				aghl.Type = &typeVar
3019			}
3020		case "id":
3021			if v != nil {
3022				var ID string
3023				err = json.Unmarshal(*v, &ID)
3024				if err != nil {
3025					return err
3026				}
3027				aghl.ID = &ID
3028			}
3029		}
3030	}
3031
3032	return nil
3033}
3034
3035// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
3036type ApplicationGatewayHTTPListenerPropertiesFormat struct {
3037	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
3038	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
3039	// FrontendPort - Frontend port resource of an application gateway.
3040	FrontendPort *SubResource `json:"frontendPort,omitempty"`
3041	// Protocol - Protocol of the HTTP listener. Possible values are 'Http' and 'Https'. Possible values include: 'HTTP', 'HTTPS'
3042	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3043	// HostName - Host name of HTTP listener.
3044	HostName *string `json:"hostName,omitempty"`
3045	// SslCertificate - SSL certificate resource of an application gateway.
3046	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
3047	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
3048	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
3049	// ProvisioningState - Provisioning state of the HTTP listener resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3050	ProvisioningState *string `json:"provisioningState,omitempty"`
3051	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
3052	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3053}
3054
3055// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
3056// private IP configuration is allowed.
3057type ApplicationGatewayIPConfiguration struct {
3058	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3059	// Name - Name of the IP configuration that is unique within an Application Gateway.
3060	Name *string `json:"name,omitempty"`
3061	// Etag - A unique read-only string that changes whenever the resource is updated.
3062	Etag *string `json:"etag,omitempty"`
3063	// Type - Type of the resource.
3064	Type *string `json:"type,omitempty"`
3065	// ID - Resource ID.
3066	ID *string `json:"id,omitempty"`
3067}
3068
3069// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
3070func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
3071	objectMap := make(map[string]interface{})
3072	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
3073		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
3074	}
3075	if agic.Name != nil {
3076		objectMap["name"] = agic.Name
3077	}
3078	if agic.Etag != nil {
3079		objectMap["etag"] = agic.Etag
3080	}
3081	if agic.Type != nil {
3082		objectMap["type"] = agic.Type
3083	}
3084	if agic.ID != nil {
3085		objectMap["id"] = agic.ID
3086	}
3087	return json.Marshal(objectMap)
3088}
3089
3090// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
3091func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
3092	var m map[string]*json.RawMessage
3093	err := json.Unmarshal(body, &m)
3094	if err != nil {
3095		return err
3096	}
3097	for k, v := range m {
3098		switch k {
3099		case "properties":
3100			if v != nil {
3101				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
3102				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
3103				if err != nil {
3104					return err
3105				}
3106				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
3107			}
3108		case "name":
3109			if v != nil {
3110				var name string
3111				err = json.Unmarshal(*v, &name)
3112				if err != nil {
3113					return err
3114				}
3115				agic.Name = &name
3116			}
3117		case "etag":
3118			if v != nil {
3119				var etag string
3120				err = json.Unmarshal(*v, &etag)
3121				if err != nil {
3122					return err
3123				}
3124				agic.Etag = &etag
3125			}
3126		case "type":
3127			if v != nil {
3128				var typeVar string
3129				err = json.Unmarshal(*v, &typeVar)
3130				if err != nil {
3131					return err
3132				}
3133				agic.Type = &typeVar
3134			}
3135		case "id":
3136			if v != nil {
3137				var ID string
3138				err = json.Unmarshal(*v, &ID)
3139				if err != nil {
3140					return err
3141				}
3142				agic.ID = &ID
3143			}
3144		}
3145	}
3146
3147	return nil
3148}
3149
3150// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
3151// gateway.
3152type ApplicationGatewayIPConfigurationPropertiesFormat struct {
3153	// Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address.
3154	Subnet *SubResource `json:"subnet,omitempty"`
3155	// ProvisioningState - Provisioning state of the application gateway subnet resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3156	ProvisioningState *string `json:"provisioningState,omitempty"`
3157}
3158
3159// ApplicationGatewayListResult response for ListApplicationGateways API service call.
3160type ApplicationGatewayListResult struct {
3161	autorest.Response `json:"-"`
3162	// Value - List of an application gateways in a resource group.
3163	Value *[]ApplicationGateway `json:"value,omitempty"`
3164	// NextLink - URL to get the next set of results.
3165	NextLink *string `json:"nextLink,omitempty"`
3166}
3167
3168// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
3169type ApplicationGatewayListResultIterator struct {
3170	i    int
3171	page ApplicationGatewayListResultPage
3172}
3173
3174// NextWithContext advances to the next value.  If there was an error making
3175// the request the iterator does not advance and the error is returned.
3176func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
3177	if tracing.IsEnabled() {
3178		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
3179		defer func() {
3180			sc := -1
3181			if iter.Response().Response.Response != nil {
3182				sc = iter.Response().Response.Response.StatusCode
3183			}
3184			tracing.EndSpan(ctx, sc, err)
3185		}()
3186	}
3187	iter.i++
3188	if iter.i < len(iter.page.Values()) {
3189		return nil
3190	}
3191	err = iter.page.NextWithContext(ctx)
3192	if err != nil {
3193		iter.i--
3194		return err
3195	}
3196	iter.i = 0
3197	return nil
3198}
3199
3200// Next advances to the next value.  If there was an error making
3201// the request the iterator does not advance and the error is returned.
3202// Deprecated: Use NextWithContext() instead.
3203func (iter *ApplicationGatewayListResultIterator) Next() error {
3204	return iter.NextWithContext(context.Background())
3205}
3206
3207// NotDone returns true if the enumeration should be started or is not yet complete.
3208func (iter ApplicationGatewayListResultIterator) NotDone() bool {
3209	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3210}
3211
3212// Response returns the raw server response from the last page request.
3213func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
3214	return iter.page.Response()
3215}
3216
3217// Value returns the current value or a zero-initialized value if the
3218// iterator has advanced beyond the end of the collection.
3219func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
3220	if !iter.page.NotDone() {
3221		return ApplicationGateway{}
3222	}
3223	return iter.page.Values()[iter.i]
3224}
3225
3226// Creates a new instance of the ApplicationGatewayListResultIterator type.
3227func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
3228	return ApplicationGatewayListResultIterator{page: page}
3229}
3230
3231// IsEmpty returns true if the ListResult contains no values.
3232func (aglr ApplicationGatewayListResult) IsEmpty() bool {
3233	return aglr.Value == nil || len(*aglr.Value) == 0
3234}
3235
3236// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
3237// It returns nil if no more results exist.
3238func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
3239	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
3240		return nil, nil
3241	}
3242	return autorest.Prepare((&http.Request{}).WithContext(ctx),
3243		autorest.AsJSON(),
3244		autorest.AsGet(),
3245		autorest.WithBaseURL(to.String(aglr.NextLink)))
3246}
3247
3248// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
3249type ApplicationGatewayListResultPage struct {
3250	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
3251	aglr ApplicationGatewayListResult
3252}
3253
3254// NextWithContext advances to the next page of values.  If there was an error making
3255// the request the page does not advance and the error is returned.
3256func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
3257	if tracing.IsEnabled() {
3258		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
3259		defer func() {
3260			sc := -1
3261			if page.Response().Response.Response != nil {
3262				sc = page.Response().Response.Response.StatusCode
3263			}
3264			tracing.EndSpan(ctx, sc, err)
3265		}()
3266	}
3267	next, err := page.fn(ctx, page.aglr)
3268	if err != nil {
3269		return err
3270	}
3271	page.aglr = next
3272	return nil
3273}
3274
3275// Next advances to the next page of values.  If there was an error making
3276// the request the page does not advance and the error is returned.
3277// Deprecated: Use NextWithContext() instead.
3278func (page *ApplicationGatewayListResultPage) Next() error {
3279	return page.NextWithContext(context.Background())
3280}
3281
3282// NotDone returns true if the page enumeration should be started or is not yet complete.
3283func (page ApplicationGatewayListResultPage) NotDone() bool {
3284	return !page.aglr.IsEmpty()
3285}
3286
3287// Response returns the raw server response from the last page request.
3288func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
3289	return page.aglr
3290}
3291
3292// Values returns the slice of values for the current page or nil if there are no values.
3293func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
3294	if page.aglr.IsEmpty() {
3295		return nil
3296	}
3297	return *page.aglr.Value
3298}
3299
3300// Creates a new instance of the ApplicationGatewayListResultPage type.
3301func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
3302	return ApplicationGatewayListResultPage{fn: getNextPage}
3303}
3304
3305// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
3306type ApplicationGatewayPathRule struct {
3307	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
3308	// Name - Name of the path rule that is unique within an Application Gateway.
3309	Name *string `json:"name,omitempty"`
3310	// Etag - A unique read-only string that changes whenever the resource is updated.
3311	Etag *string `json:"etag,omitempty"`
3312	// Type - Type of the resource.
3313	Type *string `json:"type,omitempty"`
3314	// ID - Resource ID.
3315	ID *string `json:"id,omitempty"`
3316}
3317
3318// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
3319func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
3320	objectMap := make(map[string]interface{})
3321	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
3322		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
3323	}
3324	if agpr.Name != nil {
3325		objectMap["name"] = agpr.Name
3326	}
3327	if agpr.Etag != nil {
3328		objectMap["etag"] = agpr.Etag
3329	}
3330	if agpr.Type != nil {
3331		objectMap["type"] = agpr.Type
3332	}
3333	if agpr.ID != nil {
3334		objectMap["id"] = agpr.ID
3335	}
3336	return json.Marshal(objectMap)
3337}
3338
3339// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
3340func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
3341	var m map[string]*json.RawMessage
3342	err := json.Unmarshal(body, &m)
3343	if err != nil {
3344		return err
3345	}
3346	for k, v := range m {
3347		switch k {
3348		case "properties":
3349			if v != nil {
3350				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
3351				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
3352				if err != nil {
3353					return err
3354				}
3355				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
3356			}
3357		case "name":
3358			if v != nil {
3359				var name string
3360				err = json.Unmarshal(*v, &name)
3361				if err != nil {
3362					return err
3363				}
3364				agpr.Name = &name
3365			}
3366		case "etag":
3367			if v != nil {
3368				var etag string
3369				err = json.Unmarshal(*v, &etag)
3370				if err != nil {
3371					return err
3372				}
3373				agpr.Etag = &etag
3374			}
3375		case "type":
3376			if v != nil {
3377				var typeVar string
3378				err = json.Unmarshal(*v, &typeVar)
3379				if err != nil {
3380					return err
3381				}
3382				agpr.Type = &typeVar
3383			}
3384		case "id":
3385			if v != nil {
3386				var ID string
3387				err = json.Unmarshal(*v, &ID)
3388				if err != nil {
3389					return err
3390				}
3391				agpr.ID = &ID
3392			}
3393		}
3394	}
3395
3396	return nil
3397}
3398
3399// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
3400type ApplicationGatewayPathRulePropertiesFormat struct {
3401	// Paths - Path rules of URL path map.
3402	Paths *[]string `json:"paths,omitempty"`
3403	// BackendAddressPool - Backend address pool resource of URL path map path rule.
3404	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3405	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
3406	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3407	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
3408	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3409	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
3410	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
3411	// ProvisioningState - Path rule of URL path map resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3412	ProvisioningState *string `json:"provisioningState,omitempty"`
3413}
3414
3415// ApplicationGatewayProbe probe of the application gateway.
3416type ApplicationGatewayProbe struct {
3417	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
3418	// Name - Name of the probe that is unique within an Application Gateway.
3419	Name *string `json:"name,omitempty"`
3420	// Etag - A unique read-only string that changes whenever the resource is updated.
3421	Etag *string `json:"etag,omitempty"`
3422	// Type - Type of the resource.
3423	Type *string `json:"type,omitempty"`
3424	// ID - Resource ID.
3425	ID *string `json:"id,omitempty"`
3426}
3427
3428// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
3429func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
3430	objectMap := make(map[string]interface{})
3431	if agp.ApplicationGatewayProbePropertiesFormat != nil {
3432		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
3433	}
3434	if agp.Name != nil {
3435		objectMap["name"] = agp.Name
3436	}
3437	if agp.Etag != nil {
3438		objectMap["etag"] = agp.Etag
3439	}
3440	if agp.Type != nil {
3441		objectMap["type"] = agp.Type
3442	}
3443	if agp.ID != nil {
3444		objectMap["id"] = agp.ID
3445	}
3446	return json.Marshal(objectMap)
3447}
3448
3449// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
3450func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
3451	var m map[string]*json.RawMessage
3452	err := json.Unmarshal(body, &m)
3453	if err != nil {
3454		return err
3455	}
3456	for k, v := range m {
3457		switch k {
3458		case "properties":
3459			if v != nil {
3460				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
3461				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
3462				if err != nil {
3463					return err
3464				}
3465				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
3466			}
3467		case "name":
3468			if v != nil {
3469				var name string
3470				err = json.Unmarshal(*v, &name)
3471				if err != nil {
3472					return err
3473				}
3474				agp.Name = &name
3475			}
3476		case "etag":
3477			if v != nil {
3478				var etag string
3479				err = json.Unmarshal(*v, &etag)
3480				if err != nil {
3481					return err
3482				}
3483				agp.Etag = &etag
3484			}
3485		case "type":
3486			if v != nil {
3487				var typeVar string
3488				err = json.Unmarshal(*v, &typeVar)
3489				if err != nil {
3490					return err
3491				}
3492				agp.Type = &typeVar
3493			}
3494		case "id":
3495			if v != nil {
3496				var ID string
3497				err = json.Unmarshal(*v, &ID)
3498				if err != nil {
3499					return err
3500				}
3501				agp.ID = &ID
3502			}
3503		}
3504	}
3505
3506	return nil
3507}
3508
3509// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match
3510type ApplicationGatewayProbeHealthResponseMatch struct {
3511	// Body - Body that must be contained in the health response. Default value is empty.
3512	Body *string `json:"body,omitempty"`
3513	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
3514	StatusCodes *[]string `json:"statusCodes,omitempty"`
3515}
3516
3517// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
3518type ApplicationGatewayProbePropertiesFormat struct {
3519	// Protocol - The protocol used for the probe. Possible values are 'Http' and 'Https'. Possible values include: 'HTTP', 'HTTPS'
3520	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3521	// Host - Host name to send the probe to.
3522	Host *string `json:"host,omitempty"`
3523	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>
3524	Path *string `json:"path,omitempty"`
3525	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
3526	Interval *int32 `json:"interval,omitempty"`
3527	// 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.
3528	Timeout *int32 `json:"timeout,omitempty"`
3529	// 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.
3530	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
3531	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3532	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3533	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
3534	MinServers *int32 `json:"minServers,omitempty"`
3535	// Match - Criterion for classifying a healthy probe response.
3536	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3537	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3538	ProvisioningState *string `json:"provisioningState,omitempty"`
3539}
3540
3541// ApplicationGatewayPropertiesFormat properties of the application gateway.
3542type ApplicationGatewayPropertiesFormat struct {
3543	// Sku - SKU of the application gateway resource.
3544	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
3545	// SslPolicy - SSL policy of the application gateway resource.
3546	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
3547	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
3548	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
3549	// GatewayIPConfigurations - Subnets of application the gateway resource.
3550	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
3551	// AuthenticationCertificates - Authentication certificates of the application gateway resource.
3552	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
3553	// TrustedRootCertificates - Trusted Root certificates of the application gateway resource.
3554	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
3555	// SslCertificates - SSL certificates of the application gateway resource.
3556	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
3557	// FrontendIPConfigurations - Frontend IP addresses of the application gateway resource.
3558	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
3559	// FrontendPorts - Frontend ports of the application gateway resource.
3560	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
3561	// Probes - Probes of the application gateway resource.
3562	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
3563	// BackendAddressPools - Backend address pool of the application gateway resource.
3564	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
3565	// BackendHTTPSettingsCollection - Backend http settings of the application gateway resource.
3566	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
3567	// HTTPListeners - Http listeners of the application gateway resource.
3568	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
3569	// URLPathMaps - URL path map of the application gateway resource.
3570	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
3571	// RequestRoutingRules - Request routing rules of the application gateway resource.
3572	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
3573	// RewriteRuleSets - Rewrite rules for the application gateway resource.
3574	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
3575	// RedirectConfigurations - Redirect configurations of the application gateway resource.
3576	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
3577	// WebApplicationFirewallConfiguration - Web application firewall configuration.
3578	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
3579	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
3580	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
3581	// EnableFips - Whether FIPS is enabled on the application gateway resource.
3582	EnableFips *bool `json:"enableFips,omitempty"`
3583	// AutoscaleConfiguration - Autoscale Configuration.
3584	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
3585	// ResourceGUID - Resource GUID property of the application gateway resource.
3586	ResourceGUID *string `json:"resourceGuid,omitempty"`
3587	// ProvisioningState - Provisioning state of the application gateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3588	ProvisioningState *string `json:"provisioningState,omitempty"`
3589	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
3590	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3591}
3592
3593// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
3594type ApplicationGatewayRedirectConfiguration struct {
3595	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
3596	// Name - Name of the redirect configuration that is unique within an Application Gateway.
3597	Name *string `json:"name,omitempty"`
3598	// Etag - A unique read-only string that changes whenever the resource is updated.
3599	Etag *string `json:"etag,omitempty"`
3600	// Type - Type of the resource.
3601	Type *string `json:"type,omitempty"`
3602	// ID - Resource ID.
3603	ID *string `json:"id,omitempty"`
3604}
3605
3606// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
3607func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
3608	objectMap := make(map[string]interface{})
3609	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
3610		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
3611	}
3612	if agrc.Name != nil {
3613		objectMap["name"] = agrc.Name
3614	}
3615	if agrc.Etag != nil {
3616		objectMap["etag"] = agrc.Etag
3617	}
3618	if agrc.Type != nil {
3619		objectMap["type"] = agrc.Type
3620	}
3621	if agrc.ID != nil {
3622		objectMap["id"] = agrc.ID
3623	}
3624	return json.Marshal(objectMap)
3625}
3626
3627// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
3628func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
3629	var m map[string]*json.RawMessage
3630	err := json.Unmarshal(body, &m)
3631	if err != nil {
3632		return err
3633	}
3634	for k, v := range m {
3635		switch k {
3636		case "properties":
3637			if v != nil {
3638				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
3639				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
3640				if err != nil {
3641					return err
3642				}
3643				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
3644			}
3645		case "name":
3646			if v != nil {
3647				var name string
3648				err = json.Unmarshal(*v, &name)
3649				if err != nil {
3650					return err
3651				}
3652				agrc.Name = &name
3653			}
3654		case "etag":
3655			if v != nil {
3656				var etag string
3657				err = json.Unmarshal(*v, &etag)
3658				if err != nil {
3659					return err
3660				}
3661				agrc.Etag = &etag
3662			}
3663		case "type":
3664			if v != nil {
3665				var typeVar string
3666				err = json.Unmarshal(*v, &typeVar)
3667				if err != nil {
3668					return err
3669				}
3670				agrc.Type = &typeVar
3671			}
3672		case "id":
3673			if v != nil {
3674				var ID string
3675				err = json.Unmarshal(*v, &ID)
3676				if err != nil {
3677					return err
3678				}
3679				agrc.ID = &ID
3680			}
3681		}
3682	}
3683
3684	return nil
3685}
3686
3687// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
3688// application gateway.
3689type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
3690	// RedirectType - Supported http redirection types - Permanent, Temporary, Found, SeeOther. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
3691	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
3692	// TargetListener - Reference to a listener to redirect the request to.
3693	TargetListener *SubResource `json:"targetListener,omitempty"`
3694	// TargetURL - Url to redirect the request to.
3695	TargetURL *string `json:"targetUrl,omitempty"`
3696	// IncludePath - Include path in the redirected url.
3697	IncludePath *bool `json:"includePath,omitempty"`
3698	// IncludeQueryString - Include query string in the redirected url.
3699	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
3700	// RequestRoutingRules - Request routing specifying redirect configuration.
3701	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
3702	// URLPathMaps - Url path maps specifying default redirect configuration.
3703	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
3704	// PathRules - Path rules specifying redirect configuration.
3705	PathRules *[]SubResource `json:"pathRules,omitempty"`
3706}
3707
3708// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
3709type ApplicationGatewayRequestRoutingRule struct {
3710	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
3711	// Name - Name of the request routing rule that is unique within an Application Gateway.
3712	Name *string `json:"name,omitempty"`
3713	// Etag - A unique read-only string that changes whenever the resource is updated.
3714	Etag *string `json:"etag,omitempty"`
3715	// Type - Type of the resource.
3716	Type *string `json:"type,omitempty"`
3717	// ID - Resource ID.
3718	ID *string `json:"id,omitempty"`
3719}
3720
3721// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
3722func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
3723	objectMap := make(map[string]interface{})
3724	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
3725		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
3726	}
3727	if agrrr.Name != nil {
3728		objectMap["name"] = agrrr.Name
3729	}
3730	if agrrr.Etag != nil {
3731		objectMap["etag"] = agrrr.Etag
3732	}
3733	if agrrr.Type != nil {
3734		objectMap["type"] = agrrr.Type
3735	}
3736	if agrrr.ID != nil {
3737		objectMap["id"] = agrrr.ID
3738	}
3739	return json.Marshal(objectMap)
3740}
3741
3742// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
3743func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
3744	var m map[string]*json.RawMessage
3745	err := json.Unmarshal(body, &m)
3746	if err != nil {
3747		return err
3748	}
3749	for k, v := range m {
3750		switch k {
3751		case "properties":
3752			if v != nil {
3753				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
3754				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
3755				if err != nil {
3756					return err
3757				}
3758				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
3759			}
3760		case "name":
3761			if v != nil {
3762				var name string
3763				err = json.Unmarshal(*v, &name)
3764				if err != nil {
3765					return err
3766				}
3767				agrrr.Name = &name
3768			}
3769		case "etag":
3770			if v != nil {
3771				var etag string
3772				err = json.Unmarshal(*v, &etag)
3773				if err != nil {
3774					return err
3775				}
3776				agrrr.Etag = &etag
3777			}
3778		case "type":
3779			if v != nil {
3780				var typeVar string
3781				err = json.Unmarshal(*v, &typeVar)
3782				if err != nil {
3783					return err
3784				}
3785				agrrr.Type = &typeVar
3786			}
3787		case "id":
3788			if v != nil {
3789				var ID string
3790				err = json.Unmarshal(*v, &ID)
3791				if err != nil {
3792					return err
3793				}
3794				agrrr.ID = &ID
3795			}
3796		}
3797	}
3798
3799	return nil
3800}
3801
3802// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
3803// application gateway.
3804type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
3805	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
3806	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
3807	// BackendAddressPool - Backend address pool resource of the application gateway.
3808	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3809	// BackendHTTPSettings - Backend http settings resource of the application gateway.
3810	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3811	// HTTPListener - Http listener resource of the application gateway.
3812	HTTPListener *SubResource `json:"httpListener,omitempty"`
3813	// URLPathMap - URL path map resource of the application gateway.
3814	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
3815	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
3816	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
3817	// RedirectConfiguration - Redirect configuration resource of the application gateway.
3818	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3819	// ProvisioningState - Provisioning state of the request routing rule resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3820	ProvisioningState *string `json:"provisioningState,omitempty"`
3821}
3822
3823// ApplicationGatewayRewriteRule rewrite rule of an application gateway.
3824type ApplicationGatewayRewriteRule struct {
3825	// Name - Name of the rewrite rule that is unique within an Application Gateway.
3826	Name *string `json:"name,omitempty"`
3827	// ActionSet - Set of actions to be done as part of the rewrite Rule.
3828	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
3829}
3830
3831// ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
3832type ApplicationGatewayRewriteRuleActionSet struct {
3833	// RequestHeaderConfigurations - Request Header Actions in the Action Set
3834	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
3835	// ResponseHeaderConfigurations - Response Header Actions in the Action Set
3836	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
3837}
3838
3839// ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
3840type ApplicationGatewayRewriteRuleSet struct {
3841	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
3842	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
3843	Name *string `json:"name,omitempty"`
3844	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3845	Etag *string `json:"etag,omitempty"`
3846	// ID - Resource ID.
3847	ID *string `json:"id,omitempty"`
3848}
3849
3850// MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
3851func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
3852	objectMap := make(map[string]interface{})
3853	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
3854		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
3855	}
3856	if agrrs.Name != nil {
3857		objectMap["name"] = agrrs.Name
3858	}
3859	if agrrs.ID != nil {
3860		objectMap["id"] = agrrs.ID
3861	}
3862	return json.Marshal(objectMap)
3863}
3864
3865// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
3866func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
3867	var m map[string]*json.RawMessage
3868	err := json.Unmarshal(body, &m)
3869	if err != nil {
3870		return err
3871	}
3872	for k, v := range m {
3873		switch k {
3874		case "properties":
3875			if v != nil {
3876				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
3877				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
3878				if err != nil {
3879					return err
3880				}
3881				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
3882			}
3883		case "name":
3884			if v != nil {
3885				var name string
3886				err = json.Unmarshal(*v, &name)
3887				if err != nil {
3888					return err
3889				}
3890				agrrs.Name = &name
3891			}
3892		case "etag":
3893			if v != nil {
3894				var etag string
3895				err = json.Unmarshal(*v, &etag)
3896				if err != nil {
3897					return err
3898				}
3899				agrrs.Etag = &etag
3900			}
3901		case "id":
3902			if v != nil {
3903				var ID string
3904				err = json.Unmarshal(*v, &ID)
3905				if err != nil {
3906					return err
3907				}
3908				agrrs.ID = &ID
3909			}
3910		}
3911	}
3912
3913	return nil
3914}
3915
3916// ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
3917// gateway.
3918type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
3919	// RewriteRules - Rewrite rules in the rewrite rule set.
3920	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
3921	// ProvisioningState - READ-ONLY; Provisioning state of the rewrite rule set resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3922	ProvisioningState *string `json:"provisioningState,omitempty"`
3923}
3924
3925// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
3926// long-running operation.
3927type ApplicationGatewaysBackendHealthFuture struct {
3928	azure.Future
3929}
3930
3931// Result returns the result of the asynchronous operation.
3932// If the operation has not completed it will return an error.
3933func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
3934	var done bool
3935	done, err = future.DoneWithContext(context.Background(), client)
3936	if err != nil {
3937		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
3938		return
3939	}
3940	if !done {
3941		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
3942		return
3943	}
3944	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3945	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
3946		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
3947		if err != nil {
3948			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
3949		}
3950	}
3951	return
3952}
3953
3954// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
3955// long-running operation.
3956type ApplicationGatewaysCreateOrUpdateFuture struct {
3957	azure.Future
3958}
3959
3960// Result returns the result of the asynchronous operation.
3961// If the operation has not completed it will return an error.
3962func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
3963	var done bool
3964	done, err = future.DoneWithContext(context.Background(), client)
3965	if err != nil {
3966		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
3967		return
3968	}
3969	if !done {
3970		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
3971		return
3972	}
3973	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3974	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
3975		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
3976		if err != nil {
3977			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
3978		}
3979	}
3980	return
3981}
3982
3983// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
3984// long-running operation.
3985type ApplicationGatewaysDeleteFuture struct {
3986	azure.Future
3987}
3988
3989// Result returns the result of the asynchronous operation.
3990// If the operation has not completed it will return an error.
3991func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
3992	var done bool
3993	done, err = future.DoneWithContext(context.Background(), client)
3994	if err != nil {
3995		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
3996		return
3997	}
3998	if !done {
3999		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
4000		return
4001	}
4002	ar.Response = future.Response()
4003	return
4004}
4005
4006// ApplicationGatewaySku SKU of an application gateway
4007type ApplicationGatewaySku struct {
4008	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
4009	Name ApplicationGatewaySkuName `json:"name,omitempty"`
4010	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
4011	Tier ApplicationGatewayTier `json:"tier,omitempty"`
4012	// Capacity - Capacity (instance count) of an application gateway.
4013	Capacity *int32 `json:"capacity,omitempty"`
4014}
4015
4016// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
4017type ApplicationGatewaySslCertificate struct {
4018	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
4019	// Name - Name of the SSL certificate that is unique within an Application Gateway.
4020	Name *string `json:"name,omitempty"`
4021	// Etag - A unique read-only string that changes whenever the resource is updated.
4022	Etag *string `json:"etag,omitempty"`
4023	// Type - Type of the resource.
4024	Type *string `json:"type,omitempty"`
4025	// ID - Resource ID.
4026	ID *string `json:"id,omitempty"`
4027}
4028
4029// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
4030func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
4031	objectMap := make(map[string]interface{})
4032	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
4033		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
4034	}
4035	if agsc.Name != nil {
4036		objectMap["name"] = agsc.Name
4037	}
4038	if agsc.Etag != nil {
4039		objectMap["etag"] = agsc.Etag
4040	}
4041	if agsc.Type != nil {
4042		objectMap["type"] = agsc.Type
4043	}
4044	if agsc.ID != nil {
4045		objectMap["id"] = agsc.ID
4046	}
4047	return json.Marshal(objectMap)
4048}
4049
4050// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
4051func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
4052	var m map[string]*json.RawMessage
4053	err := json.Unmarshal(body, &m)
4054	if err != nil {
4055		return err
4056	}
4057	for k, v := range m {
4058		switch k {
4059		case "properties":
4060			if v != nil {
4061				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
4062				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
4063				if err != nil {
4064					return err
4065				}
4066				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
4067			}
4068		case "name":
4069			if v != nil {
4070				var name string
4071				err = json.Unmarshal(*v, &name)
4072				if err != nil {
4073					return err
4074				}
4075				agsc.Name = &name
4076			}
4077		case "etag":
4078			if v != nil {
4079				var etag string
4080				err = json.Unmarshal(*v, &etag)
4081				if err != nil {
4082					return err
4083				}
4084				agsc.Etag = &etag
4085			}
4086		case "type":
4087			if v != nil {
4088				var typeVar string
4089				err = json.Unmarshal(*v, &typeVar)
4090				if err != nil {
4091					return err
4092				}
4093				agsc.Type = &typeVar
4094			}
4095		case "id":
4096			if v != nil {
4097				var ID string
4098				err = json.Unmarshal(*v, &ID)
4099				if err != nil {
4100					return err
4101				}
4102				agsc.ID = &ID
4103			}
4104		}
4105	}
4106
4107	return nil
4108}
4109
4110// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
4111// gateway.
4112type ApplicationGatewaySslCertificatePropertiesFormat struct {
4113	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
4114	Data *string `json:"data,omitempty"`
4115	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
4116	Password *string `json:"password,omitempty"`
4117	// PublicCertData - Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
4118	PublicCertData *string `json:"publicCertData,omitempty"`
4119	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4120	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4121	// ProvisioningState - Provisioning state of the SSL certificate resource Possible values are: 'Updating', 'Deleting', and 'Failed'.
4122	ProvisioningState *string `json:"provisioningState,omitempty"`
4123}
4124
4125// ApplicationGatewaySslPolicy application Gateway Ssl policy.
4126type ApplicationGatewaySslPolicy struct {
4127	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
4128	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
4129	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
4130	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
4131	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
4132	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
4133	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
4134	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4135	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4136	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4137}
4138
4139// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy
4140type ApplicationGatewaySslPredefinedPolicy struct {
4141	autorest.Response `json:"-"`
4142	// Name - Name of the Ssl predefined policy.
4143	Name                                                   *string `json:"name,omitempty"`
4144	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
4145	// ID - Resource ID.
4146	ID *string `json:"id,omitempty"`
4147}
4148
4149// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
4150func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
4151	objectMap := make(map[string]interface{})
4152	if agspp.Name != nil {
4153		objectMap["name"] = agspp.Name
4154	}
4155	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
4156		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4157	}
4158	if agspp.ID != nil {
4159		objectMap["id"] = agspp.ID
4160	}
4161	return json.Marshal(objectMap)
4162}
4163
4164// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
4165func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
4166	var m map[string]*json.RawMessage
4167	err := json.Unmarshal(body, &m)
4168	if err != nil {
4169		return err
4170	}
4171	for k, v := range m {
4172		switch k {
4173		case "name":
4174			if v != nil {
4175				var name string
4176				err = json.Unmarshal(*v, &name)
4177				if err != nil {
4178					return err
4179				}
4180				agspp.Name = &name
4181			}
4182		case "properties":
4183			if v != nil {
4184				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4185				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
4186				if err != nil {
4187					return err
4188				}
4189				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
4190			}
4191		case "id":
4192			if v != nil {
4193				var ID string
4194				err = json.Unmarshal(*v, &ID)
4195				if err != nil {
4196					return err
4197				}
4198				agspp.ID = &ID
4199			}
4200		}
4201	}
4202
4203	return nil
4204}
4205
4206// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
4207// ApplicationGatewaySslPredefinedPolicy
4208type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
4209	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
4210	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4211	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4212	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4213}
4214
4215// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
4216// long-running operation.
4217type ApplicationGatewaysStartFuture struct {
4218	azure.Future
4219}
4220
4221// Result returns the result of the asynchronous operation.
4222// If the operation has not completed it will return an error.
4223func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4224	var done bool
4225	done, err = future.DoneWithContext(context.Background(), client)
4226	if err != nil {
4227		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
4228		return
4229	}
4230	if !done {
4231		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
4232		return
4233	}
4234	ar.Response = future.Response()
4235	return
4236}
4237
4238// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
4239// operation.
4240type ApplicationGatewaysStopFuture struct {
4241	azure.Future
4242}
4243
4244// Result returns the result of the asynchronous operation.
4245// If the operation has not completed it will return an error.
4246func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4247	var done bool
4248	done, err = future.DoneWithContext(context.Background(), client)
4249	if err != nil {
4250		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
4251		return
4252	}
4253	if !done {
4254		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
4255		return
4256	}
4257	ar.Response = future.Response()
4258	return
4259}
4260
4261// ApplicationGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
4262// long-running operation.
4263type ApplicationGatewaysUpdateTagsFuture struct {
4264	azure.Future
4265}
4266
4267// Result returns the result of the asynchronous operation.
4268// If the operation has not completed it will return an error.
4269func (future *ApplicationGatewaysUpdateTagsFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4270	var done bool
4271	done, err = future.DoneWithContext(context.Background(), client)
4272	if err != nil {
4273		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
4274		return
4275	}
4276	if !done {
4277		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysUpdateTagsFuture")
4278		return
4279	}
4280	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4281	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4282		ag, err = client.UpdateTagsResponder(ag.Response.Response)
4283		if err != nil {
4284			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", ag.Response.Response, "Failure responding to request")
4285		}
4286	}
4287	return
4288}
4289
4290// ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
4291type ApplicationGatewayTrustedRootCertificate struct {
4292	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
4293	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
4294	Name *string `json:"name,omitempty"`
4295	// Etag - A unique read-only string that changes whenever the resource is updated.
4296	Etag *string `json:"etag,omitempty"`
4297	// Type - Type of the resource.
4298	Type *string `json:"type,omitempty"`
4299	// ID - Resource ID.
4300	ID *string `json:"id,omitempty"`
4301}
4302
4303// MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
4304func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
4305	objectMap := make(map[string]interface{})
4306	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
4307		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
4308	}
4309	if agtrc.Name != nil {
4310		objectMap["name"] = agtrc.Name
4311	}
4312	if agtrc.Etag != nil {
4313		objectMap["etag"] = agtrc.Etag
4314	}
4315	if agtrc.Type != nil {
4316		objectMap["type"] = agtrc.Type
4317	}
4318	if agtrc.ID != nil {
4319		objectMap["id"] = agtrc.ID
4320	}
4321	return json.Marshal(objectMap)
4322}
4323
4324// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
4325func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
4326	var m map[string]*json.RawMessage
4327	err := json.Unmarshal(body, &m)
4328	if err != nil {
4329		return err
4330	}
4331	for k, v := range m {
4332		switch k {
4333		case "properties":
4334			if v != nil {
4335				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
4336				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
4337				if err != nil {
4338					return err
4339				}
4340				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
4341			}
4342		case "name":
4343			if v != nil {
4344				var name string
4345				err = json.Unmarshal(*v, &name)
4346				if err != nil {
4347					return err
4348				}
4349				agtrc.Name = &name
4350			}
4351		case "etag":
4352			if v != nil {
4353				var etag string
4354				err = json.Unmarshal(*v, &etag)
4355				if err != nil {
4356					return err
4357				}
4358				agtrc.Etag = &etag
4359			}
4360		case "type":
4361			if v != nil {
4362				var typeVar string
4363				err = json.Unmarshal(*v, &typeVar)
4364				if err != nil {
4365					return err
4366				}
4367				agtrc.Type = &typeVar
4368			}
4369		case "id":
4370			if v != nil {
4371				var ID string
4372				err = json.Unmarshal(*v, &ID)
4373				if err != nil {
4374					return err
4375				}
4376				agtrc.ID = &ID
4377			}
4378		}
4379	}
4380
4381	return nil
4382}
4383
4384// ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
4385// application gateway.
4386type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
4387	// Data - Certificate public data.
4388	Data *string `json:"data,omitempty"`
4389	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4390	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4391	// ProvisioningState - Provisioning state of the trusted root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4392	ProvisioningState *string `json:"provisioningState,omitempty"`
4393}
4394
4395// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
4396// PathBasedRouting.
4397type ApplicationGatewayURLPathMap struct {
4398	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
4399	// Name - Name of the URL path map that is unique within an Application Gateway.
4400	Name *string `json:"name,omitempty"`
4401	// Etag - A unique read-only string that changes whenever the resource is updated.
4402	Etag *string `json:"etag,omitempty"`
4403	// Type - Type of the resource.
4404	Type *string `json:"type,omitempty"`
4405	// ID - Resource ID.
4406	ID *string `json:"id,omitempty"`
4407}
4408
4409// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
4410func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
4411	objectMap := make(map[string]interface{})
4412	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
4413		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
4414	}
4415	if agupm.Name != nil {
4416		objectMap["name"] = agupm.Name
4417	}
4418	if agupm.Etag != nil {
4419		objectMap["etag"] = agupm.Etag
4420	}
4421	if agupm.Type != nil {
4422		objectMap["type"] = agupm.Type
4423	}
4424	if agupm.ID != nil {
4425		objectMap["id"] = agupm.ID
4426	}
4427	return json.Marshal(objectMap)
4428}
4429
4430// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
4431func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
4432	var m map[string]*json.RawMessage
4433	err := json.Unmarshal(body, &m)
4434	if err != nil {
4435		return err
4436	}
4437	for k, v := range m {
4438		switch k {
4439		case "properties":
4440			if v != nil {
4441				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
4442				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
4443				if err != nil {
4444					return err
4445				}
4446				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
4447			}
4448		case "name":
4449			if v != nil {
4450				var name string
4451				err = json.Unmarshal(*v, &name)
4452				if err != nil {
4453					return err
4454				}
4455				agupm.Name = &name
4456			}
4457		case "etag":
4458			if v != nil {
4459				var etag string
4460				err = json.Unmarshal(*v, &etag)
4461				if err != nil {
4462					return err
4463				}
4464				agupm.Etag = &etag
4465			}
4466		case "type":
4467			if v != nil {
4468				var typeVar string
4469				err = json.Unmarshal(*v, &typeVar)
4470				if err != nil {
4471					return err
4472				}
4473				agupm.Type = &typeVar
4474			}
4475		case "id":
4476			if v != nil {
4477				var ID string
4478				err = json.Unmarshal(*v, &ID)
4479				if err != nil {
4480					return err
4481				}
4482				agupm.ID = &ID
4483			}
4484		}
4485	}
4486
4487	return nil
4488}
4489
4490// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
4491type ApplicationGatewayURLPathMapPropertiesFormat struct {
4492	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
4493	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
4494	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
4495	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
4496	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
4497	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
4498	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
4499	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
4500	// PathRules - Path rule of URL path map resource.
4501	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
4502	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4503	ProvisioningState *string `json:"provisioningState,omitempty"`
4504}
4505
4506// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
4507// configuration.
4508type ApplicationGatewayWebApplicationFirewallConfiguration struct {
4509	// Enabled - Whether the web application firewall is enabled or not.
4510	Enabled *bool `json:"enabled,omitempty"`
4511	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
4512	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
4513	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
4514	RuleSetType *string `json:"ruleSetType,omitempty"`
4515	// RuleSetVersion - The version of the rule set type.
4516	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
4517	// DisabledRuleGroups - The disabled rule groups.
4518	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
4519	// RequestBodyCheck - Whether allow WAF to check request Body.
4520	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
4521	// MaxRequestBodySize - Maximum request body size for WAF.
4522	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
4523	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
4524	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
4525	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
4526	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
4527	// Exclusions - The exclusion list.
4528	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
4529}
4530
4531// ApplicationSecurityGroup an application security group in a resource group.
4532type ApplicationSecurityGroup struct {
4533	autorest.Response `json:"-"`
4534	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
4535	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
4536	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4537	Etag *string `json:"etag,omitempty"`
4538	// ID - Resource ID.
4539	ID *string `json:"id,omitempty"`
4540	// Name - READ-ONLY; Resource name.
4541	Name *string `json:"name,omitempty"`
4542	// Type - READ-ONLY; Resource type.
4543	Type *string `json:"type,omitempty"`
4544	// Location - Resource location.
4545	Location *string `json:"location,omitempty"`
4546	// Tags - Resource tags.
4547	Tags map[string]*string `json:"tags"`
4548}
4549
4550// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
4551func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
4552	objectMap := make(map[string]interface{})
4553	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
4554		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
4555	}
4556	if asg.ID != nil {
4557		objectMap["id"] = asg.ID
4558	}
4559	if asg.Location != nil {
4560		objectMap["location"] = asg.Location
4561	}
4562	if asg.Tags != nil {
4563		objectMap["tags"] = asg.Tags
4564	}
4565	return json.Marshal(objectMap)
4566}
4567
4568// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
4569func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
4570	var m map[string]*json.RawMessage
4571	err := json.Unmarshal(body, &m)
4572	if err != nil {
4573		return err
4574	}
4575	for k, v := range m {
4576		switch k {
4577		case "properties":
4578			if v != nil {
4579				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
4580				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
4581				if err != nil {
4582					return err
4583				}
4584				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
4585			}
4586		case "etag":
4587			if v != nil {
4588				var etag string
4589				err = json.Unmarshal(*v, &etag)
4590				if err != nil {
4591					return err
4592				}
4593				asg.Etag = &etag
4594			}
4595		case "id":
4596			if v != nil {
4597				var ID string
4598				err = json.Unmarshal(*v, &ID)
4599				if err != nil {
4600					return err
4601				}
4602				asg.ID = &ID
4603			}
4604		case "name":
4605			if v != nil {
4606				var name string
4607				err = json.Unmarshal(*v, &name)
4608				if err != nil {
4609					return err
4610				}
4611				asg.Name = &name
4612			}
4613		case "type":
4614			if v != nil {
4615				var typeVar string
4616				err = json.Unmarshal(*v, &typeVar)
4617				if err != nil {
4618					return err
4619				}
4620				asg.Type = &typeVar
4621			}
4622		case "location":
4623			if v != nil {
4624				var location string
4625				err = json.Unmarshal(*v, &location)
4626				if err != nil {
4627					return err
4628				}
4629				asg.Location = &location
4630			}
4631		case "tags":
4632			if v != nil {
4633				var tags map[string]*string
4634				err = json.Unmarshal(*v, &tags)
4635				if err != nil {
4636					return err
4637				}
4638				asg.Tags = tags
4639			}
4640		}
4641	}
4642
4643	return nil
4644}
4645
4646// ApplicationSecurityGroupListResult a list of application security groups.
4647type ApplicationSecurityGroupListResult struct {
4648	autorest.Response `json:"-"`
4649	// Value - A list of application security groups.
4650	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
4651	// NextLink - READ-ONLY; The URL to get the next set of results.
4652	NextLink *string `json:"nextLink,omitempty"`
4653}
4654
4655// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
4656// ApplicationSecurityGroup values.
4657type ApplicationSecurityGroupListResultIterator struct {
4658	i    int
4659	page ApplicationSecurityGroupListResultPage
4660}
4661
4662// NextWithContext advances to the next value.  If there was an error making
4663// the request the iterator does not advance and the error is returned.
4664func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
4665	if tracing.IsEnabled() {
4666		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
4667		defer func() {
4668			sc := -1
4669			if iter.Response().Response.Response != nil {
4670				sc = iter.Response().Response.Response.StatusCode
4671			}
4672			tracing.EndSpan(ctx, sc, err)
4673		}()
4674	}
4675	iter.i++
4676	if iter.i < len(iter.page.Values()) {
4677		return nil
4678	}
4679	err = iter.page.NextWithContext(ctx)
4680	if err != nil {
4681		iter.i--
4682		return err
4683	}
4684	iter.i = 0
4685	return nil
4686}
4687
4688// Next advances to the next value.  If there was an error making
4689// the request the iterator does not advance and the error is returned.
4690// Deprecated: Use NextWithContext() instead.
4691func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
4692	return iter.NextWithContext(context.Background())
4693}
4694
4695// NotDone returns true if the enumeration should be started or is not yet complete.
4696func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
4697	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4698}
4699
4700// Response returns the raw server response from the last page request.
4701func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
4702	return iter.page.Response()
4703}
4704
4705// Value returns the current value or a zero-initialized value if the
4706// iterator has advanced beyond the end of the collection.
4707func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
4708	if !iter.page.NotDone() {
4709		return ApplicationSecurityGroup{}
4710	}
4711	return iter.page.Values()[iter.i]
4712}
4713
4714// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
4715func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
4716	return ApplicationSecurityGroupListResultIterator{page: page}
4717}
4718
4719// IsEmpty returns true if the ListResult contains no values.
4720func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
4721	return asglr.Value == nil || len(*asglr.Value) == 0
4722}
4723
4724// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
4725// It returns nil if no more results exist.
4726func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
4727	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
4728		return nil, nil
4729	}
4730	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4731		autorest.AsJSON(),
4732		autorest.AsGet(),
4733		autorest.WithBaseURL(to.String(asglr.NextLink)))
4734}
4735
4736// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
4737type ApplicationSecurityGroupListResultPage struct {
4738	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
4739	asglr ApplicationSecurityGroupListResult
4740}
4741
4742// NextWithContext advances to the next page of values.  If there was an error making
4743// the request the page does not advance and the error is returned.
4744func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
4745	if tracing.IsEnabled() {
4746		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
4747		defer func() {
4748			sc := -1
4749			if page.Response().Response.Response != nil {
4750				sc = page.Response().Response.Response.StatusCode
4751			}
4752			tracing.EndSpan(ctx, sc, err)
4753		}()
4754	}
4755	next, err := page.fn(ctx, page.asglr)
4756	if err != nil {
4757		return err
4758	}
4759	page.asglr = next
4760	return nil
4761}
4762
4763// Next advances to the next page of values.  If there was an error making
4764// the request the page does not advance and the error is returned.
4765// Deprecated: Use NextWithContext() instead.
4766func (page *ApplicationSecurityGroupListResultPage) Next() error {
4767	return page.NextWithContext(context.Background())
4768}
4769
4770// NotDone returns true if the page enumeration should be started or is not yet complete.
4771func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
4772	return !page.asglr.IsEmpty()
4773}
4774
4775// Response returns the raw server response from the last page request.
4776func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
4777	return page.asglr
4778}
4779
4780// Values returns the slice of values for the current page or nil if there are no values.
4781func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
4782	if page.asglr.IsEmpty() {
4783		return nil
4784	}
4785	return *page.asglr.Value
4786}
4787
4788// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
4789func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
4790	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
4791}
4792
4793// ApplicationSecurityGroupPropertiesFormat application security group properties.
4794type ApplicationSecurityGroupPropertiesFormat struct {
4795	// 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.
4796	ResourceGUID *string `json:"resourceGuid,omitempty"`
4797	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
4798	ProvisioningState *string `json:"provisioningState,omitempty"`
4799}
4800
4801// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
4802// of a long-running operation.
4803type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
4804	azure.Future
4805}
4806
4807// Result returns the result of the asynchronous operation.
4808// If the operation has not completed it will return an error.
4809func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
4810	var done bool
4811	done, err = future.DoneWithContext(context.Background(), client)
4812	if err != nil {
4813		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4814		return
4815	}
4816	if !done {
4817		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
4818		return
4819	}
4820	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4821	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
4822		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
4823		if err != nil {
4824			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
4825		}
4826	}
4827	return
4828}
4829
4830// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
4831// long-running operation.
4832type ApplicationSecurityGroupsDeleteFuture struct {
4833	azure.Future
4834}
4835
4836// Result returns the result of the asynchronous operation.
4837// If the operation has not completed it will return an error.
4838func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
4839	var done bool
4840	done, err = future.DoneWithContext(context.Background(), client)
4841	if err != nil {
4842		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
4843		return
4844	}
4845	if !done {
4846		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
4847		return
4848	}
4849	ar.Response = future.Response()
4850	return
4851}
4852
4853// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
4854// that belongs to an ExpressRouteCircuit.
4855type AuthorizationListResult struct {
4856	autorest.Response `json:"-"`
4857	// Value - The authorizations in an ExpressRoute Circuit.
4858	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
4859	// NextLink - The URL to get the next set of results.
4860	NextLink *string `json:"nextLink,omitempty"`
4861}
4862
4863// AuthorizationListResultIterator provides access to a complete listing of
4864// ExpressRouteCircuitAuthorization values.
4865type AuthorizationListResultIterator struct {
4866	i    int
4867	page AuthorizationListResultPage
4868}
4869
4870// NextWithContext advances to the next value.  If there was an error making
4871// the request the iterator does not advance and the error is returned.
4872func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
4873	if tracing.IsEnabled() {
4874		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
4875		defer func() {
4876			sc := -1
4877			if iter.Response().Response.Response != nil {
4878				sc = iter.Response().Response.Response.StatusCode
4879			}
4880			tracing.EndSpan(ctx, sc, err)
4881		}()
4882	}
4883	iter.i++
4884	if iter.i < len(iter.page.Values()) {
4885		return nil
4886	}
4887	err = iter.page.NextWithContext(ctx)
4888	if err != nil {
4889		iter.i--
4890		return err
4891	}
4892	iter.i = 0
4893	return nil
4894}
4895
4896// Next advances to the next value.  If there was an error making
4897// the request the iterator does not advance and the error is returned.
4898// Deprecated: Use NextWithContext() instead.
4899func (iter *AuthorizationListResultIterator) Next() error {
4900	return iter.NextWithContext(context.Background())
4901}
4902
4903// NotDone returns true if the enumeration should be started or is not yet complete.
4904func (iter AuthorizationListResultIterator) NotDone() bool {
4905	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4906}
4907
4908// Response returns the raw server response from the last page request.
4909func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
4910	return iter.page.Response()
4911}
4912
4913// Value returns the current value or a zero-initialized value if the
4914// iterator has advanced beyond the end of the collection.
4915func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
4916	if !iter.page.NotDone() {
4917		return ExpressRouteCircuitAuthorization{}
4918	}
4919	return iter.page.Values()[iter.i]
4920}
4921
4922// Creates a new instance of the AuthorizationListResultIterator type.
4923func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
4924	return AuthorizationListResultIterator{page: page}
4925}
4926
4927// IsEmpty returns true if the ListResult contains no values.
4928func (alr AuthorizationListResult) IsEmpty() bool {
4929	return alr.Value == nil || len(*alr.Value) == 0
4930}
4931
4932// authorizationListResultPreparer prepares a request to retrieve the next set of results.
4933// It returns nil if no more results exist.
4934func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
4935	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
4936		return nil, nil
4937	}
4938	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4939		autorest.AsJSON(),
4940		autorest.AsGet(),
4941		autorest.WithBaseURL(to.String(alr.NextLink)))
4942}
4943
4944// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
4945type AuthorizationListResultPage struct {
4946	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
4947	alr AuthorizationListResult
4948}
4949
4950// NextWithContext advances to the next page of values.  If there was an error making
4951// the request the page does not advance and the error is returned.
4952func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
4953	if tracing.IsEnabled() {
4954		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
4955		defer func() {
4956			sc := -1
4957			if page.Response().Response.Response != nil {
4958				sc = page.Response().Response.Response.StatusCode
4959			}
4960			tracing.EndSpan(ctx, sc, err)
4961		}()
4962	}
4963	next, err := page.fn(ctx, page.alr)
4964	if err != nil {
4965		return err
4966	}
4967	page.alr = next
4968	return nil
4969}
4970
4971// Next advances to the next page of values.  If there was an error making
4972// the request the page does not advance and the error is returned.
4973// Deprecated: Use NextWithContext() instead.
4974func (page *AuthorizationListResultPage) Next() error {
4975	return page.NextWithContext(context.Background())
4976}
4977
4978// NotDone returns true if the page enumeration should be started or is not yet complete.
4979func (page AuthorizationListResultPage) NotDone() bool {
4980	return !page.alr.IsEmpty()
4981}
4982
4983// Response returns the raw server response from the last page request.
4984func (page AuthorizationListResultPage) Response() AuthorizationListResult {
4985	return page.alr
4986}
4987
4988// Values returns the slice of values for the current page or nil if there are no values.
4989func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
4990	if page.alr.IsEmpty() {
4991		return nil
4992	}
4993	return *page.alr.Value
4994}
4995
4996// Creates a new instance of the AuthorizationListResultPage type.
4997func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
4998	return AuthorizationListResultPage{fn: getNextPage}
4999}
5000
5001// AuthorizationPropertiesFormat ...
5002type AuthorizationPropertiesFormat struct {
5003	// AuthorizationKey - The authorization key.
5004	AuthorizationKey *string `json:"authorizationKey,omitempty"`
5005	// AuthorizationUseStatus - AuthorizationUseStatus. Possible values are: 'Available' and 'InUse'. Possible values include: 'Available', 'InUse'
5006	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
5007	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
5008	ProvisioningState *string `json:"provisioningState,omitempty"`
5009}
5010
5011// Availability availability of the metric.
5012type Availability struct {
5013	// TimeGrain - The time grain of the availability.
5014	TimeGrain *string `json:"timeGrain,omitempty"`
5015	// Retention - The retention of the availability.
5016	Retention *string `json:"retention,omitempty"`
5017	// BlobDuration - Duration of the availability blob.
5018	BlobDuration *string `json:"blobDuration,omitempty"`
5019}
5020
5021// AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
5022// subnet.
5023type AvailableDelegation struct {
5024	// Name - The name of the AvailableDelegation resource.
5025	Name *string `json:"name,omitempty"`
5026	// ID - A unique identifier of the AvailableDelegation resource.
5027	ID *string `json:"id,omitempty"`
5028	// Type - Resource type.
5029	Type *string `json:"type,omitempty"`
5030	// ServiceName - The name of the service and resource
5031	ServiceName *string `json:"serviceName,omitempty"`
5032	// Actions - Describes the actions permitted to the service upon delegation
5033	Actions *[]string `json:"actions,omitempty"`
5034}
5035
5036// AvailableDelegationsResult an array of available delegations.
5037type AvailableDelegationsResult struct {
5038	autorest.Response `json:"-"`
5039	// Value - An array of available delegations.
5040	Value *[]AvailableDelegation `json:"value,omitempty"`
5041	// NextLink - READ-ONLY; The URL to get the next set of results.
5042	NextLink *string `json:"nextLink,omitempty"`
5043}
5044
5045// AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
5046type AvailableDelegationsResultIterator struct {
5047	i    int
5048	page AvailableDelegationsResultPage
5049}
5050
5051// NextWithContext advances to the next value.  If there was an error making
5052// the request the iterator does not advance and the error is returned.
5053func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
5054	if tracing.IsEnabled() {
5055		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
5056		defer func() {
5057			sc := -1
5058			if iter.Response().Response.Response != nil {
5059				sc = iter.Response().Response.Response.StatusCode
5060			}
5061			tracing.EndSpan(ctx, sc, err)
5062		}()
5063	}
5064	iter.i++
5065	if iter.i < len(iter.page.Values()) {
5066		return nil
5067	}
5068	err = iter.page.NextWithContext(ctx)
5069	if err != nil {
5070		iter.i--
5071		return err
5072	}
5073	iter.i = 0
5074	return nil
5075}
5076
5077// Next advances to the next value.  If there was an error making
5078// the request the iterator does not advance and the error is returned.
5079// Deprecated: Use NextWithContext() instead.
5080func (iter *AvailableDelegationsResultIterator) Next() error {
5081	return iter.NextWithContext(context.Background())
5082}
5083
5084// NotDone returns true if the enumeration should be started or is not yet complete.
5085func (iter AvailableDelegationsResultIterator) NotDone() bool {
5086	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5087}
5088
5089// Response returns the raw server response from the last page request.
5090func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
5091	return iter.page.Response()
5092}
5093
5094// Value returns the current value or a zero-initialized value if the
5095// iterator has advanced beyond the end of the collection.
5096func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
5097	if !iter.page.NotDone() {
5098		return AvailableDelegation{}
5099	}
5100	return iter.page.Values()[iter.i]
5101}
5102
5103// Creates a new instance of the AvailableDelegationsResultIterator type.
5104func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
5105	return AvailableDelegationsResultIterator{page: page}
5106}
5107
5108// IsEmpty returns true if the ListResult contains no values.
5109func (adr AvailableDelegationsResult) IsEmpty() bool {
5110	return adr.Value == nil || len(*adr.Value) == 0
5111}
5112
5113// availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
5114// It returns nil if no more results exist.
5115func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
5116	if adr.NextLink == nil || len(to.String(adr.NextLink)) < 1 {
5117		return nil, nil
5118	}
5119	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5120		autorest.AsJSON(),
5121		autorest.AsGet(),
5122		autorest.WithBaseURL(to.String(adr.NextLink)))
5123}
5124
5125// AvailableDelegationsResultPage contains a page of AvailableDelegation values.
5126type AvailableDelegationsResultPage struct {
5127	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
5128	adr AvailableDelegationsResult
5129}
5130
5131// NextWithContext advances to the next page of values.  If there was an error making
5132// the request the page does not advance and the error is returned.
5133func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
5134	if tracing.IsEnabled() {
5135		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
5136		defer func() {
5137			sc := -1
5138			if page.Response().Response.Response != nil {
5139				sc = page.Response().Response.Response.StatusCode
5140			}
5141			tracing.EndSpan(ctx, sc, err)
5142		}()
5143	}
5144	next, err := page.fn(ctx, page.adr)
5145	if err != nil {
5146		return err
5147	}
5148	page.adr = next
5149	return nil
5150}
5151
5152// Next advances to the next page of values.  If there was an error making
5153// the request the page does not advance and the error is returned.
5154// Deprecated: Use NextWithContext() instead.
5155func (page *AvailableDelegationsResultPage) Next() error {
5156	return page.NextWithContext(context.Background())
5157}
5158
5159// NotDone returns true if the page enumeration should be started or is not yet complete.
5160func (page AvailableDelegationsResultPage) NotDone() bool {
5161	return !page.adr.IsEmpty()
5162}
5163
5164// Response returns the raw server response from the last page request.
5165func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
5166	return page.adr
5167}
5168
5169// Values returns the slice of values for the current page or nil if there are no values.
5170func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
5171	if page.adr.IsEmpty() {
5172		return nil
5173	}
5174	return *page.adr.Value
5175}
5176
5177// Creates a new instance of the AvailableDelegationsResultPage type.
5178func NewAvailableDelegationsResultPage(getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
5179	return AvailableDelegationsResultPage{fn: getNextPage}
5180}
5181
5182// AvailableProvidersList list of available countries with details.
5183type AvailableProvidersList struct {
5184	autorest.Response `json:"-"`
5185	// Countries - List of available countries.
5186	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
5187}
5188
5189// AvailableProvidersListCity city or town details.
5190type AvailableProvidersListCity struct {
5191	// CityName - The city or town name.
5192	CityName *string `json:"cityName,omitempty"`
5193	// Providers - A list of Internet service providers.
5194	Providers *[]string `json:"providers,omitempty"`
5195}
5196
5197// AvailableProvidersListCountry country details.
5198type AvailableProvidersListCountry struct {
5199	// CountryName - The country name.
5200	CountryName *string `json:"countryName,omitempty"`
5201	// Providers - A list of Internet service providers.
5202	Providers *[]string `json:"providers,omitempty"`
5203	// States - List of available states in the country.
5204	States *[]AvailableProvidersListState `json:"states,omitempty"`
5205}
5206
5207// AvailableProvidersListParameters constraints that determine the list of available Internet service
5208// providers.
5209type AvailableProvidersListParameters struct {
5210	// AzureLocations - A list of Azure regions.
5211	AzureLocations *[]string `json:"azureLocations,omitempty"`
5212	// Country - The country for available providers list.
5213	Country *string `json:"country,omitempty"`
5214	// State - The state for available providers list.
5215	State *string `json:"state,omitempty"`
5216	// City - The city or town for available providers list.
5217	City *string `json:"city,omitempty"`
5218}
5219
5220// AvailableProvidersListState state details.
5221type AvailableProvidersListState struct {
5222	// StateName - The state name.
5223	StateName *string `json:"stateName,omitempty"`
5224	// Providers - A list of Internet service providers.
5225	Providers *[]string `json:"providers,omitempty"`
5226	// Cities - List of available cities or towns in the state.
5227	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
5228}
5229
5230// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
5231// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
5232// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
5233// operation succeeded, the response body includes the HTTP status code for the successful request. If the
5234// asynchronous operation failed, the response body includes the HTTP status code for the failed request
5235// and error information regarding the failure.
5236type AzureAsyncOperationResult struct {
5237	// Status - Status of the Azure async operation. Possible values are: 'InProgress', 'Succeeded', and 'Failed'. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
5238	Status OperationStatus `json:"status,omitempty"`
5239	Error  *Error          `json:"error,omitempty"`
5240}
5241
5242// AzureFirewall azure Firewall resource
5243type AzureFirewall struct {
5244	autorest.Response              `json:"-"`
5245	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
5246	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5247	Etag *string `json:"etag,omitempty"`
5248	// ID - Resource ID.
5249	ID *string `json:"id,omitempty"`
5250	// Name - READ-ONLY; Resource name.
5251	Name *string `json:"name,omitempty"`
5252	// Type - READ-ONLY; Resource type.
5253	Type *string `json:"type,omitempty"`
5254	// Location - Resource location.
5255	Location *string `json:"location,omitempty"`
5256	// Tags - Resource tags.
5257	Tags map[string]*string `json:"tags"`
5258}
5259
5260// MarshalJSON is the custom marshaler for AzureFirewall.
5261func (af AzureFirewall) MarshalJSON() ([]byte, error) {
5262	objectMap := make(map[string]interface{})
5263	if af.AzureFirewallPropertiesFormat != nil {
5264		objectMap["properties"] = af.AzureFirewallPropertiesFormat
5265	}
5266	if af.ID != nil {
5267		objectMap["id"] = af.ID
5268	}
5269	if af.Location != nil {
5270		objectMap["location"] = af.Location
5271	}
5272	if af.Tags != nil {
5273		objectMap["tags"] = af.Tags
5274	}
5275	return json.Marshal(objectMap)
5276}
5277
5278// UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
5279func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
5280	var m map[string]*json.RawMessage
5281	err := json.Unmarshal(body, &m)
5282	if err != nil {
5283		return err
5284	}
5285	for k, v := range m {
5286		switch k {
5287		case "properties":
5288			if v != nil {
5289				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
5290				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
5291				if err != nil {
5292					return err
5293				}
5294				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
5295			}
5296		case "etag":
5297			if v != nil {
5298				var etag string
5299				err = json.Unmarshal(*v, &etag)
5300				if err != nil {
5301					return err
5302				}
5303				af.Etag = &etag
5304			}
5305		case "id":
5306			if v != nil {
5307				var ID string
5308				err = json.Unmarshal(*v, &ID)
5309				if err != nil {
5310					return err
5311				}
5312				af.ID = &ID
5313			}
5314		case "name":
5315			if v != nil {
5316				var name string
5317				err = json.Unmarshal(*v, &name)
5318				if err != nil {
5319					return err
5320				}
5321				af.Name = &name
5322			}
5323		case "type":
5324			if v != nil {
5325				var typeVar string
5326				err = json.Unmarshal(*v, &typeVar)
5327				if err != nil {
5328					return err
5329				}
5330				af.Type = &typeVar
5331			}
5332		case "location":
5333			if v != nil {
5334				var location string
5335				err = json.Unmarshal(*v, &location)
5336				if err != nil {
5337					return err
5338				}
5339				af.Location = &location
5340			}
5341		case "tags":
5342			if v != nil {
5343				var tags map[string]*string
5344				err = json.Unmarshal(*v, &tags)
5345				if err != nil {
5346					return err
5347				}
5348				af.Tags = tags
5349			}
5350		}
5351	}
5352
5353	return nil
5354}
5355
5356// AzureFirewallApplicationRule properties of an application rule.
5357type AzureFirewallApplicationRule struct {
5358	// Name - Name of the application rule.
5359	Name *string `json:"name,omitempty"`
5360	// Description - Description of the rule.
5361	Description *string `json:"description,omitempty"`
5362	// SourceAddresses - List of source IP addresses for this rule.
5363	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
5364	// Protocols - Array of ApplicationRuleProtocols.
5365	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
5366	// TargetFqdns - List of FQDNs for this rule.
5367	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
5368	// FqdnTags - List of FQDN Tags for this rule.
5369	FqdnTags *[]string `json:"fqdnTags,omitempty"`
5370}
5371
5372// AzureFirewallApplicationRuleCollection application rule collection resource
5373type AzureFirewallApplicationRuleCollection struct {
5374	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
5375	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
5376	Name *string `json:"name,omitempty"`
5377	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5378	Etag *string `json:"etag,omitempty"`
5379	// ID - Resource ID.
5380	ID *string `json:"id,omitempty"`
5381}
5382
5383// MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
5384func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
5385	objectMap := make(map[string]interface{})
5386	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
5387		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
5388	}
5389	if afarc.Name != nil {
5390		objectMap["name"] = afarc.Name
5391	}
5392	if afarc.ID != nil {
5393		objectMap["id"] = afarc.ID
5394	}
5395	return json.Marshal(objectMap)
5396}
5397
5398// UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
5399func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
5400	var m map[string]*json.RawMessage
5401	err := json.Unmarshal(body, &m)
5402	if err != nil {
5403		return err
5404	}
5405	for k, v := range m {
5406		switch k {
5407		case "properties":
5408			if v != nil {
5409				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
5410				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
5411				if err != nil {
5412					return err
5413				}
5414				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
5415			}
5416		case "name":
5417			if v != nil {
5418				var name string
5419				err = json.Unmarshal(*v, &name)
5420				if err != nil {
5421					return err
5422				}
5423				afarc.Name = &name
5424			}
5425		case "etag":
5426			if v != nil {
5427				var etag string
5428				err = json.Unmarshal(*v, &etag)
5429				if err != nil {
5430					return err
5431				}
5432				afarc.Etag = &etag
5433			}
5434		case "id":
5435			if v != nil {
5436				var ID string
5437				err = json.Unmarshal(*v, &ID)
5438				if err != nil {
5439					return err
5440				}
5441				afarc.ID = &ID
5442			}
5443		}
5444	}
5445
5446	return nil
5447}
5448
5449// AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
5450type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
5451	// Priority - Priority of the application rule collection resource.
5452	Priority *int32 `json:"priority,omitempty"`
5453	// Action - The action type of a rule collection
5454	Action *AzureFirewallRCAction `json:"action,omitempty"`
5455	// Rules - Collection of rules used by a application rule collection.
5456	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
5457	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5458	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5459}
5460
5461// AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
5462type AzureFirewallApplicationRuleProtocol struct {
5463	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS'
5464	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
5465	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
5466	Port *int32 `json:"port,omitempty"`
5467}
5468
5469// AzureFirewallFqdnTag azure Firewall FQDN Tag Resource
5470type AzureFirewallFqdnTag struct {
5471	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
5472	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5473	Etag *string `json:"etag,omitempty"`
5474	// ID - Resource ID.
5475	ID *string `json:"id,omitempty"`
5476	// Name - READ-ONLY; Resource name.
5477	Name *string `json:"name,omitempty"`
5478	// Type - READ-ONLY; Resource type.
5479	Type *string `json:"type,omitempty"`
5480	// Location - Resource location.
5481	Location *string `json:"location,omitempty"`
5482	// Tags - Resource tags.
5483	Tags map[string]*string `json:"tags"`
5484}
5485
5486// MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
5487func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
5488	objectMap := make(map[string]interface{})
5489	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
5490		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
5491	}
5492	if afft.ID != nil {
5493		objectMap["id"] = afft.ID
5494	}
5495	if afft.Location != nil {
5496		objectMap["location"] = afft.Location
5497	}
5498	if afft.Tags != nil {
5499		objectMap["tags"] = afft.Tags
5500	}
5501	return json.Marshal(objectMap)
5502}
5503
5504// UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
5505func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
5506	var m map[string]*json.RawMessage
5507	err := json.Unmarshal(body, &m)
5508	if err != nil {
5509		return err
5510	}
5511	for k, v := range m {
5512		switch k {
5513		case "properties":
5514			if v != nil {
5515				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
5516				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
5517				if err != nil {
5518					return err
5519				}
5520				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
5521			}
5522		case "etag":
5523			if v != nil {
5524				var etag string
5525				err = json.Unmarshal(*v, &etag)
5526				if err != nil {
5527					return err
5528				}
5529				afft.Etag = &etag
5530			}
5531		case "id":
5532			if v != nil {
5533				var ID string
5534				err = json.Unmarshal(*v, &ID)
5535				if err != nil {
5536					return err
5537				}
5538				afft.ID = &ID
5539			}
5540		case "name":
5541			if v != nil {
5542				var name string
5543				err = json.Unmarshal(*v, &name)
5544				if err != nil {
5545					return err
5546				}
5547				afft.Name = &name
5548			}
5549		case "type":
5550			if v != nil {
5551				var typeVar string
5552				err = json.Unmarshal(*v, &typeVar)
5553				if err != nil {
5554					return err
5555				}
5556				afft.Type = &typeVar
5557			}
5558		case "location":
5559			if v != nil {
5560				var location string
5561				err = json.Unmarshal(*v, &location)
5562				if err != nil {
5563					return err
5564				}
5565				afft.Location = &location
5566			}
5567		case "tags":
5568			if v != nil {
5569				var tags map[string]*string
5570				err = json.Unmarshal(*v, &tags)
5571				if err != nil {
5572					return err
5573				}
5574				afft.Tags = tags
5575			}
5576		}
5577	}
5578
5579	return nil
5580}
5581
5582// AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
5583type AzureFirewallFqdnTagListResult struct {
5584	autorest.Response `json:"-"`
5585	// Value - List of Azure Firewall FQDN Tags in a resource group.
5586	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
5587	// NextLink - URL to get the next set of results.
5588	NextLink *string `json:"nextLink,omitempty"`
5589}
5590
5591// AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
5592// values.
5593type AzureFirewallFqdnTagListResultIterator struct {
5594	i    int
5595	page AzureFirewallFqdnTagListResultPage
5596}
5597
5598// NextWithContext advances to the next value.  If there was an error making
5599// the request the iterator does not advance and the error is returned.
5600func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
5601	if tracing.IsEnabled() {
5602		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
5603		defer func() {
5604			sc := -1
5605			if iter.Response().Response.Response != nil {
5606				sc = iter.Response().Response.Response.StatusCode
5607			}
5608			tracing.EndSpan(ctx, sc, err)
5609		}()
5610	}
5611	iter.i++
5612	if iter.i < len(iter.page.Values()) {
5613		return nil
5614	}
5615	err = iter.page.NextWithContext(ctx)
5616	if err != nil {
5617		iter.i--
5618		return err
5619	}
5620	iter.i = 0
5621	return nil
5622}
5623
5624// Next advances to the next value.  If there was an error making
5625// the request the iterator does not advance and the error is returned.
5626// Deprecated: Use NextWithContext() instead.
5627func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
5628	return iter.NextWithContext(context.Background())
5629}
5630
5631// NotDone returns true if the enumeration should be started or is not yet complete.
5632func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
5633	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5634}
5635
5636// Response returns the raw server response from the last page request.
5637func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
5638	return iter.page.Response()
5639}
5640
5641// Value returns the current value or a zero-initialized value if the
5642// iterator has advanced beyond the end of the collection.
5643func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
5644	if !iter.page.NotDone() {
5645		return AzureFirewallFqdnTag{}
5646	}
5647	return iter.page.Values()[iter.i]
5648}
5649
5650// Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
5651func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
5652	return AzureFirewallFqdnTagListResultIterator{page: page}
5653}
5654
5655// IsEmpty returns true if the ListResult contains no values.
5656func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
5657	return afftlr.Value == nil || len(*afftlr.Value) == 0
5658}
5659
5660// azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
5661// It returns nil if no more results exist.
5662func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
5663	if afftlr.NextLink == nil || len(to.String(afftlr.NextLink)) < 1 {
5664		return nil, nil
5665	}
5666	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5667		autorest.AsJSON(),
5668		autorest.AsGet(),
5669		autorest.WithBaseURL(to.String(afftlr.NextLink)))
5670}
5671
5672// AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
5673type AzureFirewallFqdnTagListResultPage struct {
5674	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
5675	afftlr AzureFirewallFqdnTagListResult
5676}
5677
5678// NextWithContext advances to the next page of values.  If there was an error making
5679// the request the page does not advance and the error is returned.
5680func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
5681	if tracing.IsEnabled() {
5682		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
5683		defer func() {
5684			sc := -1
5685			if page.Response().Response.Response != nil {
5686				sc = page.Response().Response.Response.StatusCode
5687			}
5688			tracing.EndSpan(ctx, sc, err)
5689		}()
5690	}
5691	next, err := page.fn(ctx, page.afftlr)
5692	if err != nil {
5693		return err
5694	}
5695	page.afftlr = next
5696	return nil
5697}
5698
5699// Next advances to the next page of values.  If there was an error making
5700// the request the page does not advance and the error is returned.
5701// Deprecated: Use NextWithContext() instead.
5702func (page *AzureFirewallFqdnTagListResultPage) Next() error {
5703	return page.NextWithContext(context.Background())
5704}
5705
5706// NotDone returns true if the page enumeration should be started or is not yet complete.
5707func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
5708	return !page.afftlr.IsEmpty()
5709}
5710
5711// Response returns the raw server response from the last page request.
5712func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
5713	return page.afftlr
5714}
5715
5716// Values returns the slice of values for the current page or nil if there are no values.
5717func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
5718	if page.afftlr.IsEmpty() {
5719		return nil
5720	}
5721	return *page.afftlr.Value
5722}
5723
5724// Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
5725func NewAzureFirewallFqdnTagListResultPage(getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
5726	return AzureFirewallFqdnTagListResultPage{fn: getNextPage}
5727}
5728
5729// AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties
5730type AzureFirewallFqdnTagPropertiesFormat struct {
5731	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
5732	ProvisioningState *string `json:"provisioningState,omitempty"`
5733	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
5734	FqdnTagName *string `json:"fqdnTagName,omitempty"`
5735}
5736
5737// AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
5738type AzureFirewallIPConfiguration struct {
5739	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
5740	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
5741	Name *string `json:"name,omitempty"`
5742	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5743	Etag *string `json:"etag,omitempty"`
5744	// ID - Resource ID.
5745	ID *string `json:"id,omitempty"`
5746}
5747
5748// MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
5749func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
5750	objectMap := make(map[string]interface{})
5751	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
5752		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
5753	}
5754	if afic.Name != nil {
5755		objectMap["name"] = afic.Name
5756	}
5757	if afic.ID != nil {
5758		objectMap["id"] = afic.ID
5759	}
5760	return json.Marshal(objectMap)
5761}
5762
5763// UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
5764func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
5765	var m map[string]*json.RawMessage
5766	err := json.Unmarshal(body, &m)
5767	if err != nil {
5768		return err
5769	}
5770	for k, v := range m {
5771		switch k {
5772		case "properties":
5773			if v != nil {
5774				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
5775				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
5776				if err != nil {
5777					return err
5778				}
5779				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
5780			}
5781		case "name":
5782			if v != nil {
5783				var name string
5784				err = json.Unmarshal(*v, &name)
5785				if err != nil {
5786					return err
5787				}
5788				afic.Name = &name
5789			}
5790		case "etag":
5791			if v != nil {
5792				var etag string
5793				err = json.Unmarshal(*v, &etag)
5794				if err != nil {
5795					return err
5796				}
5797				afic.Etag = &etag
5798			}
5799		case "id":
5800			if v != nil {
5801				var ID string
5802				err = json.Unmarshal(*v, &ID)
5803				if err != nil {
5804					return err
5805				}
5806				afic.ID = &ID
5807			}
5808		}
5809	}
5810
5811	return nil
5812}
5813
5814// AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
5815type AzureFirewallIPConfigurationPropertiesFormat struct {
5816	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
5817	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
5818	// Subnet - Reference of the subnet resource. This resource must be named 'AzureFirewallSubnet'.
5819	Subnet *SubResource `json:"subnet,omitempty"`
5820	// PublicIPAddress - Reference of the PublicIP resource. This field is a mandatory input if subnet is not null.
5821	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
5822	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5823	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5824}
5825
5826// AzureFirewallListResult response for ListAzureFirewalls API service call.
5827type AzureFirewallListResult struct {
5828	autorest.Response `json:"-"`
5829	// Value - List of Azure Firewalls in a resource group.
5830	Value *[]AzureFirewall `json:"value,omitempty"`
5831	// NextLink - URL to get the next set of results.
5832	NextLink *string `json:"nextLink,omitempty"`
5833}
5834
5835// AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
5836type AzureFirewallListResultIterator struct {
5837	i    int
5838	page AzureFirewallListResultPage
5839}
5840
5841// NextWithContext advances to the next value.  If there was an error making
5842// the request the iterator does not advance and the error is returned.
5843func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
5844	if tracing.IsEnabled() {
5845		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
5846		defer func() {
5847			sc := -1
5848			if iter.Response().Response.Response != nil {
5849				sc = iter.Response().Response.Response.StatusCode
5850			}
5851			tracing.EndSpan(ctx, sc, err)
5852		}()
5853	}
5854	iter.i++
5855	if iter.i < len(iter.page.Values()) {
5856		return nil
5857	}
5858	err = iter.page.NextWithContext(ctx)
5859	if err != nil {
5860		iter.i--
5861		return err
5862	}
5863	iter.i = 0
5864	return nil
5865}
5866
5867// Next advances to the next value.  If there was an error making
5868// the request the iterator does not advance and the error is returned.
5869// Deprecated: Use NextWithContext() instead.
5870func (iter *AzureFirewallListResultIterator) Next() error {
5871	return iter.NextWithContext(context.Background())
5872}
5873
5874// NotDone returns true if the enumeration should be started or is not yet complete.
5875func (iter AzureFirewallListResultIterator) NotDone() bool {
5876	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5877}
5878
5879// Response returns the raw server response from the last page request.
5880func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
5881	return iter.page.Response()
5882}
5883
5884// Value returns the current value or a zero-initialized value if the
5885// iterator has advanced beyond the end of the collection.
5886func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
5887	if !iter.page.NotDone() {
5888		return AzureFirewall{}
5889	}
5890	return iter.page.Values()[iter.i]
5891}
5892
5893// Creates a new instance of the AzureFirewallListResultIterator type.
5894func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
5895	return AzureFirewallListResultIterator{page: page}
5896}
5897
5898// IsEmpty returns true if the ListResult contains no values.
5899func (aflr AzureFirewallListResult) IsEmpty() bool {
5900	return aflr.Value == nil || len(*aflr.Value) == 0
5901}
5902
5903// azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
5904// It returns nil if no more results exist.
5905func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
5906	if aflr.NextLink == nil || len(to.String(aflr.NextLink)) < 1 {
5907		return nil, nil
5908	}
5909	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5910		autorest.AsJSON(),
5911		autorest.AsGet(),
5912		autorest.WithBaseURL(to.String(aflr.NextLink)))
5913}
5914
5915// AzureFirewallListResultPage contains a page of AzureFirewall values.
5916type AzureFirewallListResultPage struct {
5917	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
5918	aflr AzureFirewallListResult
5919}
5920
5921// NextWithContext advances to the next page of values.  If there was an error making
5922// the request the page does not advance and the error is returned.
5923func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
5924	if tracing.IsEnabled() {
5925		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
5926		defer func() {
5927			sc := -1
5928			if page.Response().Response.Response != nil {
5929				sc = page.Response().Response.Response.StatusCode
5930			}
5931			tracing.EndSpan(ctx, sc, err)
5932		}()
5933	}
5934	next, err := page.fn(ctx, page.aflr)
5935	if err != nil {
5936		return err
5937	}
5938	page.aflr = next
5939	return nil
5940}
5941
5942// Next advances to the next page of values.  If there was an error making
5943// the request the page does not advance and the error is returned.
5944// Deprecated: Use NextWithContext() instead.
5945func (page *AzureFirewallListResultPage) Next() error {
5946	return page.NextWithContext(context.Background())
5947}
5948
5949// NotDone returns true if the page enumeration should be started or is not yet complete.
5950func (page AzureFirewallListResultPage) NotDone() bool {
5951	return !page.aflr.IsEmpty()
5952}
5953
5954// Response returns the raw server response from the last page request.
5955func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
5956	return page.aflr
5957}
5958
5959// Values returns the slice of values for the current page or nil if there are no values.
5960func (page AzureFirewallListResultPage) Values() []AzureFirewall {
5961	if page.aflr.IsEmpty() {
5962		return nil
5963	}
5964	return *page.aflr.Value
5965}
5966
5967// Creates a new instance of the AzureFirewallListResultPage type.
5968func NewAzureFirewallListResultPage(getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
5969	return AzureFirewallListResultPage{fn: getNextPage}
5970}
5971
5972// AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
5973type AzureFirewallNatRCAction struct {
5974	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
5975	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
5976}
5977
5978// AzureFirewallNatRule properties of a NAT rule.
5979type AzureFirewallNatRule struct {
5980	// Name - Name of the NAT rule.
5981	Name *string `json:"name,omitempty"`
5982	// Description - Description of the rule.
5983	Description *string `json:"description,omitempty"`
5984	// SourceAddresses - List of source IP addresses for this rule.
5985	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
5986	// DestinationAddresses - List of destination IP addresses for this rule.
5987	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
5988	// DestinationPorts - List of destination ports.
5989	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
5990	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
5991	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
5992	// TranslatedAddress - The translated address for this NAT rule.
5993	TranslatedAddress *string `json:"translatedAddress,omitempty"`
5994	// TranslatedPort - The translated port for this NAT rule.
5995	TranslatedPort *string `json:"translatedPort,omitempty"`
5996}
5997
5998// AzureFirewallNatRuleCollection NAT rule collection resource
5999type AzureFirewallNatRuleCollection struct {
6000	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
6001	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6002	Name *string `json:"name,omitempty"`
6003	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6004	Etag *string `json:"etag,omitempty"`
6005	// ID - Resource ID.
6006	ID *string `json:"id,omitempty"`
6007}
6008
6009// MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
6010func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
6011	objectMap := make(map[string]interface{})
6012	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
6013		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
6014	}
6015	if afnrc.Name != nil {
6016		objectMap["name"] = afnrc.Name
6017	}
6018	if afnrc.ID != nil {
6019		objectMap["id"] = afnrc.ID
6020	}
6021	return json.Marshal(objectMap)
6022}
6023
6024// UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
6025func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
6026	var m map[string]*json.RawMessage
6027	err := json.Unmarshal(body, &m)
6028	if err != nil {
6029		return err
6030	}
6031	for k, v := range m {
6032		switch k {
6033		case "properties":
6034			if v != nil {
6035				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
6036				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
6037				if err != nil {
6038					return err
6039				}
6040				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
6041			}
6042		case "name":
6043			if v != nil {
6044				var name string
6045				err = json.Unmarshal(*v, &name)
6046				if err != nil {
6047					return err
6048				}
6049				afnrc.Name = &name
6050			}
6051		case "etag":
6052			if v != nil {
6053				var etag string
6054				err = json.Unmarshal(*v, &etag)
6055				if err != nil {
6056					return err
6057				}
6058				afnrc.Etag = &etag
6059			}
6060		case "id":
6061			if v != nil {
6062				var ID string
6063				err = json.Unmarshal(*v, &ID)
6064				if err != nil {
6065					return err
6066				}
6067				afnrc.ID = &ID
6068			}
6069		}
6070	}
6071
6072	return nil
6073}
6074
6075// AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
6076type AzureFirewallNatRuleCollectionProperties struct {
6077	// Priority - Priority of the NAT rule collection resource.
6078	Priority *int32 `json:"priority,omitempty"`
6079	// Action - The action type of a NAT rule collection
6080	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
6081	// Rules - Collection of rules used by a NAT rule collection.
6082	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
6083	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6084	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6085}
6086
6087// AzureFirewallNetworkRule properties of the network rule.
6088type AzureFirewallNetworkRule struct {
6089	// Name - Name of the network rule.
6090	Name *string `json:"name,omitempty"`
6091	// Description - Description of the rule.
6092	Description *string `json:"description,omitempty"`
6093	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
6094	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
6095	// SourceAddresses - List of source IP addresses for this rule.
6096	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6097	// DestinationAddresses - List of destination IP addresses.
6098	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
6099	// DestinationPorts - List of destination ports.
6100	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
6101}
6102
6103// AzureFirewallNetworkRuleCollection network rule collection resource
6104type AzureFirewallNetworkRuleCollection struct {
6105	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
6106	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6107	Name *string `json:"name,omitempty"`
6108	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
6109	Etag *string `json:"etag,omitempty"`
6110	// ID - Resource ID.
6111	ID *string `json:"id,omitempty"`
6112}
6113
6114// MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
6115func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
6116	objectMap := make(map[string]interface{})
6117	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
6118		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
6119	}
6120	if afnrc.Name != nil {
6121		objectMap["name"] = afnrc.Name
6122	}
6123	if afnrc.ID != nil {
6124		objectMap["id"] = afnrc.ID
6125	}
6126	return json.Marshal(objectMap)
6127}
6128
6129// UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
6130func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
6131	var m map[string]*json.RawMessage
6132	err := json.Unmarshal(body, &m)
6133	if err != nil {
6134		return err
6135	}
6136	for k, v := range m {
6137		switch k {
6138		case "properties":
6139			if v != nil {
6140				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
6141				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
6142				if err != nil {
6143					return err
6144				}
6145				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
6146			}
6147		case "name":
6148			if v != nil {
6149				var name string
6150				err = json.Unmarshal(*v, &name)
6151				if err != nil {
6152					return err
6153				}
6154				afnrc.Name = &name
6155			}
6156		case "etag":
6157			if v != nil {
6158				var etag string
6159				err = json.Unmarshal(*v, &etag)
6160				if err != nil {
6161					return err
6162				}
6163				afnrc.Etag = &etag
6164			}
6165		case "id":
6166			if v != nil {
6167				var ID string
6168				err = json.Unmarshal(*v, &ID)
6169				if err != nil {
6170					return err
6171				}
6172				afnrc.ID = &ID
6173			}
6174		}
6175	}
6176
6177	return nil
6178}
6179
6180// AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
6181type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
6182	// Priority - Priority of the network rule collection resource.
6183	Priority *int32 `json:"priority,omitempty"`
6184	// Action - The action type of a rule collection
6185	Action *AzureFirewallRCAction `json:"action,omitempty"`
6186	// Rules - Collection of rules used by a network rule collection.
6187	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
6188	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6189	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6190}
6191
6192// AzureFirewallPropertiesFormat properties of the Azure Firewall.
6193type AzureFirewallPropertiesFormat struct {
6194	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
6195	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
6196	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
6197	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
6198	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
6199	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
6200	// IPConfigurations - IP configuration of the Azure Firewall resource.
6201	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
6202	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6203	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6204}
6205
6206// AzureFirewallRCAction properties of the AzureFirewallRCAction.
6207type AzureFirewallRCAction struct {
6208	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
6209	Type AzureFirewallRCActionType `json:"type,omitempty"`
6210}
6211
6212// AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
6213// long-running operation.
6214type AzureFirewallsCreateOrUpdateFuture struct {
6215	azure.Future
6216}
6217
6218// Result returns the result of the asynchronous operation.
6219// If the operation has not completed it will return an error.
6220func (future *AzureFirewallsCreateOrUpdateFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
6221	var done bool
6222	done, err = future.DoneWithContext(context.Background(), client)
6223	if err != nil {
6224		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6225		return
6226	}
6227	if !done {
6228		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
6229		return
6230	}
6231	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6232	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
6233		af, err = client.CreateOrUpdateResponder(af.Response.Response)
6234		if err != nil {
6235			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
6236		}
6237	}
6238	return
6239}
6240
6241// AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
6242// operation.
6243type AzureFirewallsDeleteFuture struct {
6244	azure.Future
6245}
6246
6247// Result returns the result of the asynchronous operation.
6248// If the operation has not completed it will return an error.
6249func (future *AzureFirewallsDeleteFuture) Result(client AzureFirewallsClient) (ar autorest.Response, err error) {
6250	var done bool
6251	done, err = future.DoneWithContext(context.Background(), client)
6252	if err != nil {
6253		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
6254		return
6255	}
6256	if !done {
6257		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
6258		return
6259	}
6260	ar.Response = future.Response()
6261	return
6262}
6263
6264// AzureReachabilityReport azure reachability report details.
6265type AzureReachabilityReport struct {
6266	autorest.Response `json:"-"`
6267	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
6268	AggregationLevel *string                          `json:"aggregationLevel,omitempty"`
6269	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
6270	// ReachabilityReport - List of Azure reachability report items.
6271	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
6272}
6273
6274// AzureReachabilityReportItem azure reachability report details for a given provider location.
6275type AzureReachabilityReportItem struct {
6276	// Provider - The Internet service provider.
6277	Provider *string `json:"provider,omitempty"`
6278	// AzureLocation - The Azure region.
6279	AzureLocation *string `json:"azureLocation,omitempty"`
6280	// Latencies - List of latency details for each of the time series.
6281	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
6282}
6283
6284// AzureReachabilityReportLatencyInfo details on latency for a time series.
6285type AzureReachabilityReportLatencyInfo struct {
6286	// TimeStamp - The time stamp.
6287	TimeStamp *date.Time `json:"timeStamp,omitempty"`
6288	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
6289	Score *int32 `json:"score,omitempty"`
6290}
6291
6292// AzureReachabilityReportLocation parameters that define a geographic location.
6293type AzureReachabilityReportLocation struct {
6294	// Country - The name of the country.
6295	Country *string `json:"country,omitempty"`
6296	// State - The name of the state.
6297	State *string `json:"state,omitempty"`
6298	// City - The name of the city or town.
6299	City *string `json:"city,omitempty"`
6300}
6301
6302// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
6303type AzureReachabilityReportParameters struct {
6304	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
6305	// Providers - List of Internet service providers.
6306	Providers *[]string `json:"providers,omitempty"`
6307	// AzureLocations - Optional Azure regions to scope the query to.
6308	AzureLocations *[]string `json:"azureLocations,omitempty"`
6309	// StartTime - The start time for the Azure reachability report.
6310	StartTime *date.Time `json:"startTime,omitempty"`
6311	// EndTime - The end time for the Azure reachability report.
6312	EndTime *date.Time `json:"endTime,omitempty"`
6313}
6314
6315// BackendAddressPool pool of backend IP addresses.
6316type BackendAddressPool struct {
6317	autorest.Response `json:"-"`
6318	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
6319	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
6320	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6321	Name *string `json:"name,omitempty"`
6322	// Etag - A unique read-only string that changes whenever the resource is updated.
6323	Etag *string `json:"etag,omitempty"`
6324	// ID - Resource ID.
6325	ID *string `json:"id,omitempty"`
6326}
6327
6328// MarshalJSON is the custom marshaler for BackendAddressPool.
6329func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
6330	objectMap := make(map[string]interface{})
6331	if bap.BackendAddressPoolPropertiesFormat != nil {
6332		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
6333	}
6334	if bap.Name != nil {
6335		objectMap["name"] = bap.Name
6336	}
6337	if bap.Etag != nil {
6338		objectMap["etag"] = bap.Etag
6339	}
6340	if bap.ID != nil {
6341		objectMap["id"] = bap.ID
6342	}
6343	return json.Marshal(objectMap)
6344}
6345
6346// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
6347func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
6348	var m map[string]*json.RawMessage
6349	err := json.Unmarshal(body, &m)
6350	if err != nil {
6351		return err
6352	}
6353	for k, v := range m {
6354		switch k {
6355		case "properties":
6356			if v != nil {
6357				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
6358				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
6359				if err != nil {
6360					return err
6361				}
6362				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
6363			}
6364		case "name":
6365			if v != nil {
6366				var name string
6367				err = json.Unmarshal(*v, &name)
6368				if err != nil {
6369					return err
6370				}
6371				bap.Name = &name
6372			}
6373		case "etag":
6374			if v != nil {
6375				var etag string
6376				err = json.Unmarshal(*v, &etag)
6377				if err != nil {
6378					return err
6379				}
6380				bap.Etag = &etag
6381			}
6382		case "id":
6383			if v != nil {
6384				var ID string
6385				err = json.Unmarshal(*v, &ID)
6386				if err != nil {
6387					return err
6388				}
6389				bap.ID = &ID
6390			}
6391		}
6392	}
6393
6394	return nil
6395}
6396
6397// BackendAddressPoolPropertiesFormat properties of the backend address pool.
6398type BackendAddressPoolPropertiesFormat struct {
6399	// BackendIPConfigurations - READ-ONLY; Gets collection of references to IP addresses defined in network interfaces.
6400	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
6401	// LoadBalancingRules - READ-ONLY; Gets load balancing rules that use this backend address pool.
6402	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
6403	// OutboundRule - READ-ONLY; Gets outbound rules that use this backend address pool.
6404	OutboundRule *SubResource `json:"outboundRule,omitempty"`
6405	// OutboundRules - READ-ONLY; Gets outbound rules that use this backend address pool.
6406	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
6407	// ProvisioningState - Get provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6408	ProvisioningState *string `json:"provisioningState,omitempty"`
6409}
6410
6411// BGPCommunity contains bgp community information offered in Service Community resources.
6412type BGPCommunity struct {
6413	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
6414	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
6415	// CommunityName - The name of the bgp community. e.g. Skype.
6416	CommunityName *string `json:"communityName,omitempty"`
6417	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
6418	CommunityValue *string `json:"communityValue,omitempty"`
6419	// CommunityPrefixes - The prefixes that the bgp community contains.
6420	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
6421	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
6422	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
6423	// ServiceGroup - The service group of the bgp community contains.
6424	ServiceGroup *string `json:"serviceGroup,omitempty"`
6425}
6426
6427// BgpPeerStatus BGP peer status details
6428type BgpPeerStatus struct {
6429	// LocalAddress - READ-ONLY; The virtual network gateway's local address
6430	LocalAddress *string `json:"localAddress,omitempty"`
6431	// Neighbor - READ-ONLY; The remote BGP peer
6432	Neighbor *string `json:"neighbor,omitempty"`
6433	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer
6434	Asn *int32 `json:"asn,omitempty"`
6435	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
6436	State BgpPeerState `json:"state,omitempty"`
6437	// ConnectedDuration - READ-ONLY; For how long the peering has been up
6438	ConnectedDuration *string `json:"connectedDuration,omitempty"`
6439	// RoutesReceived - READ-ONLY; The number of routes learned from this peer
6440	RoutesReceived *int64 `json:"routesReceived,omitempty"`
6441	// MessagesSent - READ-ONLY; The number of BGP messages sent
6442	MessagesSent *int64 `json:"messagesSent,omitempty"`
6443	// MessagesReceived - READ-ONLY; The number of BGP messages received
6444	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
6445}
6446
6447// BgpPeerStatusListResult response for list BGP peer status API service call
6448type BgpPeerStatusListResult struct {
6449	autorest.Response `json:"-"`
6450	// Value - List of BGP peers
6451	Value *[]BgpPeerStatus `json:"value,omitempty"`
6452}
6453
6454// BgpServiceCommunity service Community Properties.
6455type BgpServiceCommunity struct {
6456	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
6457	// ID - Resource ID.
6458	ID *string `json:"id,omitempty"`
6459	// Name - READ-ONLY; Resource name.
6460	Name *string `json:"name,omitempty"`
6461	// Type - READ-ONLY; Resource type.
6462	Type *string `json:"type,omitempty"`
6463	// Location - Resource location.
6464	Location *string `json:"location,omitempty"`
6465	// Tags - Resource tags.
6466	Tags map[string]*string `json:"tags"`
6467}
6468
6469// MarshalJSON is the custom marshaler for BgpServiceCommunity.
6470func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
6471	objectMap := make(map[string]interface{})
6472	if bsc.BgpServiceCommunityPropertiesFormat != nil {
6473		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
6474	}
6475	if bsc.ID != nil {
6476		objectMap["id"] = bsc.ID
6477	}
6478	if bsc.Location != nil {
6479		objectMap["location"] = bsc.Location
6480	}
6481	if bsc.Tags != nil {
6482		objectMap["tags"] = bsc.Tags
6483	}
6484	return json.Marshal(objectMap)
6485}
6486
6487// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
6488func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
6489	var m map[string]*json.RawMessage
6490	err := json.Unmarshal(body, &m)
6491	if err != nil {
6492		return err
6493	}
6494	for k, v := range m {
6495		switch k {
6496		case "properties":
6497			if v != nil {
6498				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
6499				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
6500				if err != nil {
6501					return err
6502				}
6503				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
6504			}
6505		case "id":
6506			if v != nil {
6507				var ID string
6508				err = json.Unmarshal(*v, &ID)
6509				if err != nil {
6510					return err
6511				}
6512				bsc.ID = &ID
6513			}
6514		case "name":
6515			if v != nil {
6516				var name string
6517				err = json.Unmarshal(*v, &name)
6518				if err != nil {
6519					return err
6520				}
6521				bsc.Name = &name
6522			}
6523		case "type":
6524			if v != nil {
6525				var typeVar string
6526				err = json.Unmarshal(*v, &typeVar)
6527				if err != nil {
6528					return err
6529				}
6530				bsc.Type = &typeVar
6531			}
6532		case "location":
6533			if v != nil {
6534				var location string
6535				err = json.Unmarshal(*v, &location)
6536				if err != nil {
6537					return err
6538				}
6539				bsc.Location = &location
6540			}
6541		case "tags":
6542			if v != nil {
6543				var tags map[string]*string
6544				err = json.Unmarshal(*v, &tags)
6545				if err != nil {
6546					return err
6547				}
6548				bsc.Tags = tags
6549			}
6550		}
6551	}
6552
6553	return nil
6554}
6555
6556// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
6557type BgpServiceCommunityListResult struct {
6558	autorest.Response `json:"-"`
6559	// Value - A list of service community resources.
6560	Value *[]BgpServiceCommunity `json:"value,omitempty"`
6561	// NextLink - The URL to get the next set of results.
6562	NextLink *string `json:"nextLink,omitempty"`
6563}
6564
6565// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
6566// values.
6567type BgpServiceCommunityListResultIterator struct {
6568	i    int
6569	page BgpServiceCommunityListResultPage
6570}
6571
6572// NextWithContext advances to the next value.  If there was an error making
6573// the request the iterator does not advance and the error is returned.
6574func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
6575	if tracing.IsEnabled() {
6576		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
6577		defer func() {
6578			sc := -1
6579			if iter.Response().Response.Response != nil {
6580				sc = iter.Response().Response.Response.StatusCode
6581			}
6582			tracing.EndSpan(ctx, sc, err)
6583		}()
6584	}
6585	iter.i++
6586	if iter.i < len(iter.page.Values()) {
6587		return nil
6588	}
6589	err = iter.page.NextWithContext(ctx)
6590	if err != nil {
6591		iter.i--
6592		return err
6593	}
6594	iter.i = 0
6595	return nil
6596}
6597
6598// Next advances to the next value.  If there was an error making
6599// the request the iterator does not advance and the error is returned.
6600// Deprecated: Use NextWithContext() instead.
6601func (iter *BgpServiceCommunityListResultIterator) Next() error {
6602	return iter.NextWithContext(context.Background())
6603}
6604
6605// NotDone returns true if the enumeration should be started or is not yet complete.
6606func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
6607	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6608}
6609
6610// Response returns the raw server response from the last page request.
6611func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
6612	return iter.page.Response()
6613}
6614
6615// Value returns the current value or a zero-initialized value if the
6616// iterator has advanced beyond the end of the collection.
6617func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
6618	if !iter.page.NotDone() {
6619		return BgpServiceCommunity{}
6620	}
6621	return iter.page.Values()[iter.i]
6622}
6623
6624// Creates a new instance of the BgpServiceCommunityListResultIterator type.
6625func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
6626	return BgpServiceCommunityListResultIterator{page: page}
6627}
6628
6629// IsEmpty returns true if the ListResult contains no values.
6630func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
6631	return bsclr.Value == nil || len(*bsclr.Value) == 0
6632}
6633
6634// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
6635// It returns nil if no more results exist.
6636func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
6637	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
6638		return nil, nil
6639	}
6640	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6641		autorest.AsJSON(),
6642		autorest.AsGet(),
6643		autorest.WithBaseURL(to.String(bsclr.NextLink)))
6644}
6645
6646// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
6647type BgpServiceCommunityListResultPage struct {
6648	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
6649	bsclr BgpServiceCommunityListResult
6650}
6651
6652// NextWithContext advances to the next page of values.  If there was an error making
6653// the request the page does not advance and the error is returned.
6654func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
6655	if tracing.IsEnabled() {
6656		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
6657		defer func() {
6658			sc := -1
6659			if page.Response().Response.Response != nil {
6660				sc = page.Response().Response.Response.StatusCode
6661			}
6662			tracing.EndSpan(ctx, sc, err)
6663		}()
6664	}
6665	next, err := page.fn(ctx, page.bsclr)
6666	if err != nil {
6667		return err
6668	}
6669	page.bsclr = next
6670	return nil
6671}
6672
6673// Next advances to the next page of values.  If there was an error making
6674// the request the page does not advance and the error is returned.
6675// Deprecated: Use NextWithContext() instead.
6676func (page *BgpServiceCommunityListResultPage) Next() error {
6677	return page.NextWithContext(context.Background())
6678}
6679
6680// NotDone returns true if the page enumeration should be started or is not yet complete.
6681func (page BgpServiceCommunityListResultPage) NotDone() bool {
6682	return !page.bsclr.IsEmpty()
6683}
6684
6685// Response returns the raw server response from the last page request.
6686func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
6687	return page.bsclr
6688}
6689
6690// Values returns the slice of values for the current page or nil if there are no values.
6691func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
6692	if page.bsclr.IsEmpty() {
6693		return nil
6694	}
6695	return *page.bsclr.Value
6696}
6697
6698// Creates a new instance of the BgpServiceCommunityListResultPage type.
6699func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
6700	return BgpServiceCommunityListResultPage{fn: getNextPage}
6701}
6702
6703// BgpServiceCommunityPropertiesFormat properties of Service Community.
6704type BgpServiceCommunityPropertiesFormat struct {
6705	// ServiceName - The name of the bgp community. e.g. Skype.
6706	ServiceName *string `json:"serviceName,omitempty"`
6707	// BgpCommunities - Get a list of bgp communities.
6708	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
6709}
6710
6711// BgpSettings BGP settings details
6712type BgpSettings struct {
6713	// Asn - The BGP speaker's ASN.
6714	Asn *int64 `json:"asn,omitempty"`
6715	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
6716	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
6717	// PeerWeight - The weight added to routes learned from this BGP speaker.
6718	PeerWeight *int32 `json:"peerWeight,omitempty"`
6719}
6720
6721// ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
6722type ConfigurationDiagnosticParameters struct {
6723	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
6724	TargetResourceID *string `json:"targetResourceId,omitempty"`
6725	// VerbosityLevel - Verbosity level. Accepted values are 'Normal', 'Minimum', 'Full'. Possible values include: 'Normal', 'Minimum', 'Full'
6726	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
6727	// Profiles - List of network configuration diagnostic profiles.
6728	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
6729}
6730
6731// ConfigurationDiagnosticProfile parameters to compare with network configuration.
6732type ConfigurationDiagnosticProfile struct {
6733	// Direction - The direction of the traffic. Accepted values are 'Inbound' and 'Outbound'. Possible values include: 'Inbound', 'Outbound'
6734	Direction Direction `json:"direction,omitempty"`
6735	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
6736	Protocol *string `json:"protocol,omitempty"`
6737	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
6738	Source *string `json:"source,omitempty"`
6739	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
6740	Destination *string `json:"destination,omitempty"`
6741	// DestinationPort - Traffic destination port. Accepted values are '*', port (for example, 3389) and port range (for example, 80-100).
6742	DestinationPort *string `json:"destinationPort,omitempty"`
6743}
6744
6745// ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
6746type ConfigurationDiagnosticResponse struct {
6747	autorest.Response `json:"-"`
6748	// Results - READ-ONLY; List of network configuration diagnostic results.
6749	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
6750}
6751
6752// ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
6753// query.
6754type ConfigurationDiagnosticResult struct {
6755	Profile                    *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
6756	NetworkSecurityGroupResult *SecurityGroupResult            `json:"networkSecurityGroupResult,omitempty"`
6757}
6758
6759// ConnectionMonitor parameters that define the operation to create a connection monitor.
6760type ConnectionMonitor struct {
6761	// Location - Connection monitor location.
6762	Location *string `json:"location,omitempty"`
6763	// Tags - Connection monitor tags.
6764	Tags                         map[string]*string `json:"tags"`
6765	*ConnectionMonitorParameters `json:"properties,omitempty"`
6766}
6767
6768// MarshalJSON is the custom marshaler for ConnectionMonitor.
6769func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
6770	objectMap := make(map[string]interface{})
6771	if cm.Location != nil {
6772		objectMap["location"] = cm.Location
6773	}
6774	if cm.Tags != nil {
6775		objectMap["tags"] = cm.Tags
6776	}
6777	if cm.ConnectionMonitorParameters != nil {
6778		objectMap["properties"] = cm.ConnectionMonitorParameters
6779	}
6780	return json.Marshal(objectMap)
6781}
6782
6783// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
6784func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
6785	var m map[string]*json.RawMessage
6786	err := json.Unmarshal(body, &m)
6787	if err != nil {
6788		return err
6789	}
6790	for k, v := range m {
6791		switch k {
6792		case "location":
6793			if v != nil {
6794				var location string
6795				err = json.Unmarshal(*v, &location)
6796				if err != nil {
6797					return err
6798				}
6799				cm.Location = &location
6800			}
6801		case "tags":
6802			if v != nil {
6803				var tags map[string]*string
6804				err = json.Unmarshal(*v, &tags)
6805				if err != nil {
6806					return err
6807				}
6808				cm.Tags = tags
6809			}
6810		case "properties":
6811			if v != nil {
6812				var connectionMonitorParameters ConnectionMonitorParameters
6813				err = json.Unmarshal(*v, &connectionMonitorParameters)
6814				if err != nil {
6815					return err
6816				}
6817				cm.ConnectionMonitorParameters = &connectionMonitorParameters
6818			}
6819		}
6820	}
6821
6822	return nil
6823}
6824
6825// ConnectionMonitorDestination describes the destination of connection monitor.
6826type ConnectionMonitorDestination struct {
6827	// ResourceID - The ID of the resource used as the destination by connection monitor.
6828	ResourceID *string `json:"resourceId,omitempty"`
6829	// Address - Address of the connection monitor destination (IP or domain name).
6830	Address *string `json:"address,omitempty"`
6831	// Port - The destination port used by connection monitor.
6832	Port *int32 `json:"port,omitempty"`
6833}
6834
6835// ConnectionMonitorListResult list of connection monitors.
6836type ConnectionMonitorListResult struct {
6837	autorest.Response `json:"-"`
6838	// Value - Information about connection monitors.
6839	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
6840}
6841
6842// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
6843type ConnectionMonitorParameters struct {
6844	Source      *ConnectionMonitorSource      `json:"source,omitempty"`
6845	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
6846	// AutoStart - Determines if the connection monitor will start automatically once created.
6847	AutoStart *bool `json:"autoStart,omitempty"`
6848	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
6849	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
6850}
6851
6852// ConnectionMonitorQueryResult list of connection states snapshots.
6853type ConnectionMonitorQueryResult struct {
6854	autorest.Response `json:"-"`
6855	// SourceStatus - Status of connection monitor source. Possible values include: 'Uknown', 'Active', 'Inactive'
6856	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
6857	// States - Information about connection states.
6858	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
6859}
6860
6861// ConnectionMonitorResult information about the connection monitor.
6862type ConnectionMonitorResult struct {
6863	autorest.Response `json:"-"`
6864	// Name - READ-ONLY; Name of the connection monitor.
6865	Name *string `json:"name,omitempty"`
6866	// ID - READ-ONLY; ID of the connection monitor.
6867	ID   *string `json:"id,omitempty"`
6868	Etag *string `json:"etag,omitempty"`
6869	// Type - READ-ONLY; Connection monitor type.
6870	Type *string `json:"type,omitempty"`
6871	// Location - Connection monitor location.
6872	Location *string `json:"location,omitempty"`
6873	// Tags - Connection monitor tags.
6874	Tags                               map[string]*string `json:"tags"`
6875	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
6876}
6877
6878// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
6879func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
6880	objectMap := make(map[string]interface{})
6881	if cmr.Etag != nil {
6882		objectMap["etag"] = cmr.Etag
6883	}
6884	if cmr.Location != nil {
6885		objectMap["location"] = cmr.Location
6886	}
6887	if cmr.Tags != nil {
6888		objectMap["tags"] = cmr.Tags
6889	}
6890	if cmr.ConnectionMonitorResultProperties != nil {
6891		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
6892	}
6893	return json.Marshal(objectMap)
6894}
6895
6896// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
6897func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
6898	var m map[string]*json.RawMessage
6899	err := json.Unmarshal(body, &m)
6900	if err != nil {
6901		return err
6902	}
6903	for k, v := range m {
6904		switch k {
6905		case "name":
6906			if v != nil {
6907				var name string
6908				err = json.Unmarshal(*v, &name)
6909				if err != nil {
6910					return err
6911				}
6912				cmr.Name = &name
6913			}
6914		case "id":
6915			if v != nil {
6916				var ID string
6917				err = json.Unmarshal(*v, &ID)
6918				if err != nil {
6919					return err
6920				}
6921				cmr.ID = &ID
6922			}
6923		case "etag":
6924			if v != nil {
6925				var etag string
6926				err = json.Unmarshal(*v, &etag)
6927				if err != nil {
6928					return err
6929				}
6930				cmr.Etag = &etag
6931			}
6932		case "type":
6933			if v != nil {
6934				var typeVar string
6935				err = json.Unmarshal(*v, &typeVar)
6936				if err != nil {
6937					return err
6938				}
6939				cmr.Type = &typeVar
6940			}
6941		case "location":
6942			if v != nil {
6943				var location string
6944				err = json.Unmarshal(*v, &location)
6945				if err != nil {
6946					return err
6947				}
6948				cmr.Location = &location
6949			}
6950		case "tags":
6951			if v != nil {
6952				var tags map[string]*string
6953				err = json.Unmarshal(*v, &tags)
6954				if err != nil {
6955					return err
6956				}
6957				cmr.Tags = tags
6958			}
6959		case "properties":
6960			if v != nil {
6961				var connectionMonitorResultProperties ConnectionMonitorResultProperties
6962				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
6963				if err != nil {
6964					return err
6965				}
6966				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
6967			}
6968		}
6969	}
6970
6971	return nil
6972}
6973
6974// ConnectionMonitorResultProperties describes the properties of a connection monitor.
6975type ConnectionMonitorResultProperties struct {
6976	// ProvisioningState - The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6977	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6978	// StartTime - The date and time when the connection monitor was started.
6979	StartTime *date.Time `json:"startTime,omitempty"`
6980	// MonitoringStatus - The monitoring status of the connection monitor.
6981	MonitoringStatus *string                       `json:"monitoringStatus,omitempty"`
6982	Source           *ConnectionMonitorSource      `json:"source,omitempty"`
6983	Destination      *ConnectionMonitorDestination `json:"destination,omitempty"`
6984	// AutoStart - Determines if the connection monitor will start automatically once created.
6985	AutoStart *bool `json:"autoStart,omitempty"`
6986	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
6987	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
6988}
6989
6990// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
6991// long-running operation.
6992type ConnectionMonitorsCreateOrUpdateFuture struct {
6993	azure.Future
6994}
6995
6996// Result returns the result of the asynchronous operation.
6997// If the operation has not completed it will return an error.
6998func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
6999	var done bool
7000	done, err = future.DoneWithContext(context.Background(), client)
7001	if err != nil {
7002		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7003		return
7004	}
7005	if !done {
7006		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
7007		return
7008	}
7009	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7010	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
7011		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
7012		if err != nil {
7013			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
7014		}
7015	}
7016	return
7017}
7018
7019// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
7020// long-running operation.
7021type ConnectionMonitorsDeleteFuture struct {
7022	azure.Future
7023}
7024
7025// Result returns the result of the asynchronous operation.
7026// If the operation has not completed it will return an error.
7027func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
7028	var done bool
7029	done, err = future.DoneWithContext(context.Background(), client)
7030	if err != nil {
7031		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
7032		return
7033	}
7034	if !done {
7035		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
7036		return
7037	}
7038	ar.Response = future.Response()
7039	return
7040}
7041
7042// ConnectionMonitorSource describes the source of connection monitor.
7043type ConnectionMonitorSource struct {
7044	// ResourceID - The ID of the resource used as the source by connection monitor.
7045	ResourceID *string `json:"resourceId,omitempty"`
7046	// Port - The source port used by connection monitor.
7047	Port *int32 `json:"port,omitempty"`
7048}
7049
7050// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
7051// operation.
7052type ConnectionMonitorsQueryFuture struct {
7053	azure.Future
7054}
7055
7056// Result returns the result of the asynchronous operation.
7057// If the operation has not completed it will return an error.
7058func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
7059	var done bool
7060	done, err = future.DoneWithContext(context.Background(), client)
7061	if err != nil {
7062		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
7063		return
7064	}
7065	if !done {
7066		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
7067		return
7068	}
7069	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7070	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
7071		cmqr, err = client.QueryResponder(cmqr.Response.Response)
7072		if err != nil {
7073			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
7074		}
7075	}
7076	return
7077}
7078
7079// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
7080// operation.
7081type ConnectionMonitorsStartFuture struct {
7082	azure.Future
7083}
7084
7085// Result returns the result of the asynchronous operation.
7086// If the operation has not completed it will return an error.
7087func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
7088	var done bool
7089	done, err = future.DoneWithContext(context.Background(), client)
7090	if err != nil {
7091		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
7092		return
7093	}
7094	if !done {
7095		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
7096		return
7097	}
7098	ar.Response = future.Response()
7099	return
7100}
7101
7102// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
7103// operation.
7104type ConnectionMonitorsStopFuture struct {
7105	azure.Future
7106}
7107
7108// Result returns the result of the asynchronous operation.
7109// If the operation has not completed it will return an error.
7110func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
7111	var done bool
7112	done, err = future.DoneWithContext(context.Background(), client)
7113	if err != nil {
7114		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
7115		return
7116	}
7117	if !done {
7118		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
7119		return
7120	}
7121	ar.Response = future.Response()
7122	return
7123}
7124
7125// ConnectionResetSharedKey the virtual network connection reset shared key
7126type ConnectionResetSharedKey struct {
7127	autorest.Response `json:"-"`
7128	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
7129	KeyLength *int32 `json:"keyLength,omitempty"`
7130}
7131
7132// ConnectionSharedKey response for GetConnectionSharedKey API service call
7133type ConnectionSharedKey struct {
7134	autorest.Response `json:"-"`
7135	// Value - The virtual network connection shared key value.
7136	Value *string `json:"value,omitempty"`
7137	// ID - Resource ID.
7138	ID *string `json:"id,omitempty"`
7139}
7140
7141// ConnectionStateSnapshot connection state snapshot.
7142type ConnectionStateSnapshot struct {
7143	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
7144	ConnectionState ConnectionState `json:"connectionState,omitempty"`
7145	// StartTime - The start time of the connection snapshot.
7146	StartTime *date.Time `json:"startTime,omitempty"`
7147	// EndTime - The end time of the connection snapshot.
7148	EndTime *date.Time `json:"endTime,omitempty"`
7149	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
7150	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
7151	// AvgLatencyInMs - Average latency in ms.
7152	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
7153	// MinLatencyInMs - Minimum latency in ms.
7154	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
7155	// MaxLatencyInMs - Maximum latency in ms.
7156	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
7157	// ProbesSent - The number of sent probes.
7158	ProbesSent *int32 `json:"probesSent,omitempty"`
7159	// ProbesFailed - The number of failed probes.
7160	ProbesFailed *int32 `json:"probesFailed,omitempty"`
7161	// Hops - READ-ONLY; List of hops between the source and the destination.
7162	Hops *[]ConnectivityHop `json:"hops,omitempty"`
7163}
7164
7165// ConnectivityDestination parameters that define destination of connection.
7166type ConnectivityDestination struct {
7167	// ResourceID - The ID of the resource to which a connection attempt will be made.
7168	ResourceID *string `json:"resourceId,omitempty"`
7169	// Address - The IP address or URI the resource to which a connection attempt will be made.
7170	Address *string `json:"address,omitempty"`
7171	// Port - Port on which check connectivity will be performed.
7172	Port *int32 `json:"port,omitempty"`
7173}
7174
7175// ConnectivityHop information about a hop between the source and the destination.
7176type ConnectivityHop struct {
7177	// Type - READ-ONLY; The type of the hop.
7178	Type *string `json:"type,omitempty"`
7179	// ID - READ-ONLY; The ID of the hop.
7180	ID *string `json:"id,omitempty"`
7181	// Address - READ-ONLY; The IP address of the hop.
7182	Address *string `json:"address,omitempty"`
7183	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
7184	ResourceID *string `json:"resourceId,omitempty"`
7185	// NextHopIds - READ-ONLY; List of next hop identifiers.
7186	NextHopIds *[]string `json:"nextHopIds,omitempty"`
7187	// Issues - READ-ONLY; List of issues.
7188	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
7189}
7190
7191// ConnectivityInformation information on the connectivity status.
7192type ConnectivityInformation struct {
7193	autorest.Response `json:"-"`
7194	// Hops - READ-ONLY; List of hops between the source and the destination.
7195	Hops *[]ConnectivityHop `json:"hops,omitempty"`
7196	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
7197	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
7198	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
7199	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
7200	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
7201	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
7202	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
7203	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
7204	// ProbesSent - READ-ONLY; Total number of probes sent.
7205	ProbesSent *int32 `json:"probesSent,omitempty"`
7206	// ProbesFailed - READ-ONLY; Number of failed probes.
7207	ProbesFailed *int32 `json:"probesFailed,omitempty"`
7208}
7209
7210// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
7211type ConnectivityIssue struct {
7212	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
7213	Origin Origin `json:"origin,omitempty"`
7214	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
7215	Severity Severity `json:"severity,omitempty"`
7216	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
7217	Type IssueType `json:"type,omitempty"`
7218	// Context - READ-ONLY; Provides additional context on the issue.
7219	Context *[]map[string]*string `json:"context,omitempty"`
7220}
7221
7222// ConnectivityParameters parameters that determine how the connectivity check will be performed.
7223type ConnectivityParameters struct {
7224	Source      *ConnectivitySource      `json:"source,omitempty"`
7225	Destination *ConnectivityDestination `json:"destination,omitempty"`
7226	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
7227	Protocol              Protocol               `json:"protocol,omitempty"`
7228	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
7229}
7230
7231// ConnectivitySource parameters that define the source of the connection.
7232type ConnectivitySource struct {
7233	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
7234	ResourceID *string `json:"resourceId,omitempty"`
7235	// Port - The source port from which a connectivity check will be performed.
7236	Port *int32 `json:"port,omitempty"`
7237}
7238
7239// Container reference to container resource in remote resource provider.
7240type Container struct {
7241	// ID - Resource ID.
7242	ID *string `json:"id,omitempty"`
7243}
7244
7245// ContainerNetworkInterface container network interface child resource.
7246type ContainerNetworkInterface struct {
7247	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
7248	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
7249	// Name - The name of the resource. This name can be used to access the resource.
7250	Name *string `json:"name,omitempty"`
7251	// Type - READ-ONLY; Sub Resource type.
7252	Type *string `json:"type,omitempty"`
7253	// Etag - A unique read-only string that changes whenever the resource is updated.
7254	Etag *string `json:"etag,omitempty"`
7255	// ID - Resource ID.
7256	ID *string `json:"id,omitempty"`
7257}
7258
7259// MarshalJSON is the custom marshaler for ContainerNetworkInterface.
7260func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
7261	objectMap := make(map[string]interface{})
7262	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
7263		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
7264	}
7265	if cni.Name != nil {
7266		objectMap["name"] = cni.Name
7267	}
7268	if cni.Etag != nil {
7269		objectMap["etag"] = cni.Etag
7270	}
7271	if cni.ID != nil {
7272		objectMap["id"] = cni.ID
7273	}
7274	return json.Marshal(objectMap)
7275}
7276
7277// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
7278func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
7279	var m map[string]*json.RawMessage
7280	err := json.Unmarshal(body, &m)
7281	if err != nil {
7282		return err
7283	}
7284	for k, v := range m {
7285		switch k {
7286		case "properties":
7287			if v != nil {
7288				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
7289				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
7290				if err != nil {
7291					return err
7292				}
7293				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
7294			}
7295		case "name":
7296			if v != nil {
7297				var name string
7298				err = json.Unmarshal(*v, &name)
7299				if err != nil {
7300					return err
7301				}
7302				cni.Name = &name
7303			}
7304		case "type":
7305			if v != nil {
7306				var typeVar string
7307				err = json.Unmarshal(*v, &typeVar)
7308				if err != nil {
7309					return err
7310				}
7311				cni.Type = &typeVar
7312			}
7313		case "etag":
7314			if v != nil {
7315				var etag string
7316				err = json.Unmarshal(*v, &etag)
7317				if err != nil {
7318					return err
7319				}
7320				cni.Etag = &etag
7321			}
7322		case "id":
7323			if v != nil {
7324				var ID string
7325				err = json.Unmarshal(*v, &ID)
7326				if err != nil {
7327					return err
7328				}
7329				cni.ID = &ID
7330			}
7331		}
7332	}
7333
7334	return nil
7335}
7336
7337// ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
7338type ContainerNetworkInterfaceConfiguration struct {
7339	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
7340	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
7341	// Name - The name of the resource. This name can be used to access the resource.
7342	Name *string `json:"name,omitempty"`
7343	// Type - READ-ONLY; Sub Resource type.
7344	Type *string `json:"type,omitempty"`
7345	// Etag - A unique read-only string that changes whenever the resource is updated.
7346	Etag *string `json:"etag,omitempty"`
7347	// ID - Resource ID.
7348	ID *string `json:"id,omitempty"`
7349}
7350
7351// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
7352func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
7353	objectMap := make(map[string]interface{})
7354	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
7355		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
7356	}
7357	if cnic.Name != nil {
7358		objectMap["name"] = cnic.Name
7359	}
7360	if cnic.Etag != nil {
7361		objectMap["etag"] = cnic.Etag
7362	}
7363	if cnic.ID != nil {
7364		objectMap["id"] = cnic.ID
7365	}
7366	return json.Marshal(objectMap)
7367}
7368
7369// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
7370func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
7371	var m map[string]*json.RawMessage
7372	err := json.Unmarshal(body, &m)
7373	if err != nil {
7374		return err
7375	}
7376	for k, v := range m {
7377		switch k {
7378		case "properties":
7379			if v != nil {
7380				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
7381				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
7382				if err != nil {
7383					return err
7384				}
7385				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
7386			}
7387		case "name":
7388			if v != nil {
7389				var name string
7390				err = json.Unmarshal(*v, &name)
7391				if err != nil {
7392					return err
7393				}
7394				cnic.Name = &name
7395			}
7396		case "type":
7397			if v != nil {
7398				var typeVar string
7399				err = json.Unmarshal(*v, &typeVar)
7400				if err != nil {
7401					return err
7402				}
7403				cnic.Type = &typeVar
7404			}
7405		case "etag":
7406			if v != nil {
7407				var etag string
7408				err = json.Unmarshal(*v, &etag)
7409				if err != nil {
7410					return err
7411				}
7412				cnic.Etag = &etag
7413			}
7414		case "id":
7415			if v != nil {
7416				var ID string
7417				err = json.Unmarshal(*v, &ID)
7418				if err != nil {
7419					return err
7420				}
7421				cnic.ID = &ID
7422			}
7423		}
7424	}
7425
7426	return nil
7427}
7428
7429// ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
7430// properties.
7431type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
7432	// IPConfigurations - A list of ip configurations of the container network interface configuration.
7433	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
7434	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
7435	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
7436	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
7437	ProvisioningState *string `json:"provisioningState,omitempty"`
7438}
7439
7440// ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
7441type ContainerNetworkInterfaceIPConfiguration struct {
7442	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
7443	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
7444	// Name - The name of the resource. This name can be used to access the resource.
7445	Name *string `json:"name,omitempty"`
7446	// Type - READ-ONLY; Sub Resource type.
7447	Type *string `json:"type,omitempty"`
7448	// Etag - A unique read-only string that changes whenever the resource is updated.
7449	Etag *string `json:"etag,omitempty"`
7450}
7451
7452// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
7453func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
7454	objectMap := make(map[string]interface{})
7455	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
7456		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
7457	}
7458	if cniic.Name != nil {
7459		objectMap["name"] = cniic.Name
7460	}
7461	if cniic.Etag != nil {
7462		objectMap["etag"] = cniic.Etag
7463	}
7464	return json.Marshal(objectMap)
7465}
7466
7467// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
7468func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
7469	var m map[string]*json.RawMessage
7470	err := json.Unmarshal(body, &m)
7471	if err != nil {
7472		return err
7473	}
7474	for k, v := range m {
7475		switch k {
7476		case "properties":
7477			if v != nil {
7478				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
7479				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
7480				if err != nil {
7481					return err
7482				}
7483				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
7484			}
7485		case "name":
7486			if v != nil {
7487				var name string
7488				err = json.Unmarshal(*v, &name)
7489				if err != nil {
7490					return err
7491				}
7492				cniic.Name = &name
7493			}
7494		case "type":
7495			if v != nil {
7496				var typeVar string
7497				err = json.Unmarshal(*v, &typeVar)
7498				if err != nil {
7499					return err
7500				}
7501				cniic.Type = &typeVar
7502			}
7503		case "etag":
7504			if v != nil {
7505				var etag string
7506				err = json.Unmarshal(*v, &etag)
7507				if err != nil {
7508					return err
7509				}
7510				cniic.Etag = &etag
7511			}
7512		}
7513	}
7514
7515	return nil
7516}
7517
7518// ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
7519// IP configuration.
7520type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
7521	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
7522	ProvisioningState *string `json:"provisioningState,omitempty"`
7523}
7524
7525// ContainerNetworkInterfacePropertiesFormat ...
7526type ContainerNetworkInterfacePropertiesFormat struct {
7527	// ContainerNetworkInterfaceConfiguration - Container network interface configuration from which this container network interface is created.
7528	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
7529	// Container - Reference to the container to which this container network interface is attached.
7530	Container *Container `json:"container,omitempty"`
7531	// IPConfigurations - Reference to the ip configuration on this container nic.
7532	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
7533	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
7534	ProvisioningState *string `json:"provisioningState,omitempty"`
7535}
7536
7537// DdosProtectionPlan a DDoS protection plan in a resource group.
7538type DdosProtectionPlan struct {
7539	autorest.Response `json:"-"`
7540	// ID - READ-ONLY; Resource ID.
7541	ID *string `json:"id,omitempty"`
7542	// Name - READ-ONLY; Resource name.
7543	Name *string `json:"name,omitempty"`
7544	// Type - READ-ONLY; Resource type.
7545	Type *string `json:"type,omitempty"`
7546	// Location - Resource location.
7547	Location *string `json:"location,omitempty"`
7548	// Tags - Resource tags.
7549	Tags map[string]*string `json:"tags"`
7550	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
7551	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
7552	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7553	Etag *string `json:"etag,omitempty"`
7554}
7555
7556// MarshalJSON is the custom marshaler for DdosProtectionPlan.
7557func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
7558	objectMap := make(map[string]interface{})
7559	if dpp.Location != nil {
7560		objectMap["location"] = dpp.Location
7561	}
7562	if dpp.Tags != nil {
7563		objectMap["tags"] = dpp.Tags
7564	}
7565	if dpp.DdosProtectionPlanPropertiesFormat != nil {
7566		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
7567	}
7568	return json.Marshal(objectMap)
7569}
7570
7571// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
7572func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
7573	var m map[string]*json.RawMessage
7574	err := json.Unmarshal(body, &m)
7575	if err != nil {
7576		return err
7577	}
7578	for k, v := range m {
7579		switch k {
7580		case "id":
7581			if v != nil {
7582				var ID string
7583				err = json.Unmarshal(*v, &ID)
7584				if err != nil {
7585					return err
7586				}
7587				dpp.ID = &ID
7588			}
7589		case "name":
7590			if v != nil {
7591				var name string
7592				err = json.Unmarshal(*v, &name)
7593				if err != nil {
7594					return err
7595				}
7596				dpp.Name = &name
7597			}
7598		case "type":
7599			if v != nil {
7600				var typeVar string
7601				err = json.Unmarshal(*v, &typeVar)
7602				if err != nil {
7603					return err
7604				}
7605				dpp.Type = &typeVar
7606			}
7607		case "location":
7608			if v != nil {
7609				var location string
7610				err = json.Unmarshal(*v, &location)
7611				if err != nil {
7612					return err
7613				}
7614				dpp.Location = &location
7615			}
7616		case "tags":
7617			if v != nil {
7618				var tags map[string]*string
7619				err = json.Unmarshal(*v, &tags)
7620				if err != nil {
7621					return err
7622				}
7623				dpp.Tags = tags
7624			}
7625		case "properties":
7626			if v != nil {
7627				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
7628				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
7629				if err != nil {
7630					return err
7631				}
7632				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
7633			}
7634		case "etag":
7635			if v != nil {
7636				var etag string
7637				err = json.Unmarshal(*v, &etag)
7638				if err != nil {
7639					return err
7640				}
7641				dpp.Etag = &etag
7642			}
7643		}
7644	}
7645
7646	return nil
7647}
7648
7649// DdosProtectionPlanListResult a list of DDoS protection plans.
7650type DdosProtectionPlanListResult struct {
7651	autorest.Response `json:"-"`
7652	// Value - A list of DDoS protection plans.
7653	Value *[]DdosProtectionPlan `json:"value,omitempty"`
7654	// NextLink - READ-ONLY; The URL to get the next set of results.
7655	NextLink *string `json:"nextLink,omitempty"`
7656}
7657
7658// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
7659type DdosProtectionPlanListResultIterator struct {
7660	i    int
7661	page DdosProtectionPlanListResultPage
7662}
7663
7664// NextWithContext advances to the next value.  If there was an error making
7665// the request the iterator does not advance and the error is returned.
7666func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
7667	if tracing.IsEnabled() {
7668		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
7669		defer func() {
7670			sc := -1
7671			if iter.Response().Response.Response != nil {
7672				sc = iter.Response().Response.Response.StatusCode
7673			}
7674			tracing.EndSpan(ctx, sc, err)
7675		}()
7676	}
7677	iter.i++
7678	if iter.i < len(iter.page.Values()) {
7679		return nil
7680	}
7681	err = iter.page.NextWithContext(ctx)
7682	if err != nil {
7683		iter.i--
7684		return err
7685	}
7686	iter.i = 0
7687	return nil
7688}
7689
7690// Next advances to the next value.  If there was an error making
7691// the request the iterator does not advance and the error is returned.
7692// Deprecated: Use NextWithContext() instead.
7693func (iter *DdosProtectionPlanListResultIterator) Next() error {
7694	return iter.NextWithContext(context.Background())
7695}
7696
7697// NotDone returns true if the enumeration should be started or is not yet complete.
7698func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
7699	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7700}
7701
7702// Response returns the raw server response from the last page request.
7703func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
7704	return iter.page.Response()
7705}
7706
7707// Value returns the current value or a zero-initialized value if the
7708// iterator has advanced beyond the end of the collection.
7709func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
7710	if !iter.page.NotDone() {
7711		return DdosProtectionPlan{}
7712	}
7713	return iter.page.Values()[iter.i]
7714}
7715
7716// Creates a new instance of the DdosProtectionPlanListResultIterator type.
7717func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
7718	return DdosProtectionPlanListResultIterator{page: page}
7719}
7720
7721// IsEmpty returns true if the ListResult contains no values.
7722func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
7723	return dpplr.Value == nil || len(*dpplr.Value) == 0
7724}
7725
7726// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
7727// It returns nil if no more results exist.
7728func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
7729	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
7730		return nil, nil
7731	}
7732	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7733		autorest.AsJSON(),
7734		autorest.AsGet(),
7735		autorest.WithBaseURL(to.String(dpplr.NextLink)))
7736}
7737
7738// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
7739type DdosProtectionPlanListResultPage struct {
7740	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
7741	dpplr DdosProtectionPlanListResult
7742}
7743
7744// NextWithContext advances to the next page of values.  If there was an error making
7745// the request the page does not advance and the error is returned.
7746func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
7747	if tracing.IsEnabled() {
7748		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
7749		defer func() {
7750			sc := -1
7751			if page.Response().Response.Response != nil {
7752				sc = page.Response().Response.Response.StatusCode
7753			}
7754			tracing.EndSpan(ctx, sc, err)
7755		}()
7756	}
7757	next, err := page.fn(ctx, page.dpplr)
7758	if err != nil {
7759		return err
7760	}
7761	page.dpplr = next
7762	return nil
7763}
7764
7765// Next advances to the next page of values.  If there was an error making
7766// the request the page does not advance and the error is returned.
7767// Deprecated: Use NextWithContext() instead.
7768func (page *DdosProtectionPlanListResultPage) Next() error {
7769	return page.NextWithContext(context.Background())
7770}
7771
7772// NotDone returns true if the page enumeration should be started or is not yet complete.
7773func (page DdosProtectionPlanListResultPage) NotDone() bool {
7774	return !page.dpplr.IsEmpty()
7775}
7776
7777// Response returns the raw server response from the last page request.
7778func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
7779	return page.dpplr
7780}
7781
7782// Values returns the slice of values for the current page or nil if there are no values.
7783func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
7784	if page.dpplr.IsEmpty() {
7785		return nil
7786	}
7787	return *page.dpplr.Value
7788}
7789
7790// Creates a new instance of the DdosProtectionPlanListResultPage type.
7791func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
7792	return DdosProtectionPlanListResultPage{fn: getNextPage}
7793}
7794
7795// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
7796type DdosProtectionPlanPropertiesFormat struct {
7797	// 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.
7798	ResourceGUID *string `json:"resourceGuid,omitempty"`
7799	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
7800	ProvisioningState *string `json:"provisioningState,omitempty"`
7801	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
7802	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
7803}
7804
7805// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7806// long-running operation.
7807type DdosProtectionPlansCreateOrUpdateFuture struct {
7808	azure.Future
7809}
7810
7811// Result returns the result of the asynchronous operation.
7812// If the operation has not completed it will return an error.
7813func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
7814	var done bool
7815	done, err = future.DoneWithContext(context.Background(), client)
7816	if err != nil {
7817		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7818		return
7819	}
7820	if !done {
7821		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
7822		return
7823	}
7824	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7825	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
7826		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
7827		if err != nil {
7828			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
7829		}
7830	}
7831	return
7832}
7833
7834// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
7835// long-running operation.
7836type DdosProtectionPlansDeleteFuture struct {
7837	azure.Future
7838}
7839
7840// Result returns the result of the asynchronous operation.
7841// If the operation has not completed it will return an error.
7842func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
7843	var done bool
7844	done, err = future.DoneWithContext(context.Background(), client)
7845	if err != nil {
7846		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
7847		return
7848	}
7849	if !done {
7850		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
7851		return
7852	}
7853	ar.Response = future.Response()
7854	return
7855}
7856
7857// Delegation details the service to which the subnet is delegated.
7858type Delegation struct {
7859	// ServiceDelegationPropertiesFormat - Properties of the subnet.
7860	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
7861	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
7862	Name *string `json:"name,omitempty"`
7863	// Etag - A unique read-only string that changes whenever the resource is updated.
7864	Etag *string `json:"etag,omitempty"`
7865	// ID - Resource ID.
7866	ID *string `json:"id,omitempty"`
7867}
7868
7869// MarshalJSON is the custom marshaler for Delegation.
7870func (d Delegation) MarshalJSON() ([]byte, error) {
7871	objectMap := make(map[string]interface{})
7872	if d.ServiceDelegationPropertiesFormat != nil {
7873		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
7874	}
7875	if d.Name != nil {
7876		objectMap["name"] = d.Name
7877	}
7878	if d.Etag != nil {
7879		objectMap["etag"] = d.Etag
7880	}
7881	if d.ID != nil {
7882		objectMap["id"] = d.ID
7883	}
7884	return json.Marshal(objectMap)
7885}
7886
7887// UnmarshalJSON is the custom unmarshaler for Delegation struct.
7888func (d *Delegation) UnmarshalJSON(body []byte) error {
7889	var m map[string]*json.RawMessage
7890	err := json.Unmarshal(body, &m)
7891	if err != nil {
7892		return err
7893	}
7894	for k, v := range m {
7895		switch k {
7896		case "properties":
7897			if v != nil {
7898				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
7899				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
7900				if err != nil {
7901					return err
7902				}
7903				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
7904			}
7905		case "name":
7906			if v != nil {
7907				var name string
7908				err = json.Unmarshal(*v, &name)
7909				if err != nil {
7910					return err
7911				}
7912				d.Name = &name
7913			}
7914		case "etag":
7915			if v != nil {
7916				var etag string
7917				err = json.Unmarshal(*v, &etag)
7918				if err != nil {
7919					return err
7920				}
7921				d.Etag = &etag
7922			}
7923		case "id":
7924			if v != nil {
7925				var ID string
7926				err = json.Unmarshal(*v, &ID)
7927				if err != nil {
7928					return err
7929				}
7930				d.ID = &ID
7931			}
7932		}
7933	}
7934
7935	return nil
7936}
7937
7938// DeviceProperties list of properties of the device.
7939type DeviceProperties struct {
7940	// DeviceVendor - Name of the device Vendor.
7941	DeviceVendor *string `json:"deviceVendor,omitempty"`
7942	// DeviceModel - Model of the device.
7943	DeviceModel *string `json:"deviceModel,omitempty"`
7944	// LinkSpeedInMbps - Link speed.
7945	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
7946}
7947
7948// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
7949// network. Standard DHCP option for a subnet overrides VNET DHCP options.
7950type DhcpOptions struct {
7951	// DNSServers - The list of DNS servers IP addresses.
7952	DNSServers *[]string `json:"dnsServers,omitempty"`
7953}
7954
7955// Dimension dimension of the metric.
7956type Dimension struct {
7957	// Name - The name of the dimension.
7958	Name *string `json:"name,omitempty"`
7959	// DisplayName - The display name of the dimension.
7960	DisplayName *string `json:"displayName,omitempty"`
7961	// InternalName - The internal name of the dimension.
7962	InternalName *string `json:"internalName,omitempty"`
7963}
7964
7965// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
7966type DNSNameAvailabilityResult struct {
7967	autorest.Response `json:"-"`
7968	// Available - Domain availability (True/False).
7969	Available *bool `json:"available,omitempty"`
7970}
7971
7972// EffectiveNetworkSecurityGroup effective network security group.
7973type EffectiveNetworkSecurityGroup struct {
7974	// NetworkSecurityGroup - The ID of network security group that is applied.
7975	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
7976	// Association - Associated resources.
7977	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
7978	// EffectiveSecurityRules - A collection of effective security rules.
7979	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
7980	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
7981	TagMap map[string][]string `json:"tagMap"`
7982}
7983
7984// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
7985func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
7986	objectMap := make(map[string]interface{})
7987	if ensg.NetworkSecurityGroup != nil {
7988		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
7989	}
7990	if ensg.Association != nil {
7991		objectMap["association"] = ensg.Association
7992	}
7993	if ensg.EffectiveSecurityRules != nil {
7994		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
7995	}
7996	if ensg.TagMap != nil {
7997		objectMap["tagMap"] = ensg.TagMap
7998	}
7999	return json.Marshal(objectMap)
8000}
8001
8002// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
8003type EffectiveNetworkSecurityGroupAssociation struct {
8004	// Subnet - The ID of the subnet if assigned.
8005	Subnet *SubResource `json:"subnet,omitempty"`
8006	// NetworkInterface - The ID of the network interface if assigned.
8007	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
8008}
8009
8010// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
8011// call.
8012type EffectiveNetworkSecurityGroupListResult struct {
8013	autorest.Response `json:"-"`
8014	// Value - A list of effective network security groups.
8015	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
8016	// NextLink - READ-ONLY; The URL to get the next set of results.
8017	NextLink *string `json:"nextLink,omitempty"`
8018}
8019
8020// EffectiveNetworkSecurityRule effective network security rules.
8021type EffectiveNetworkSecurityRule struct {
8022	// Name - The name of the security rule specified by the user (if created by the user).
8023	Name *string `json:"name,omitempty"`
8024	// Protocol - The network protocol this rule applies to. Possible values are: 'Tcp', 'Udp', and 'All'. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
8025	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
8026	// SourcePortRange - The source port or range.
8027	SourcePortRange *string `json:"sourcePortRange,omitempty"`
8028	// DestinationPortRange - The destination port or range.
8029	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
8030	// 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 (*)
8031	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
8032	// 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 (*)
8033	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
8034	// SourceAddressPrefix - The source address prefix.
8035	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
8036	// DestinationAddressPrefix - The destination address prefix.
8037	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
8038	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
8039	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
8040	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
8041	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
8042	// ExpandedSourceAddressPrefix - The expanded source address prefix.
8043	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
8044	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
8045	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
8046	// Access - Whether network traffic is allowed or denied. Possible values are: 'Allow' and 'Deny'. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
8047	Access SecurityRuleAccess `json:"access,omitempty"`
8048	// Priority - The priority of the rule.
8049	Priority *int32 `json:"priority,omitempty"`
8050	// Direction - The direction of the rule. Possible values are: 'Inbound and Outbound'. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
8051	Direction SecurityRuleDirection `json:"direction,omitempty"`
8052}
8053
8054// EffectiveRoute effective Route
8055type EffectiveRoute struct {
8056	// Name - The name of the user defined route. This is optional.
8057	Name *string `json:"name,omitempty"`
8058	// Source - Who created the route. Possible values are: 'Unknown', 'User', 'VirtualNetworkGateway', and 'Default'. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
8059	Source EffectiveRouteSource `json:"source,omitempty"`
8060	// State - The value of effective route. Possible values are: 'Active' and 'Invalid'. Possible values include: 'EffectiveRouteStateActive', 'EffectiveRouteStateInvalid'
8061	State EffectiveRouteState `json:"state,omitempty"`
8062	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
8063	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
8064	// NextHopIPAddress - The IP address of the next hop of the effective route.
8065	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
8066	// NextHopType - The type of Azure hop the packet should be sent to. Possible values are: 'VirtualNetworkGateway', 'VnetLocal', 'Internet', 'VirtualAppliance', and 'None'. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
8067	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
8068}
8069
8070// EffectiveRouteListResult response for list effective route API service call.
8071type EffectiveRouteListResult struct {
8072	autorest.Response `json:"-"`
8073	// Value - A list of effective routes.
8074	Value *[]EffectiveRoute `json:"value,omitempty"`
8075	// NextLink - READ-ONLY; The URL to get the next set of results.
8076	NextLink *string `json:"nextLink,omitempty"`
8077}
8078
8079// EndpointService identifies the service being brought into the virtual network.
8080type EndpointService struct {
8081	// ID - A unique identifier of the service being referenced by the interface endpoint.
8082	ID *string `json:"id,omitempty"`
8083}
8084
8085// EndpointServiceResult endpoint service.
8086type EndpointServiceResult struct {
8087	// Name - READ-ONLY; Name of the endpoint service.
8088	Name *string `json:"name,omitempty"`
8089	// Type - READ-ONLY; Type of the endpoint service.
8090	Type *string `json:"type,omitempty"`
8091	// ID - Resource ID.
8092	ID *string `json:"id,omitempty"`
8093}
8094
8095// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
8096type EndpointServicesListResult struct {
8097	autorest.Response `json:"-"`
8098	// Value - List of available endpoint services in a region.
8099	Value *[]EndpointServiceResult `json:"value,omitempty"`
8100	// NextLink - The URL to get the next set of results.
8101	NextLink *string `json:"nextLink,omitempty"`
8102}
8103
8104// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
8105// values.
8106type EndpointServicesListResultIterator struct {
8107	i    int
8108	page EndpointServicesListResultPage
8109}
8110
8111// NextWithContext advances to the next value.  If there was an error making
8112// the request the iterator does not advance and the error is returned.
8113func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
8114	if tracing.IsEnabled() {
8115		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
8116		defer func() {
8117			sc := -1
8118			if iter.Response().Response.Response != nil {
8119				sc = iter.Response().Response.Response.StatusCode
8120			}
8121			tracing.EndSpan(ctx, sc, err)
8122		}()
8123	}
8124	iter.i++
8125	if iter.i < len(iter.page.Values()) {
8126		return nil
8127	}
8128	err = iter.page.NextWithContext(ctx)
8129	if err != nil {
8130		iter.i--
8131		return err
8132	}
8133	iter.i = 0
8134	return nil
8135}
8136
8137// Next advances to the next value.  If there was an error making
8138// the request the iterator does not advance and the error is returned.
8139// Deprecated: Use NextWithContext() instead.
8140func (iter *EndpointServicesListResultIterator) Next() error {
8141	return iter.NextWithContext(context.Background())
8142}
8143
8144// NotDone returns true if the enumeration should be started or is not yet complete.
8145func (iter EndpointServicesListResultIterator) NotDone() bool {
8146	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8147}
8148
8149// Response returns the raw server response from the last page request.
8150func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
8151	return iter.page.Response()
8152}
8153
8154// Value returns the current value or a zero-initialized value if the
8155// iterator has advanced beyond the end of the collection.
8156func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
8157	if !iter.page.NotDone() {
8158		return EndpointServiceResult{}
8159	}
8160	return iter.page.Values()[iter.i]
8161}
8162
8163// Creates a new instance of the EndpointServicesListResultIterator type.
8164func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
8165	return EndpointServicesListResultIterator{page: page}
8166}
8167
8168// IsEmpty returns true if the ListResult contains no values.
8169func (eslr EndpointServicesListResult) IsEmpty() bool {
8170	return eslr.Value == nil || len(*eslr.Value) == 0
8171}
8172
8173// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
8174// It returns nil if no more results exist.
8175func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
8176	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
8177		return nil, nil
8178	}
8179	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8180		autorest.AsJSON(),
8181		autorest.AsGet(),
8182		autorest.WithBaseURL(to.String(eslr.NextLink)))
8183}
8184
8185// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
8186type EndpointServicesListResultPage struct {
8187	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
8188	eslr EndpointServicesListResult
8189}
8190
8191// NextWithContext advances to the next page of values.  If there was an error making
8192// the request the page does not advance and the error is returned.
8193func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
8194	if tracing.IsEnabled() {
8195		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
8196		defer func() {
8197			sc := -1
8198			if page.Response().Response.Response != nil {
8199				sc = page.Response().Response.Response.StatusCode
8200			}
8201			tracing.EndSpan(ctx, sc, err)
8202		}()
8203	}
8204	next, err := page.fn(ctx, page.eslr)
8205	if err != nil {
8206		return err
8207	}
8208	page.eslr = next
8209	return nil
8210}
8211
8212// Next advances to the next page of values.  If there was an error making
8213// the request the page does not advance and the error is returned.
8214// Deprecated: Use NextWithContext() instead.
8215func (page *EndpointServicesListResultPage) Next() error {
8216	return page.NextWithContext(context.Background())
8217}
8218
8219// NotDone returns true if the page enumeration should be started or is not yet complete.
8220func (page EndpointServicesListResultPage) NotDone() bool {
8221	return !page.eslr.IsEmpty()
8222}
8223
8224// Response returns the raw server response from the last page request.
8225func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
8226	return page.eslr
8227}
8228
8229// Values returns the slice of values for the current page or nil if there are no values.
8230func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
8231	if page.eslr.IsEmpty() {
8232		return nil
8233	}
8234	return *page.eslr.Value
8235}
8236
8237// Creates a new instance of the EndpointServicesListResultPage type.
8238func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
8239	return EndpointServicesListResultPage{fn: getNextPage}
8240}
8241
8242// Error ...
8243type Error struct {
8244	Code       *string         `json:"code,omitempty"`
8245	Message    *string         `json:"message,omitempty"`
8246	Target     *string         `json:"target,omitempty"`
8247	Details    *[]ErrorDetails `json:"details,omitempty"`
8248	InnerError *string         `json:"innerError,omitempty"`
8249}
8250
8251// ErrorDetails ...
8252type ErrorDetails struct {
8253	Code    *string `json:"code,omitempty"`
8254	Target  *string `json:"target,omitempty"`
8255	Message *string `json:"message,omitempty"`
8256}
8257
8258// ErrorResponse the error object.
8259type ErrorResponse struct {
8260	Error *ErrorDetails `json:"error,omitempty"`
8261}
8262
8263// EvaluatedNetworkSecurityGroup results of network security group evaluation.
8264type EvaluatedNetworkSecurityGroup struct {
8265	// NetworkSecurityGroupID - Network security group ID.
8266	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
8267	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
8268	AppliedTo   *string      `json:"appliedTo,omitempty"`
8269	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
8270	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
8271	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
8272}
8273
8274// ExpressRouteCircuit expressRouteCircuit resource
8275type ExpressRouteCircuit struct {
8276	autorest.Response `json:"-"`
8277	// Sku - The SKU.
8278	Sku                                  *ExpressRouteCircuitSku `json:"sku,omitempty"`
8279	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
8280	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
8281	Etag *string `json:"etag,omitempty"`
8282	// ID - Resource ID.
8283	ID *string `json:"id,omitempty"`
8284	// Name - READ-ONLY; Resource name.
8285	Name *string `json:"name,omitempty"`
8286	// Type - READ-ONLY; Resource type.
8287	Type *string `json:"type,omitempty"`
8288	// Location - Resource location.
8289	Location *string `json:"location,omitempty"`
8290	// Tags - Resource tags.
8291	Tags map[string]*string `json:"tags"`
8292}
8293
8294// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
8295func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
8296	objectMap := make(map[string]interface{})
8297	if erc.Sku != nil {
8298		objectMap["sku"] = erc.Sku
8299	}
8300	if erc.ExpressRouteCircuitPropertiesFormat != nil {
8301		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
8302	}
8303	if erc.ID != nil {
8304		objectMap["id"] = erc.ID
8305	}
8306	if erc.Location != nil {
8307		objectMap["location"] = erc.Location
8308	}
8309	if erc.Tags != nil {
8310		objectMap["tags"] = erc.Tags
8311	}
8312	return json.Marshal(objectMap)
8313}
8314
8315// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
8316func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
8317	var m map[string]*json.RawMessage
8318	err := json.Unmarshal(body, &m)
8319	if err != nil {
8320		return err
8321	}
8322	for k, v := range m {
8323		switch k {
8324		case "sku":
8325			if v != nil {
8326				var sku ExpressRouteCircuitSku
8327				err = json.Unmarshal(*v, &sku)
8328				if err != nil {
8329					return err
8330				}
8331				erc.Sku = &sku
8332			}
8333		case "properties":
8334			if v != nil {
8335				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
8336				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
8337				if err != nil {
8338					return err
8339				}
8340				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
8341			}
8342		case "etag":
8343			if v != nil {
8344				var etag string
8345				err = json.Unmarshal(*v, &etag)
8346				if err != nil {
8347					return err
8348				}
8349				erc.Etag = &etag
8350			}
8351		case "id":
8352			if v != nil {
8353				var ID string
8354				err = json.Unmarshal(*v, &ID)
8355				if err != nil {
8356					return err
8357				}
8358				erc.ID = &ID
8359			}
8360		case "name":
8361			if v != nil {
8362				var name string
8363				err = json.Unmarshal(*v, &name)
8364				if err != nil {
8365					return err
8366				}
8367				erc.Name = &name
8368			}
8369		case "type":
8370			if v != nil {
8371				var typeVar string
8372				err = json.Unmarshal(*v, &typeVar)
8373				if err != nil {
8374					return err
8375				}
8376				erc.Type = &typeVar
8377			}
8378		case "location":
8379			if v != nil {
8380				var location string
8381				err = json.Unmarshal(*v, &location)
8382				if err != nil {
8383					return err
8384				}
8385				erc.Location = &location
8386			}
8387		case "tags":
8388			if v != nil {
8389				var tags map[string]*string
8390				err = json.Unmarshal(*v, &tags)
8391				if err != nil {
8392					return err
8393				}
8394				erc.Tags = tags
8395			}
8396		}
8397	}
8398
8399	return nil
8400}
8401
8402// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
8403type ExpressRouteCircuitArpTable struct {
8404	// Age - Entry age in minutes
8405	Age *int32 `json:"age,omitempty"`
8406	// Interface - Interface address
8407	Interface *string `json:"interface,omitempty"`
8408	// IPAddress - The IP address.
8409	IPAddress *string `json:"ipAddress,omitempty"`
8410	// MacAddress - The MAC address.
8411	MacAddress *string `json:"macAddress,omitempty"`
8412}
8413
8414// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
8415type ExpressRouteCircuitAuthorization struct {
8416	autorest.Response              `json:"-"`
8417	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
8418	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
8419	Name *string `json:"name,omitempty"`
8420	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8421	Etag *string `json:"etag,omitempty"`
8422	// ID - Resource ID.
8423	ID *string `json:"id,omitempty"`
8424}
8425
8426// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
8427func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
8428	objectMap := make(map[string]interface{})
8429	if erca.AuthorizationPropertiesFormat != nil {
8430		objectMap["properties"] = erca.AuthorizationPropertiesFormat
8431	}
8432	if erca.Name != nil {
8433		objectMap["name"] = erca.Name
8434	}
8435	if erca.ID != nil {
8436		objectMap["id"] = erca.ID
8437	}
8438	return json.Marshal(objectMap)
8439}
8440
8441// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
8442func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
8443	var m map[string]*json.RawMessage
8444	err := json.Unmarshal(body, &m)
8445	if err != nil {
8446		return err
8447	}
8448	for k, v := range m {
8449		switch k {
8450		case "properties":
8451			if v != nil {
8452				var authorizationPropertiesFormat AuthorizationPropertiesFormat
8453				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
8454				if err != nil {
8455					return err
8456				}
8457				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
8458			}
8459		case "name":
8460			if v != nil {
8461				var name string
8462				err = json.Unmarshal(*v, &name)
8463				if err != nil {
8464					return err
8465				}
8466				erca.Name = &name
8467			}
8468		case "etag":
8469			if v != nil {
8470				var etag string
8471				err = json.Unmarshal(*v, &etag)
8472				if err != nil {
8473					return err
8474				}
8475				erca.Etag = &etag
8476			}
8477		case "id":
8478			if v != nil {
8479				var ID string
8480				err = json.Unmarshal(*v, &ID)
8481				if err != nil {
8482					return err
8483				}
8484				erca.ID = &ID
8485			}
8486		}
8487	}
8488
8489	return nil
8490}
8491
8492// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
8493// results of a long-running operation.
8494type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
8495	azure.Future
8496}
8497
8498// Result returns the result of the asynchronous operation.
8499// If the operation has not completed it will return an error.
8500func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
8501	var done bool
8502	done, err = future.DoneWithContext(context.Background(), client)
8503	if err != nil {
8504		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8505		return
8506	}
8507	if !done {
8508		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
8509		return
8510	}
8511	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8512	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
8513		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
8514		if err != nil {
8515			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
8516		}
8517	}
8518	return
8519}
8520
8521// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
8522// of a long-running operation.
8523type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
8524	azure.Future
8525}
8526
8527// Result returns the result of the asynchronous operation.
8528// If the operation has not completed it will return an error.
8529func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
8530	var done bool
8531	done, err = future.DoneWithContext(context.Background(), client)
8532	if err != nil {
8533		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
8534		return
8535	}
8536	if !done {
8537		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
8538		return
8539	}
8540	ar.Response = future.Response()
8541	return
8542}
8543
8544// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
8545// resource.
8546type ExpressRouteCircuitConnection struct {
8547	autorest.Response                              `json:"-"`
8548	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
8549	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
8550	Name *string `json:"name,omitempty"`
8551	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8552	Etag *string `json:"etag,omitempty"`
8553	// ID - Resource ID.
8554	ID *string `json:"id,omitempty"`
8555}
8556
8557// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
8558func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
8559	objectMap := make(map[string]interface{})
8560	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
8561		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
8562	}
8563	if ercc.Name != nil {
8564		objectMap["name"] = ercc.Name
8565	}
8566	if ercc.ID != nil {
8567		objectMap["id"] = ercc.ID
8568	}
8569	return json.Marshal(objectMap)
8570}
8571
8572// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
8573func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
8574	var m map[string]*json.RawMessage
8575	err := json.Unmarshal(body, &m)
8576	if err != nil {
8577		return err
8578	}
8579	for k, v := range m {
8580		switch k {
8581		case "properties":
8582			if v != nil {
8583				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
8584				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
8585				if err != nil {
8586					return err
8587				}
8588				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
8589			}
8590		case "name":
8591			if v != nil {
8592				var name string
8593				err = json.Unmarshal(*v, &name)
8594				if err != nil {
8595					return err
8596				}
8597				ercc.Name = &name
8598			}
8599		case "etag":
8600			if v != nil {
8601				var etag string
8602				err = json.Unmarshal(*v, &etag)
8603				if err != nil {
8604					return err
8605				}
8606				ercc.Etag = &etag
8607			}
8608		case "id":
8609			if v != nil {
8610				var ID string
8611				err = json.Unmarshal(*v, &ID)
8612				if err != nil {
8613					return err
8614				}
8615				ercc.ID = &ID
8616			}
8617		}
8618	}
8619
8620	return nil
8621}
8622
8623// ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
8624// global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
8625type ExpressRouteCircuitConnectionListResult struct {
8626	autorest.Response `json:"-"`
8627	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
8628	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
8629	// NextLink - The URL to get the next set of results.
8630	NextLink *string `json:"nextLink,omitempty"`
8631}
8632
8633// ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
8634// ExpressRouteCircuitConnection values.
8635type ExpressRouteCircuitConnectionListResultIterator struct {
8636	i    int
8637	page ExpressRouteCircuitConnectionListResultPage
8638}
8639
8640// NextWithContext advances to the next value.  If there was an error making
8641// the request the iterator does not advance and the error is returned.
8642func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
8643	if tracing.IsEnabled() {
8644		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
8645		defer func() {
8646			sc := -1
8647			if iter.Response().Response.Response != nil {
8648				sc = iter.Response().Response.Response.StatusCode
8649			}
8650			tracing.EndSpan(ctx, sc, err)
8651		}()
8652	}
8653	iter.i++
8654	if iter.i < len(iter.page.Values()) {
8655		return nil
8656	}
8657	err = iter.page.NextWithContext(ctx)
8658	if err != nil {
8659		iter.i--
8660		return err
8661	}
8662	iter.i = 0
8663	return nil
8664}
8665
8666// Next advances to the next value.  If there was an error making
8667// the request the iterator does not advance and the error is returned.
8668// Deprecated: Use NextWithContext() instead.
8669func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
8670	return iter.NextWithContext(context.Background())
8671}
8672
8673// NotDone returns true if the enumeration should be started or is not yet complete.
8674func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
8675	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8676}
8677
8678// Response returns the raw server response from the last page request.
8679func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
8680	return iter.page.Response()
8681}
8682
8683// Value returns the current value or a zero-initialized value if the
8684// iterator has advanced beyond the end of the collection.
8685func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
8686	if !iter.page.NotDone() {
8687		return ExpressRouteCircuitConnection{}
8688	}
8689	return iter.page.Values()[iter.i]
8690}
8691
8692// Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
8693func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
8694	return ExpressRouteCircuitConnectionListResultIterator{page: page}
8695}
8696
8697// IsEmpty returns true if the ListResult contains no values.
8698func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
8699	return ercclr.Value == nil || len(*ercclr.Value) == 0
8700}
8701
8702// expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
8703// It returns nil if no more results exist.
8704func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
8705	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
8706		return nil, nil
8707	}
8708	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8709		autorest.AsJSON(),
8710		autorest.AsGet(),
8711		autorest.WithBaseURL(to.String(ercclr.NextLink)))
8712}
8713
8714// ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
8715type ExpressRouteCircuitConnectionListResultPage struct {
8716	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
8717	ercclr ExpressRouteCircuitConnectionListResult
8718}
8719
8720// NextWithContext advances to the next page of values.  If there was an error making
8721// the request the page does not advance and the error is returned.
8722func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
8723	if tracing.IsEnabled() {
8724		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
8725		defer func() {
8726			sc := -1
8727			if page.Response().Response.Response != nil {
8728				sc = page.Response().Response.Response.StatusCode
8729			}
8730			tracing.EndSpan(ctx, sc, err)
8731		}()
8732	}
8733	next, err := page.fn(ctx, page.ercclr)
8734	if err != nil {
8735		return err
8736	}
8737	page.ercclr = next
8738	return nil
8739}
8740
8741// Next advances to the next page of values.  If there was an error making
8742// the request the page does not advance and the error is returned.
8743// Deprecated: Use NextWithContext() instead.
8744func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
8745	return page.NextWithContext(context.Background())
8746}
8747
8748// NotDone returns true if the page enumeration should be started or is not yet complete.
8749func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
8750	return !page.ercclr.IsEmpty()
8751}
8752
8753// Response returns the raw server response from the last page request.
8754func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
8755	return page.ercclr
8756}
8757
8758// Values returns the slice of values for the current page or nil if there are no values.
8759func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
8760	if page.ercclr.IsEmpty() {
8761		return nil
8762	}
8763	return *page.ercclr.Value
8764}
8765
8766// Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
8767func NewExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
8768	return ExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
8769}
8770
8771// ExpressRouteCircuitConnectionPropertiesFormat ...
8772type ExpressRouteCircuitConnectionPropertiesFormat struct {
8773	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
8774	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
8775	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
8776	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
8777	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
8778	AddressPrefix *string `json:"addressPrefix,omitempty"`
8779	// AuthorizationKey - The authorization key.
8780	AuthorizationKey *string `json:"authorizationKey,omitempty"`
8781	// CircuitConnectionStatus - READ-ONLY; Express Route Circuit Connection State. Possible values are: 'Connected' and 'Disconnected'. Possible values include: 'Connected', 'Connecting', 'Disconnected'
8782	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
8783	// ProvisioningState - READ-ONLY; Provisioning state of the circuit connection resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
8784	ProvisioningState *string `json:"provisioningState,omitempty"`
8785}
8786
8787// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
8788// results of a long-running operation.
8789type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
8790	azure.Future
8791}
8792
8793// Result returns the result of the asynchronous operation.
8794// If the operation has not completed it will return an error.
8795func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
8796	var done bool
8797	done, err = future.DoneWithContext(context.Background(), client)
8798	if err != nil {
8799		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8800		return
8801	}
8802	if !done {
8803		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
8804		return
8805	}
8806	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8807	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
8808		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
8809		if err != nil {
8810			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
8811		}
8812	}
8813	return
8814}
8815
8816// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
8817// long-running operation.
8818type ExpressRouteCircuitConnectionsDeleteFuture struct {
8819	azure.Future
8820}
8821
8822// Result returns the result of the asynchronous operation.
8823// If the operation has not completed it will return an error.
8824func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
8825	var done bool
8826	done, err = future.DoneWithContext(context.Background(), client)
8827	if err != nil {
8828		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
8829		return
8830	}
8831	if !done {
8832		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
8833		return
8834	}
8835	ar.Response = future.Response()
8836	return
8837}
8838
8839// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
8840type ExpressRouteCircuitListResult struct {
8841	autorest.Response `json:"-"`
8842	// Value - A list of ExpressRouteCircuits in a resource group.
8843	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
8844	// NextLink - The URL to get the next set of results.
8845	NextLink *string `json:"nextLink,omitempty"`
8846}
8847
8848// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
8849// values.
8850type ExpressRouteCircuitListResultIterator struct {
8851	i    int
8852	page ExpressRouteCircuitListResultPage
8853}
8854
8855// NextWithContext advances to the next value.  If there was an error making
8856// the request the iterator does not advance and the error is returned.
8857func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
8858	if tracing.IsEnabled() {
8859		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
8860		defer func() {
8861			sc := -1
8862			if iter.Response().Response.Response != nil {
8863				sc = iter.Response().Response.Response.StatusCode
8864			}
8865			tracing.EndSpan(ctx, sc, err)
8866		}()
8867	}
8868	iter.i++
8869	if iter.i < len(iter.page.Values()) {
8870		return nil
8871	}
8872	err = iter.page.NextWithContext(ctx)
8873	if err != nil {
8874		iter.i--
8875		return err
8876	}
8877	iter.i = 0
8878	return nil
8879}
8880
8881// Next advances to the next value.  If there was an error making
8882// the request the iterator does not advance and the error is returned.
8883// Deprecated: Use NextWithContext() instead.
8884func (iter *ExpressRouteCircuitListResultIterator) Next() error {
8885	return iter.NextWithContext(context.Background())
8886}
8887
8888// NotDone returns true if the enumeration should be started or is not yet complete.
8889func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
8890	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8891}
8892
8893// Response returns the raw server response from the last page request.
8894func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
8895	return iter.page.Response()
8896}
8897
8898// Value returns the current value or a zero-initialized value if the
8899// iterator has advanced beyond the end of the collection.
8900func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
8901	if !iter.page.NotDone() {
8902		return ExpressRouteCircuit{}
8903	}
8904	return iter.page.Values()[iter.i]
8905}
8906
8907// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
8908func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
8909	return ExpressRouteCircuitListResultIterator{page: page}
8910}
8911
8912// IsEmpty returns true if the ListResult contains no values.
8913func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
8914	return erclr.Value == nil || len(*erclr.Value) == 0
8915}
8916
8917// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
8918// It returns nil if no more results exist.
8919func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
8920	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
8921		return nil, nil
8922	}
8923	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8924		autorest.AsJSON(),
8925		autorest.AsGet(),
8926		autorest.WithBaseURL(to.String(erclr.NextLink)))
8927}
8928
8929// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
8930type ExpressRouteCircuitListResultPage struct {
8931	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
8932	erclr ExpressRouteCircuitListResult
8933}
8934
8935// NextWithContext advances to the next page of values.  If there was an error making
8936// the request the page does not advance and the error is returned.
8937func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
8938	if tracing.IsEnabled() {
8939		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
8940		defer func() {
8941			sc := -1
8942			if page.Response().Response.Response != nil {
8943				sc = page.Response().Response.Response.StatusCode
8944			}
8945			tracing.EndSpan(ctx, sc, err)
8946		}()
8947	}
8948	next, err := page.fn(ctx, page.erclr)
8949	if err != nil {
8950		return err
8951	}
8952	page.erclr = next
8953	return nil
8954}
8955
8956// Next advances to the next page of values.  If there was an error making
8957// the request the page does not advance and the error is returned.
8958// Deprecated: Use NextWithContext() instead.
8959func (page *ExpressRouteCircuitListResultPage) Next() error {
8960	return page.NextWithContext(context.Background())
8961}
8962
8963// NotDone returns true if the page enumeration should be started or is not yet complete.
8964func (page ExpressRouteCircuitListResultPage) NotDone() bool {
8965	return !page.erclr.IsEmpty()
8966}
8967
8968// Response returns the raw server response from the last page request.
8969func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
8970	return page.erclr
8971}
8972
8973// Values returns the slice of values for the current page or nil if there are no values.
8974func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
8975	if page.erclr.IsEmpty() {
8976		return nil
8977	}
8978	return *page.erclr.Value
8979}
8980
8981// Creates a new instance of the ExpressRouteCircuitListResultPage type.
8982func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
8983	return ExpressRouteCircuitListResultPage{fn: getNextPage}
8984}
8985
8986// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
8987type ExpressRouteCircuitPeering struct {
8988	autorest.Response                           `json:"-"`
8989	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
8990	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
8991	Name *string `json:"name,omitempty"`
8992	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8993	Etag *string `json:"etag,omitempty"`
8994	// ID - Resource ID.
8995	ID *string `json:"id,omitempty"`
8996}
8997
8998// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
8999func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
9000	objectMap := make(map[string]interface{})
9001	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
9002		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
9003	}
9004	if ercp.Name != nil {
9005		objectMap["name"] = ercp.Name
9006	}
9007	if ercp.ID != nil {
9008		objectMap["id"] = ercp.ID
9009	}
9010	return json.Marshal(objectMap)
9011}
9012
9013// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
9014func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
9015	var m map[string]*json.RawMessage
9016	err := json.Unmarshal(body, &m)
9017	if err != nil {
9018		return err
9019	}
9020	for k, v := range m {
9021		switch k {
9022		case "properties":
9023			if v != nil {
9024				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
9025				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
9026				if err != nil {
9027					return err
9028				}
9029				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
9030			}
9031		case "name":
9032			if v != nil {
9033				var name string
9034				err = json.Unmarshal(*v, &name)
9035				if err != nil {
9036					return err
9037				}
9038				ercp.Name = &name
9039			}
9040		case "etag":
9041			if v != nil {
9042				var etag string
9043				err = json.Unmarshal(*v, &etag)
9044				if err != nil {
9045					return err
9046				}
9047				ercp.Etag = &etag
9048			}
9049		case "id":
9050			if v != nil {
9051				var ID string
9052				err = json.Unmarshal(*v, &ID)
9053				if err != nil {
9054					return err
9055				}
9056				ercp.ID = &ID
9057			}
9058		}
9059	}
9060
9061	return nil
9062}
9063
9064// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
9065type ExpressRouteCircuitPeeringConfig struct {
9066	// AdvertisedPublicPrefixes - The reference of AdvertisedPublicPrefixes.
9067	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
9068	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering
9069	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
9070	// AdvertisedPublicPrefixesState - AdvertisedPublicPrefixState of the Peering resource. Possible values are 'NotConfigured', 'Configuring', 'Configured', and 'ValidationNeeded'. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
9071	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
9072	// LegacyMode - The legacy mode of the peering.
9073	LegacyMode *int32 `json:"legacyMode,omitempty"`
9074	// CustomerASN - The CustomerASN of the peering.
9075	CustomerASN *int32 `json:"customerASN,omitempty"`
9076	// RoutingRegistryName - The RoutingRegistryName of the configuration.
9077	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
9078}
9079
9080// ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
9081type ExpressRouteCircuitPeeringID struct {
9082	// ID - The ID of the ExpressRoute circuit peering.
9083	ID *string `json:"id,omitempty"`
9084}
9085
9086// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
9087// that belong to an ExpressRouteCircuit.
9088type ExpressRouteCircuitPeeringListResult struct {
9089	autorest.Response `json:"-"`
9090	// Value - The peerings in an express route circuit.
9091	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
9092	// NextLink - The URL to get the next set of results.
9093	NextLink *string `json:"nextLink,omitempty"`
9094}
9095
9096// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
9097// ExpressRouteCircuitPeering values.
9098type ExpressRouteCircuitPeeringListResultIterator struct {
9099	i    int
9100	page ExpressRouteCircuitPeeringListResultPage
9101}
9102
9103// NextWithContext advances to the next value.  If there was an error making
9104// the request the iterator does not advance and the error is returned.
9105func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
9106	if tracing.IsEnabled() {
9107		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
9108		defer func() {
9109			sc := -1
9110			if iter.Response().Response.Response != nil {
9111				sc = iter.Response().Response.Response.StatusCode
9112			}
9113			tracing.EndSpan(ctx, sc, err)
9114		}()
9115	}
9116	iter.i++
9117	if iter.i < len(iter.page.Values()) {
9118		return nil
9119	}
9120	err = iter.page.NextWithContext(ctx)
9121	if err != nil {
9122		iter.i--
9123		return err
9124	}
9125	iter.i = 0
9126	return nil
9127}
9128
9129// Next advances to the next value.  If there was an error making
9130// the request the iterator does not advance and the error is returned.
9131// Deprecated: Use NextWithContext() instead.
9132func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
9133	return iter.NextWithContext(context.Background())
9134}
9135
9136// NotDone returns true if the enumeration should be started or is not yet complete.
9137func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
9138	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9139}
9140
9141// Response returns the raw server response from the last page request.
9142func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
9143	return iter.page.Response()
9144}
9145
9146// Value returns the current value or a zero-initialized value if the
9147// iterator has advanced beyond the end of the collection.
9148func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
9149	if !iter.page.NotDone() {
9150		return ExpressRouteCircuitPeering{}
9151	}
9152	return iter.page.Values()[iter.i]
9153}
9154
9155// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
9156func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
9157	return ExpressRouteCircuitPeeringListResultIterator{page: page}
9158}
9159
9160// IsEmpty returns true if the ListResult contains no values.
9161func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
9162	return ercplr.Value == nil || len(*ercplr.Value) == 0
9163}
9164
9165// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
9166// It returns nil if no more results exist.
9167func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
9168	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
9169		return nil, nil
9170	}
9171	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9172		autorest.AsJSON(),
9173		autorest.AsGet(),
9174		autorest.WithBaseURL(to.String(ercplr.NextLink)))
9175}
9176
9177// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
9178type ExpressRouteCircuitPeeringListResultPage struct {
9179	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
9180	ercplr ExpressRouteCircuitPeeringListResult
9181}
9182
9183// NextWithContext advances to the next page of values.  If there was an error making
9184// the request the page does not advance and the error is returned.
9185func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
9186	if tracing.IsEnabled() {
9187		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
9188		defer func() {
9189			sc := -1
9190			if page.Response().Response.Response != nil {
9191				sc = page.Response().Response.Response.StatusCode
9192			}
9193			tracing.EndSpan(ctx, sc, err)
9194		}()
9195	}
9196	next, err := page.fn(ctx, page.ercplr)
9197	if err != nil {
9198		return err
9199	}
9200	page.ercplr = next
9201	return nil
9202}
9203
9204// Next advances to the next page of values.  If there was an error making
9205// the request the page does not advance and the error is returned.
9206// Deprecated: Use NextWithContext() instead.
9207func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
9208	return page.NextWithContext(context.Background())
9209}
9210
9211// NotDone returns true if the page enumeration should be started or is not yet complete.
9212func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
9213	return !page.ercplr.IsEmpty()
9214}
9215
9216// Response returns the raw server response from the last page request.
9217func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
9218	return page.ercplr
9219}
9220
9221// Values returns the slice of values for the current page or nil if there are no values.
9222func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
9223	if page.ercplr.IsEmpty() {
9224		return nil
9225	}
9226	return *page.ercplr.Value
9227}
9228
9229// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
9230func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
9231	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
9232}
9233
9234// ExpressRouteCircuitPeeringPropertiesFormat ...
9235type ExpressRouteCircuitPeeringPropertiesFormat struct {
9236	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
9237	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
9238	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
9239	State ExpressRoutePeeringState `json:"state,omitempty"`
9240	// AzureASN - The Azure ASN.
9241	AzureASN *int32 `json:"azureASN,omitempty"`
9242	// PeerASN - The peer ASN.
9243	PeerASN *int64 `json:"peerASN,omitempty"`
9244	// PrimaryPeerAddressPrefix - The primary address prefix.
9245	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
9246	// SecondaryPeerAddressPrefix - The secondary address prefix.
9247	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
9248	// PrimaryAzurePort - The primary port.
9249	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
9250	// SecondaryAzurePort - The secondary port.
9251	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
9252	// SharedKey - The shared key.
9253	SharedKey *string `json:"sharedKey,omitempty"`
9254	// VlanID - The VLAN ID.
9255	VlanID *int32 `json:"vlanId,omitempty"`
9256	// MicrosoftPeeringConfig - The Microsoft peering configuration.
9257	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
9258	// Stats - Gets peering stats.
9259	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
9260	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9261	ProvisioningState *string `json:"provisioningState,omitempty"`
9262	// GatewayManagerEtag - The GatewayManager Etag.
9263	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
9264	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
9265	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
9266	// RouteFilter - The reference of the RouteFilter resource.
9267	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
9268	// Ipv6PeeringConfig - The IPv6 peering configuration.
9269	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
9270	// ExpressRouteConnection - The ExpressRoute connection.
9271	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
9272	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
9273	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
9274}
9275
9276// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
9277// of a long-running operation.
9278type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
9279	azure.Future
9280}
9281
9282// Result returns the result of the asynchronous operation.
9283// If the operation has not completed it will return an error.
9284func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
9285	var done bool
9286	done, err = future.DoneWithContext(context.Background(), client)
9287	if err != nil {
9288		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9289		return
9290	}
9291	if !done {
9292		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
9293		return
9294	}
9295	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9296	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
9297		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
9298		if err != nil {
9299			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
9300		}
9301	}
9302	return
9303}
9304
9305// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
9306// long-running operation.
9307type ExpressRouteCircuitPeeringsDeleteFuture struct {
9308	azure.Future
9309}
9310
9311// Result returns the result of the asynchronous operation.
9312// If the operation has not completed it will return an error.
9313func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
9314	var done bool
9315	done, err = future.DoneWithContext(context.Background(), client)
9316	if err != nil {
9317		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
9318		return
9319	}
9320	if !done {
9321		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
9322		return
9323	}
9324	ar.Response = future.Response()
9325	return
9326}
9327
9328// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
9329type ExpressRouteCircuitPropertiesFormat struct {
9330	// AllowClassicOperations - Allow classic operations
9331	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
9332	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
9333	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
9334	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values are 'NotProvisioned', 'Provisioning', 'Provisioned', and 'Deprovisioning'. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
9335	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
9336	// Authorizations - The list of authorizations.
9337	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
9338	// Peerings - The list of peerings.
9339	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
9340	// ServiceKey - The ServiceKey.
9341	ServiceKey *string `json:"serviceKey,omitempty"`
9342	// ServiceProviderNotes - The ServiceProviderNotes.
9343	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
9344	// ServiceProviderProperties - The ServiceProviderProperties.
9345	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
9346	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
9347	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
9348	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
9349	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
9350	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
9351	Stag *int32 `json:"stag,omitempty"`
9352	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9353	ProvisioningState *string `json:"provisioningState,omitempty"`
9354	// GatewayManagerEtag - The GatewayManager Etag.
9355	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
9356	// AllowGlobalReach - Flag to enable Global Reach on the circuit.
9357	AllowGlobalReach *bool `json:"allowGlobalReach,omitempty"`
9358}
9359
9360// ExpressRouteCircuitReference ...
9361type ExpressRouteCircuitReference struct {
9362	// ID - Corresponding Express Route Circuit Id.
9363	ID *string `json:"id,omitempty"`
9364}
9365
9366// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit
9367type ExpressRouteCircuitRoutesTable struct {
9368	// NetworkProperty - IP address of a network entity
9369	NetworkProperty *string `json:"network,omitempty"`
9370	// NextHop - NextHop address
9371	NextHop *string `json:"nextHop,omitempty"`
9372	// LocPrf - Local preference value as set with the set local-preference route-map configuration command
9373	LocPrf *string `json:"locPrf,omitempty"`
9374	// Weight - Route Weight.
9375	Weight *int32 `json:"weight,omitempty"`
9376	// Path - Autonomous system paths to the destination network.
9377	Path *string `json:"path,omitempty"`
9378}
9379
9380// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
9381type ExpressRouteCircuitRoutesTableSummary struct {
9382	// Neighbor - IP address of the neighbor.
9383	Neighbor *string `json:"neighbor,omitempty"`
9384	// V - BGP version number spoken to the neighbor.
9385	V *int32 `json:"v,omitempty"`
9386	// As - Autonomous system number.
9387	As *int32 `json:"as,omitempty"`
9388	// 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.
9389	UpDown *string `json:"upDown,omitempty"`
9390	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
9391	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
9392}
9393
9394// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
9395// Circuits API.
9396type ExpressRouteCircuitsArpTableListResult struct {
9397	autorest.Response `json:"-"`
9398	// Value - Gets list of the ARP table.
9399	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
9400	// NextLink - The URL to get the next set of results.
9401	NextLink *string `json:"nextLink,omitempty"`
9402}
9403
9404// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9405// long-running operation.
9406type ExpressRouteCircuitsCreateOrUpdateFuture struct {
9407	azure.Future
9408}
9409
9410// Result returns the result of the asynchronous operation.
9411// If the operation has not completed it will return an error.
9412func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
9413	var done bool
9414	done, err = future.DoneWithContext(context.Background(), client)
9415	if err != nil {
9416		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9417		return
9418	}
9419	if !done {
9420		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
9421		return
9422	}
9423	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9424	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
9425		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
9426		if err != nil {
9427			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
9428		}
9429	}
9430	return
9431}
9432
9433// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
9434// long-running operation.
9435type ExpressRouteCircuitsDeleteFuture struct {
9436	azure.Future
9437}
9438
9439// Result returns the result of the asynchronous operation.
9440// If the operation has not completed it will return an error.
9441func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
9442	var done bool
9443	done, err = future.DoneWithContext(context.Background(), client)
9444	if err != nil {
9445		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
9446		return
9447	}
9448	if !done {
9449		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
9450		return
9451	}
9452	ar.Response = future.Response()
9453	return
9454}
9455
9456// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
9457// ExpressRouteCircuit.
9458type ExpressRouteCircuitServiceProviderProperties struct {
9459	// ServiceProviderName - The serviceProviderName.
9460	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
9461	// PeeringLocation - The peering location.
9462	PeeringLocation *string `json:"peeringLocation,omitempty"`
9463	// BandwidthInMbps - The BandwidthInMbps.
9464	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
9465}
9466
9467// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
9468type ExpressRouteCircuitSku struct {
9469	// Name - The name of the SKU.
9470	Name *string `json:"name,omitempty"`
9471	// Tier - The tier of the SKU. Possible values are 'Standard', 'Premium' or 'Basic'. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic'
9472	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
9473	// Family - The family of the SKU. Possible values are: 'UnlimitedData' and 'MeteredData'. Possible values include: 'UnlimitedData', 'MeteredData'
9474	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
9475}
9476
9477// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
9478// long-running operation.
9479type ExpressRouteCircuitsListArpTableFuture struct {
9480	azure.Future
9481}
9482
9483// Result returns the result of the asynchronous operation.
9484// If the operation has not completed it will return an error.
9485func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
9486	var done bool
9487	done, err = future.DoneWithContext(context.Background(), client)
9488	if err != nil {
9489		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
9490		return
9491	}
9492	if !done {
9493		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
9494		return
9495	}
9496	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9497	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
9498		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
9499		if err != nil {
9500			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
9501		}
9502	}
9503	return
9504}
9505
9506// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
9507// long-running operation.
9508type ExpressRouteCircuitsListRoutesTableFuture struct {
9509	azure.Future
9510}
9511
9512// Result returns the result of the asynchronous operation.
9513// If the operation has not completed it will return an error.
9514func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
9515	var done bool
9516	done, err = future.DoneWithContext(context.Background(), client)
9517	if err != nil {
9518		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
9519		return
9520	}
9521	if !done {
9522		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
9523		return
9524	}
9525	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9526	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
9527		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
9528		if err != nil {
9529			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
9530		}
9531	}
9532	return
9533}
9534
9535// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
9536// results of a long-running operation.
9537type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
9538	azure.Future
9539}
9540
9541// Result returns the result of the asynchronous operation.
9542// If the operation has not completed it will return an error.
9543func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
9544	var done bool
9545	done, err = future.DoneWithContext(context.Background(), client)
9546	if err != nil {
9547		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
9548		return
9549	}
9550	if !done {
9551		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
9552		return
9553	}
9554	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9555	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
9556		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
9557		if err != nil {
9558			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
9559		}
9560	}
9561	return
9562}
9563
9564// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
9565// Circuits API.
9566type ExpressRouteCircuitsRoutesTableListResult struct {
9567	autorest.Response `json:"-"`
9568	// Value - The list of routes table.
9569	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
9570	// NextLink - The URL to get the next set of results.
9571	NextLink *string `json:"nextLink,omitempty"`
9572}
9573
9574// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
9575// Express Route Circuits API.
9576type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
9577	autorest.Response `json:"-"`
9578	// Value - A list of the routes table.
9579	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
9580	// NextLink - The URL to get the next set of results.
9581	NextLink *string `json:"nextLink,omitempty"`
9582}
9583
9584// ExpressRouteCircuitStats contains stats associated with the peering.
9585type ExpressRouteCircuitStats struct {
9586	autorest.Response `json:"-"`
9587	// PrimarybytesIn - Gets BytesIn of the peering.
9588	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
9589	// PrimarybytesOut - Gets BytesOut of the peering.
9590	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
9591	// SecondarybytesIn - Gets BytesIn of the peering.
9592	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
9593	// SecondarybytesOut - Gets BytesOut of the peering.
9594	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
9595}
9596
9597// ExpressRouteCircuitsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
9598// long-running operation.
9599type ExpressRouteCircuitsUpdateTagsFuture struct {
9600	azure.Future
9601}
9602
9603// Result returns the result of the asynchronous operation.
9604// If the operation has not completed it will return an error.
9605func (future *ExpressRouteCircuitsUpdateTagsFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
9606	var done bool
9607	done, err = future.DoneWithContext(context.Background(), client)
9608	if err != nil {
9609		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9610		return
9611	}
9612	if !done {
9613		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsUpdateTagsFuture")
9614		return
9615	}
9616	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9617	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
9618		erc, err = client.UpdateTagsResponder(erc.Response.Response)
9619		if err != nil {
9620			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", erc.Response.Response, "Failure responding to request")
9621		}
9622	}
9623	return
9624}
9625
9626// ExpressRouteConnection expressRouteConnection resource.
9627type ExpressRouteConnection struct {
9628	autorest.Response                 `json:"-"`
9629	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
9630	// Name - The name of the resource.
9631	Name *string `json:"name,omitempty"`
9632	// ID - Resource ID.
9633	ID *string `json:"id,omitempty"`
9634}
9635
9636// MarshalJSON is the custom marshaler for ExpressRouteConnection.
9637func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
9638	objectMap := make(map[string]interface{})
9639	if erc.ExpressRouteConnectionProperties != nil {
9640		objectMap["properties"] = erc.ExpressRouteConnectionProperties
9641	}
9642	if erc.Name != nil {
9643		objectMap["name"] = erc.Name
9644	}
9645	if erc.ID != nil {
9646		objectMap["id"] = erc.ID
9647	}
9648	return json.Marshal(objectMap)
9649}
9650
9651// UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
9652func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
9653	var m map[string]*json.RawMessage
9654	err := json.Unmarshal(body, &m)
9655	if err != nil {
9656		return err
9657	}
9658	for k, v := range m {
9659		switch k {
9660		case "properties":
9661			if v != nil {
9662				var expressRouteConnectionProperties ExpressRouteConnectionProperties
9663				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
9664				if err != nil {
9665					return err
9666				}
9667				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
9668			}
9669		case "name":
9670			if v != nil {
9671				var name string
9672				err = json.Unmarshal(*v, &name)
9673				if err != nil {
9674					return err
9675				}
9676				erc.Name = &name
9677			}
9678		case "id":
9679			if v != nil {
9680				var ID string
9681				err = json.Unmarshal(*v, &ID)
9682				if err != nil {
9683					return err
9684				}
9685				erc.ID = &ID
9686			}
9687		}
9688	}
9689
9690	return nil
9691}
9692
9693// ExpressRouteConnectionID the ID of the ExpressRouteConnection.
9694type ExpressRouteConnectionID struct {
9695	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
9696	ID *string `json:"id,omitempty"`
9697}
9698
9699// ExpressRouteConnectionList expressRouteConnection list
9700type ExpressRouteConnectionList struct {
9701	autorest.Response `json:"-"`
9702	// Value - The list of ExpressRoute connections
9703	Value *[]ExpressRouteConnection `json:"value,omitempty"`
9704}
9705
9706// ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
9707type ExpressRouteConnectionProperties struct {
9708	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9709	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9710	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
9711	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
9712	// AuthorizationKey - Authorization key to establish the connection.
9713	AuthorizationKey *string `json:"authorizationKey,omitempty"`
9714	// RoutingWeight - The routing weight associated to the connection.
9715	RoutingWeight *int32 `json:"routingWeight,omitempty"`
9716}
9717
9718// ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
9719// a long-running operation.
9720type ExpressRouteConnectionsCreateOrUpdateFuture struct {
9721	azure.Future
9722}
9723
9724// Result returns the result of the asynchronous operation.
9725// If the operation has not completed it will return an error.
9726func (future *ExpressRouteConnectionsCreateOrUpdateFuture) Result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
9727	var done bool
9728	done, err = future.DoneWithContext(context.Background(), client)
9729	if err != nil {
9730		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9731		return
9732	}
9733	if !done {
9734		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
9735		return
9736	}
9737	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9738	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
9739		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
9740		if err != nil {
9741			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
9742		}
9743	}
9744	return
9745}
9746
9747// ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
9748// long-running operation.
9749type ExpressRouteConnectionsDeleteFuture struct {
9750	azure.Future
9751}
9752
9753// Result returns the result of the asynchronous operation.
9754// If the operation has not completed it will return an error.
9755func (future *ExpressRouteConnectionsDeleteFuture) Result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
9756	var done bool
9757	done, err = future.DoneWithContext(context.Background(), client)
9758	if err != nil {
9759		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
9760		return
9761	}
9762	if !done {
9763		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
9764		return
9765	}
9766	ar.Response = future.Response()
9767	return
9768}
9769
9770// ExpressRouteCrossConnection expressRouteCrossConnection resource
9771type ExpressRouteCrossConnection struct {
9772	autorest.Response                      `json:"-"`
9773	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
9774	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
9775	Etag *string `json:"etag,omitempty"`
9776	// ID - Resource ID.
9777	ID *string `json:"id,omitempty"`
9778	// Name - READ-ONLY; Resource name.
9779	Name *string `json:"name,omitempty"`
9780	// Type - READ-ONLY; Resource type.
9781	Type *string `json:"type,omitempty"`
9782	// Location - Resource location.
9783	Location *string `json:"location,omitempty"`
9784	// Tags - Resource tags.
9785	Tags map[string]*string `json:"tags"`
9786}
9787
9788// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
9789func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
9790	objectMap := make(map[string]interface{})
9791	if ercc.ExpressRouteCrossConnectionProperties != nil {
9792		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
9793	}
9794	if ercc.ID != nil {
9795		objectMap["id"] = ercc.ID
9796	}
9797	if ercc.Location != nil {
9798		objectMap["location"] = ercc.Location
9799	}
9800	if ercc.Tags != nil {
9801		objectMap["tags"] = ercc.Tags
9802	}
9803	return json.Marshal(objectMap)
9804}
9805
9806// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
9807func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
9808	var m map[string]*json.RawMessage
9809	err := json.Unmarshal(body, &m)
9810	if err != nil {
9811		return err
9812	}
9813	for k, v := range m {
9814		switch k {
9815		case "properties":
9816			if v != nil {
9817				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
9818				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
9819				if err != nil {
9820					return err
9821				}
9822				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
9823			}
9824		case "etag":
9825			if v != nil {
9826				var etag string
9827				err = json.Unmarshal(*v, &etag)
9828				if err != nil {
9829					return err
9830				}
9831				ercc.Etag = &etag
9832			}
9833		case "id":
9834			if v != nil {
9835				var ID string
9836				err = json.Unmarshal(*v, &ID)
9837				if err != nil {
9838					return err
9839				}
9840				ercc.ID = &ID
9841			}
9842		case "name":
9843			if v != nil {
9844				var name string
9845				err = json.Unmarshal(*v, &name)
9846				if err != nil {
9847					return err
9848				}
9849				ercc.Name = &name
9850			}
9851		case "type":
9852			if v != nil {
9853				var typeVar string
9854				err = json.Unmarshal(*v, &typeVar)
9855				if err != nil {
9856					return err
9857				}
9858				ercc.Type = &typeVar
9859			}
9860		case "location":
9861			if v != nil {
9862				var location string
9863				err = json.Unmarshal(*v, &location)
9864				if err != nil {
9865					return err
9866				}
9867				ercc.Location = &location
9868			}
9869		case "tags":
9870			if v != nil {
9871				var tags map[string]*string
9872				err = json.Unmarshal(*v, &tags)
9873				if err != nil {
9874					return err
9875				}
9876				ercc.Tags = tags
9877			}
9878		}
9879	}
9880
9881	return nil
9882}
9883
9884// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
9885type ExpressRouteCrossConnectionListResult struct {
9886	autorest.Response `json:"-"`
9887	// Value - A list of ExpressRouteCrossConnection resources.
9888	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
9889	// NextLink - READ-ONLY; The URL to get the next set of results.
9890	NextLink *string `json:"nextLink,omitempty"`
9891}
9892
9893// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
9894// ExpressRouteCrossConnection values.
9895type ExpressRouteCrossConnectionListResultIterator struct {
9896	i    int
9897	page ExpressRouteCrossConnectionListResultPage
9898}
9899
9900// NextWithContext advances to the next value.  If there was an error making
9901// the request the iterator does not advance and the error is returned.
9902func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
9903	if tracing.IsEnabled() {
9904		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
9905		defer func() {
9906			sc := -1
9907			if iter.Response().Response.Response != nil {
9908				sc = iter.Response().Response.Response.StatusCode
9909			}
9910			tracing.EndSpan(ctx, sc, err)
9911		}()
9912	}
9913	iter.i++
9914	if iter.i < len(iter.page.Values()) {
9915		return nil
9916	}
9917	err = iter.page.NextWithContext(ctx)
9918	if err != nil {
9919		iter.i--
9920		return err
9921	}
9922	iter.i = 0
9923	return nil
9924}
9925
9926// Next advances to the next value.  If there was an error making
9927// the request the iterator does not advance and the error is returned.
9928// Deprecated: Use NextWithContext() instead.
9929func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
9930	return iter.NextWithContext(context.Background())
9931}
9932
9933// NotDone returns true if the enumeration should be started or is not yet complete.
9934func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
9935	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9936}
9937
9938// Response returns the raw server response from the last page request.
9939func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
9940	return iter.page.Response()
9941}
9942
9943// Value returns the current value or a zero-initialized value if the
9944// iterator has advanced beyond the end of the collection.
9945func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
9946	if !iter.page.NotDone() {
9947		return ExpressRouteCrossConnection{}
9948	}
9949	return iter.page.Values()[iter.i]
9950}
9951
9952// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
9953func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
9954	return ExpressRouteCrossConnectionListResultIterator{page: page}
9955}
9956
9957// IsEmpty returns true if the ListResult contains no values.
9958func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
9959	return ercclr.Value == nil || len(*ercclr.Value) == 0
9960}
9961
9962// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
9963// It returns nil if no more results exist.
9964func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
9965	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
9966		return nil, nil
9967	}
9968	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9969		autorest.AsJSON(),
9970		autorest.AsGet(),
9971		autorest.WithBaseURL(to.String(ercclr.NextLink)))
9972}
9973
9974// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
9975type ExpressRouteCrossConnectionListResultPage struct {
9976	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
9977	ercclr ExpressRouteCrossConnectionListResult
9978}
9979
9980// NextWithContext advances to the next page of values.  If there was an error making
9981// the request the page does not advance and the error is returned.
9982func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
9983	if tracing.IsEnabled() {
9984		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
9985		defer func() {
9986			sc := -1
9987			if page.Response().Response.Response != nil {
9988				sc = page.Response().Response.Response.StatusCode
9989			}
9990			tracing.EndSpan(ctx, sc, err)
9991		}()
9992	}
9993	next, err := page.fn(ctx, page.ercclr)
9994	if err != nil {
9995		return err
9996	}
9997	page.ercclr = next
9998	return nil
9999}
10000
10001// Next advances to the next page of values.  If there was an error making
10002// the request the page does not advance and the error is returned.
10003// Deprecated: Use NextWithContext() instead.
10004func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
10005	return page.NextWithContext(context.Background())
10006}
10007
10008// NotDone returns true if the page enumeration should be started or is not yet complete.
10009func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
10010	return !page.ercclr.IsEmpty()
10011}
10012
10013// Response returns the raw server response from the last page request.
10014func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
10015	return page.ercclr
10016}
10017
10018// Values returns the slice of values for the current page or nil if there are no values.
10019func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
10020	if page.ercclr.IsEmpty() {
10021		return nil
10022	}
10023	return *page.ercclr.Value
10024}
10025
10026// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
10027func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
10028	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
10029}
10030
10031// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
10032type ExpressRouteCrossConnectionPeering struct {
10033	autorest.Response                             `json:"-"`
10034	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
10035	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
10036	Name *string `json:"name,omitempty"`
10037	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10038	Etag *string `json:"etag,omitempty"`
10039	// ID - Resource ID.
10040	ID *string `json:"id,omitempty"`
10041}
10042
10043// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
10044func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
10045	objectMap := make(map[string]interface{})
10046	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
10047		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
10048	}
10049	if erccp.Name != nil {
10050		objectMap["name"] = erccp.Name
10051	}
10052	if erccp.ID != nil {
10053		objectMap["id"] = erccp.ID
10054	}
10055	return json.Marshal(objectMap)
10056}
10057
10058// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
10059func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
10060	var m map[string]*json.RawMessage
10061	err := json.Unmarshal(body, &m)
10062	if err != nil {
10063		return err
10064	}
10065	for k, v := range m {
10066		switch k {
10067		case "properties":
10068			if v != nil {
10069				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
10070				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
10071				if err != nil {
10072					return err
10073				}
10074				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
10075			}
10076		case "name":
10077			if v != nil {
10078				var name string
10079				err = json.Unmarshal(*v, &name)
10080				if err != nil {
10081					return err
10082				}
10083				erccp.Name = &name
10084			}
10085		case "etag":
10086			if v != nil {
10087				var etag string
10088				err = json.Unmarshal(*v, &etag)
10089				if err != nil {
10090					return err
10091				}
10092				erccp.Etag = &etag
10093			}
10094		case "id":
10095			if v != nil {
10096				var ID string
10097				err = json.Unmarshal(*v, &ID)
10098				if err != nil {
10099					return err
10100				}
10101				erccp.ID = &ID
10102			}
10103		}
10104	}
10105
10106	return nil
10107}
10108
10109// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
10110// that belong to an ExpressRouteCrossConnection.
10111type ExpressRouteCrossConnectionPeeringList struct {
10112	autorest.Response `json:"-"`
10113	// Value - The peerings in an express route cross connection.
10114	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
10115	// NextLink - READ-ONLY; The URL to get the next set of results.
10116	NextLink *string `json:"nextLink,omitempty"`
10117}
10118
10119// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
10120// ExpressRouteCrossConnectionPeering values.
10121type ExpressRouteCrossConnectionPeeringListIterator struct {
10122	i    int
10123	page ExpressRouteCrossConnectionPeeringListPage
10124}
10125
10126// NextWithContext advances to the next value.  If there was an error making
10127// the request the iterator does not advance and the error is returned.
10128func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
10129	if tracing.IsEnabled() {
10130		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
10131		defer func() {
10132			sc := -1
10133			if iter.Response().Response.Response != nil {
10134				sc = iter.Response().Response.Response.StatusCode
10135			}
10136			tracing.EndSpan(ctx, sc, err)
10137		}()
10138	}
10139	iter.i++
10140	if iter.i < len(iter.page.Values()) {
10141		return nil
10142	}
10143	err = iter.page.NextWithContext(ctx)
10144	if err != nil {
10145		iter.i--
10146		return err
10147	}
10148	iter.i = 0
10149	return nil
10150}
10151
10152// Next advances to the next value.  If there was an error making
10153// the request the iterator does not advance and the error is returned.
10154// Deprecated: Use NextWithContext() instead.
10155func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
10156	return iter.NextWithContext(context.Background())
10157}
10158
10159// NotDone returns true if the enumeration should be started or is not yet complete.
10160func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
10161	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10162}
10163
10164// Response returns the raw server response from the last page request.
10165func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
10166	return iter.page.Response()
10167}
10168
10169// Value returns the current value or a zero-initialized value if the
10170// iterator has advanced beyond the end of the collection.
10171func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
10172	if !iter.page.NotDone() {
10173		return ExpressRouteCrossConnectionPeering{}
10174	}
10175	return iter.page.Values()[iter.i]
10176}
10177
10178// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
10179func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
10180	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
10181}
10182
10183// IsEmpty returns true if the ListResult contains no values.
10184func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
10185	return erccpl.Value == nil || len(*erccpl.Value) == 0
10186}
10187
10188// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
10189// It returns nil if no more results exist.
10190func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
10191	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
10192		return nil, nil
10193	}
10194	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10195		autorest.AsJSON(),
10196		autorest.AsGet(),
10197		autorest.WithBaseURL(to.String(erccpl.NextLink)))
10198}
10199
10200// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
10201type ExpressRouteCrossConnectionPeeringListPage struct {
10202	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
10203	erccpl ExpressRouteCrossConnectionPeeringList
10204}
10205
10206// NextWithContext advances to the next page of values.  If there was an error making
10207// the request the page does not advance and the error is returned.
10208func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
10209	if tracing.IsEnabled() {
10210		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
10211		defer func() {
10212			sc := -1
10213			if page.Response().Response.Response != nil {
10214				sc = page.Response().Response.Response.StatusCode
10215			}
10216			tracing.EndSpan(ctx, sc, err)
10217		}()
10218	}
10219	next, err := page.fn(ctx, page.erccpl)
10220	if err != nil {
10221		return err
10222	}
10223	page.erccpl = next
10224	return nil
10225}
10226
10227// Next advances to the next page of values.  If there was an error making
10228// the request the page does not advance and the error is returned.
10229// Deprecated: Use NextWithContext() instead.
10230func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
10231	return page.NextWithContext(context.Background())
10232}
10233
10234// NotDone returns true if the page enumeration should be started or is not yet complete.
10235func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
10236	return !page.erccpl.IsEmpty()
10237}
10238
10239// Response returns the raw server response from the last page request.
10240func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
10241	return page.erccpl
10242}
10243
10244// Values returns the slice of values for the current page or nil if there are no values.
10245func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
10246	if page.erccpl.IsEmpty() {
10247		return nil
10248	}
10249	return *page.erccpl.Value
10250}
10251
10252// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
10253func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
10254	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
10255}
10256
10257// ExpressRouteCrossConnectionPeeringProperties ...
10258type ExpressRouteCrossConnectionPeeringProperties struct {
10259	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
10260	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
10261	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
10262	State ExpressRoutePeeringState `json:"state,omitempty"`
10263	// AzureASN - READ-ONLY; The Azure ASN.
10264	AzureASN *int32 `json:"azureASN,omitempty"`
10265	// PeerASN - The peer ASN.
10266	PeerASN *int64 `json:"peerASN,omitempty"`
10267	// PrimaryPeerAddressPrefix - The primary address prefix.
10268	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
10269	// SecondaryPeerAddressPrefix - The secondary address prefix.
10270	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
10271	// PrimaryAzurePort - READ-ONLY; The primary port.
10272	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
10273	// SecondaryAzurePort - READ-ONLY; The secondary port.
10274	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
10275	// SharedKey - The shared key.
10276	SharedKey *string `json:"sharedKey,omitempty"`
10277	// VlanID - The VLAN ID.
10278	VlanID *int32 `json:"vlanId,omitempty"`
10279	// MicrosoftPeeringConfig - The Microsoft peering configuration.
10280	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
10281	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10282	ProvisioningState *string `json:"provisioningState,omitempty"`
10283	// GatewayManagerEtag - The GatewayManager Etag.
10284	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
10285	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
10286	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
10287	// Ipv6PeeringConfig - The IPv6 peering configuration.
10288	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
10289}
10290
10291// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10292// results of a long-running operation.
10293type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
10294	azure.Future
10295}
10296
10297// Result returns the result of the asynchronous operation.
10298// If the operation has not completed it will return an error.
10299func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
10300	var done bool
10301	done, err = future.DoneWithContext(context.Background(), client)
10302	if err != nil {
10303		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10304		return
10305	}
10306	if !done {
10307		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
10308		return
10309	}
10310	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10311	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
10312		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
10313		if err != nil {
10314			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
10315		}
10316	}
10317	return
10318}
10319
10320// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
10321// of a long-running operation.
10322type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
10323	azure.Future
10324}
10325
10326// Result returns the result of the asynchronous operation.
10327// If the operation has not completed it will return an error.
10328func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
10329	var done bool
10330	done, err = future.DoneWithContext(context.Background(), client)
10331	if err != nil {
10332		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
10333		return
10334	}
10335	if !done {
10336		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
10337		return
10338	}
10339	ar.Response = future.Response()
10340	return
10341}
10342
10343// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
10344type ExpressRouteCrossConnectionProperties struct {
10345	// PrimaryAzurePort - READ-ONLY; The name of the primary  port.
10346	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
10347	// SecondaryAzurePort - READ-ONLY; The name of the secondary  port.
10348	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
10349	// STag - READ-ONLY; The identifier of the circuit traffic.
10350	STag *int32 `json:"sTag,omitempty"`
10351	// PeeringLocation - The peering location of the ExpressRoute circuit.
10352	PeeringLocation *string `json:"peeringLocation,omitempty"`
10353	// BandwidthInMbps - The circuit bandwidth In Mbps.
10354	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
10355	// ExpressRouteCircuit - The ExpressRouteCircuit
10356	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
10357	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values are 'NotProvisioned', 'Provisioning', 'Provisioned'. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
10358	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
10359	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
10360	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
10361	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10362	ProvisioningState *string `json:"provisioningState,omitempty"`
10363	// Peerings - The list of peerings.
10364	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
10365}
10366
10367// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
10368type ExpressRouteCrossConnectionRoutesTableSummary struct {
10369	// Neighbor - IP address of Neighbor router
10370	Neighbor *string `json:"neighbor,omitempty"`
10371	// Asn - Autonomous system number.
10372	Asn *int32 `json:"asn,omitempty"`
10373	// 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.
10374	UpDown *string `json:"upDown,omitempty"`
10375	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
10376	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
10377}
10378
10379// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10380// results of a long-running operation.
10381type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
10382	azure.Future
10383}
10384
10385// Result returns the result of the asynchronous operation.
10386// If the operation has not completed it will return an error.
10387func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
10388	var done bool
10389	done, err = future.DoneWithContext(context.Background(), client)
10390	if err != nil {
10391		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10392		return
10393	}
10394	if !done {
10395		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
10396		return
10397	}
10398	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10399	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
10400		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
10401		if err != nil {
10402			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
10403		}
10404	}
10405	return
10406}
10407
10408// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
10409// of a long-running operation.
10410type ExpressRouteCrossConnectionsListArpTableFuture struct {
10411	azure.Future
10412}
10413
10414// Result returns the result of the asynchronous operation.
10415// If the operation has not completed it will return an error.
10416func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
10417	var done bool
10418	done, err = future.DoneWithContext(context.Background(), client)
10419	if err != nil {
10420		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
10421		return
10422	}
10423	if !done {
10424		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
10425		return
10426	}
10427	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10428	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
10429		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
10430		if err != nil {
10431			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
10432		}
10433	}
10434	return
10435}
10436
10437// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
10438// results of a long-running operation.
10439type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
10440	azure.Future
10441}
10442
10443// Result returns the result of the asynchronous operation.
10444// If the operation has not completed it will return an error.
10445func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
10446	var done bool
10447	done, err = future.DoneWithContext(context.Background(), client)
10448	if err != nil {
10449		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
10450		return
10451	}
10452	if !done {
10453		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
10454		return
10455	}
10456	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10457	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
10458		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
10459		if err != nil {
10460			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
10461		}
10462	}
10463	return
10464}
10465
10466// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
10467// the results of a long-running operation.
10468type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
10469	azure.Future
10470}
10471
10472// Result returns the result of the asynchronous operation.
10473// If the operation has not completed it will return an error.
10474func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
10475	var done bool
10476	done, err = future.DoneWithContext(context.Background(), client)
10477	if err != nil {
10478		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
10479		return
10480	}
10481	if !done {
10482		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
10483		return
10484	}
10485	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10486	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
10487		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
10488		if err != nil {
10489			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
10490		}
10491	}
10492	return
10493}
10494
10495// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
10496// the Express Route Cross Connections.
10497type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
10498	autorest.Response `json:"-"`
10499	// Value - A list of the routes table.
10500	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
10501	// NextLink - READ-ONLY; The URL to get the next set of results.
10502	NextLink *string `json:"nextLink,omitempty"`
10503}
10504
10505// ExpressRouteCrossConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the results of
10506// a long-running operation.
10507type ExpressRouteCrossConnectionsUpdateTagsFuture struct {
10508	azure.Future
10509}
10510
10511// Result returns the result of the asynchronous operation.
10512// If the operation has not completed it will return an error.
10513func (future *ExpressRouteCrossConnectionsUpdateTagsFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
10514	var done bool
10515	done, err = future.DoneWithContext(context.Background(), client)
10516	if err != nil {
10517		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
10518		return
10519	}
10520	if !done {
10521		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsUpdateTagsFuture")
10522		return
10523	}
10524	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10525	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
10526		ercc, err = client.UpdateTagsResponder(ercc.Response.Response)
10527		if err != nil {
10528			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", ercc.Response.Response, "Failure responding to request")
10529		}
10530	}
10531	return
10532}
10533
10534// ExpressRouteGateway expressRoute gateway resource.
10535type ExpressRouteGateway struct {
10536	autorest.Response              `json:"-"`
10537	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
10538	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10539	Etag *string `json:"etag,omitempty"`
10540	// ID - Resource ID.
10541	ID *string `json:"id,omitempty"`
10542	// Name - READ-ONLY; Resource name.
10543	Name *string `json:"name,omitempty"`
10544	// Type - READ-ONLY; Resource type.
10545	Type *string `json:"type,omitempty"`
10546	// Location - Resource location.
10547	Location *string `json:"location,omitempty"`
10548	// Tags - Resource tags.
10549	Tags map[string]*string `json:"tags"`
10550}
10551
10552// MarshalJSON is the custom marshaler for ExpressRouteGateway.
10553func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
10554	objectMap := make(map[string]interface{})
10555	if erg.ExpressRouteGatewayProperties != nil {
10556		objectMap["properties"] = erg.ExpressRouteGatewayProperties
10557	}
10558	if erg.ID != nil {
10559		objectMap["id"] = erg.ID
10560	}
10561	if erg.Location != nil {
10562		objectMap["location"] = erg.Location
10563	}
10564	if erg.Tags != nil {
10565		objectMap["tags"] = erg.Tags
10566	}
10567	return json.Marshal(objectMap)
10568}
10569
10570// UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
10571func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
10572	var m map[string]*json.RawMessage
10573	err := json.Unmarshal(body, &m)
10574	if err != nil {
10575		return err
10576	}
10577	for k, v := range m {
10578		switch k {
10579		case "properties":
10580			if v != nil {
10581				var expressRouteGatewayProperties ExpressRouteGatewayProperties
10582				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
10583				if err != nil {
10584					return err
10585				}
10586				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
10587			}
10588		case "etag":
10589			if v != nil {
10590				var etag string
10591				err = json.Unmarshal(*v, &etag)
10592				if err != nil {
10593					return err
10594				}
10595				erg.Etag = &etag
10596			}
10597		case "id":
10598			if v != nil {
10599				var ID string
10600				err = json.Unmarshal(*v, &ID)
10601				if err != nil {
10602					return err
10603				}
10604				erg.ID = &ID
10605			}
10606		case "name":
10607			if v != nil {
10608				var name string
10609				err = json.Unmarshal(*v, &name)
10610				if err != nil {
10611					return err
10612				}
10613				erg.Name = &name
10614			}
10615		case "type":
10616			if v != nil {
10617				var typeVar string
10618				err = json.Unmarshal(*v, &typeVar)
10619				if err != nil {
10620					return err
10621				}
10622				erg.Type = &typeVar
10623			}
10624		case "location":
10625			if v != nil {
10626				var location string
10627				err = json.Unmarshal(*v, &location)
10628				if err != nil {
10629					return err
10630				}
10631				erg.Location = &location
10632			}
10633		case "tags":
10634			if v != nil {
10635				var tags map[string]*string
10636				err = json.Unmarshal(*v, &tags)
10637				if err != nil {
10638					return err
10639				}
10640				erg.Tags = tags
10641			}
10642		}
10643	}
10644
10645	return nil
10646}
10647
10648// ExpressRouteGatewayList list of ExpressRoute gateways.
10649type ExpressRouteGatewayList struct {
10650	autorest.Response `json:"-"`
10651	// Value - List of ExpressRoute gateways.
10652	Value *[]ExpressRouteGateway `json:"value,omitempty"`
10653}
10654
10655// ExpressRouteGatewayProperties expressRoute gateway resource properties.
10656type ExpressRouteGatewayProperties struct {
10657	// AutoScaleConfiguration - Configuration for auto scaling.
10658	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
10659	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
10660	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
10661	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10662	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10663	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
10664	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
10665}
10666
10667// ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
10668type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
10669	// Bounds - Minimum and maximum number of scale units to deploy.
10670	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
10671}
10672
10673// ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
10674// deploy.
10675type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
10676	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
10677	Min *int32 `json:"min,omitempty"`
10678	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
10679	Max *int32 `json:"max,omitempty"`
10680}
10681
10682// ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
10683// long-running operation.
10684type ExpressRouteGatewaysCreateOrUpdateFuture struct {
10685	azure.Future
10686}
10687
10688// Result returns the result of the asynchronous operation.
10689// If the operation has not completed it will return an error.
10690func (future *ExpressRouteGatewaysCreateOrUpdateFuture) Result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
10691	var done bool
10692	done, err = future.DoneWithContext(context.Background(), client)
10693	if err != nil {
10694		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10695		return
10696	}
10697	if !done {
10698		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
10699		return
10700	}
10701	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10702	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
10703		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
10704		if err != nil {
10705			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
10706		}
10707	}
10708	return
10709}
10710
10711// ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
10712// long-running operation.
10713type ExpressRouteGatewaysDeleteFuture struct {
10714	azure.Future
10715}
10716
10717// Result returns the result of the asynchronous operation.
10718// If the operation has not completed it will return an error.
10719func (future *ExpressRouteGatewaysDeleteFuture) Result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
10720	var done bool
10721	done, err = future.DoneWithContext(context.Background(), client)
10722	if err != nil {
10723		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
10724		return
10725	}
10726	if !done {
10727		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
10728		return
10729	}
10730	ar.Response = future.Response()
10731	return
10732}
10733
10734// ExpressRouteLink expressRouteLink child resource definition.
10735type ExpressRouteLink struct {
10736	autorest.Response `json:"-"`
10737	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties
10738	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
10739	// Name - Name of child port resource that is unique among child port resources of the parent.
10740	Name *string `json:"name,omitempty"`
10741	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10742	Etag *string `json:"etag,omitempty"`
10743	// ID - Resource ID.
10744	ID *string `json:"id,omitempty"`
10745}
10746
10747// MarshalJSON is the custom marshaler for ExpressRouteLink.
10748func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
10749	objectMap := make(map[string]interface{})
10750	if erl.ExpressRouteLinkPropertiesFormat != nil {
10751		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
10752	}
10753	if erl.Name != nil {
10754		objectMap["name"] = erl.Name
10755	}
10756	if erl.ID != nil {
10757		objectMap["id"] = erl.ID
10758	}
10759	return json.Marshal(objectMap)
10760}
10761
10762// UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
10763func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
10764	var m map[string]*json.RawMessage
10765	err := json.Unmarshal(body, &m)
10766	if err != nil {
10767		return err
10768	}
10769	for k, v := range m {
10770		switch k {
10771		case "properties":
10772			if v != nil {
10773				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
10774				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
10775				if err != nil {
10776					return err
10777				}
10778				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
10779			}
10780		case "name":
10781			if v != nil {
10782				var name string
10783				err = json.Unmarshal(*v, &name)
10784				if err != nil {
10785					return err
10786				}
10787				erl.Name = &name
10788			}
10789		case "etag":
10790			if v != nil {
10791				var etag string
10792				err = json.Unmarshal(*v, &etag)
10793				if err != nil {
10794					return err
10795				}
10796				erl.Etag = &etag
10797			}
10798		case "id":
10799			if v != nil {
10800				var ID string
10801				err = json.Unmarshal(*v, &ID)
10802				if err != nil {
10803					return err
10804				}
10805				erl.ID = &ID
10806			}
10807		}
10808	}
10809
10810	return nil
10811}
10812
10813// ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
10814type ExpressRouteLinkListResult struct {
10815	autorest.Response `json:"-"`
10816	// Value - The list of ExpressRouteLink sub-resources.
10817	Value *[]ExpressRouteLink `json:"value,omitempty"`
10818	// NextLink - The URL to get the next set of results.
10819	NextLink *string `json:"nextLink,omitempty"`
10820}
10821
10822// ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
10823type ExpressRouteLinkListResultIterator struct {
10824	i    int
10825	page ExpressRouteLinkListResultPage
10826}
10827
10828// NextWithContext advances to the next value.  If there was an error making
10829// the request the iterator does not advance and the error is returned.
10830func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
10831	if tracing.IsEnabled() {
10832		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
10833		defer func() {
10834			sc := -1
10835			if iter.Response().Response.Response != nil {
10836				sc = iter.Response().Response.Response.StatusCode
10837			}
10838			tracing.EndSpan(ctx, sc, err)
10839		}()
10840	}
10841	iter.i++
10842	if iter.i < len(iter.page.Values()) {
10843		return nil
10844	}
10845	err = iter.page.NextWithContext(ctx)
10846	if err != nil {
10847		iter.i--
10848		return err
10849	}
10850	iter.i = 0
10851	return nil
10852}
10853
10854// Next advances to the next value.  If there was an error making
10855// the request the iterator does not advance and the error is returned.
10856// Deprecated: Use NextWithContext() instead.
10857func (iter *ExpressRouteLinkListResultIterator) Next() error {
10858	return iter.NextWithContext(context.Background())
10859}
10860
10861// NotDone returns true if the enumeration should be started or is not yet complete.
10862func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
10863	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10864}
10865
10866// Response returns the raw server response from the last page request.
10867func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
10868	return iter.page.Response()
10869}
10870
10871// Value returns the current value or a zero-initialized value if the
10872// iterator has advanced beyond the end of the collection.
10873func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
10874	if !iter.page.NotDone() {
10875		return ExpressRouteLink{}
10876	}
10877	return iter.page.Values()[iter.i]
10878}
10879
10880// Creates a new instance of the ExpressRouteLinkListResultIterator type.
10881func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
10882	return ExpressRouteLinkListResultIterator{page: page}
10883}
10884
10885// IsEmpty returns true if the ListResult contains no values.
10886func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
10887	return erllr.Value == nil || len(*erllr.Value) == 0
10888}
10889
10890// expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
10891// It returns nil if no more results exist.
10892func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
10893	if erllr.NextLink == nil || len(to.String(erllr.NextLink)) < 1 {
10894		return nil, nil
10895	}
10896	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10897		autorest.AsJSON(),
10898		autorest.AsGet(),
10899		autorest.WithBaseURL(to.String(erllr.NextLink)))
10900}
10901
10902// ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
10903type ExpressRouteLinkListResultPage struct {
10904	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
10905	erllr ExpressRouteLinkListResult
10906}
10907
10908// NextWithContext advances to the next page of values.  If there was an error making
10909// the request the page does not advance and the error is returned.
10910func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
10911	if tracing.IsEnabled() {
10912		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
10913		defer func() {
10914			sc := -1
10915			if page.Response().Response.Response != nil {
10916				sc = page.Response().Response.Response.StatusCode
10917			}
10918			tracing.EndSpan(ctx, sc, err)
10919		}()
10920	}
10921	next, err := page.fn(ctx, page.erllr)
10922	if err != nil {
10923		return err
10924	}
10925	page.erllr = next
10926	return nil
10927}
10928
10929// Next advances to the next page of values.  If there was an error making
10930// the request the page does not advance and the error is returned.
10931// Deprecated: Use NextWithContext() instead.
10932func (page *ExpressRouteLinkListResultPage) Next() error {
10933	return page.NextWithContext(context.Background())
10934}
10935
10936// NotDone returns true if the page enumeration should be started or is not yet complete.
10937func (page ExpressRouteLinkListResultPage) NotDone() bool {
10938	return !page.erllr.IsEmpty()
10939}
10940
10941// Response returns the raw server response from the last page request.
10942func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
10943	return page.erllr
10944}
10945
10946// Values returns the slice of values for the current page or nil if there are no values.
10947func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
10948	if page.erllr.IsEmpty() {
10949		return nil
10950	}
10951	return *page.erllr.Value
10952}
10953
10954// Creates a new instance of the ExpressRouteLinkListResultPage type.
10955func NewExpressRouteLinkListResultPage(getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
10956	return ExpressRouteLinkListResultPage{fn: getNextPage}
10957}
10958
10959// ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
10960type ExpressRouteLinkPropertiesFormat struct {
10961	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
10962	RouterName *string `json:"routerName,omitempty"`
10963	// InterfaceName - READ-ONLY; Name of Azure router interface.
10964	InterfaceName *string `json:"interfaceName,omitempty"`
10965	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
10966	PatchPanelID *string `json:"patchPanelId,omitempty"`
10967	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
10968	RackID *string `json:"rackId,omitempty"`
10969	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
10970	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
10971	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
10972	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
10973	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRouteLink resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
10974	ProvisioningState *string `json:"provisioningState,omitempty"`
10975}
10976
10977// ExpressRoutePort expressRoutePort resource definition.
10978type ExpressRoutePort struct {
10979	autorest.Response `json:"-"`
10980	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties
10981	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
10982	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10983	Etag *string `json:"etag,omitempty"`
10984	// ID - Resource ID.
10985	ID *string `json:"id,omitempty"`
10986	// Name - READ-ONLY; Resource name.
10987	Name *string `json:"name,omitempty"`
10988	// Type - READ-ONLY; Resource type.
10989	Type *string `json:"type,omitempty"`
10990	// Location - Resource location.
10991	Location *string `json:"location,omitempty"`
10992	// Tags - Resource tags.
10993	Tags map[string]*string `json:"tags"`
10994}
10995
10996// MarshalJSON is the custom marshaler for ExpressRoutePort.
10997func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
10998	objectMap := make(map[string]interface{})
10999	if erp.ExpressRoutePortPropertiesFormat != nil {
11000		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
11001	}
11002	if erp.ID != nil {
11003		objectMap["id"] = erp.ID
11004	}
11005	if erp.Location != nil {
11006		objectMap["location"] = erp.Location
11007	}
11008	if erp.Tags != nil {
11009		objectMap["tags"] = erp.Tags
11010	}
11011	return json.Marshal(objectMap)
11012}
11013
11014// UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
11015func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
11016	var m map[string]*json.RawMessage
11017	err := json.Unmarshal(body, &m)
11018	if err != nil {
11019		return err
11020	}
11021	for k, v := range m {
11022		switch k {
11023		case "properties":
11024			if v != nil {
11025				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
11026				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
11027				if err != nil {
11028					return err
11029				}
11030				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
11031			}
11032		case "etag":
11033			if v != nil {
11034				var etag string
11035				err = json.Unmarshal(*v, &etag)
11036				if err != nil {
11037					return err
11038				}
11039				erp.Etag = &etag
11040			}
11041		case "id":
11042			if v != nil {
11043				var ID string
11044				err = json.Unmarshal(*v, &ID)
11045				if err != nil {
11046					return err
11047				}
11048				erp.ID = &ID
11049			}
11050		case "name":
11051			if v != nil {
11052				var name string
11053				err = json.Unmarshal(*v, &name)
11054				if err != nil {
11055					return err
11056				}
11057				erp.Name = &name
11058			}
11059		case "type":
11060			if v != nil {
11061				var typeVar string
11062				err = json.Unmarshal(*v, &typeVar)
11063				if err != nil {
11064					return err
11065				}
11066				erp.Type = &typeVar
11067			}
11068		case "location":
11069			if v != nil {
11070				var location string
11071				err = json.Unmarshal(*v, &location)
11072				if err != nil {
11073					return err
11074				}
11075				erp.Location = &location
11076			}
11077		case "tags":
11078			if v != nil {
11079				var tags map[string]*string
11080				err = json.Unmarshal(*v, &tags)
11081				if err != nil {
11082					return err
11083				}
11084				erp.Tags = tags
11085			}
11086		}
11087	}
11088
11089	return nil
11090}
11091
11092// ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
11093type ExpressRoutePortListResult struct {
11094	autorest.Response `json:"-"`
11095	// Value - A list of ExpressRoutePort resources.
11096	Value *[]ExpressRoutePort `json:"value,omitempty"`
11097	// NextLink - The URL to get the next set of results.
11098	NextLink *string `json:"nextLink,omitempty"`
11099}
11100
11101// ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
11102type ExpressRoutePortListResultIterator struct {
11103	i    int
11104	page ExpressRoutePortListResultPage
11105}
11106
11107// NextWithContext advances to the next value.  If there was an error making
11108// the request the iterator does not advance and the error is returned.
11109func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
11110	if tracing.IsEnabled() {
11111		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
11112		defer func() {
11113			sc := -1
11114			if iter.Response().Response.Response != nil {
11115				sc = iter.Response().Response.Response.StatusCode
11116			}
11117			tracing.EndSpan(ctx, sc, err)
11118		}()
11119	}
11120	iter.i++
11121	if iter.i < len(iter.page.Values()) {
11122		return nil
11123	}
11124	err = iter.page.NextWithContext(ctx)
11125	if err != nil {
11126		iter.i--
11127		return err
11128	}
11129	iter.i = 0
11130	return nil
11131}
11132
11133// Next advances to the next value.  If there was an error making
11134// the request the iterator does not advance and the error is returned.
11135// Deprecated: Use NextWithContext() instead.
11136func (iter *ExpressRoutePortListResultIterator) Next() error {
11137	return iter.NextWithContext(context.Background())
11138}
11139
11140// NotDone returns true if the enumeration should be started or is not yet complete.
11141func (iter ExpressRoutePortListResultIterator) NotDone() bool {
11142	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11143}
11144
11145// Response returns the raw server response from the last page request.
11146func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
11147	return iter.page.Response()
11148}
11149
11150// Value returns the current value or a zero-initialized value if the
11151// iterator has advanced beyond the end of the collection.
11152func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
11153	if !iter.page.NotDone() {
11154		return ExpressRoutePort{}
11155	}
11156	return iter.page.Values()[iter.i]
11157}
11158
11159// Creates a new instance of the ExpressRoutePortListResultIterator type.
11160func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
11161	return ExpressRoutePortListResultIterator{page: page}
11162}
11163
11164// IsEmpty returns true if the ListResult contains no values.
11165func (erplr ExpressRoutePortListResult) IsEmpty() bool {
11166	return erplr.Value == nil || len(*erplr.Value) == 0
11167}
11168
11169// expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
11170// It returns nil if no more results exist.
11171func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
11172	if erplr.NextLink == nil || len(to.String(erplr.NextLink)) < 1 {
11173		return nil, nil
11174	}
11175	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11176		autorest.AsJSON(),
11177		autorest.AsGet(),
11178		autorest.WithBaseURL(to.String(erplr.NextLink)))
11179}
11180
11181// ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
11182type ExpressRoutePortListResultPage struct {
11183	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
11184	erplr ExpressRoutePortListResult
11185}
11186
11187// NextWithContext advances to the next page of values.  If there was an error making
11188// the request the page does not advance and the error is returned.
11189func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
11190	if tracing.IsEnabled() {
11191		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
11192		defer func() {
11193			sc := -1
11194			if page.Response().Response.Response != nil {
11195				sc = page.Response().Response.Response.StatusCode
11196			}
11197			tracing.EndSpan(ctx, sc, err)
11198		}()
11199	}
11200	next, err := page.fn(ctx, page.erplr)
11201	if err != nil {
11202		return err
11203	}
11204	page.erplr = next
11205	return nil
11206}
11207
11208// Next advances to the next page of values.  If there was an error making
11209// the request the page does not advance and the error is returned.
11210// Deprecated: Use NextWithContext() instead.
11211func (page *ExpressRoutePortListResultPage) Next() error {
11212	return page.NextWithContext(context.Background())
11213}
11214
11215// NotDone returns true if the page enumeration should be started or is not yet complete.
11216func (page ExpressRoutePortListResultPage) NotDone() bool {
11217	return !page.erplr.IsEmpty()
11218}
11219
11220// Response returns the raw server response from the last page request.
11221func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
11222	return page.erplr
11223}
11224
11225// Values returns the slice of values for the current page or nil if there are no values.
11226func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
11227	if page.erplr.IsEmpty() {
11228		return nil
11229	}
11230	return *page.erplr.Value
11231}
11232
11233// Creates a new instance of the ExpressRoutePortListResultPage type.
11234func NewExpressRoutePortListResultPage(getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
11235	return ExpressRoutePortListResultPage{fn: getNextPage}
11236}
11237
11238// ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
11239type ExpressRoutePortPropertiesFormat struct {
11240	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
11241	PeeringLocation *string `json:"peeringLocation,omitempty"`
11242	// BandwidthInGbps - Bandwidth of procured ports in Gbps
11243	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
11244	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
11245	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
11246	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s)
11247	Mtu *string `json:"mtu,omitempty"`
11248	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
11249	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
11250	// EtherType - READ-ONLY; Ether type of the physical port.
11251	EtherType *string `json:"etherType,omitempty"`
11252	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
11253	AllocationDate *string `json:"allocationDate,omitempty"`
11254	// Links - The set of physical links of the ExpressRoutePort resource
11255	Links *[]ExpressRouteLink `json:"links,omitempty"`
11256	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
11257	Circuits *[]SubResource `json:"circuits,omitempty"`
11258	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRoutePort resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
11259	ProvisioningState *string `json:"provisioningState,omitempty"`
11260	// ResourceGUID - The resource GUID property of the ExpressRoutePort resource.
11261	ResourceGUID *string `json:"resourceGuid,omitempty"`
11262}
11263
11264// ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
11265// long-running operation.
11266type ExpressRoutePortsCreateOrUpdateFuture struct {
11267	azure.Future
11268}
11269
11270// Result returns the result of the asynchronous operation.
11271// If the operation has not completed it will return an error.
11272func (future *ExpressRoutePortsCreateOrUpdateFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
11273	var done bool
11274	done, err = future.DoneWithContext(context.Background(), client)
11275	if err != nil {
11276		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11277		return
11278	}
11279	if !done {
11280		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
11281		return
11282	}
11283	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11284	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
11285		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
11286		if err != nil {
11287			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
11288		}
11289	}
11290	return
11291}
11292
11293// ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
11294// operation.
11295type ExpressRoutePortsDeleteFuture struct {
11296	azure.Future
11297}
11298
11299// Result returns the result of the asynchronous operation.
11300// If the operation has not completed it will return an error.
11301func (future *ExpressRoutePortsDeleteFuture) Result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
11302	var done bool
11303	done, err = future.DoneWithContext(context.Background(), client)
11304	if err != nil {
11305		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
11306		return
11307	}
11308	if !done {
11309		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
11310		return
11311	}
11312	ar.Response = future.Response()
11313	return
11314}
11315
11316// ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
11317type ExpressRoutePortsLocation struct {
11318	autorest.Response `json:"-"`
11319	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties
11320	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
11321	// ID - Resource ID.
11322	ID *string `json:"id,omitempty"`
11323	// Name - READ-ONLY; Resource name.
11324	Name *string `json:"name,omitempty"`
11325	// Type - READ-ONLY; Resource type.
11326	Type *string `json:"type,omitempty"`
11327	// Location - Resource location.
11328	Location *string `json:"location,omitempty"`
11329	// Tags - Resource tags.
11330	Tags map[string]*string `json:"tags"`
11331}
11332
11333// MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
11334func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
11335	objectMap := make(map[string]interface{})
11336	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
11337		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
11338	}
11339	if erpl.ID != nil {
11340		objectMap["id"] = erpl.ID
11341	}
11342	if erpl.Location != nil {
11343		objectMap["location"] = erpl.Location
11344	}
11345	if erpl.Tags != nil {
11346		objectMap["tags"] = erpl.Tags
11347	}
11348	return json.Marshal(objectMap)
11349}
11350
11351// UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
11352func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
11353	var m map[string]*json.RawMessage
11354	err := json.Unmarshal(body, &m)
11355	if err != nil {
11356		return err
11357	}
11358	for k, v := range m {
11359		switch k {
11360		case "properties":
11361			if v != nil {
11362				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
11363				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
11364				if err != nil {
11365					return err
11366				}
11367				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
11368			}
11369		case "id":
11370			if v != nil {
11371				var ID string
11372				err = json.Unmarshal(*v, &ID)
11373				if err != nil {
11374					return err
11375				}
11376				erpl.ID = &ID
11377			}
11378		case "name":
11379			if v != nil {
11380				var name string
11381				err = json.Unmarshal(*v, &name)
11382				if err != nil {
11383					return err
11384				}
11385				erpl.Name = &name
11386			}
11387		case "type":
11388			if v != nil {
11389				var typeVar string
11390				err = json.Unmarshal(*v, &typeVar)
11391				if err != nil {
11392					return err
11393				}
11394				erpl.Type = &typeVar
11395			}
11396		case "location":
11397			if v != nil {
11398				var location string
11399				err = json.Unmarshal(*v, &location)
11400				if err != nil {
11401					return err
11402				}
11403				erpl.Location = &location
11404			}
11405		case "tags":
11406			if v != nil {
11407				var tags map[string]*string
11408				err = json.Unmarshal(*v, &tags)
11409				if err != nil {
11410					return err
11411				}
11412				erpl.Tags = tags
11413			}
11414		}
11415	}
11416
11417	return nil
11418}
11419
11420// ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
11421type ExpressRoutePortsLocationBandwidths struct {
11422	// OfferName - READ-ONLY; Bandwidth descriptive name
11423	OfferName *string `json:"offerName,omitempty"`
11424	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps
11425	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
11426}
11427
11428// ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
11429type ExpressRoutePortsLocationListResult struct {
11430	autorest.Response `json:"-"`
11431	// Value - The list of all ExpressRoutePort peering locations.
11432	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
11433	// NextLink - The URL to get the next set of results.
11434	NextLink *string `json:"nextLink,omitempty"`
11435}
11436
11437// ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
11438// ExpressRoutePortsLocation values.
11439type ExpressRoutePortsLocationListResultIterator struct {
11440	i    int
11441	page ExpressRoutePortsLocationListResultPage
11442}
11443
11444// NextWithContext advances to the next value.  If there was an error making
11445// the request the iterator does not advance and the error is returned.
11446func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
11447	if tracing.IsEnabled() {
11448		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
11449		defer func() {
11450			sc := -1
11451			if iter.Response().Response.Response != nil {
11452				sc = iter.Response().Response.Response.StatusCode
11453			}
11454			tracing.EndSpan(ctx, sc, err)
11455		}()
11456	}
11457	iter.i++
11458	if iter.i < len(iter.page.Values()) {
11459		return nil
11460	}
11461	err = iter.page.NextWithContext(ctx)
11462	if err != nil {
11463		iter.i--
11464		return err
11465	}
11466	iter.i = 0
11467	return nil
11468}
11469
11470// Next advances to the next value.  If there was an error making
11471// the request the iterator does not advance and the error is returned.
11472// Deprecated: Use NextWithContext() instead.
11473func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
11474	return iter.NextWithContext(context.Background())
11475}
11476
11477// NotDone returns true if the enumeration should be started or is not yet complete.
11478func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
11479	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11480}
11481
11482// Response returns the raw server response from the last page request.
11483func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
11484	return iter.page.Response()
11485}
11486
11487// Value returns the current value or a zero-initialized value if the
11488// iterator has advanced beyond the end of the collection.
11489func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
11490	if !iter.page.NotDone() {
11491		return ExpressRoutePortsLocation{}
11492	}
11493	return iter.page.Values()[iter.i]
11494}
11495
11496// Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
11497func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
11498	return ExpressRoutePortsLocationListResultIterator{page: page}
11499}
11500
11501// IsEmpty returns true if the ListResult contains no values.
11502func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
11503	return erpllr.Value == nil || len(*erpllr.Value) == 0
11504}
11505
11506// expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
11507// It returns nil if no more results exist.
11508func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
11509	if erpllr.NextLink == nil || len(to.String(erpllr.NextLink)) < 1 {
11510		return nil, nil
11511	}
11512	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11513		autorest.AsJSON(),
11514		autorest.AsGet(),
11515		autorest.WithBaseURL(to.String(erpllr.NextLink)))
11516}
11517
11518// ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
11519type ExpressRoutePortsLocationListResultPage struct {
11520	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
11521	erpllr ExpressRoutePortsLocationListResult
11522}
11523
11524// NextWithContext advances to the next page of values.  If there was an error making
11525// the request the page does not advance and the error is returned.
11526func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
11527	if tracing.IsEnabled() {
11528		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
11529		defer func() {
11530			sc := -1
11531			if page.Response().Response.Response != nil {
11532				sc = page.Response().Response.Response.StatusCode
11533			}
11534			tracing.EndSpan(ctx, sc, err)
11535		}()
11536	}
11537	next, err := page.fn(ctx, page.erpllr)
11538	if err != nil {
11539		return err
11540	}
11541	page.erpllr = next
11542	return nil
11543}
11544
11545// Next advances to the next page of values.  If there was an error making
11546// the request the page does not advance and the error is returned.
11547// Deprecated: Use NextWithContext() instead.
11548func (page *ExpressRoutePortsLocationListResultPage) Next() error {
11549	return page.NextWithContext(context.Background())
11550}
11551
11552// NotDone returns true if the page enumeration should be started or is not yet complete.
11553func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
11554	return !page.erpllr.IsEmpty()
11555}
11556
11557// Response returns the raw server response from the last page request.
11558func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
11559	return page.erpllr
11560}
11561
11562// Values returns the slice of values for the current page or nil if there are no values.
11563func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
11564	if page.erpllr.IsEmpty() {
11565		return nil
11566	}
11567	return *page.erpllr.Value
11568}
11569
11570// Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
11571func NewExpressRoutePortsLocationListResultPage(getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
11572	return ExpressRoutePortsLocationListResultPage{fn: getNextPage}
11573}
11574
11575// ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
11576// resources.
11577type ExpressRoutePortsLocationPropertiesFormat struct {
11578	// Address - READ-ONLY; Address of peering location.
11579	Address *string `json:"address,omitempty"`
11580	// Contact - READ-ONLY; Contact details of peering locations.
11581	Contact *string `json:"contact,omitempty"`
11582	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
11583	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
11584	// ProvisioningState - READ-ONLY; The provisioning state of the ExpressRoutePortLocation resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
11585	ProvisioningState *string `json:"provisioningState,omitempty"`
11586}
11587
11588// ExpressRoutePortsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
11589// long-running operation.
11590type ExpressRoutePortsUpdateTagsFuture struct {
11591	azure.Future
11592}
11593
11594// Result returns the result of the asynchronous operation.
11595// If the operation has not completed it will return an error.
11596func (future *ExpressRoutePortsUpdateTagsFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
11597	var done bool
11598	done, err = future.DoneWithContext(context.Background(), client)
11599	if err != nil {
11600		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11601		return
11602	}
11603	if !done {
11604		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsUpdateTagsFuture")
11605		return
11606	}
11607	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11608	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
11609		erp, err = client.UpdateTagsResponder(erp.Response.Response)
11610		if err != nil {
11611			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", erp.Response.Response, "Failure responding to request")
11612		}
11613	}
11614	return
11615}
11616
11617// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
11618type ExpressRouteServiceProvider struct {
11619	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
11620	// ID - Resource ID.
11621	ID *string `json:"id,omitempty"`
11622	// Name - READ-ONLY; Resource name.
11623	Name *string `json:"name,omitempty"`
11624	// Type - READ-ONLY; Resource type.
11625	Type *string `json:"type,omitempty"`
11626	// Location - Resource location.
11627	Location *string `json:"location,omitempty"`
11628	// Tags - Resource tags.
11629	Tags map[string]*string `json:"tags"`
11630}
11631
11632// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
11633func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
11634	objectMap := make(map[string]interface{})
11635	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
11636		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
11637	}
11638	if ersp.ID != nil {
11639		objectMap["id"] = ersp.ID
11640	}
11641	if ersp.Location != nil {
11642		objectMap["location"] = ersp.Location
11643	}
11644	if ersp.Tags != nil {
11645		objectMap["tags"] = ersp.Tags
11646	}
11647	return json.Marshal(objectMap)
11648}
11649
11650// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
11651func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
11652	var m map[string]*json.RawMessage
11653	err := json.Unmarshal(body, &m)
11654	if err != nil {
11655		return err
11656	}
11657	for k, v := range m {
11658		switch k {
11659		case "properties":
11660			if v != nil {
11661				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
11662				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
11663				if err != nil {
11664					return err
11665				}
11666				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
11667			}
11668		case "id":
11669			if v != nil {
11670				var ID string
11671				err = json.Unmarshal(*v, &ID)
11672				if err != nil {
11673					return err
11674				}
11675				ersp.ID = &ID
11676			}
11677		case "name":
11678			if v != nil {
11679				var name string
11680				err = json.Unmarshal(*v, &name)
11681				if err != nil {
11682					return err
11683				}
11684				ersp.Name = &name
11685			}
11686		case "type":
11687			if v != nil {
11688				var typeVar string
11689				err = json.Unmarshal(*v, &typeVar)
11690				if err != nil {
11691					return err
11692				}
11693				ersp.Type = &typeVar
11694			}
11695		case "location":
11696			if v != nil {
11697				var location string
11698				err = json.Unmarshal(*v, &location)
11699				if err != nil {
11700					return err
11701				}
11702				ersp.Location = &location
11703			}
11704		case "tags":
11705			if v != nil {
11706				var tags map[string]*string
11707				err = json.Unmarshal(*v, &tags)
11708				if err != nil {
11709					return err
11710				}
11711				ersp.Tags = tags
11712			}
11713		}
11714	}
11715
11716	return nil
11717}
11718
11719// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
11720// resources.
11721type ExpressRouteServiceProviderBandwidthsOffered struct {
11722	// OfferName - The OfferName.
11723	OfferName *string `json:"offerName,omitempty"`
11724	// ValueInMbps - The ValueInMbps.
11725	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
11726}
11727
11728// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
11729type ExpressRouteServiceProviderListResult struct {
11730	autorest.Response `json:"-"`
11731	// Value - A list of ExpressRouteResourceProvider resources.
11732	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
11733	// NextLink - The URL to get the next set of results.
11734	NextLink *string `json:"nextLink,omitempty"`
11735}
11736
11737// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
11738// ExpressRouteServiceProvider values.
11739type ExpressRouteServiceProviderListResultIterator struct {
11740	i    int
11741	page ExpressRouteServiceProviderListResultPage
11742}
11743
11744// NextWithContext advances to the next value.  If there was an error making
11745// the request the iterator does not advance and the error is returned.
11746func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
11747	if tracing.IsEnabled() {
11748		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
11749		defer func() {
11750			sc := -1
11751			if iter.Response().Response.Response != nil {
11752				sc = iter.Response().Response.Response.StatusCode
11753			}
11754			tracing.EndSpan(ctx, sc, err)
11755		}()
11756	}
11757	iter.i++
11758	if iter.i < len(iter.page.Values()) {
11759		return nil
11760	}
11761	err = iter.page.NextWithContext(ctx)
11762	if err != nil {
11763		iter.i--
11764		return err
11765	}
11766	iter.i = 0
11767	return nil
11768}
11769
11770// Next advances to the next value.  If there was an error making
11771// the request the iterator does not advance and the error is returned.
11772// Deprecated: Use NextWithContext() instead.
11773func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
11774	return iter.NextWithContext(context.Background())
11775}
11776
11777// NotDone returns true if the enumeration should be started or is not yet complete.
11778func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
11779	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11780}
11781
11782// Response returns the raw server response from the last page request.
11783func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
11784	return iter.page.Response()
11785}
11786
11787// Value returns the current value or a zero-initialized value if the
11788// iterator has advanced beyond the end of the collection.
11789func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
11790	if !iter.page.NotDone() {
11791		return ExpressRouteServiceProvider{}
11792	}
11793	return iter.page.Values()[iter.i]
11794}
11795
11796// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
11797func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
11798	return ExpressRouteServiceProviderListResultIterator{page: page}
11799}
11800
11801// IsEmpty returns true if the ListResult contains no values.
11802func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
11803	return ersplr.Value == nil || len(*ersplr.Value) == 0
11804}
11805
11806// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
11807// It returns nil if no more results exist.
11808func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
11809	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
11810		return nil, nil
11811	}
11812	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11813		autorest.AsJSON(),
11814		autorest.AsGet(),
11815		autorest.WithBaseURL(to.String(ersplr.NextLink)))
11816}
11817
11818// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
11819type ExpressRouteServiceProviderListResultPage struct {
11820	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
11821	ersplr ExpressRouteServiceProviderListResult
11822}
11823
11824// NextWithContext advances to the next page of values.  If there was an error making
11825// the request the page does not advance and the error is returned.
11826func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
11827	if tracing.IsEnabled() {
11828		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
11829		defer func() {
11830			sc := -1
11831			if page.Response().Response.Response != nil {
11832				sc = page.Response().Response.Response.StatusCode
11833			}
11834			tracing.EndSpan(ctx, sc, err)
11835		}()
11836	}
11837	next, err := page.fn(ctx, page.ersplr)
11838	if err != nil {
11839		return err
11840	}
11841	page.ersplr = next
11842	return nil
11843}
11844
11845// Next advances to the next page of values.  If there was an error making
11846// the request the page does not advance and the error is returned.
11847// Deprecated: Use NextWithContext() instead.
11848func (page *ExpressRouteServiceProviderListResultPage) Next() error {
11849	return page.NextWithContext(context.Background())
11850}
11851
11852// NotDone returns true if the page enumeration should be started or is not yet complete.
11853func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
11854	return !page.ersplr.IsEmpty()
11855}
11856
11857// Response returns the raw server response from the last page request.
11858func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
11859	return page.ersplr
11860}
11861
11862// Values returns the slice of values for the current page or nil if there are no values.
11863func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
11864	if page.ersplr.IsEmpty() {
11865		return nil
11866	}
11867	return *page.ersplr.Value
11868}
11869
11870// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
11871func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
11872	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
11873}
11874
11875// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
11876type ExpressRouteServiceProviderPropertiesFormat struct {
11877	// PeeringLocations - Get a list of peering locations.
11878	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
11879	// BandwidthsOffered - Gets bandwidths offered.
11880	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
11881	// ProvisioningState - Gets the provisioning state of the resource.
11882	ProvisioningState *string `json:"provisioningState,omitempty"`
11883}
11884
11885// FlowLogFormatParameters parameters that define the flow log format.
11886type FlowLogFormatParameters struct {
11887	// Type - The file type of flow log. Possible values include: 'JSON'
11888	Type FlowLogFormatType `json:"type,omitempty"`
11889	// Version - The version (revision) of the flow log.
11890	Version *int32 `json:"version,omitempty"`
11891}
11892
11893// FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
11894type FlowLogInformation struct {
11895	autorest.Response `json:"-"`
11896	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
11897	TargetResourceID           *string `json:"targetResourceId,omitempty"`
11898	*FlowLogProperties         `json:"properties,omitempty"`
11899	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
11900}
11901
11902// MarshalJSON is the custom marshaler for FlowLogInformation.
11903func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
11904	objectMap := make(map[string]interface{})
11905	if fli.TargetResourceID != nil {
11906		objectMap["targetResourceId"] = fli.TargetResourceID
11907	}
11908	if fli.FlowLogProperties != nil {
11909		objectMap["properties"] = fli.FlowLogProperties
11910	}
11911	if fli.FlowAnalyticsConfiguration != nil {
11912		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
11913	}
11914	return json.Marshal(objectMap)
11915}
11916
11917// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
11918func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
11919	var m map[string]*json.RawMessage
11920	err := json.Unmarshal(body, &m)
11921	if err != nil {
11922		return err
11923	}
11924	for k, v := range m {
11925		switch k {
11926		case "targetResourceId":
11927			if v != nil {
11928				var targetResourceID string
11929				err = json.Unmarshal(*v, &targetResourceID)
11930				if err != nil {
11931					return err
11932				}
11933				fli.TargetResourceID = &targetResourceID
11934			}
11935		case "properties":
11936			if v != nil {
11937				var flowLogProperties FlowLogProperties
11938				err = json.Unmarshal(*v, &flowLogProperties)
11939				if err != nil {
11940					return err
11941				}
11942				fli.FlowLogProperties = &flowLogProperties
11943			}
11944		case "flowAnalyticsConfiguration":
11945			if v != nil {
11946				var flowAnalyticsConfiguration TrafficAnalyticsProperties
11947				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
11948				if err != nil {
11949					return err
11950				}
11951				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
11952			}
11953		}
11954	}
11955
11956	return nil
11957}
11958
11959// FlowLogProperties parameters that define the configuration of flow log.
11960type FlowLogProperties struct {
11961	// StorageID - ID of the storage account which is used to store the flow log.
11962	StorageID *string `json:"storageId,omitempty"`
11963	// Enabled - Flag to enable/disable flow logging.
11964	Enabled         *bool                      `json:"enabled,omitempty"`
11965	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
11966	Format          *FlowLogFormatParameters   `json:"format,omitempty"`
11967}
11968
11969// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
11970// (optional) status.
11971type FlowLogStatusParameters struct {
11972	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
11973	TargetResourceID *string `json:"targetResourceId,omitempty"`
11974}
11975
11976// FrontendIPConfiguration frontend IP address of the load balancer.
11977type FrontendIPConfiguration struct {
11978	autorest.Response `json:"-"`
11979	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
11980	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
11981	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
11982	Name *string `json:"name,omitempty"`
11983	// Etag - A unique read-only string that changes whenever the resource is updated.
11984	Etag *string `json:"etag,omitempty"`
11985	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
11986	Zones *[]string `json:"zones,omitempty"`
11987	// ID - Resource ID.
11988	ID *string `json:"id,omitempty"`
11989}
11990
11991// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
11992func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
11993	objectMap := make(map[string]interface{})
11994	if fic.FrontendIPConfigurationPropertiesFormat != nil {
11995		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
11996	}
11997	if fic.Name != nil {
11998		objectMap["name"] = fic.Name
11999	}
12000	if fic.Etag != nil {
12001		objectMap["etag"] = fic.Etag
12002	}
12003	if fic.Zones != nil {
12004		objectMap["zones"] = fic.Zones
12005	}
12006	if fic.ID != nil {
12007		objectMap["id"] = fic.ID
12008	}
12009	return json.Marshal(objectMap)
12010}
12011
12012// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
12013func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
12014	var m map[string]*json.RawMessage
12015	err := json.Unmarshal(body, &m)
12016	if err != nil {
12017		return err
12018	}
12019	for k, v := range m {
12020		switch k {
12021		case "properties":
12022			if v != nil {
12023				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
12024				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
12025				if err != nil {
12026					return err
12027				}
12028				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
12029			}
12030		case "name":
12031			if v != nil {
12032				var name string
12033				err = json.Unmarshal(*v, &name)
12034				if err != nil {
12035					return err
12036				}
12037				fic.Name = &name
12038			}
12039		case "etag":
12040			if v != nil {
12041				var etag string
12042				err = json.Unmarshal(*v, &etag)
12043				if err != nil {
12044					return err
12045				}
12046				fic.Etag = &etag
12047			}
12048		case "zones":
12049			if v != nil {
12050				var zones []string
12051				err = json.Unmarshal(*v, &zones)
12052				if err != nil {
12053					return err
12054				}
12055				fic.Zones = &zones
12056			}
12057		case "id":
12058			if v != nil {
12059				var ID string
12060				err = json.Unmarshal(*v, &ID)
12061				if err != nil {
12062					return err
12063				}
12064				fic.ID = &ID
12065			}
12066		}
12067	}
12068
12069	return nil
12070}
12071
12072// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
12073type FrontendIPConfigurationPropertiesFormat struct {
12074	// InboundNatRules - READ-ONLY; Read only. Inbound rules URIs that use this frontend IP.
12075	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
12076	// InboundNatPools - READ-ONLY; Read only. Inbound pools URIs that use this frontend IP.
12077	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
12078	// OutboundRules - READ-ONLY; Read only. Outbound rules URIs that use this frontend IP.
12079	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
12080	// LoadBalancingRules - READ-ONLY; Gets load balancing rules URIs that use this frontend IP.
12081	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
12082	// PrivateIPAddress - The private IP address of the IP configuration.
12083	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
12084	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
12085	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
12086	// Subnet - The reference of the subnet resource.
12087	Subnet *Subnet `json:"subnet,omitempty"`
12088	// PublicIPAddress - The reference of the Public IP resource.
12089	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
12090	// PublicIPPrefix - The reference of the Public IP Prefix resource.
12091	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
12092	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12093	ProvisioningState *string `json:"provisioningState,omitempty"`
12094}
12095
12096// GatewayRoute gateway routing details
12097type GatewayRoute struct {
12098	// LocalAddress - READ-ONLY; The gateway's local address
12099	LocalAddress *string `json:"localAddress,omitempty"`
12100	// NetworkProperty - READ-ONLY; The route's network prefix
12101	NetworkProperty *string `json:"network,omitempty"`
12102	// NextHop - READ-ONLY; The route's next hop
12103	NextHop *string `json:"nextHop,omitempty"`
12104	// SourcePeer - READ-ONLY; The peer this route was learned from
12105	SourcePeer *string `json:"sourcePeer,omitempty"`
12106	// Origin - READ-ONLY; The source this route was learned from
12107	Origin *string `json:"origin,omitempty"`
12108	// AsPath - READ-ONLY; The route's AS path sequence
12109	AsPath *string `json:"asPath,omitempty"`
12110	// Weight - READ-ONLY; The route's weight
12111	Weight *int32 `json:"weight,omitempty"`
12112}
12113
12114// GatewayRouteListResult list of virtual network gateway routes
12115type GatewayRouteListResult struct {
12116	autorest.Response `json:"-"`
12117	// Value - List of gateway routes
12118	Value *[]GatewayRoute `json:"value,omitempty"`
12119}
12120
12121// GetVpnSitesConfigurationRequest list of Vpn-Sites
12122type GetVpnSitesConfigurationRequest struct {
12123	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
12124	VpnSites *[]string `json:"vpnSites,omitempty"`
12125	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites
12126	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
12127}
12128
12129// HTTPConfiguration HTTP configuration of the connectivity check.
12130type HTTPConfiguration struct {
12131	// Method - HTTP method. Possible values include: 'Get'
12132	Method HTTPMethod `json:"method,omitempty"`
12133	// Headers - List of HTTP headers.
12134	Headers *[]HTTPHeader `json:"headers,omitempty"`
12135	// ValidStatusCodes - Valid status codes.
12136	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
12137}
12138
12139// HTTPHeader describes the HTTP header.
12140type HTTPHeader struct {
12141	// Name - The name in HTTP header.
12142	Name *string `json:"name,omitempty"`
12143	// Value - The value in HTTP header.
12144	Value *string `json:"value,omitempty"`
12145}
12146
12147// HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
12148type HubVirtualNetworkConnection struct {
12149	autorest.Response                      `json:"-"`
12150	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
12151	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12152	Name *string `json:"name,omitempty"`
12153	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
12154	Etag *string `json:"etag,omitempty"`
12155	// ID - Resource ID.
12156	ID *string `json:"id,omitempty"`
12157}
12158
12159// MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
12160func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
12161	objectMap := make(map[string]interface{})
12162	if hvnc.HubVirtualNetworkConnectionProperties != nil {
12163		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
12164	}
12165	if hvnc.Name != nil {
12166		objectMap["name"] = hvnc.Name
12167	}
12168	if hvnc.ID != nil {
12169		objectMap["id"] = hvnc.ID
12170	}
12171	return json.Marshal(objectMap)
12172}
12173
12174// UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
12175func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
12176	var m map[string]*json.RawMessage
12177	err := json.Unmarshal(body, &m)
12178	if err != nil {
12179		return err
12180	}
12181	for k, v := range m {
12182		switch k {
12183		case "properties":
12184			if v != nil {
12185				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
12186				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
12187				if err != nil {
12188					return err
12189				}
12190				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
12191			}
12192		case "name":
12193			if v != nil {
12194				var name string
12195				err = json.Unmarshal(*v, &name)
12196				if err != nil {
12197					return err
12198				}
12199				hvnc.Name = &name
12200			}
12201		case "etag":
12202			if v != nil {
12203				var etag string
12204				err = json.Unmarshal(*v, &etag)
12205				if err != nil {
12206					return err
12207				}
12208				hvnc.Etag = &etag
12209			}
12210		case "id":
12211			if v != nil {
12212				var ID string
12213				err = json.Unmarshal(*v, &ID)
12214				if err != nil {
12215					return err
12216				}
12217				hvnc.ID = &ID
12218			}
12219		}
12220	}
12221
12222	return nil
12223}
12224
12225// HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection
12226type HubVirtualNetworkConnectionProperties struct {
12227	// RemoteVirtualNetwork - Reference to the remote virtual network.
12228	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
12229	// AllowHubToRemoteVnetTransit - VirtualHub to RemoteVnet transit to enabled or not.
12230	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
12231	// AllowRemoteVnetToUseHubVnetGateways - Allow RemoteVnet to use Virtual Hub's gateways.
12232	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
12233	// EnableInternetSecurity - Enable internet security
12234	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
12235	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12236	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12237}
12238
12239// InboundNatPool inbound NAT pool of the load balancer.
12240type InboundNatPool struct {
12241	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
12242	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
12243	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12244	Name *string `json:"name,omitempty"`
12245	// Etag - A unique read-only string that changes whenever the resource is updated.
12246	Etag *string `json:"etag,omitempty"`
12247	// ID - Resource ID.
12248	ID *string `json:"id,omitempty"`
12249}
12250
12251// MarshalJSON is the custom marshaler for InboundNatPool.
12252func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
12253	objectMap := make(map[string]interface{})
12254	if inp.InboundNatPoolPropertiesFormat != nil {
12255		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
12256	}
12257	if inp.Name != nil {
12258		objectMap["name"] = inp.Name
12259	}
12260	if inp.Etag != nil {
12261		objectMap["etag"] = inp.Etag
12262	}
12263	if inp.ID != nil {
12264		objectMap["id"] = inp.ID
12265	}
12266	return json.Marshal(objectMap)
12267}
12268
12269// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
12270func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
12271	var m map[string]*json.RawMessage
12272	err := json.Unmarshal(body, &m)
12273	if err != nil {
12274		return err
12275	}
12276	for k, v := range m {
12277		switch k {
12278		case "properties":
12279			if v != nil {
12280				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
12281				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
12282				if err != nil {
12283					return err
12284				}
12285				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
12286			}
12287		case "name":
12288			if v != nil {
12289				var name string
12290				err = json.Unmarshal(*v, &name)
12291				if err != nil {
12292					return err
12293				}
12294				inp.Name = &name
12295			}
12296		case "etag":
12297			if v != nil {
12298				var etag string
12299				err = json.Unmarshal(*v, &etag)
12300				if err != nil {
12301					return err
12302				}
12303				inp.Etag = &etag
12304			}
12305		case "id":
12306			if v != nil {
12307				var ID string
12308				err = json.Unmarshal(*v, &ID)
12309				if err != nil {
12310					return err
12311				}
12312				inp.ID = &ID
12313			}
12314		}
12315	}
12316
12317	return nil
12318}
12319
12320// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
12321type InboundNatPoolPropertiesFormat struct {
12322	// FrontendIPConfiguration - A reference to frontend IP addresses.
12323	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
12324	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
12325	Protocol TransportProtocol `json:"protocol,omitempty"`
12326	// 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.
12327	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
12328	// 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.
12329	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
12330	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
12331	BackendPort *int32 `json:"backendPort,omitempty"`
12332	// 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.
12333	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
12334	// 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.
12335	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
12336	// 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.
12337	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
12338	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12339	ProvisioningState *string `json:"provisioningState,omitempty"`
12340}
12341
12342// InboundNatRule inbound NAT rule of the load balancer.
12343type InboundNatRule struct {
12344	autorest.Response `json:"-"`
12345	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
12346	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
12347	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
12348	Name *string `json:"name,omitempty"`
12349	// Etag - A unique read-only string that changes whenever the resource is updated.
12350	Etag *string `json:"etag,omitempty"`
12351	// ID - Resource ID.
12352	ID *string `json:"id,omitempty"`
12353}
12354
12355// MarshalJSON is the custom marshaler for InboundNatRule.
12356func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
12357	objectMap := make(map[string]interface{})
12358	if inr.InboundNatRulePropertiesFormat != nil {
12359		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
12360	}
12361	if inr.Name != nil {
12362		objectMap["name"] = inr.Name
12363	}
12364	if inr.Etag != nil {
12365		objectMap["etag"] = inr.Etag
12366	}
12367	if inr.ID != nil {
12368		objectMap["id"] = inr.ID
12369	}
12370	return json.Marshal(objectMap)
12371}
12372
12373// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
12374func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
12375	var m map[string]*json.RawMessage
12376	err := json.Unmarshal(body, &m)
12377	if err != nil {
12378		return err
12379	}
12380	for k, v := range m {
12381		switch k {
12382		case "properties":
12383			if v != nil {
12384				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
12385				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
12386				if err != nil {
12387					return err
12388				}
12389				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
12390			}
12391		case "name":
12392			if v != nil {
12393				var name string
12394				err = json.Unmarshal(*v, &name)
12395				if err != nil {
12396					return err
12397				}
12398				inr.Name = &name
12399			}
12400		case "etag":
12401			if v != nil {
12402				var etag string
12403				err = json.Unmarshal(*v, &etag)
12404				if err != nil {
12405					return err
12406				}
12407				inr.Etag = &etag
12408			}
12409		case "id":
12410			if v != nil {
12411				var ID string
12412				err = json.Unmarshal(*v, &ID)
12413				if err != nil {
12414					return err
12415				}
12416				inr.ID = &ID
12417			}
12418		}
12419	}
12420
12421	return nil
12422}
12423
12424// InboundNatRuleListResult response for ListInboundNatRule API service call.
12425type InboundNatRuleListResult struct {
12426	autorest.Response `json:"-"`
12427	// Value - A list of inbound nat rules in a load balancer.
12428	Value *[]InboundNatRule `json:"value,omitempty"`
12429	// NextLink - READ-ONLY; The URL to get the next set of results.
12430	NextLink *string `json:"nextLink,omitempty"`
12431}
12432
12433// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
12434type InboundNatRuleListResultIterator struct {
12435	i    int
12436	page InboundNatRuleListResultPage
12437}
12438
12439// NextWithContext advances to the next value.  If there was an error making
12440// the request the iterator does not advance and the error is returned.
12441func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
12442	if tracing.IsEnabled() {
12443		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
12444		defer func() {
12445			sc := -1
12446			if iter.Response().Response.Response != nil {
12447				sc = iter.Response().Response.Response.StatusCode
12448			}
12449			tracing.EndSpan(ctx, sc, err)
12450		}()
12451	}
12452	iter.i++
12453	if iter.i < len(iter.page.Values()) {
12454		return nil
12455	}
12456	err = iter.page.NextWithContext(ctx)
12457	if err != nil {
12458		iter.i--
12459		return err
12460	}
12461	iter.i = 0
12462	return nil
12463}
12464
12465// Next advances to the next value.  If there was an error making
12466// the request the iterator does not advance and the error is returned.
12467// Deprecated: Use NextWithContext() instead.
12468func (iter *InboundNatRuleListResultIterator) Next() error {
12469	return iter.NextWithContext(context.Background())
12470}
12471
12472// NotDone returns true if the enumeration should be started or is not yet complete.
12473func (iter InboundNatRuleListResultIterator) NotDone() bool {
12474	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12475}
12476
12477// Response returns the raw server response from the last page request.
12478func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
12479	return iter.page.Response()
12480}
12481
12482// Value returns the current value or a zero-initialized value if the
12483// iterator has advanced beyond the end of the collection.
12484func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
12485	if !iter.page.NotDone() {
12486		return InboundNatRule{}
12487	}
12488	return iter.page.Values()[iter.i]
12489}
12490
12491// Creates a new instance of the InboundNatRuleListResultIterator type.
12492func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
12493	return InboundNatRuleListResultIterator{page: page}
12494}
12495
12496// IsEmpty returns true if the ListResult contains no values.
12497func (inrlr InboundNatRuleListResult) IsEmpty() bool {
12498	return inrlr.Value == nil || len(*inrlr.Value) == 0
12499}
12500
12501// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
12502// It returns nil if no more results exist.
12503func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
12504	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
12505		return nil, nil
12506	}
12507	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12508		autorest.AsJSON(),
12509		autorest.AsGet(),
12510		autorest.WithBaseURL(to.String(inrlr.NextLink)))
12511}
12512
12513// InboundNatRuleListResultPage contains a page of InboundNatRule values.
12514type InboundNatRuleListResultPage struct {
12515	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
12516	inrlr InboundNatRuleListResult
12517}
12518
12519// NextWithContext advances to the next page of values.  If there was an error making
12520// the request the page does not advance and the error is returned.
12521func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
12522	if tracing.IsEnabled() {
12523		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
12524		defer func() {
12525			sc := -1
12526			if page.Response().Response.Response != nil {
12527				sc = page.Response().Response.Response.StatusCode
12528			}
12529			tracing.EndSpan(ctx, sc, err)
12530		}()
12531	}
12532	next, err := page.fn(ctx, page.inrlr)
12533	if err != nil {
12534		return err
12535	}
12536	page.inrlr = next
12537	return nil
12538}
12539
12540// Next advances to the next page of values.  If there was an error making
12541// the request the page does not advance and the error is returned.
12542// Deprecated: Use NextWithContext() instead.
12543func (page *InboundNatRuleListResultPage) Next() error {
12544	return page.NextWithContext(context.Background())
12545}
12546
12547// NotDone returns true if the page enumeration should be started or is not yet complete.
12548func (page InboundNatRuleListResultPage) NotDone() bool {
12549	return !page.inrlr.IsEmpty()
12550}
12551
12552// Response returns the raw server response from the last page request.
12553func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
12554	return page.inrlr
12555}
12556
12557// Values returns the slice of values for the current page or nil if there are no values.
12558func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
12559	if page.inrlr.IsEmpty() {
12560		return nil
12561	}
12562	return *page.inrlr.Value
12563}
12564
12565// Creates a new instance of the InboundNatRuleListResultPage type.
12566func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
12567	return InboundNatRuleListResultPage{fn: getNextPage}
12568}
12569
12570// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
12571type InboundNatRulePropertiesFormat struct {
12572	// FrontendIPConfiguration - A reference to frontend IP addresses.
12573	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
12574	// 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.
12575	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
12576	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
12577	Protocol TransportProtocol `json:"protocol,omitempty"`
12578	// 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.
12579	FrontendPort *int32 `json:"frontendPort,omitempty"`
12580	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
12581	BackendPort *int32 `json:"backendPort,omitempty"`
12582	// 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.
12583	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
12584	// 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.
12585	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
12586	// 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.
12587	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
12588	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12589	ProvisioningState *string `json:"provisioningState,omitempty"`
12590}
12591
12592// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
12593// long-running operation.
12594type InboundNatRulesCreateOrUpdateFuture struct {
12595	azure.Future
12596}
12597
12598// Result returns the result of the asynchronous operation.
12599// If the operation has not completed it will return an error.
12600func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
12601	var done bool
12602	done, err = future.DoneWithContext(context.Background(), client)
12603	if err != nil {
12604		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12605		return
12606	}
12607	if !done {
12608		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
12609		return
12610	}
12611	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12612	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
12613		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
12614		if err != nil {
12615			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
12616		}
12617	}
12618	return
12619}
12620
12621// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
12622// operation.
12623type InboundNatRulesDeleteFuture struct {
12624	azure.Future
12625}
12626
12627// Result returns the result of the asynchronous operation.
12628// If the operation has not completed it will return an error.
12629func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
12630	var done bool
12631	done, err = future.DoneWithContext(context.Background(), client)
12632	if err != nil {
12633		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
12634		return
12635	}
12636	if !done {
12637		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
12638		return
12639	}
12640	ar.Response = future.Response()
12641	return
12642}
12643
12644// Interface a network interface in a resource group.
12645type Interface struct {
12646	autorest.Response `json:"-"`
12647	// InterfacePropertiesFormat - Properties of the network interface.
12648	*InterfacePropertiesFormat `json:"properties,omitempty"`
12649	// Etag - A unique read-only string that changes whenever the resource is updated.
12650	Etag *string `json:"etag,omitempty"`
12651	// ID - Resource ID.
12652	ID *string `json:"id,omitempty"`
12653	// Name - READ-ONLY; Resource name.
12654	Name *string `json:"name,omitempty"`
12655	// Type - READ-ONLY; Resource type.
12656	Type *string `json:"type,omitempty"`
12657	// Location - Resource location.
12658	Location *string `json:"location,omitempty"`
12659	// Tags - Resource tags.
12660	Tags map[string]*string `json:"tags"`
12661}
12662
12663// MarshalJSON is the custom marshaler for Interface.
12664func (i Interface) MarshalJSON() ([]byte, error) {
12665	objectMap := make(map[string]interface{})
12666	if i.InterfacePropertiesFormat != nil {
12667		objectMap["properties"] = i.InterfacePropertiesFormat
12668	}
12669	if i.Etag != nil {
12670		objectMap["etag"] = i.Etag
12671	}
12672	if i.ID != nil {
12673		objectMap["id"] = i.ID
12674	}
12675	if i.Location != nil {
12676		objectMap["location"] = i.Location
12677	}
12678	if i.Tags != nil {
12679		objectMap["tags"] = i.Tags
12680	}
12681	return json.Marshal(objectMap)
12682}
12683
12684// UnmarshalJSON is the custom unmarshaler for Interface struct.
12685func (i *Interface) UnmarshalJSON(body []byte) error {
12686	var m map[string]*json.RawMessage
12687	err := json.Unmarshal(body, &m)
12688	if err != nil {
12689		return err
12690	}
12691	for k, v := range m {
12692		switch k {
12693		case "properties":
12694			if v != nil {
12695				var interfacePropertiesFormat InterfacePropertiesFormat
12696				err = json.Unmarshal(*v, &interfacePropertiesFormat)
12697				if err != nil {
12698					return err
12699				}
12700				i.InterfacePropertiesFormat = &interfacePropertiesFormat
12701			}
12702		case "etag":
12703			if v != nil {
12704				var etag string
12705				err = json.Unmarshal(*v, &etag)
12706				if err != nil {
12707					return err
12708				}
12709				i.Etag = &etag
12710			}
12711		case "id":
12712			if v != nil {
12713				var ID string
12714				err = json.Unmarshal(*v, &ID)
12715				if err != nil {
12716					return err
12717				}
12718				i.ID = &ID
12719			}
12720		case "name":
12721			if v != nil {
12722				var name string
12723				err = json.Unmarshal(*v, &name)
12724				if err != nil {
12725					return err
12726				}
12727				i.Name = &name
12728			}
12729		case "type":
12730			if v != nil {
12731				var typeVar string
12732				err = json.Unmarshal(*v, &typeVar)
12733				if err != nil {
12734					return err
12735				}
12736				i.Type = &typeVar
12737			}
12738		case "location":
12739			if v != nil {
12740				var location string
12741				err = json.Unmarshal(*v, &location)
12742				if err != nil {
12743					return err
12744				}
12745				i.Location = &location
12746			}
12747		case "tags":
12748			if v != nil {
12749				var tags map[string]*string
12750				err = json.Unmarshal(*v, &tags)
12751				if err != nil {
12752					return err
12753				}
12754				i.Tags = tags
12755			}
12756		}
12757	}
12758
12759	return nil
12760}
12761
12762// InterfaceAssociation network interface and its custom security rules.
12763type InterfaceAssociation struct {
12764	// ID - READ-ONLY; Network interface ID.
12765	ID *string `json:"id,omitempty"`
12766	// SecurityRules - Collection of custom security rules.
12767	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
12768}
12769
12770// InterfaceDNSSettings DNS settings of a network interface.
12771type InterfaceDNSSettings struct {
12772	// 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.
12773	DNSServers *[]string `json:"dnsServers,omitempty"`
12774	// 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.
12775	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
12776	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
12777	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
12778	// InternalFqdn - Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
12779	InternalFqdn *string `json:"internalFqdn,omitempty"`
12780	// 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.
12781	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
12782}
12783
12784// InterfaceEndpoint interface endpoint resource.
12785type InterfaceEndpoint struct {
12786	autorest.Response `json:"-"`
12787	// InterfaceEndpointProperties - Properties of the interface endpoint.
12788	*InterfaceEndpointProperties `json:"properties,omitempty"`
12789	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
12790	Etag *string `json:"etag,omitempty"`
12791	// ID - Resource ID.
12792	ID *string `json:"id,omitempty"`
12793	// Name - READ-ONLY; Resource name.
12794	Name *string `json:"name,omitempty"`
12795	// Type - READ-ONLY; Resource type.
12796	Type *string `json:"type,omitempty"`
12797	// Location - Resource location.
12798	Location *string `json:"location,omitempty"`
12799	// Tags - Resource tags.
12800	Tags map[string]*string `json:"tags"`
12801}
12802
12803// MarshalJSON is the custom marshaler for InterfaceEndpoint.
12804func (ie InterfaceEndpoint) MarshalJSON() ([]byte, error) {
12805	objectMap := make(map[string]interface{})
12806	if ie.InterfaceEndpointProperties != nil {
12807		objectMap["properties"] = ie.InterfaceEndpointProperties
12808	}
12809	if ie.Etag != nil {
12810		objectMap["etag"] = ie.Etag
12811	}
12812	if ie.ID != nil {
12813		objectMap["id"] = ie.ID
12814	}
12815	if ie.Location != nil {
12816		objectMap["location"] = ie.Location
12817	}
12818	if ie.Tags != nil {
12819		objectMap["tags"] = ie.Tags
12820	}
12821	return json.Marshal(objectMap)
12822}
12823
12824// UnmarshalJSON is the custom unmarshaler for InterfaceEndpoint struct.
12825func (ie *InterfaceEndpoint) UnmarshalJSON(body []byte) error {
12826	var m map[string]*json.RawMessage
12827	err := json.Unmarshal(body, &m)
12828	if err != nil {
12829		return err
12830	}
12831	for k, v := range m {
12832		switch k {
12833		case "properties":
12834			if v != nil {
12835				var interfaceEndpointProperties InterfaceEndpointProperties
12836				err = json.Unmarshal(*v, &interfaceEndpointProperties)
12837				if err != nil {
12838					return err
12839				}
12840				ie.InterfaceEndpointProperties = &interfaceEndpointProperties
12841			}
12842		case "etag":
12843			if v != nil {
12844				var etag string
12845				err = json.Unmarshal(*v, &etag)
12846				if err != nil {
12847					return err
12848				}
12849				ie.Etag = &etag
12850			}
12851		case "id":
12852			if v != nil {
12853				var ID string
12854				err = json.Unmarshal(*v, &ID)
12855				if err != nil {
12856					return err
12857				}
12858				ie.ID = &ID
12859			}
12860		case "name":
12861			if v != nil {
12862				var name string
12863				err = json.Unmarshal(*v, &name)
12864				if err != nil {
12865					return err
12866				}
12867				ie.Name = &name
12868			}
12869		case "type":
12870			if v != nil {
12871				var typeVar string
12872				err = json.Unmarshal(*v, &typeVar)
12873				if err != nil {
12874					return err
12875				}
12876				ie.Type = &typeVar
12877			}
12878		case "location":
12879			if v != nil {
12880				var location string
12881				err = json.Unmarshal(*v, &location)
12882				if err != nil {
12883					return err
12884				}
12885				ie.Location = &location
12886			}
12887		case "tags":
12888			if v != nil {
12889				var tags map[string]*string
12890				err = json.Unmarshal(*v, &tags)
12891				if err != nil {
12892					return err
12893				}
12894				ie.Tags = tags
12895			}
12896		}
12897	}
12898
12899	return nil
12900}
12901
12902// InterfaceEndpointListResult response for the ListInterfaceEndpoints API service call.
12903type InterfaceEndpointListResult struct {
12904	autorest.Response `json:"-"`
12905	// Value - Gets a list of InterfaceEndpoint resources in a resource group.
12906	Value *[]InterfaceEndpoint `json:"value,omitempty"`
12907	// NextLink - READ-ONLY; The URL to get the next set of results.
12908	NextLink *string `json:"nextLink,omitempty"`
12909}
12910
12911// InterfaceEndpointListResultIterator provides access to a complete listing of InterfaceEndpoint values.
12912type InterfaceEndpointListResultIterator struct {
12913	i    int
12914	page InterfaceEndpointListResultPage
12915}
12916
12917// NextWithContext advances to the next value.  If there was an error making
12918// the request the iterator does not advance and the error is returned.
12919func (iter *InterfaceEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
12920	if tracing.IsEnabled() {
12921		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceEndpointListResultIterator.NextWithContext")
12922		defer func() {
12923			sc := -1
12924			if iter.Response().Response.Response != nil {
12925				sc = iter.Response().Response.Response.StatusCode
12926			}
12927			tracing.EndSpan(ctx, sc, err)
12928		}()
12929	}
12930	iter.i++
12931	if iter.i < len(iter.page.Values()) {
12932		return nil
12933	}
12934	err = iter.page.NextWithContext(ctx)
12935	if err != nil {
12936		iter.i--
12937		return err
12938	}
12939	iter.i = 0
12940	return nil
12941}
12942
12943// Next advances to the next value.  If there was an error making
12944// the request the iterator does not advance and the error is returned.
12945// Deprecated: Use NextWithContext() instead.
12946func (iter *InterfaceEndpointListResultIterator) Next() error {
12947	return iter.NextWithContext(context.Background())
12948}
12949
12950// NotDone returns true if the enumeration should be started or is not yet complete.
12951func (iter InterfaceEndpointListResultIterator) NotDone() bool {
12952	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12953}
12954
12955// Response returns the raw server response from the last page request.
12956func (iter InterfaceEndpointListResultIterator) Response() InterfaceEndpointListResult {
12957	return iter.page.Response()
12958}
12959
12960// Value returns the current value or a zero-initialized value if the
12961// iterator has advanced beyond the end of the collection.
12962func (iter InterfaceEndpointListResultIterator) Value() InterfaceEndpoint {
12963	if !iter.page.NotDone() {
12964		return InterfaceEndpoint{}
12965	}
12966	return iter.page.Values()[iter.i]
12967}
12968
12969// Creates a new instance of the InterfaceEndpointListResultIterator type.
12970func NewInterfaceEndpointListResultIterator(page InterfaceEndpointListResultPage) InterfaceEndpointListResultIterator {
12971	return InterfaceEndpointListResultIterator{page: page}
12972}
12973
12974// IsEmpty returns true if the ListResult contains no values.
12975func (ielr InterfaceEndpointListResult) IsEmpty() bool {
12976	return ielr.Value == nil || len(*ielr.Value) == 0
12977}
12978
12979// interfaceEndpointListResultPreparer prepares a request to retrieve the next set of results.
12980// It returns nil if no more results exist.
12981func (ielr InterfaceEndpointListResult) interfaceEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
12982	if ielr.NextLink == nil || len(to.String(ielr.NextLink)) < 1 {
12983		return nil, nil
12984	}
12985	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12986		autorest.AsJSON(),
12987		autorest.AsGet(),
12988		autorest.WithBaseURL(to.String(ielr.NextLink)))
12989}
12990
12991// InterfaceEndpointListResultPage contains a page of InterfaceEndpoint values.
12992type InterfaceEndpointListResultPage struct {
12993	fn   func(context.Context, InterfaceEndpointListResult) (InterfaceEndpointListResult, error)
12994	ielr InterfaceEndpointListResult
12995}
12996
12997// NextWithContext advances to the next page of values.  If there was an error making
12998// the request the page does not advance and the error is returned.
12999func (page *InterfaceEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
13000	if tracing.IsEnabled() {
13001		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceEndpointListResultPage.NextWithContext")
13002		defer func() {
13003			sc := -1
13004			if page.Response().Response.Response != nil {
13005				sc = page.Response().Response.Response.StatusCode
13006			}
13007			tracing.EndSpan(ctx, sc, err)
13008		}()
13009	}
13010	next, err := page.fn(ctx, page.ielr)
13011	if err != nil {
13012		return err
13013	}
13014	page.ielr = next
13015	return nil
13016}
13017
13018// Next advances to the next page of values.  If there was an error making
13019// the request the page does not advance and the error is returned.
13020// Deprecated: Use NextWithContext() instead.
13021func (page *InterfaceEndpointListResultPage) Next() error {
13022	return page.NextWithContext(context.Background())
13023}
13024
13025// NotDone returns true if the page enumeration should be started or is not yet complete.
13026func (page InterfaceEndpointListResultPage) NotDone() bool {
13027	return !page.ielr.IsEmpty()
13028}
13029
13030// Response returns the raw server response from the last page request.
13031func (page InterfaceEndpointListResultPage) Response() InterfaceEndpointListResult {
13032	return page.ielr
13033}
13034
13035// Values returns the slice of values for the current page or nil if there are no values.
13036func (page InterfaceEndpointListResultPage) Values() []InterfaceEndpoint {
13037	if page.ielr.IsEmpty() {
13038		return nil
13039	}
13040	return *page.ielr.Value
13041}
13042
13043// Creates a new instance of the InterfaceEndpointListResultPage type.
13044func NewInterfaceEndpointListResultPage(getNextPage func(context.Context, InterfaceEndpointListResult) (InterfaceEndpointListResult, error)) InterfaceEndpointListResultPage {
13045	return InterfaceEndpointListResultPage{fn: getNextPage}
13046}
13047
13048// InterfaceEndpointProperties properties of the interface endpoint.
13049type InterfaceEndpointProperties struct {
13050	// Fqdn - A first-party service's FQDN that is mapped to the private IP allocated via this interface endpoint.
13051	Fqdn *string `json:"fqdn,omitempty"`
13052	// EndpointService - A reference to the service being brought into the virtual network.
13053	EndpointService *EndpointService `json:"endpointService,omitempty"`
13054	// Subnet - The ID of the subnet from which the private IP will be allocated.
13055	Subnet *Subnet `json:"subnet,omitempty"`
13056	// NetworkInterfaces - READ-ONLY; Gets an array of references to the network interfaces created for this interface endpoint.
13057	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
13058	// Owner - READ-ONLY; A read-only property that identifies who created this interface endpoint.
13059	Owner *string `json:"owner,omitempty"`
13060	// ProvisioningState - READ-ONLY; The provisioning state of the interface endpoint. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13061	ProvisioningState *string `json:"provisioningState,omitempty"`
13062}
13063
13064// InterfaceEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13065// long-running operation.
13066type InterfaceEndpointsCreateOrUpdateFuture struct {
13067	azure.Future
13068}
13069
13070// Result returns the result of the asynchronous operation.
13071// If the operation has not completed it will return an error.
13072func (future *InterfaceEndpointsCreateOrUpdateFuture) Result(client InterfaceEndpointsClient) (ie InterfaceEndpoint, err error) {
13073	var done bool
13074	done, err = future.DoneWithContext(context.Background(), client)
13075	if err != nil {
13076		err = autorest.NewErrorWithError(err, "network.InterfaceEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13077		return
13078	}
13079	if !done {
13080		err = azure.NewAsyncOpIncompleteError("network.InterfaceEndpointsCreateOrUpdateFuture")
13081		return
13082	}
13083	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13084	if ie.Response.Response, err = future.GetResult(sender); err == nil && ie.Response.Response.StatusCode != http.StatusNoContent {
13085		ie, err = client.CreateOrUpdateResponder(ie.Response.Response)
13086		if err != nil {
13087			err = autorest.NewErrorWithError(err, "network.InterfaceEndpointsCreateOrUpdateFuture", "Result", ie.Response.Response, "Failure responding to request")
13088		}
13089	}
13090	return
13091}
13092
13093// InterfaceEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a
13094// long-running operation.
13095type InterfaceEndpointsDeleteFuture struct {
13096	azure.Future
13097}
13098
13099// Result returns the result of the asynchronous operation.
13100// If the operation has not completed it will return an error.
13101func (future *InterfaceEndpointsDeleteFuture) Result(client InterfaceEndpointsClient) (ar autorest.Response, err error) {
13102	var done bool
13103	done, err = future.DoneWithContext(context.Background(), client)
13104	if err != nil {
13105		err = autorest.NewErrorWithError(err, "network.InterfaceEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
13106		return
13107	}
13108	if !done {
13109		err = azure.NewAsyncOpIncompleteError("network.InterfaceEndpointsDeleteFuture")
13110		return
13111	}
13112	ar.Response = future.Response()
13113	return
13114}
13115
13116// InterfaceIPConfiguration iPConfiguration in a network interface.
13117type InterfaceIPConfiguration struct {
13118	autorest.Response `json:"-"`
13119	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
13120	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
13121	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13122	Name *string `json:"name,omitempty"`
13123	// Etag - A unique read-only string that changes whenever the resource is updated.
13124	Etag *string `json:"etag,omitempty"`
13125	// ID - Resource ID.
13126	ID *string `json:"id,omitempty"`
13127}
13128
13129// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
13130func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
13131	objectMap := make(map[string]interface{})
13132	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
13133		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
13134	}
13135	if iic.Name != nil {
13136		objectMap["name"] = iic.Name
13137	}
13138	if iic.Etag != nil {
13139		objectMap["etag"] = iic.Etag
13140	}
13141	if iic.ID != nil {
13142		objectMap["id"] = iic.ID
13143	}
13144	return json.Marshal(objectMap)
13145}
13146
13147// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
13148func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
13149	var m map[string]*json.RawMessage
13150	err := json.Unmarshal(body, &m)
13151	if err != nil {
13152		return err
13153	}
13154	for k, v := range m {
13155		switch k {
13156		case "properties":
13157			if v != nil {
13158				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
13159				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
13160				if err != nil {
13161					return err
13162				}
13163				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
13164			}
13165		case "name":
13166			if v != nil {
13167				var name string
13168				err = json.Unmarshal(*v, &name)
13169				if err != nil {
13170					return err
13171				}
13172				iic.Name = &name
13173			}
13174		case "etag":
13175			if v != nil {
13176				var etag string
13177				err = json.Unmarshal(*v, &etag)
13178				if err != nil {
13179					return err
13180				}
13181				iic.Etag = &etag
13182			}
13183		case "id":
13184			if v != nil {
13185				var ID string
13186				err = json.Unmarshal(*v, &ID)
13187				if err != nil {
13188					return err
13189				}
13190				iic.ID = &ID
13191			}
13192		}
13193	}
13194
13195	return nil
13196}
13197
13198// InterfaceIPConfigurationListResult response for list ip configurations API service call.
13199type InterfaceIPConfigurationListResult struct {
13200	autorest.Response `json:"-"`
13201	// Value - A list of ip configurations.
13202	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
13203	// NextLink - READ-ONLY; The URL to get the next set of results.
13204	NextLink *string `json:"nextLink,omitempty"`
13205}
13206
13207// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
13208// InterfaceIPConfiguration values.
13209type InterfaceIPConfigurationListResultIterator struct {
13210	i    int
13211	page InterfaceIPConfigurationListResultPage
13212}
13213
13214// NextWithContext advances to the next value.  If there was an error making
13215// the request the iterator does not advance and the error is returned.
13216func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
13217	if tracing.IsEnabled() {
13218		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
13219		defer func() {
13220			sc := -1
13221			if iter.Response().Response.Response != nil {
13222				sc = iter.Response().Response.Response.StatusCode
13223			}
13224			tracing.EndSpan(ctx, sc, err)
13225		}()
13226	}
13227	iter.i++
13228	if iter.i < len(iter.page.Values()) {
13229		return nil
13230	}
13231	err = iter.page.NextWithContext(ctx)
13232	if err != nil {
13233		iter.i--
13234		return err
13235	}
13236	iter.i = 0
13237	return nil
13238}
13239
13240// Next advances to the next value.  If there was an error making
13241// the request the iterator does not advance and the error is returned.
13242// Deprecated: Use NextWithContext() instead.
13243func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
13244	return iter.NextWithContext(context.Background())
13245}
13246
13247// NotDone returns true if the enumeration should be started or is not yet complete.
13248func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
13249	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13250}
13251
13252// Response returns the raw server response from the last page request.
13253func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
13254	return iter.page.Response()
13255}
13256
13257// Value returns the current value or a zero-initialized value if the
13258// iterator has advanced beyond the end of the collection.
13259func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
13260	if !iter.page.NotDone() {
13261		return InterfaceIPConfiguration{}
13262	}
13263	return iter.page.Values()[iter.i]
13264}
13265
13266// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
13267func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
13268	return InterfaceIPConfigurationListResultIterator{page: page}
13269}
13270
13271// IsEmpty returns true if the ListResult contains no values.
13272func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
13273	return iiclr.Value == nil || len(*iiclr.Value) == 0
13274}
13275
13276// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
13277// It returns nil if no more results exist.
13278func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
13279	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
13280		return nil, nil
13281	}
13282	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13283		autorest.AsJSON(),
13284		autorest.AsGet(),
13285		autorest.WithBaseURL(to.String(iiclr.NextLink)))
13286}
13287
13288// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
13289type InterfaceIPConfigurationListResultPage struct {
13290	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
13291	iiclr InterfaceIPConfigurationListResult
13292}
13293
13294// NextWithContext advances to the next page of values.  If there was an error making
13295// the request the page does not advance and the error is returned.
13296func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
13297	if tracing.IsEnabled() {
13298		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
13299		defer func() {
13300			sc := -1
13301			if page.Response().Response.Response != nil {
13302				sc = page.Response().Response.Response.StatusCode
13303			}
13304			tracing.EndSpan(ctx, sc, err)
13305		}()
13306	}
13307	next, err := page.fn(ctx, page.iiclr)
13308	if err != nil {
13309		return err
13310	}
13311	page.iiclr = next
13312	return nil
13313}
13314
13315// Next advances to the next page of values.  If there was an error making
13316// the request the page does not advance and the error is returned.
13317// Deprecated: Use NextWithContext() instead.
13318func (page *InterfaceIPConfigurationListResultPage) Next() error {
13319	return page.NextWithContext(context.Background())
13320}
13321
13322// NotDone returns true if the page enumeration should be started or is not yet complete.
13323func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
13324	return !page.iiclr.IsEmpty()
13325}
13326
13327// Response returns the raw server response from the last page request.
13328func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
13329	return page.iiclr
13330}
13331
13332// Values returns the slice of values for the current page or nil if there are no values.
13333func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
13334	if page.iiclr.IsEmpty() {
13335		return nil
13336	}
13337	return *page.iiclr.Value
13338}
13339
13340// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
13341func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
13342	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
13343}
13344
13345// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
13346type InterfaceIPConfigurationPropertiesFormat struct {
13347	// VirtualNetworkTaps - The reference to Virtual Network Taps.
13348	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
13349	// ApplicationGatewayBackendAddressPools - The reference of ApplicationGatewayBackendAddressPool resource.
13350	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
13351	// LoadBalancerBackendAddressPools - The reference of LoadBalancerBackendAddressPool resource.
13352	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
13353	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
13354	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
13355	// PrivateIPAddress - Private IP address of the IP configuration.
13356	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
13357	// PrivateIPAllocationMethod - Defines how a private IP address is assigned. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
13358	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
13359	// 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 are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6'
13360	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
13361	// Subnet - Subnet bound to the IP configuration.
13362	Subnet *Subnet `json:"subnet,omitempty"`
13363	// Primary - Gets whether this is a primary customer address on the network interface.
13364	Primary *bool `json:"primary,omitempty"`
13365	// PublicIPAddress - Public IP address bound to the IP configuration.
13366	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
13367	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
13368	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
13369	// ProvisioningState - The provisioning state of the network interface IP configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13370	ProvisioningState *string `json:"provisioningState,omitempty"`
13371}
13372
13373// InterfaceListResult response for the ListNetworkInterface API service call.
13374type InterfaceListResult struct {
13375	autorest.Response `json:"-"`
13376	// Value - A list of network interfaces in a resource group.
13377	Value *[]Interface `json:"value,omitempty"`
13378	// NextLink - READ-ONLY; The URL to get the next set of results.
13379	NextLink *string `json:"nextLink,omitempty"`
13380}
13381
13382// InterfaceListResultIterator provides access to a complete listing of Interface values.
13383type InterfaceListResultIterator struct {
13384	i    int
13385	page InterfaceListResultPage
13386}
13387
13388// NextWithContext advances to the next value.  If there was an error making
13389// the request the iterator does not advance and the error is returned.
13390func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
13391	if tracing.IsEnabled() {
13392		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
13393		defer func() {
13394			sc := -1
13395			if iter.Response().Response.Response != nil {
13396				sc = iter.Response().Response.Response.StatusCode
13397			}
13398			tracing.EndSpan(ctx, sc, err)
13399		}()
13400	}
13401	iter.i++
13402	if iter.i < len(iter.page.Values()) {
13403		return nil
13404	}
13405	err = iter.page.NextWithContext(ctx)
13406	if err != nil {
13407		iter.i--
13408		return err
13409	}
13410	iter.i = 0
13411	return nil
13412}
13413
13414// Next advances to the next value.  If there was an error making
13415// the request the iterator does not advance and the error is returned.
13416// Deprecated: Use NextWithContext() instead.
13417func (iter *InterfaceListResultIterator) Next() error {
13418	return iter.NextWithContext(context.Background())
13419}
13420
13421// NotDone returns true if the enumeration should be started or is not yet complete.
13422func (iter InterfaceListResultIterator) NotDone() bool {
13423	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13424}
13425
13426// Response returns the raw server response from the last page request.
13427func (iter InterfaceListResultIterator) Response() InterfaceListResult {
13428	return iter.page.Response()
13429}
13430
13431// Value returns the current value or a zero-initialized value if the
13432// iterator has advanced beyond the end of the collection.
13433func (iter InterfaceListResultIterator) Value() Interface {
13434	if !iter.page.NotDone() {
13435		return Interface{}
13436	}
13437	return iter.page.Values()[iter.i]
13438}
13439
13440// Creates a new instance of the InterfaceListResultIterator type.
13441func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
13442	return InterfaceListResultIterator{page: page}
13443}
13444
13445// IsEmpty returns true if the ListResult contains no values.
13446func (ilr InterfaceListResult) IsEmpty() bool {
13447	return ilr.Value == nil || len(*ilr.Value) == 0
13448}
13449
13450// interfaceListResultPreparer prepares a request to retrieve the next set of results.
13451// It returns nil if no more results exist.
13452func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
13453	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
13454		return nil, nil
13455	}
13456	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13457		autorest.AsJSON(),
13458		autorest.AsGet(),
13459		autorest.WithBaseURL(to.String(ilr.NextLink)))
13460}
13461
13462// InterfaceListResultPage contains a page of Interface values.
13463type InterfaceListResultPage struct {
13464	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
13465	ilr InterfaceListResult
13466}
13467
13468// NextWithContext advances to the next page of values.  If there was an error making
13469// the request the page does not advance and the error is returned.
13470func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
13471	if tracing.IsEnabled() {
13472		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
13473		defer func() {
13474			sc := -1
13475			if page.Response().Response.Response != nil {
13476				sc = page.Response().Response.Response.StatusCode
13477			}
13478			tracing.EndSpan(ctx, sc, err)
13479		}()
13480	}
13481	next, err := page.fn(ctx, page.ilr)
13482	if err != nil {
13483		return err
13484	}
13485	page.ilr = next
13486	return nil
13487}
13488
13489// Next advances to the next page of values.  If there was an error making
13490// the request the page does not advance and the error is returned.
13491// Deprecated: Use NextWithContext() instead.
13492func (page *InterfaceListResultPage) Next() error {
13493	return page.NextWithContext(context.Background())
13494}
13495
13496// NotDone returns true if the page enumeration should be started or is not yet complete.
13497func (page InterfaceListResultPage) NotDone() bool {
13498	return !page.ilr.IsEmpty()
13499}
13500
13501// Response returns the raw server response from the last page request.
13502func (page InterfaceListResultPage) Response() InterfaceListResult {
13503	return page.ilr
13504}
13505
13506// Values returns the slice of values for the current page or nil if there are no values.
13507func (page InterfaceListResultPage) Values() []Interface {
13508	if page.ilr.IsEmpty() {
13509		return nil
13510	}
13511	return *page.ilr.Value
13512}
13513
13514// Creates a new instance of the InterfaceListResultPage type.
13515func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
13516	return InterfaceListResultPage{fn: getNextPage}
13517}
13518
13519// InterfaceLoadBalancerListResult response for list ip configurations API service call.
13520type InterfaceLoadBalancerListResult struct {
13521	autorest.Response `json:"-"`
13522	// Value - A list of load balancers.
13523	Value *[]LoadBalancer `json:"value,omitempty"`
13524	// NextLink - READ-ONLY; The URL to get the next set of results.
13525	NextLink *string `json:"nextLink,omitempty"`
13526}
13527
13528// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
13529type InterfaceLoadBalancerListResultIterator struct {
13530	i    int
13531	page InterfaceLoadBalancerListResultPage
13532}
13533
13534// NextWithContext advances to the next value.  If there was an error making
13535// the request the iterator does not advance and the error is returned.
13536func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
13537	if tracing.IsEnabled() {
13538		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
13539		defer func() {
13540			sc := -1
13541			if iter.Response().Response.Response != nil {
13542				sc = iter.Response().Response.Response.StatusCode
13543			}
13544			tracing.EndSpan(ctx, sc, err)
13545		}()
13546	}
13547	iter.i++
13548	if iter.i < len(iter.page.Values()) {
13549		return nil
13550	}
13551	err = iter.page.NextWithContext(ctx)
13552	if err != nil {
13553		iter.i--
13554		return err
13555	}
13556	iter.i = 0
13557	return nil
13558}
13559
13560// Next advances to the next value.  If there was an error making
13561// the request the iterator does not advance and the error is returned.
13562// Deprecated: Use NextWithContext() instead.
13563func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
13564	return iter.NextWithContext(context.Background())
13565}
13566
13567// NotDone returns true if the enumeration should be started or is not yet complete.
13568func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
13569	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13570}
13571
13572// Response returns the raw server response from the last page request.
13573func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
13574	return iter.page.Response()
13575}
13576
13577// Value returns the current value or a zero-initialized value if the
13578// iterator has advanced beyond the end of the collection.
13579func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
13580	if !iter.page.NotDone() {
13581		return LoadBalancer{}
13582	}
13583	return iter.page.Values()[iter.i]
13584}
13585
13586// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
13587func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
13588	return InterfaceLoadBalancerListResultIterator{page: page}
13589}
13590
13591// IsEmpty returns true if the ListResult contains no values.
13592func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
13593	return ilblr.Value == nil || len(*ilblr.Value) == 0
13594}
13595
13596// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
13597// It returns nil if no more results exist.
13598func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
13599	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
13600		return nil, nil
13601	}
13602	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13603		autorest.AsJSON(),
13604		autorest.AsGet(),
13605		autorest.WithBaseURL(to.String(ilblr.NextLink)))
13606}
13607
13608// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
13609type InterfaceLoadBalancerListResultPage struct {
13610	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
13611	ilblr InterfaceLoadBalancerListResult
13612}
13613
13614// NextWithContext advances to the next page of values.  If there was an error making
13615// the request the page does not advance and the error is returned.
13616func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
13617	if tracing.IsEnabled() {
13618		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
13619		defer func() {
13620			sc := -1
13621			if page.Response().Response.Response != nil {
13622				sc = page.Response().Response.Response.StatusCode
13623			}
13624			tracing.EndSpan(ctx, sc, err)
13625		}()
13626	}
13627	next, err := page.fn(ctx, page.ilblr)
13628	if err != nil {
13629		return err
13630	}
13631	page.ilblr = next
13632	return nil
13633}
13634
13635// Next advances to the next page of values.  If there was an error making
13636// the request the page does not advance and the error is returned.
13637// Deprecated: Use NextWithContext() instead.
13638func (page *InterfaceLoadBalancerListResultPage) Next() error {
13639	return page.NextWithContext(context.Background())
13640}
13641
13642// NotDone returns true if the page enumeration should be started or is not yet complete.
13643func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
13644	return !page.ilblr.IsEmpty()
13645}
13646
13647// Response returns the raw server response from the last page request.
13648func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
13649	return page.ilblr
13650}
13651
13652// Values returns the slice of values for the current page or nil if there are no values.
13653func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
13654	if page.ilblr.IsEmpty() {
13655		return nil
13656	}
13657	return *page.ilblr.Value
13658}
13659
13660// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
13661func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
13662	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
13663}
13664
13665// InterfacePropertiesFormat networkInterface properties.
13666type InterfacePropertiesFormat struct {
13667	// VirtualMachine - READ-ONLY; The reference of a virtual machine.
13668	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
13669	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
13670	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
13671	// InterfaceEndpoint - READ-ONLY; A reference to the interface endpoint to which the network interface is linked.
13672	InterfaceEndpoint *InterfaceEndpoint `json:"interfaceEndpoint,omitempty"`
13673	// IPConfigurations - A list of IPConfigurations of the network interface.
13674	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
13675	// TapConfigurations - A list of TapConfigurations of the network interface.
13676	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
13677	// DNSSettings - The DNS settings in network interface.
13678	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
13679	// MacAddress - The MAC address of the network interface.
13680	MacAddress *string `json:"macAddress,omitempty"`
13681	// Primary - Gets whether this is a primary network interface on a virtual machine.
13682	Primary *bool `json:"primary,omitempty"`
13683	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
13684	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
13685	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
13686	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
13687	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources
13688	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
13689	// ResourceGUID - The resource GUID property of the network interface resource.
13690	ResourceGUID *string `json:"resourceGuid,omitempty"`
13691	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13692	ProvisioningState *string `json:"provisioningState,omitempty"`
13693}
13694
13695// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13696// long-running operation.
13697type InterfacesCreateOrUpdateFuture struct {
13698	azure.Future
13699}
13700
13701// Result returns the result of the asynchronous operation.
13702// If the operation has not completed it will return an error.
13703func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
13704	var done bool
13705	done, err = future.DoneWithContext(context.Background(), client)
13706	if err != nil {
13707		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13708		return
13709	}
13710	if !done {
13711		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
13712		return
13713	}
13714	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13715	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
13716		i, err = client.CreateOrUpdateResponder(i.Response.Response)
13717		if err != nil {
13718			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
13719		}
13720	}
13721	return
13722}
13723
13724// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13725// operation.
13726type InterfacesDeleteFuture struct {
13727	azure.Future
13728}
13729
13730// Result returns the result of the asynchronous operation.
13731// If the operation has not completed it will return an error.
13732func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
13733	var done bool
13734	done, err = future.DoneWithContext(context.Background(), client)
13735	if err != nil {
13736		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
13737		return
13738	}
13739	if !done {
13740		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
13741		return
13742	}
13743	ar.Response = future.Response()
13744	return
13745}
13746
13747// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
13748// long-running operation.
13749type InterfacesGetEffectiveRouteTableFuture struct {
13750	azure.Future
13751}
13752
13753// Result returns the result of the asynchronous operation.
13754// If the operation has not completed it will return an error.
13755func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
13756	var done bool
13757	done, err = future.DoneWithContext(context.Background(), client)
13758	if err != nil {
13759		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
13760		return
13761	}
13762	if !done {
13763		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
13764		return
13765	}
13766	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13767	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
13768		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
13769		if err != nil {
13770			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
13771		}
13772	}
13773	return
13774}
13775
13776// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
13777// results of a long-running operation.
13778type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
13779	azure.Future
13780}
13781
13782// Result returns the result of the asynchronous operation.
13783// If the operation has not completed it will return an error.
13784func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
13785	var done bool
13786	done, err = future.DoneWithContext(context.Background(), client)
13787	if err != nil {
13788		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
13789		return
13790	}
13791	if !done {
13792		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
13793		return
13794	}
13795	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13796	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
13797		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
13798		if err != nil {
13799			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
13800		}
13801	}
13802	return
13803}
13804
13805// InterfacesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
13806// operation.
13807type InterfacesUpdateTagsFuture struct {
13808	azure.Future
13809}
13810
13811// Result returns the result of the asynchronous operation.
13812// If the operation has not completed it will return an error.
13813func (future *InterfacesUpdateTagsFuture) Result(client InterfacesClient) (i Interface, err error) {
13814	var done bool
13815	done, err = future.DoneWithContext(context.Background(), client)
13816	if err != nil {
13817		err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
13818		return
13819	}
13820	if !done {
13821		err = azure.NewAsyncOpIncompleteError("network.InterfacesUpdateTagsFuture")
13822		return
13823	}
13824	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13825	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
13826		i, err = client.UpdateTagsResponder(i.Response.Response)
13827		if err != nil {
13828			err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", i.Response.Response, "Failure responding to request")
13829		}
13830	}
13831	return
13832}
13833
13834// InterfaceTapConfiguration tap configuration in a Network Interface
13835type InterfaceTapConfiguration struct {
13836	autorest.Response `json:"-"`
13837	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration
13838	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
13839	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13840	Name *string `json:"name,omitempty"`
13841	// Etag - A unique read-only string that changes whenever the resource is updated.
13842	Etag *string `json:"etag,omitempty"`
13843	// Type - READ-ONLY; Sub Resource type.
13844	Type *string `json:"type,omitempty"`
13845	// ID - Resource ID.
13846	ID *string `json:"id,omitempty"`
13847}
13848
13849// MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
13850func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
13851	objectMap := make(map[string]interface{})
13852	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
13853		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
13854	}
13855	if itc.Name != nil {
13856		objectMap["name"] = itc.Name
13857	}
13858	if itc.Etag != nil {
13859		objectMap["etag"] = itc.Etag
13860	}
13861	if itc.ID != nil {
13862		objectMap["id"] = itc.ID
13863	}
13864	return json.Marshal(objectMap)
13865}
13866
13867// UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
13868func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
13869	var m map[string]*json.RawMessage
13870	err := json.Unmarshal(body, &m)
13871	if err != nil {
13872		return err
13873	}
13874	for k, v := range m {
13875		switch k {
13876		case "properties":
13877			if v != nil {
13878				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
13879				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
13880				if err != nil {
13881					return err
13882				}
13883				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
13884			}
13885		case "name":
13886			if v != nil {
13887				var name string
13888				err = json.Unmarshal(*v, &name)
13889				if err != nil {
13890					return err
13891				}
13892				itc.Name = &name
13893			}
13894		case "etag":
13895			if v != nil {
13896				var etag string
13897				err = json.Unmarshal(*v, &etag)
13898				if err != nil {
13899					return err
13900				}
13901				itc.Etag = &etag
13902			}
13903		case "type":
13904			if v != nil {
13905				var typeVar string
13906				err = json.Unmarshal(*v, &typeVar)
13907				if err != nil {
13908					return err
13909				}
13910				itc.Type = &typeVar
13911			}
13912		case "id":
13913			if v != nil {
13914				var ID string
13915				err = json.Unmarshal(*v, &ID)
13916				if err != nil {
13917					return err
13918				}
13919				itc.ID = &ID
13920			}
13921		}
13922	}
13923
13924	return nil
13925}
13926
13927// InterfaceTapConfigurationListResult response for list tap configurations API service call.
13928type InterfaceTapConfigurationListResult struct {
13929	autorest.Response `json:"-"`
13930	// Value - A list of tap configurations.
13931	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
13932	// NextLink - READ-ONLY; The URL to get the next set of results.
13933	NextLink *string `json:"nextLink,omitempty"`
13934}
13935
13936// InterfaceTapConfigurationListResultIterator provides access to a complete listing of
13937// InterfaceTapConfiguration values.
13938type InterfaceTapConfigurationListResultIterator struct {
13939	i    int
13940	page InterfaceTapConfigurationListResultPage
13941}
13942
13943// NextWithContext advances to the next value.  If there was an error making
13944// the request the iterator does not advance and the error is returned.
13945func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
13946	if tracing.IsEnabled() {
13947		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
13948		defer func() {
13949			sc := -1
13950			if iter.Response().Response.Response != nil {
13951				sc = iter.Response().Response.Response.StatusCode
13952			}
13953			tracing.EndSpan(ctx, sc, err)
13954		}()
13955	}
13956	iter.i++
13957	if iter.i < len(iter.page.Values()) {
13958		return nil
13959	}
13960	err = iter.page.NextWithContext(ctx)
13961	if err != nil {
13962		iter.i--
13963		return err
13964	}
13965	iter.i = 0
13966	return nil
13967}
13968
13969// Next advances to the next value.  If there was an error making
13970// the request the iterator does not advance and the error is returned.
13971// Deprecated: Use NextWithContext() instead.
13972func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
13973	return iter.NextWithContext(context.Background())
13974}
13975
13976// NotDone returns true if the enumeration should be started or is not yet complete.
13977func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
13978	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13979}
13980
13981// Response returns the raw server response from the last page request.
13982func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
13983	return iter.page.Response()
13984}
13985
13986// Value returns the current value or a zero-initialized value if the
13987// iterator has advanced beyond the end of the collection.
13988func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
13989	if !iter.page.NotDone() {
13990		return InterfaceTapConfiguration{}
13991	}
13992	return iter.page.Values()[iter.i]
13993}
13994
13995// Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
13996func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
13997	return InterfaceTapConfigurationListResultIterator{page: page}
13998}
13999
14000// IsEmpty returns true if the ListResult contains no values.
14001func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
14002	return itclr.Value == nil || len(*itclr.Value) == 0
14003}
14004
14005// interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
14006// It returns nil if no more results exist.
14007func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
14008	if itclr.NextLink == nil || len(to.String(itclr.NextLink)) < 1 {
14009		return nil, nil
14010	}
14011	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14012		autorest.AsJSON(),
14013		autorest.AsGet(),
14014		autorest.WithBaseURL(to.String(itclr.NextLink)))
14015}
14016
14017// InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
14018type InterfaceTapConfigurationListResultPage struct {
14019	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
14020	itclr InterfaceTapConfigurationListResult
14021}
14022
14023// NextWithContext advances to the next page of values.  If there was an error making
14024// the request the page does not advance and the error is returned.
14025func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
14026	if tracing.IsEnabled() {
14027		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
14028		defer func() {
14029			sc := -1
14030			if page.Response().Response.Response != nil {
14031				sc = page.Response().Response.Response.StatusCode
14032			}
14033			tracing.EndSpan(ctx, sc, err)
14034		}()
14035	}
14036	next, err := page.fn(ctx, page.itclr)
14037	if err != nil {
14038		return err
14039	}
14040	page.itclr = next
14041	return nil
14042}
14043
14044// Next advances to the next page of values.  If there was an error making
14045// the request the page does not advance and the error is returned.
14046// Deprecated: Use NextWithContext() instead.
14047func (page *InterfaceTapConfigurationListResultPage) Next() error {
14048	return page.NextWithContext(context.Background())
14049}
14050
14051// NotDone returns true if the page enumeration should be started or is not yet complete.
14052func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
14053	return !page.itclr.IsEmpty()
14054}
14055
14056// Response returns the raw server response from the last page request.
14057func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
14058	return page.itclr
14059}
14060
14061// Values returns the slice of values for the current page or nil if there are no values.
14062func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
14063	if page.itclr.IsEmpty() {
14064		return nil
14065	}
14066	return *page.itclr.Value
14067}
14068
14069// Creates a new instance of the InterfaceTapConfigurationListResultPage type.
14070func NewInterfaceTapConfigurationListResultPage(getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
14071	return InterfaceTapConfigurationListResultPage{fn: getNextPage}
14072}
14073
14074// InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
14075type InterfaceTapConfigurationPropertiesFormat struct {
14076	// VirtualNetworkTap - The reference of the Virtual Network Tap resource.
14077	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
14078	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14079	ProvisioningState *string `json:"provisioningState,omitempty"`
14080}
14081
14082// InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
14083// of a long-running operation.
14084type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
14085	azure.Future
14086}
14087
14088// Result returns the result of the asynchronous operation.
14089// If the operation has not completed it will return an error.
14090func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) Result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
14091	var done bool
14092	done, err = future.DoneWithContext(context.Background(), client)
14093	if err != nil {
14094		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14095		return
14096	}
14097	if !done {
14098		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
14099		return
14100	}
14101	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14102	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
14103		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
14104		if err != nil {
14105			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
14106		}
14107	}
14108	return
14109}
14110
14111// InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
14112// long-running operation.
14113type InterfaceTapConfigurationsDeleteFuture struct {
14114	azure.Future
14115}
14116
14117// Result returns the result of the asynchronous operation.
14118// If the operation has not completed it will return an error.
14119func (future *InterfaceTapConfigurationsDeleteFuture) Result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
14120	var done bool
14121	done, err = future.DoneWithContext(context.Background(), client)
14122	if err != nil {
14123		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
14124		return
14125	}
14126	if !done {
14127		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
14128		return
14129	}
14130	ar.Response = future.Response()
14131	return
14132}
14133
14134// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call
14135type IPAddressAvailabilityResult struct {
14136	autorest.Response `json:"-"`
14137	// Available - Private IP address availability.
14138	Available *bool `json:"available,omitempty"`
14139	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
14140	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
14141}
14142
14143// IPConfiguration IP configuration
14144type IPConfiguration struct {
14145	// IPConfigurationPropertiesFormat - Properties of the IP configuration
14146	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
14147	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14148	Name *string `json:"name,omitempty"`
14149	// Etag - A unique read-only string that changes whenever the resource is updated.
14150	Etag *string `json:"etag,omitempty"`
14151	// ID - Resource ID.
14152	ID *string `json:"id,omitempty"`
14153}
14154
14155// MarshalJSON is the custom marshaler for IPConfiguration.
14156func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
14157	objectMap := make(map[string]interface{})
14158	if ic.IPConfigurationPropertiesFormat != nil {
14159		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
14160	}
14161	if ic.Name != nil {
14162		objectMap["name"] = ic.Name
14163	}
14164	if ic.Etag != nil {
14165		objectMap["etag"] = ic.Etag
14166	}
14167	if ic.ID != nil {
14168		objectMap["id"] = ic.ID
14169	}
14170	return json.Marshal(objectMap)
14171}
14172
14173// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
14174func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
14175	var m map[string]*json.RawMessage
14176	err := json.Unmarshal(body, &m)
14177	if err != nil {
14178		return err
14179	}
14180	for k, v := range m {
14181		switch k {
14182		case "properties":
14183			if v != nil {
14184				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
14185				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
14186				if err != nil {
14187					return err
14188				}
14189				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
14190			}
14191		case "name":
14192			if v != nil {
14193				var name string
14194				err = json.Unmarshal(*v, &name)
14195				if err != nil {
14196					return err
14197				}
14198				ic.Name = &name
14199			}
14200		case "etag":
14201			if v != nil {
14202				var etag string
14203				err = json.Unmarshal(*v, &etag)
14204				if err != nil {
14205					return err
14206				}
14207				ic.Etag = &etag
14208			}
14209		case "id":
14210			if v != nil {
14211				var ID string
14212				err = json.Unmarshal(*v, &ID)
14213				if err != nil {
14214					return err
14215				}
14216				ic.ID = &ID
14217			}
14218		}
14219	}
14220
14221	return nil
14222}
14223
14224// IPConfigurationProfile IP configuration profile child resource.
14225type IPConfigurationProfile struct {
14226	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
14227	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
14228	// Name - The name of the resource. This name can be used to access the resource.
14229	Name *string `json:"name,omitempty"`
14230	// Type - READ-ONLY; Sub Resource type.
14231	Type *string `json:"type,omitempty"`
14232	// Etag - A unique read-only string that changes whenever the resource is updated.
14233	Etag *string `json:"etag,omitempty"`
14234	// ID - Resource ID.
14235	ID *string `json:"id,omitempty"`
14236}
14237
14238// MarshalJSON is the custom marshaler for IPConfigurationProfile.
14239func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
14240	objectMap := make(map[string]interface{})
14241	if icp.IPConfigurationProfilePropertiesFormat != nil {
14242		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
14243	}
14244	if icp.Name != nil {
14245		objectMap["name"] = icp.Name
14246	}
14247	if icp.Etag != nil {
14248		objectMap["etag"] = icp.Etag
14249	}
14250	if icp.ID != nil {
14251		objectMap["id"] = icp.ID
14252	}
14253	return json.Marshal(objectMap)
14254}
14255
14256// UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
14257func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
14258	var m map[string]*json.RawMessage
14259	err := json.Unmarshal(body, &m)
14260	if err != nil {
14261		return err
14262	}
14263	for k, v := range m {
14264		switch k {
14265		case "properties":
14266			if v != nil {
14267				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
14268				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
14269				if err != nil {
14270					return err
14271				}
14272				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
14273			}
14274		case "name":
14275			if v != nil {
14276				var name string
14277				err = json.Unmarshal(*v, &name)
14278				if err != nil {
14279					return err
14280				}
14281				icp.Name = &name
14282			}
14283		case "type":
14284			if v != nil {
14285				var typeVar string
14286				err = json.Unmarshal(*v, &typeVar)
14287				if err != nil {
14288					return err
14289				}
14290				icp.Type = &typeVar
14291			}
14292		case "etag":
14293			if v != nil {
14294				var etag string
14295				err = json.Unmarshal(*v, &etag)
14296				if err != nil {
14297					return err
14298				}
14299				icp.Etag = &etag
14300			}
14301		case "id":
14302			if v != nil {
14303				var ID string
14304				err = json.Unmarshal(*v, &ID)
14305				if err != nil {
14306					return err
14307				}
14308				icp.ID = &ID
14309			}
14310		}
14311	}
14312
14313	return nil
14314}
14315
14316// IPConfigurationProfilePropertiesFormat IP configuration profile properties.
14317type IPConfigurationProfilePropertiesFormat struct {
14318	// Subnet - The reference of the subnet resource to create a container network interface ip configuration.
14319	Subnet *Subnet `json:"subnet,omitempty"`
14320	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
14321	ProvisioningState *string `json:"provisioningState,omitempty"`
14322}
14323
14324// IPConfigurationPropertiesFormat properties of IP configuration.
14325type IPConfigurationPropertiesFormat struct {
14326	// PrivateIPAddress - The private IP address of the IP configuration.
14327	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
14328	// PrivateIPAllocationMethod - The private IP allocation method. Possible values are 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
14329	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
14330	// Subnet - The reference of the subnet resource.
14331	Subnet *Subnet `json:"subnet,omitempty"`
14332	// PublicIPAddress - The reference of the public IP resource.
14333	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
14334	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14335	ProvisioningState *string `json:"provisioningState,omitempty"`
14336}
14337
14338// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection
14339type IpsecPolicy struct {
14340	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
14341	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
14342	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
14343	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
14344	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
14345	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
14346	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
14347	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
14348	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
14349	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
14350	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
14351	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
14352	// DhGroup - The DH Groups used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
14353	DhGroup DhGroup `json:"dhGroup,omitempty"`
14354	// PfsGroup - The Pfs Groups used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
14355	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
14356}
14357
14358// IPTag contains the IpTag associated with the object
14359type IPTag struct {
14360	// IPTagType - Gets or sets the ipTag type: Example FirstPartyUsage.
14361	IPTagType *string `json:"ipTagType,omitempty"`
14362	// Tag - Gets or sets value of the IpTag associated with the public IP. Example SQL, Storage etc
14363	Tag *string `json:"tag,omitempty"`
14364}
14365
14366// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
14367type Ipv6ExpressRouteCircuitPeeringConfig struct {
14368	// PrimaryPeerAddressPrefix - The primary address prefix.
14369	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
14370	// SecondaryPeerAddressPrefix - The secondary address prefix.
14371	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
14372	// MicrosoftPeeringConfig - The Microsoft peering configuration.
14373	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
14374	// RouteFilter - The reference of the RouteFilter resource.
14375	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
14376	// State - The state of peering. Possible values are: 'Disabled' and 'Enabled'. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
14377	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
14378}
14379
14380// ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
14381// the next set of results.
14382type ListHubVirtualNetworkConnectionsResult struct {
14383	autorest.Response `json:"-"`
14384	// Value - List of HubVirtualNetworkConnections.
14385	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
14386	// NextLink - URL to get the next set of operation list results if there are any.
14387	NextLink *string `json:"nextLink,omitempty"`
14388}
14389
14390// ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
14391// HubVirtualNetworkConnection values.
14392type ListHubVirtualNetworkConnectionsResultIterator struct {
14393	i    int
14394	page ListHubVirtualNetworkConnectionsResultPage
14395}
14396
14397// NextWithContext advances to the next value.  If there was an error making
14398// the request the iterator does not advance and the error is returned.
14399func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
14400	if tracing.IsEnabled() {
14401		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
14402		defer func() {
14403			sc := -1
14404			if iter.Response().Response.Response != nil {
14405				sc = iter.Response().Response.Response.StatusCode
14406			}
14407			tracing.EndSpan(ctx, sc, err)
14408		}()
14409	}
14410	iter.i++
14411	if iter.i < len(iter.page.Values()) {
14412		return nil
14413	}
14414	err = iter.page.NextWithContext(ctx)
14415	if err != nil {
14416		iter.i--
14417		return err
14418	}
14419	iter.i = 0
14420	return nil
14421}
14422
14423// Next advances to the next value.  If there was an error making
14424// the request the iterator does not advance and the error is returned.
14425// Deprecated: Use NextWithContext() instead.
14426func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
14427	return iter.NextWithContext(context.Background())
14428}
14429
14430// NotDone returns true if the enumeration should be started or is not yet complete.
14431func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
14432	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14433}
14434
14435// Response returns the raw server response from the last page request.
14436func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
14437	return iter.page.Response()
14438}
14439
14440// Value returns the current value or a zero-initialized value if the
14441// iterator has advanced beyond the end of the collection.
14442func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
14443	if !iter.page.NotDone() {
14444		return HubVirtualNetworkConnection{}
14445	}
14446	return iter.page.Values()[iter.i]
14447}
14448
14449// Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
14450func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
14451	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
14452}
14453
14454// IsEmpty returns true if the ListResult contains no values.
14455func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
14456	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
14457}
14458
14459// listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
14460// It returns nil if no more results exist.
14461func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
14462	if lhvncr.NextLink == nil || len(to.String(lhvncr.NextLink)) < 1 {
14463		return nil, nil
14464	}
14465	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14466		autorest.AsJSON(),
14467		autorest.AsGet(),
14468		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
14469}
14470
14471// ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
14472type ListHubVirtualNetworkConnectionsResultPage struct {
14473	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
14474	lhvncr ListHubVirtualNetworkConnectionsResult
14475}
14476
14477// NextWithContext advances to the next page of values.  If there was an error making
14478// the request the page does not advance and the error is returned.
14479func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
14480	if tracing.IsEnabled() {
14481		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
14482		defer func() {
14483			sc := -1
14484			if page.Response().Response.Response != nil {
14485				sc = page.Response().Response.Response.StatusCode
14486			}
14487			tracing.EndSpan(ctx, sc, err)
14488		}()
14489	}
14490	next, err := page.fn(ctx, page.lhvncr)
14491	if err != nil {
14492		return err
14493	}
14494	page.lhvncr = next
14495	return nil
14496}
14497
14498// Next advances to the next page of values.  If there was an error making
14499// the request the page does not advance and the error is returned.
14500// Deprecated: Use NextWithContext() instead.
14501func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
14502	return page.NextWithContext(context.Background())
14503}
14504
14505// NotDone returns true if the page enumeration should be started or is not yet complete.
14506func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
14507	return !page.lhvncr.IsEmpty()
14508}
14509
14510// Response returns the raw server response from the last page request.
14511func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
14512	return page.lhvncr
14513}
14514
14515// Values returns the slice of values for the current page or nil if there are no values.
14516func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
14517	if page.lhvncr.IsEmpty() {
14518		return nil
14519	}
14520	return *page.lhvncr.Value
14521}
14522
14523// Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
14524func NewListHubVirtualNetworkConnectionsResultPage(getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
14525	return ListHubVirtualNetworkConnectionsResultPage{fn: getNextPage}
14526}
14527
14528// ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
14529// P2SVpnGateways and a URL nextLink to get the next set of results.
14530type ListP2SVpnGatewaysResult struct {
14531	autorest.Response `json:"-"`
14532	// Value - List of P2SVpnGateways.
14533	Value *[]P2SVpnGateway `json:"value,omitempty"`
14534	// NextLink - URL to get the next set of operation list results if there are any.
14535	NextLink *string `json:"nextLink,omitempty"`
14536}
14537
14538// ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
14539type ListP2SVpnGatewaysResultIterator struct {
14540	i    int
14541	page ListP2SVpnGatewaysResultPage
14542}
14543
14544// NextWithContext advances to the next value.  If there was an error making
14545// the request the iterator does not advance and the error is returned.
14546func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
14547	if tracing.IsEnabled() {
14548		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
14549		defer func() {
14550			sc := -1
14551			if iter.Response().Response.Response != nil {
14552				sc = iter.Response().Response.Response.StatusCode
14553			}
14554			tracing.EndSpan(ctx, sc, err)
14555		}()
14556	}
14557	iter.i++
14558	if iter.i < len(iter.page.Values()) {
14559		return nil
14560	}
14561	err = iter.page.NextWithContext(ctx)
14562	if err != nil {
14563		iter.i--
14564		return err
14565	}
14566	iter.i = 0
14567	return nil
14568}
14569
14570// Next advances to the next value.  If there was an error making
14571// the request the iterator does not advance and the error is returned.
14572// Deprecated: Use NextWithContext() instead.
14573func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
14574	return iter.NextWithContext(context.Background())
14575}
14576
14577// NotDone returns true if the enumeration should be started or is not yet complete.
14578func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
14579	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14580}
14581
14582// Response returns the raw server response from the last page request.
14583func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
14584	return iter.page.Response()
14585}
14586
14587// Value returns the current value or a zero-initialized value if the
14588// iterator has advanced beyond the end of the collection.
14589func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
14590	if !iter.page.NotDone() {
14591		return P2SVpnGateway{}
14592	}
14593	return iter.page.Values()[iter.i]
14594}
14595
14596// Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
14597func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
14598	return ListP2SVpnGatewaysResultIterator{page: page}
14599}
14600
14601// IsEmpty returns true if the ListResult contains no values.
14602func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
14603	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
14604}
14605
14606// listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
14607// It returns nil if no more results exist.
14608func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
14609	if lpvgr.NextLink == nil || len(to.String(lpvgr.NextLink)) < 1 {
14610		return nil, nil
14611	}
14612	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14613		autorest.AsJSON(),
14614		autorest.AsGet(),
14615		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
14616}
14617
14618// ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
14619type ListP2SVpnGatewaysResultPage struct {
14620	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
14621	lpvgr ListP2SVpnGatewaysResult
14622}
14623
14624// NextWithContext advances to the next page of values.  If there was an error making
14625// the request the page does not advance and the error is returned.
14626func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
14627	if tracing.IsEnabled() {
14628		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
14629		defer func() {
14630			sc := -1
14631			if page.Response().Response.Response != nil {
14632				sc = page.Response().Response.Response.StatusCode
14633			}
14634			tracing.EndSpan(ctx, sc, err)
14635		}()
14636	}
14637	next, err := page.fn(ctx, page.lpvgr)
14638	if err != nil {
14639		return err
14640	}
14641	page.lpvgr = next
14642	return nil
14643}
14644
14645// Next advances to the next page of values.  If there was an error making
14646// the request the page does not advance and the error is returned.
14647// Deprecated: Use NextWithContext() instead.
14648func (page *ListP2SVpnGatewaysResultPage) Next() error {
14649	return page.NextWithContext(context.Background())
14650}
14651
14652// NotDone returns true if the page enumeration should be started or is not yet complete.
14653func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
14654	return !page.lpvgr.IsEmpty()
14655}
14656
14657// Response returns the raw server response from the last page request.
14658func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
14659	return page.lpvgr
14660}
14661
14662// Values returns the slice of values for the current page or nil if there are no values.
14663func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
14664	if page.lpvgr.IsEmpty() {
14665		return nil
14666	}
14667	return *page.lpvgr.Value
14668}
14669
14670// Creates a new instance of the ListP2SVpnGatewaysResultPage type.
14671func NewListP2SVpnGatewaysResultPage(getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
14672	return ListP2SVpnGatewaysResultPage{fn: getNextPage}
14673}
14674
14675// ListP2SVpnServerConfigurationsResult result of the request to list all P2SVpnServerConfigurations
14676// associated to a VirtualWan. It contains a list of P2SVpnServerConfigurations and a URL nextLink to get
14677// the next set of results.
14678type ListP2SVpnServerConfigurationsResult struct {
14679	autorest.Response `json:"-"`
14680	// Value - List of P2SVpnServerConfigurations.
14681	Value *[]P2SVpnServerConfiguration `json:"value,omitempty"`
14682	// NextLink - URL to get the next set of operation list results if there are any.
14683	NextLink *string `json:"nextLink,omitempty"`
14684}
14685
14686// ListP2SVpnServerConfigurationsResultIterator provides access to a complete listing of
14687// P2SVpnServerConfiguration values.
14688type ListP2SVpnServerConfigurationsResultIterator struct {
14689	i    int
14690	page ListP2SVpnServerConfigurationsResultPage
14691}
14692
14693// NextWithContext advances to the next value.  If there was an error making
14694// the request the iterator does not advance and the error is returned.
14695func (iter *ListP2SVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
14696	if tracing.IsEnabled() {
14697		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultIterator.NextWithContext")
14698		defer func() {
14699			sc := -1
14700			if iter.Response().Response.Response != nil {
14701				sc = iter.Response().Response.Response.StatusCode
14702			}
14703			tracing.EndSpan(ctx, sc, err)
14704		}()
14705	}
14706	iter.i++
14707	if iter.i < len(iter.page.Values()) {
14708		return nil
14709	}
14710	err = iter.page.NextWithContext(ctx)
14711	if err != nil {
14712		iter.i--
14713		return err
14714	}
14715	iter.i = 0
14716	return nil
14717}
14718
14719// Next advances to the next value.  If there was an error making
14720// the request the iterator does not advance and the error is returned.
14721// Deprecated: Use NextWithContext() instead.
14722func (iter *ListP2SVpnServerConfigurationsResultIterator) Next() error {
14723	return iter.NextWithContext(context.Background())
14724}
14725
14726// NotDone returns true if the enumeration should be started or is not yet complete.
14727func (iter ListP2SVpnServerConfigurationsResultIterator) NotDone() bool {
14728	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14729}
14730
14731// Response returns the raw server response from the last page request.
14732func (iter ListP2SVpnServerConfigurationsResultIterator) Response() ListP2SVpnServerConfigurationsResult {
14733	return iter.page.Response()
14734}
14735
14736// Value returns the current value or a zero-initialized value if the
14737// iterator has advanced beyond the end of the collection.
14738func (iter ListP2SVpnServerConfigurationsResultIterator) Value() P2SVpnServerConfiguration {
14739	if !iter.page.NotDone() {
14740		return P2SVpnServerConfiguration{}
14741	}
14742	return iter.page.Values()[iter.i]
14743}
14744
14745// Creates a new instance of the ListP2SVpnServerConfigurationsResultIterator type.
14746func NewListP2SVpnServerConfigurationsResultIterator(page ListP2SVpnServerConfigurationsResultPage) ListP2SVpnServerConfigurationsResultIterator {
14747	return ListP2SVpnServerConfigurationsResultIterator{page: page}
14748}
14749
14750// IsEmpty returns true if the ListResult contains no values.
14751func (lpvscr ListP2SVpnServerConfigurationsResult) IsEmpty() bool {
14752	return lpvscr.Value == nil || len(*lpvscr.Value) == 0
14753}
14754
14755// listP2SVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
14756// It returns nil if no more results exist.
14757func (lpvscr ListP2SVpnServerConfigurationsResult) listP2SVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
14758	if lpvscr.NextLink == nil || len(to.String(lpvscr.NextLink)) < 1 {
14759		return nil, nil
14760	}
14761	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14762		autorest.AsJSON(),
14763		autorest.AsGet(),
14764		autorest.WithBaseURL(to.String(lpvscr.NextLink)))
14765}
14766
14767// ListP2SVpnServerConfigurationsResultPage contains a page of P2SVpnServerConfiguration values.
14768type ListP2SVpnServerConfigurationsResultPage struct {
14769	fn     func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)
14770	lpvscr ListP2SVpnServerConfigurationsResult
14771}
14772
14773// NextWithContext advances to the next page of values.  If there was an error making
14774// the request the page does not advance and the error is returned.
14775func (page *ListP2SVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
14776	if tracing.IsEnabled() {
14777		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultPage.NextWithContext")
14778		defer func() {
14779			sc := -1
14780			if page.Response().Response.Response != nil {
14781				sc = page.Response().Response.Response.StatusCode
14782			}
14783			tracing.EndSpan(ctx, sc, err)
14784		}()
14785	}
14786	next, err := page.fn(ctx, page.lpvscr)
14787	if err != nil {
14788		return err
14789	}
14790	page.lpvscr = next
14791	return nil
14792}
14793
14794// Next advances to the next page of values.  If there was an error making
14795// the request the page does not advance and the error is returned.
14796// Deprecated: Use NextWithContext() instead.
14797func (page *ListP2SVpnServerConfigurationsResultPage) Next() error {
14798	return page.NextWithContext(context.Background())
14799}
14800
14801// NotDone returns true if the page enumeration should be started or is not yet complete.
14802func (page ListP2SVpnServerConfigurationsResultPage) NotDone() bool {
14803	return !page.lpvscr.IsEmpty()
14804}
14805
14806// Response returns the raw server response from the last page request.
14807func (page ListP2SVpnServerConfigurationsResultPage) Response() ListP2SVpnServerConfigurationsResult {
14808	return page.lpvscr
14809}
14810
14811// Values returns the slice of values for the current page or nil if there are no values.
14812func (page ListP2SVpnServerConfigurationsResultPage) Values() []P2SVpnServerConfiguration {
14813	if page.lpvscr.IsEmpty() {
14814		return nil
14815	}
14816	return *page.lpvscr.Value
14817}
14818
14819// Creates a new instance of the ListP2SVpnServerConfigurationsResultPage type.
14820func NewListP2SVpnServerConfigurationsResultPage(getNextPage func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)) ListP2SVpnServerConfigurationsResultPage {
14821	return ListP2SVpnServerConfigurationsResultPage{fn: getNextPage}
14822}
14823
14824// ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
14825// URL nextLink to get the next set of results.
14826type ListVirtualHubsResult struct {
14827	autorest.Response `json:"-"`
14828	// Value - List of VirtualHubs.
14829	Value *[]VirtualHub `json:"value,omitempty"`
14830	// NextLink - URL to get the next set of operation list results if there are any.
14831	NextLink *string `json:"nextLink,omitempty"`
14832}
14833
14834// ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
14835type ListVirtualHubsResultIterator struct {
14836	i    int
14837	page ListVirtualHubsResultPage
14838}
14839
14840// NextWithContext advances to the next value.  If there was an error making
14841// the request the iterator does not advance and the error is returned.
14842func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
14843	if tracing.IsEnabled() {
14844		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
14845		defer func() {
14846			sc := -1
14847			if iter.Response().Response.Response != nil {
14848				sc = iter.Response().Response.Response.StatusCode
14849			}
14850			tracing.EndSpan(ctx, sc, err)
14851		}()
14852	}
14853	iter.i++
14854	if iter.i < len(iter.page.Values()) {
14855		return nil
14856	}
14857	err = iter.page.NextWithContext(ctx)
14858	if err != nil {
14859		iter.i--
14860		return err
14861	}
14862	iter.i = 0
14863	return nil
14864}
14865
14866// Next advances to the next value.  If there was an error making
14867// the request the iterator does not advance and the error is returned.
14868// Deprecated: Use NextWithContext() instead.
14869func (iter *ListVirtualHubsResultIterator) Next() error {
14870	return iter.NextWithContext(context.Background())
14871}
14872
14873// NotDone returns true if the enumeration should be started or is not yet complete.
14874func (iter ListVirtualHubsResultIterator) NotDone() bool {
14875	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14876}
14877
14878// Response returns the raw server response from the last page request.
14879func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
14880	return iter.page.Response()
14881}
14882
14883// Value returns the current value or a zero-initialized value if the
14884// iterator has advanced beyond the end of the collection.
14885func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
14886	if !iter.page.NotDone() {
14887		return VirtualHub{}
14888	}
14889	return iter.page.Values()[iter.i]
14890}
14891
14892// Creates a new instance of the ListVirtualHubsResultIterator type.
14893func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
14894	return ListVirtualHubsResultIterator{page: page}
14895}
14896
14897// IsEmpty returns true if the ListResult contains no values.
14898func (lvhr ListVirtualHubsResult) IsEmpty() bool {
14899	return lvhr.Value == nil || len(*lvhr.Value) == 0
14900}
14901
14902// listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
14903// It returns nil if no more results exist.
14904func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
14905	if lvhr.NextLink == nil || len(to.String(lvhr.NextLink)) < 1 {
14906		return nil, nil
14907	}
14908	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14909		autorest.AsJSON(),
14910		autorest.AsGet(),
14911		autorest.WithBaseURL(to.String(lvhr.NextLink)))
14912}
14913
14914// ListVirtualHubsResultPage contains a page of VirtualHub values.
14915type ListVirtualHubsResultPage struct {
14916	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
14917	lvhr ListVirtualHubsResult
14918}
14919
14920// NextWithContext advances to the next page of values.  If there was an error making
14921// the request the page does not advance and the error is returned.
14922func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
14923	if tracing.IsEnabled() {
14924		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
14925		defer func() {
14926			sc := -1
14927			if page.Response().Response.Response != nil {
14928				sc = page.Response().Response.Response.StatusCode
14929			}
14930			tracing.EndSpan(ctx, sc, err)
14931		}()
14932	}
14933	next, err := page.fn(ctx, page.lvhr)
14934	if err != nil {
14935		return err
14936	}
14937	page.lvhr = next
14938	return nil
14939}
14940
14941// Next advances to the next page of values.  If there was an error making
14942// the request the page does not advance and the error is returned.
14943// Deprecated: Use NextWithContext() instead.
14944func (page *ListVirtualHubsResultPage) Next() error {
14945	return page.NextWithContext(context.Background())
14946}
14947
14948// NotDone returns true if the page enumeration should be started or is not yet complete.
14949func (page ListVirtualHubsResultPage) NotDone() bool {
14950	return !page.lvhr.IsEmpty()
14951}
14952
14953// Response returns the raw server response from the last page request.
14954func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
14955	return page.lvhr
14956}
14957
14958// Values returns the slice of values for the current page or nil if there are no values.
14959func (page ListVirtualHubsResultPage) Values() []VirtualHub {
14960	if page.lvhr.IsEmpty() {
14961		return nil
14962	}
14963	return *page.lvhr.Value
14964}
14965
14966// Creates a new instance of the ListVirtualHubsResultPage type.
14967func NewListVirtualHubsResultPage(getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
14968	return ListVirtualHubsResultPage{fn: getNextPage}
14969}
14970
14971// ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
14972// URL nextLink to get the next set of results.
14973type ListVirtualWANsResult struct {
14974	autorest.Response `json:"-"`
14975	// Value - List of VirtualWANs.
14976	Value *[]VirtualWAN `json:"value,omitempty"`
14977	// NextLink - URL to get the next set of operation list results if there are any.
14978	NextLink *string `json:"nextLink,omitempty"`
14979}
14980
14981// ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
14982type ListVirtualWANsResultIterator struct {
14983	i    int
14984	page ListVirtualWANsResultPage
14985}
14986
14987// NextWithContext advances to the next value.  If there was an error making
14988// the request the iterator does not advance and the error is returned.
14989func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
14990	if tracing.IsEnabled() {
14991		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
14992		defer func() {
14993			sc := -1
14994			if iter.Response().Response.Response != nil {
14995				sc = iter.Response().Response.Response.StatusCode
14996			}
14997			tracing.EndSpan(ctx, sc, err)
14998		}()
14999	}
15000	iter.i++
15001	if iter.i < len(iter.page.Values()) {
15002		return nil
15003	}
15004	err = iter.page.NextWithContext(ctx)
15005	if err != nil {
15006		iter.i--
15007		return err
15008	}
15009	iter.i = 0
15010	return nil
15011}
15012
15013// Next advances to the next value.  If there was an error making
15014// the request the iterator does not advance and the error is returned.
15015// Deprecated: Use NextWithContext() instead.
15016func (iter *ListVirtualWANsResultIterator) Next() error {
15017	return iter.NextWithContext(context.Background())
15018}
15019
15020// NotDone returns true if the enumeration should be started or is not yet complete.
15021func (iter ListVirtualWANsResultIterator) NotDone() bool {
15022	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15023}
15024
15025// Response returns the raw server response from the last page request.
15026func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
15027	return iter.page.Response()
15028}
15029
15030// Value returns the current value or a zero-initialized value if the
15031// iterator has advanced beyond the end of the collection.
15032func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
15033	if !iter.page.NotDone() {
15034		return VirtualWAN{}
15035	}
15036	return iter.page.Values()[iter.i]
15037}
15038
15039// Creates a new instance of the ListVirtualWANsResultIterator type.
15040func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
15041	return ListVirtualWANsResultIterator{page: page}
15042}
15043
15044// IsEmpty returns true if the ListResult contains no values.
15045func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
15046	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
15047}
15048
15049// listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
15050// It returns nil if no more results exist.
15051func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
15052	if lvwnr.NextLink == nil || len(to.String(lvwnr.NextLink)) < 1 {
15053		return nil, nil
15054	}
15055	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15056		autorest.AsJSON(),
15057		autorest.AsGet(),
15058		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
15059}
15060
15061// ListVirtualWANsResultPage contains a page of VirtualWAN values.
15062type ListVirtualWANsResultPage struct {
15063	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
15064	lvwnr ListVirtualWANsResult
15065}
15066
15067// NextWithContext advances to the next page of values.  If there was an error making
15068// the request the page does not advance and the error is returned.
15069func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
15070	if tracing.IsEnabled() {
15071		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
15072		defer func() {
15073			sc := -1
15074			if page.Response().Response.Response != nil {
15075				sc = page.Response().Response.Response.StatusCode
15076			}
15077			tracing.EndSpan(ctx, sc, err)
15078		}()
15079	}
15080	next, err := page.fn(ctx, page.lvwnr)
15081	if err != nil {
15082		return err
15083	}
15084	page.lvwnr = next
15085	return nil
15086}
15087
15088// Next advances to the next page of values.  If there was an error making
15089// the request the page does not advance and the error is returned.
15090// Deprecated: Use NextWithContext() instead.
15091func (page *ListVirtualWANsResultPage) Next() error {
15092	return page.NextWithContext(context.Background())
15093}
15094
15095// NotDone returns true if the page enumeration should be started or is not yet complete.
15096func (page ListVirtualWANsResultPage) NotDone() bool {
15097	return !page.lvwnr.IsEmpty()
15098}
15099
15100// Response returns the raw server response from the last page request.
15101func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
15102	return page.lvwnr
15103}
15104
15105// Values returns the slice of values for the current page or nil if there are no values.
15106func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
15107	if page.lvwnr.IsEmpty() {
15108		return nil
15109	}
15110	return *page.lvwnr.Value
15111}
15112
15113// Creates a new instance of the ListVirtualWANsResultPage type.
15114func NewListVirtualWANsResultPage(getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
15115	return ListVirtualWANsResultPage{fn: getNextPage}
15116}
15117
15118// ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
15119// It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
15120type ListVpnConnectionsResult struct {
15121	autorest.Response `json:"-"`
15122	// Value - List of Vpn Connections.
15123	Value *[]VpnConnection `json:"value,omitempty"`
15124	// NextLink - URL to get the next set of operation list results if there are any.
15125	NextLink *string `json:"nextLink,omitempty"`
15126}
15127
15128// ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
15129type ListVpnConnectionsResultIterator struct {
15130	i    int
15131	page ListVpnConnectionsResultPage
15132}
15133
15134// NextWithContext advances to the next value.  If there was an error making
15135// the request the iterator does not advance and the error is returned.
15136func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
15137	if tracing.IsEnabled() {
15138		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
15139		defer func() {
15140			sc := -1
15141			if iter.Response().Response.Response != nil {
15142				sc = iter.Response().Response.Response.StatusCode
15143			}
15144			tracing.EndSpan(ctx, sc, err)
15145		}()
15146	}
15147	iter.i++
15148	if iter.i < len(iter.page.Values()) {
15149		return nil
15150	}
15151	err = iter.page.NextWithContext(ctx)
15152	if err != nil {
15153		iter.i--
15154		return err
15155	}
15156	iter.i = 0
15157	return nil
15158}
15159
15160// Next advances to the next value.  If there was an error making
15161// the request the iterator does not advance and the error is returned.
15162// Deprecated: Use NextWithContext() instead.
15163func (iter *ListVpnConnectionsResultIterator) Next() error {
15164	return iter.NextWithContext(context.Background())
15165}
15166
15167// NotDone returns true if the enumeration should be started or is not yet complete.
15168func (iter ListVpnConnectionsResultIterator) NotDone() bool {
15169	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15170}
15171
15172// Response returns the raw server response from the last page request.
15173func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
15174	return iter.page.Response()
15175}
15176
15177// Value returns the current value or a zero-initialized value if the
15178// iterator has advanced beyond the end of the collection.
15179func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
15180	if !iter.page.NotDone() {
15181		return VpnConnection{}
15182	}
15183	return iter.page.Values()[iter.i]
15184}
15185
15186// Creates a new instance of the ListVpnConnectionsResultIterator type.
15187func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
15188	return ListVpnConnectionsResultIterator{page: page}
15189}
15190
15191// IsEmpty returns true if the ListResult contains no values.
15192func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
15193	return lvcr.Value == nil || len(*lvcr.Value) == 0
15194}
15195
15196// listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
15197// It returns nil if no more results exist.
15198func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
15199	if lvcr.NextLink == nil || len(to.String(lvcr.NextLink)) < 1 {
15200		return nil, nil
15201	}
15202	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15203		autorest.AsJSON(),
15204		autorest.AsGet(),
15205		autorest.WithBaseURL(to.String(lvcr.NextLink)))
15206}
15207
15208// ListVpnConnectionsResultPage contains a page of VpnConnection values.
15209type ListVpnConnectionsResultPage struct {
15210	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
15211	lvcr ListVpnConnectionsResult
15212}
15213
15214// NextWithContext advances to the next page of values.  If there was an error making
15215// the request the page does not advance and the error is returned.
15216func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
15217	if tracing.IsEnabled() {
15218		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
15219		defer func() {
15220			sc := -1
15221			if page.Response().Response.Response != nil {
15222				sc = page.Response().Response.Response.StatusCode
15223			}
15224			tracing.EndSpan(ctx, sc, err)
15225		}()
15226	}
15227	next, err := page.fn(ctx, page.lvcr)
15228	if err != nil {
15229		return err
15230	}
15231	page.lvcr = next
15232	return nil
15233}
15234
15235// Next advances to the next page of values.  If there was an error making
15236// the request the page does not advance and the error is returned.
15237// Deprecated: Use NextWithContext() instead.
15238func (page *ListVpnConnectionsResultPage) Next() error {
15239	return page.NextWithContext(context.Background())
15240}
15241
15242// NotDone returns true if the page enumeration should be started or is not yet complete.
15243func (page ListVpnConnectionsResultPage) NotDone() bool {
15244	return !page.lvcr.IsEmpty()
15245}
15246
15247// Response returns the raw server response from the last page request.
15248func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
15249	return page.lvcr
15250}
15251
15252// Values returns the slice of values for the current page or nil if there are no values.
15253func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
15254	if page.lvcr.IsEmpty() {
15255		return nil
15256	}
15257	return *page.lvcr.Value
15258}
15259
15260// Creates a new instance of the ListVpnConnectionsResultPage type.
15261func NewListVpnConnectionsResultPage(getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
15262	return ListVpnConnectionsResultPage{fn: getNextPage}
15263}
15264
15265// ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
15266// URL nextLink to get the next set of results.
15267type ListVpnGatewaysResult struct {
15268	autorest.Response `json:"-"`
15269	// Value - List of VpnGateways.
15270	Value *[]VpnGateway `json:"value,omitempty"`
15271	// NextLink - URL to get the next set of operation list results if there are any.
15272	NextLink *string `json:"nextLink,omitempty"`
15273}
15274
15275// ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
15276type ListVpnGatewaysResultIterator struct {
15277	i    int
15278	page ListVpnGatewaysResultPage
15279}
15280
15281// NextWithContext advances to the next value.  If there was an error making
15282// the request the iterator does not advance and the error is returned.
15283func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
15284	if tracing.IsEnabled() {
15285		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
15286		defer func() {
15287			sc := -1
15288			if iter.Response().Response.Response != nil {
15289				sc = iter.Response().Response.Response.StatusCode
15290			}
15291			tracing.EndSpan(ctx, sc, err)
15292		}()
15293	}
15294	iter.i++
15295	if iter.i < len(iter.page.Values()) {
15296		return nil
15297	}
15298	err = iter.page.NextWithContext(ctx)
15299	if err != nil {
15300		iter.i--
15301		return err
15302	}
15303	iter.i = 0
15304	return nil
15305}
15306
15307// Next advances to the next value.  If there was an error making
15308// the request the iterator does not advance and the error is returned.
15309// Deprecated: Use NextWithContext() instead.
15310func (iter *ListVpnGatewaysResultIterator) Next() error {
15311	return iter.NextWithContext(context.Background())
15312}
15313
15314// NotDone returns true if the enumeration should be started or is not yet complete.
15315func (iter ListVpnGatewaysResultIterator) NotDone() bool {
15316	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15317}
15318
15319// Response returns the raw server response from the last page request.
15320func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
15321	return iter.page.Response()
15322}
15323
15324// Value returns the current value or a zero-initialized value if the
15325// iterator has advanced beyond the end of the collection.
15326func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
15327	if !iter.page.NotDone() {
15328		return VpnGateway{}
15329	}
15330	return iter.page.Values()[iter.i]
15331}
15332
15333// Creates a new instance of the ListVpnGatewaysResultIterator type.
15334func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
15335	return ListVpnGatewaysResultIterator{page: page}
15336}
15337
15338// IsEmpty returns true if the ListResult contains no values.
15339func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
15340	return lvgr.Value == nil || len(*lvgr.Value) == 0
15341}
15342
15343// listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
15344// It returns nil if no more results exist.
15345func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
15346	if lvgr.NextLink == nil || len(to.String(lvgr.NextLink)) < 1 {
15347		return nil, nil
15348	}
15349	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15350		autorest.AsJSON(),
15351		autorest.AsGet(),
15352		autorest.WithBaseURL(to.String(lvgr.NextLink)))
15353}
15354
15355// ListVpnGatewaysResultPage contains a page of VpnGateway values.
15356type ListVpnGatewaysResultPage struct {
15357	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
15358	lvgr ListVpnGatewaysResult
15359}
15360
15361// NextWithContext advances to the next page of values.  If there was an error making
15362// the request the page does not advance and the error is returned.
15363func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
15364	if tracing.IsEnabled() {
15365		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
15366		defer func() {
15367			sc := -1
15368			if page.Response().Response.Response != nil {
15369				sc = page.Response().Response.Response.StatusCode
15370			}
15371			tracing.EndSpan(ctx, sc, err)
15372		}()
15373	}
15374	next, err := page.fn(ctx, page.lvgr)
15375	if err != nil {
15376		return err
15377	}
15378	page.lvgr = next
15379	return nil
15380}
15381
15382// Next advances to the next page of values.  If there was an error making
15383// the request the page does not advance and the error is returned.
15384// Deprecated: Use NextWithContext() instead.
15385func (page *ListVpnGatewaysResultPage) Next() error {
15386	return page.NextWithContext(context.Background())
15387}
15388
15389// NotDone returns true if the page enumeration should be started or is not yet complete.
15390func (page ListVpnGatewaysResultPage) NotDone() bool {
15391	return !page.lvgr.IsEmpty()
15392}
15393
15394// Response returns the raw server response from the last page request.
15395func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
15396	return page.lvgr
15397}
15398
15399// Values returns the slice of values for the current page or nil if there are no values.
15400func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
15401	if page.lvgr.IsEmpty() {
15402		return nil
15403	}
15404	return *page.lvgr.Value
15405}
15406
15407// Creates a new instance of the ListVpnGatewaysResultPage type.
15408func NewListVpnGatewaysResultPage(getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
15409	return ListVpnGatewaysResultPage{fn: getNextPage}
15410}
15411
15412// ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
15413// nextLink to get the next set of results.
15414type ListVpnSitesResult struct {
15415	autorest.Response `json:"-"`
15416	// Value - List of VpnSites.
15417	Value *[]VpnSite `json:"value,omitempty"`
15418	// NextLink - URL to get the next set of operation list results if there are any.
15419	NextLink *string `json:"nextLink,omitempty"`
15420}
15421
15422// ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
15423type ListVpnSitesResultIterator struct {
15424	i    int
15425	page ListVpnSitesResultPage
15426}
15427
15428// NextWithContext advances to the next value.  If there was an error making
15429// the request the iterator does not advance and the error is returned.
15430func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
15431	if tracing.IsEnabled() {
15432		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
15433		defer func() {
15434			sc := -1
15435			if iter.Response().Response.Response != nil {
15436				sc = iter.Response().Response.Response.StatusCode
15437			}
15438			tracing.EndSpan(ctx, sc, err)
15439		}()
15440	}
15441	iter.i++
15442	if iter.i < len(iter.page.Values()) {
15443		return nil
15444	}
15445	err = iter.page.NextWithContext(ctx)
15446	if err != nil {
15447		iter.i--
15448		return err
15449	}
15450	iter.i = 0
15451	return nil
15452}
15453
15454// Next advances to the next value.  If there was an error making
15455// the request the iterator does not advance and the error is returned.
15456// Deprecated: Use NextWithContext() instead.
15457func (iter *ListVpnSitesResultIterator) Next() error {
15458	return iter.NextWithContext(context.Background())
15459}
15460
15461// NotDone returns true if the enumeration should be started or is not yet complete.
15462func (iter ListVpnSitesResultIterator) NotDone() bool {
15463	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15464}
15465
15466// Response returns the raw server response from the last page request.
15467func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
15468	return iter.page.Response()
15469}
15470
15471// Value returns the current value or a zero-initialized value if the
15472// iterator has advanced beyond the end of the collection.
15473func (iter ListVpnSitesResultIterator) Value() VpnSite {
15474	if !iter.page.NotDone() {
15475		return VpnSite{}
15476	}
15477	return iter.page.Values()[iter.i]
15478}
15479
15480// Creates a new instance of the ListVpnSitesResultIterator type.
15481func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
15482	return ListVpnSitesResultIterator{page: page}
15483}
15484
15485// IsEmpty returns true if the ListResult contains no values.
15486func (lvsr ListVpnSitesResult) IsEmpty() bool {
15487	return lvsr.Value == nil || len(*lvsr.Value) == 0
15488}
15489
15490// listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
15491// It returns nil if no more results exist.
15492func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
15493	if lvsr.NextLink == nil || len(to.String(lvsr.NextLink)) < 1 {
15494		return nil, nil
15495	}
15496	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15497		autorest.AsJSON(),
15498		autorest.AsGet(),
15499		autorest.WithBaseURL(to.String(lvsr.NextLink)))
15500}
15501
15502// ListVpnSitesResultPage contains a page of VpnSite values.
15503type ListVpnSitesResultPage struct {
15504	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
15505	lvsr ListVpnSitesResult
15506}
15507
15508// NextWithContext advances to the next page of values.  If there was an error making
15509// the request the page does not advance and the error is returned.
15510func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
15511	if tracing.IsEnabled() {
15512		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
15513		defer func() {
15514			sc := -1
15515			if page.Response().Response.Response != nil {
15516				sc = page.Response().Response.Response.StatusCode
15517			}
15518			tracing.EndSpan(ctx, sc, err)
15519		}()
15520	}
15521	next, err := page.fn(ctx, page.lvsr)
15522	if err != nil {
15523		return err
15524	}
15525	page.lvsr = next
15526	return nil
15527}
15528
15529// Next advances to the next page of values.  If there was an error making
15530// the request the page does not advance and the error is returned.
15531// Deprecated: Use NextWithContext() instead.
15532func (page *ListVpnSitesResultPage) Next() error {
15533	return page.NextWithContext(context.Background())
15534}
15535
15536// NotDone returns true if the page enumeration should be started or is not yet complete.
15537func (page ListVpnSitesResultPage) NotDone() bool {
15538	return !page.lvsr.IsEmpty()
15539}
15540
15541// Response returns the raw server response from the last page request.
15542func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
15543	return page.lvsr
15544}
15545
15546// Values returns the slice of values for the current page or nil if there are no values.
15547func (page ListVpnSitesResultPage) Values() []VpnSite {
15548	if page.lvsr.IsEmpty() {
15549		return nil
15550	}
15551	return *page.lvsr.Value
15552}
15553
15554// Creates a new instance of the ListVpnSitesResultPage type.
15555func NewListVpnSitesResultPage(getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
15556	return ListVpnSitesResultPage{fn: getNextPage}
15557}
15558
15559// LoadBalancer loadBalancer resource
15560type LoadBalancer struct {
15561	autorest.Response `json:"-"`
15562	// Sku - The load balancer SKU.
15563	Sku *LoadBalancerSku `json:"sku,omitempty"`
15564	// LoadBalancerPropertiesFormat - Properties of load balancer.
15565	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
15566	// Etag - A unique read-only string that changes whenever the resource is updated.
15567	Etag *string `json:"etag,omitempty"`
15568	// ID - Resource ID.
15569	ID *string `json:"id,omitempty"`
15570	// Name - READ-ONLY; Resource name.
15571	Name *string `json:"name,omitempty"`
15572	// Type - READ-ONLY; Resource type.
15573	Type *string `json:"type,omitempty"`
15574	// Location - Resource location.
15575	Location *string `json:"location,omitempty"`
15576	// Tags - Resource tags.
15577	Tags map[string]*string `json:"tags"`
15578}
15579
15580// MarshalJSON is the custom marshaler for LoadBalancer.
15581func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
15582	objectMap := make(map[string]interface{})
15583	if lb.Sku != nil {
15584		objectMap["sku"] = lb.Sku
15585	}
15586	if lb.LoadBalancerPropertiesFormat != nil {
15587		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
15588	}
15589	if lb.Etag != nil {
15590		objectMap["etag"] = lb.Etag
15591	}
15592	if lb.ID != nil {
15593		objectMap["id"] = lb.ID
15594	}
15595	if lb.Location != nil {
15596		objectMap["location"] = lb.Location
15597	}
15598	if lb.Tags != nil {
15599		objectMap["tags"] = lb.Tags
15600	}
15601	return json.Marshal(objectMap)
15602}
15603
15604// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
15605func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
15606	var m map[string]*json.RawMessage
15607	err := json.Unmarshal(body, &m)
15608	if err != nil {
15609		return err
15610	}
15611	for k, v := range m {
15612		switch k {
15613		case "sku":
15614			if v != nil {
15615				var sku LoadBalancerSku
15616				err = json.Unmarshal(*v, &sku)
15617				if err != nil {
15618					return err
15619				}
15620				lb.Sku = &sku
15621			}
15622		case "properties":
15623			if v != nil {
15624				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
15625				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
15626				if err != nil {
15627					return err
15628				}
15629				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
15630			}
15631		case "etag":
15632			if v != nil {
15633				var etag string
15634				err = json.Unmarshal(*v, &etag)
15635				if err != nil {
15636					return err
15637				}
15638				lb.Etag = &etag
15639			}
15640		case "id":
15641			if v != nil {
15642				var ID string
15643				err = json.Unmarshal(*v, &ID)
15644				if err != nil {
15645					return err
15646				}
15647				lb.ID = &ID
15648			}
15649		case "name":
15650			if v != nil {
15651				var name string
15652				err = json.Unmarshal(*v, &name)
15653				if err != nil {
15654					return err
15655				}
15656				lb.Name = &name
15657			}
15658		case "type":
15659			if v != nil {
15660				var typeVar string
15661				err = json.Unmarshal(*v, &typeVar)
15662				if err != nil {
15663					return err
15664				}
15665				lb.Type = &typeVar
15666			}
15667		case "location":
15668			if v != nil {
15669				var location string
15670				err = json.Unmarshal(*v, &location)
15671				if err != nil {
15672					return err
15673				}
15674				lb.Location = &location
15675			}
15676		case "tags":
15677			if v != nil {
15678				var tags map[string]*string
15679				err = json.Unmarshal(*v, &tags)
15680				if err != nil {
15681					return err
15682				}
15683				lb.Tags = tags
15684			}
15685		}
15686	}
15687
15688	return nil
15689}
15690
15691// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
15692type LoadBalancerBackendAddressPoolListResult struct {
15693	autorest.Response `json:"-"`
15694	// Value - A list of backend address pools in a load balancer.
15695	Value *[]BackendAddressPool `json:"value,omitempty"`
15696	// NextLink - READ-ONLY; The URL to get the next set of results.
15697	NextLink *string `json:"nextLink,omitempty"`
15698}
15699
15700// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
15701// BackendAddressPool values.
15702type LoadBalancerBackendAddressPoolListResultIterator struct {
15703	i    int
15704	page LoadBalancerBackendAddressPoolListResultPage
15705}
15706
15707// NextWithContext advances to the next value.  If there was an error making
15708// the request the iterator does not advance and the error is returned.
15709func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
15710	if tracing.IsEnabled() {
15711		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
15712		defer func() {
15713			sc := -1
15714			if iter.Response().Response.Response != nil {
15715				sc = iter.Response().Response.Response.StatusCode
15716			}
15717			tracing.EndSpan(ctx, sc, err)
15718		}()
15719	}
15720	iter.i++
15721	if iter.i < len(iter.page.Values()) {
15722		return nil
15723	}
15724	err = iter.page.NextWithContext(ctx)
15725	if err != nil {
15726		iter.i--
15727		return err
15728	}
15729	iter.i = 0
15730	return nil
15731}
15732
15733// Next advances to the next value.  If there was an error making
15734// the request the iterator does not advance and the error is returned.
15735// Deprecated: Use NextWithContext() instead.
15736func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
15737	return iter.NextWithContext(context.Background())
15738}
15739
15740// NotDone returns true if the enumeration should be started or is not yet complete.
15741func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
15742	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15743}
15744
15745// Response returns the raw server response from the last page request.
15746func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
15747	return iter.page.Response()
15748}
15749
15750// Value returns the current value or a zero-initialized value if the
15751// iterator has advanced beyond the end of the collection.
15752func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
15753	if !iter.page.NotDone() {
15754		return BackendAddressPool{}
15755	}
15756	return iter.page.Values()[iter.i]
15757}
15758
15759// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
15760func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
15761	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
15762}
15763
15764// IsEmpty returns true if the ListResult contains no values.
15765func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
15766	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
15767}
15768
15769// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
15770// It returns nil if no more results exist.
15771func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
15772	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
15773		return nil, nil
15774	}
15775	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15776		autorest.AsJSON(),
15777		autorest.AsGet(),
15778		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
15779}
15780
15781// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
15782type LoadBalancerBackendAddressPoolListResultPage struct {
15783	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
15784	lbbaplr LoadBalancerBackendAddressPoolListResult
15785}
15786
15787// NextWithContext advances to the next page of values.  If there was an error making
15788// the request the page does not advance and the error is returned.
15789func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
15790	if tracing.IsEnabled() {
15791		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
15792		defer func() {
15793			sc := -1
15794			if page.Response().Response.Response != nil {
15795				sc = page.Response().Response.Response.StatusCode
15796			}
15797			tracing.EndSpan(ctx, sc, err)
15798		}()
15799	}
15800	next, err := page.fn(ctx, page.lbbaplr)
15801	if err != nil {
15802		return err
15803	}
15804	page.lbbaplr = next
15805	return nil
15806}
15807
15808// Next advances to the next page of values.  If there was an error making
15809// the request the page does not advance and the error is returned.
15810// Deprecated: Use NextWithContext() instead.
15811func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
15812	return page.NextWithContext(context.Background())
15813}
15814
15815// NotDone returns true if the page enumeration should be started or is not yet complete.
15816func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
15817	return !page.lbbaplr.IsEmpty()
15818}
15819
15820// Response returns the raw server response from the last page request.
15821func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
15822	return page.lbbaplr
15823}
15824
15825// Values returns the slice of values for the current page or nil if there are no values.
15826func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
15827	if page.lbbaplr.IsEmpty() {
15828		return nil
15829	}
15830	return *page.lbbaplr.Value
15831}
15832
15833// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
15834func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
15835	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
15836}
15837
15838// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
15839type LoadBalancerFrontendIPConfigurationListResult struct {
15840	autorest.Response `json:"-"`
15841	// Value - A list of frontend IP configurations in a load balancer.
15842	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
15843	// NextLink - READ-ONLY; The URL to get the next set of results.
15844	NextLink *string `json:"nextLink,omitempty"`
15845}
15846
15847// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
15848// FrontendIPConfiguration values.
15849type LoadBalancerFrontendIPConfigurationListResultIterator struct {
15850	i    int
15851	page LoadBalancerFrontendIPConfigurationListResultPage
15852}
15853
15854// NextWithContext advances to the next value.  If there was an error making
15855// the request the iterator does not advance and the error is returned.
15856func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
15857	if tracing.IsEnabled() {
15858		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
15859		defer func() {
15860			sc := -1
15861			if iter.Response().Response.Response != nil {
15862				sc = iter.Response().Response.Response.StatusCode
15863			}
15864			tracing.EndSpan(ctx, sc, err)
15865		}()
15866	}
15867	iter.i++
15868	if iter.i < len(iter.page.Values()) {
15869		return nil
15870	}
15871	err = iter.page.NextWithContext(ctx)
15872	if err != nil {
15873		iter.i--
15874		return err
15875	}
15876	iter.i = 0
15877	return nil
15878}
15879
15880// Next advances to the next value.  If there was an error making
15881// the request the iterator does not advance and the error is returned.
15882// Deprecated: Use NextWithContext() instead.
15883func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
15884	return iter.NextWithContext(context.Background())
15885}
15886
15887// NotDone returns true if the enumeration should be started or is not yet complete.
15888func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
15889	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15890}
15891
15892// Response returns the raw server response from the last page request.
15893func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
15894	return iter.page.Response()
15895}
15896
15897// Value returns the current value or a zero-initialized value if the
15898// iterator has advanced beyond the end of the collection.
15899func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
15900	if !iter.page.NotDone() {
15901		return FrontendIPConfiguration{}
15902	}
15903	return iter.page.Values()[iter.i]
15904}
15905
15906// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
15907func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
15908	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
15909}
15910
15911// IsEmpty returns true if the ListResult contains no values.
15912func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
15913	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
15914}
15915
15916// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
15917// It returns nil if no more results exist.
15918func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
15919	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
15920		return nil, nil
15921	}
15922	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15923		autorest.AsJSON(),
15924		autorest.AsGet(),
15925		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
15926}
15927
15928// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
15929type LoadBalancerFrontendIPConfigurationListResultPage struct {
15930	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
15931	lbficlr LoadBalancerFrontendIPConfigurationListResult
15932}
15933
15934// NextWithContext advances to the next page of values.  If there was an error making
15935// the request the page does not advance and the error is returned.
15936func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
15937	if tracing.IsEnabled() {
15938		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
15939		defer func() {
15940			sc := -1
15941			if page.Response().Response.Response != nil {
15942				sc = page.Response().Response.Response.StatusCode
15943			}
15944			tracing.EndSpan(ctx, sc, err)
15945		}()
15946	}
15947	next, err := page.fn(ctx, page.lbficlr)
15948	if err != nil {
15949		return err
15950	}
15951	page.lbficlr = next
15952	return nil
15953}
15954
15955// Next advances to the next page of values.  If there was an error making
15956// the request the page does not advance and the error is returned.
15957// Deprecated: Use NextWithContext() instead.
15958func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
15959	return page.NextWithContext(context.Background())
15960}
15961
15962// NotDone returns true if the page enumeration should be started or is not yet complete.
15963func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
15964	return !page.lbficlr.IsEmpty()
15965}
15966
15967// Response returns the raw server response from the last page request.
15968func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
15969	return page.lbficlr
15970}
15971
15972// Values returns the slice of values for the current page or nil if there are no values.
15973func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
15974	if page.lbficlr.IsEmpty() {
15975		return nil
15976	}
15977	return *page.lbficlr.Value
15978}
15979
15980// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
15981func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
15982	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
15983}
15984
15985// LoadBalancerListResult response for ListLoadBalancers API service call.
15986type LoadBalancerListResult struct {
15987	autorest.Response `json:"-"`
15988	// Value - A list of load balancers in a resource group.
15989	Value *[]LoadBalancer `json:"value,omitempty"`
15990	// NextLink - READ-ONLY; The URL to get the next set of results.
15991	NextLink *string `json:"nextLink,omitempty"`
15992}
15993
15994// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
15995type LoadBalancerListResultIterator struct {
15996	i    int
15997	page LoadBalancerListResultPage
15998}
15999
16000// NextWithContext advances to the next value.  If there was an error making
16001// the request the iterator does not advance and the error is returned.
16002func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
16003	if tracing.IsEnabled() {
16004		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
16005		defer func() {
16006			sc := -1
16007			if iter.Response().Response.Response != nil {
16008				sc = iter.Response().Response.Response.StatusCode
16009			}
16010			tracing.EndSpan(ctx, sc, err)
16011		}()
16012	}
16013	iter.i++
16014	if iter.i < len(iter.page.Values()) {
16015		return nil
16016	}
16017	err = iter.page.NextWithContext(ctx)
16018	if err != nil {
16019		iter.i--
16020		return err
16021	}
16022	iter.i = 0
16023	return nil
16024}
16025
16026// Next advances to the next value.  If there was an error making
16027// the request the iterator does not advance and the error is returned.
16028// Deprecated: Use NextWithContext() instead.
16029func (iter *LoadBalancerListResultIterator) Next() error {
16030	return iter.NextWithContext(context.Background())
16031}
16032
16033// NotDone returns true if the enumeration should be started or is not yet complete.
16034func (iter LoadBalancerListResultIterator) NotDone() bool {
16035	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16036}
16037
16038// Response returns the raw server response from the last page request.
16039func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
16040	return iter.page.Response()
16041}
16042
16043// Value returns the current value or a zero-initialized value if the
16044// iterator has advanced beyond the end of the collection.
16045func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
16046	if !iter.page.NotDone() {
16047		return LoadBalancer{}
16048	}
16049	return iter.page.Values()[iter.i]
16050}
16051
16052// Creates a new instance of the LoadBalancerListResultIterator type.
16053func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
16054	return LoadBalancerListResultIterator{page: page}
16055}
16056
16057// IsEmpty returns true if the ListResult contains no values.
16058func (lblr LoadBalancerListResult) IsEmpty() bool {
16059	return lblr.Value == nil || len(*lblr.Value) == 0
16060}
16061
16062// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
16063// It returns nil if no more results exist.
16064func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
16065	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
16066		return nil, nil
16067	}
16068	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16069		autorest.AsJSON(),
16070		autorest.AsGet(),
16071		autorest.WithBaseURL(to.String(lblr.NextLink)))
16072}
16073
16074// LoadBalancerListResultPage contains a page of LoadBalancer values.
16075type LoadBalancerListResultPage struct {
16076	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
16077	lblr LoadBalancerListResult
16078}
16079
16080// NextWithContext advances to the next page of values.  If there was an error making
16081// the request the page does not advance and the error is returned.
16082func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
16083	if tracing.IsEnabled() {
16084		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
16085		defer func() {
16086			sc := -1
16087			if page.Response().Response.Response != nil {
16088				sc = page.Response().Response.Response.StatusCode
16089			}
16090			tracing.EndSpan(ctx, sc, err)
16091		}()
16092	}
16093	next, err := page.fn(ctx, page.lblr)
16094	if err != nil {
16095		return err
16096	}
16097	page.lblr = next
16098	return nil
16099}
16100
16101// Next advances to the next page of values.  If there was an error making
16102// the request the page does not advance and the error is returned.
16103// Deprecated: Use NextWithContext() instead.
16104func (page *LoadBalancerListResultPage) Next() error {
16105	return page.NextWithContext(context.Background())
16106}
16107
16108// NotDone returns true if the page enumeration should be started or is not yet complete.
16109func (page LoadBalancerListResultPage) NotDone() bool {
16110	return !page.lblr.IsEmpty()
16111}
16112
16113// Response returns the raw server response from the last page request.
16114func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
16115	return page.lblr
16116}
16117
16118// Values returns the slice of values for the current page or nil if there are no values.
16119func (page LoadBalancerListResultPage) Values() []LoadBalancer {
16120	if page.lblr.IsEmpty() {
16121		return nil
16122	}
16123	return *page.lblr.Value
16124}
16125
16126// Creates a new instance of the LoadBalancerListResultPage type.
16127func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
16128	return LoadBalancerListResultPage{fn: getNextPage}
16129}
16130
16131// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
16132type LoadBalancerLoadBalancingRuleListResult struct {
16133	autorest.Response `json:"-"`
16134	// Value - A list of load balancing rules in a load balancer.
16135	Value *[]LoadBalancingRule `json:"value,omitempty"`
16136	// NextLink - READ-ONLY; The URL to get the next set of results.
16137	NextLink *string `json:"nextLink,omitempty"`
16138}
16139
16140// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
16141// LoadBalancingRule values.
16142type LoadBalancerLoadBalancingRuleListResultIterator struct {
16143	i    int
16144	page LoadBalancerLoadBalancingRuleListResultPage
16145}
16146
16147// NextWithContext advances to the next value.  If there was an error making
16148// the request the iterator does not advance and the error is returned.
16149func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
16150	if tracing.IsEnabled() {
16151		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
16152		defer func() {
16153			sc := -1
16154			if iter.Response().Response.Response != nil {
16155				sc = iter.Response().Response.Response.StatusCode
16156			}
16157			tracing.EndSpan(ctx, sc, err)
16158		}()
16159	}
16160	iter.i++
16161	if iter.i < len(iter.page.Values()) {
16162		return nil
16163	}
16164	err = iter.page.NextWithContext(ctx)
16165	if err != nil {
16166		iter.i--
16167		return err
16168	}
16169	iter.i = 0
16170	return nil
16171}
16172
16173// Next advances to the next value.  If there was an error making
16174// the request the iterator does not advance and the error is returned.
16175// Deprecated: Use NextWithContext() instead.
16176func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
16177	return iter.NextWithContext(context.Background())
16178}
16179
16180// NotDone returns true if the enumeration should be started or is not yet complete.
16181func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
16182	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16183}
16184
16185// Response returns the raw server response from the last page request.
16186func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
16187	return iter.page.Response()
16188}
16189
16190// Value returns the current value or a zero-initialized value if the
16191// iterator has advanced beyond the end of the collection.
16192func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
16193	if !iter.page.NotDone() {
16194		return LoadBalancingRule{}
16195	}
16196	return iter.page.Values()[iter.i]
16197}
16198
16199// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
16200func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
16201	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
16202}
16203
16204// IsEmpty returns true if the ListResult contains no values.
16205func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
16206	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
16207}
16208
16209// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
16210// It returns nil if no more results exist.
16211func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
16212	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
16213		return nil, nil
16214	}
16215	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16216		autorest.AsJSON(),
16217		autorest.AsGet(),
16218		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
16219}
16220
16221// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
16222type LoadBalancerLoadBalancingRuleListResultPage struct {
16223	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
16224	lblbrlr LoadBalancerLoadBalancingRuleListResult
16225}
16226
16227// NextWithContext advances to the next page of values.  If there was an error making
16228// the request the page does not advance and the error is returned.
16229func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
16230	if tracing.IsEnabled() {
16231		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
16232		defer func() {
16233			sc := -1
16234			if page.Response().Response.Response != nil {
16235				sc = page.Response().Response.Response.StatusCode
16236			}
16237			tracing.EndSpan(ctx, sc, err)
16238		}()
16239	}
16240	next, err := page.fn(ctx, page.lblbrlr)
16241	if err != nil {
16242		return err
16243	}
16244	page.lblbrlr = next
16245	return nil
16246}
16247
16248// Next advances to the next page of values.  If there was an error making
16249// the request the page does not advance and the error is returned.
16250// Deprecated: Use NextWithContext() instead.
16251func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
16252	return page.NextWithContext(context.Background())
16253}
16254
16255// NotDone returns true if the page enumeration should be started or is not yet complete.
16256func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
16257	return !page.lblbrlr.IsEmpty()
16258}
16259
16260// Response returns the raw server response from the last page request.
16261func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
16262	return page.lblbrlr
16263}
16264
16265// Values returns the slice of values for the current page or nil if there are no values.
16266func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
16267	if page.lblbrlr.IsEmpty() {
16268		return nil
16269	}
16270	return *page.lblbrlr.Value
16271}
16272
16273// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
16274func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
16275	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
16276}
16277
16278// LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
16279type LoadBalancerOutboundRuleListResult struct {
16280	autorest.Response `json:"-"`
16281	// Value - A list of outbound rules in a load balancer.
16282	Value *[]OutboundRule `json:"value,omitempty"`
16283	// NextLink - READ-ONLY; The URL to get the next set of results.
16284	NextLink *string `json:"nextLink,omitempty"`
16285}
16286
16287// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
16288type LoadBalancerOutboundRuleListResultIterator struct {
16289	i    int
16290	page LoadBalancerOutboundRuleListResultPage
16291}
16292
16293// NextWithContext advances to the next value.  If there was an error making
16294// the request the iterator does not advance and the error is returned.
16295func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
16296	if tracing.IsEnabled() {
16297		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
16298		defer func() {
16299			sc := -1
16300			if iter.Response().Response.Response != nil {
16301				sc = iter.Response().Response.Response.StatusCode
16302			}
16303			tracing.EndSpan(ctx, sc, err)
16304		}()
16305	}
16306	iter.i++
16307	if iter.i < len(iter.page.Values()) {
16308		return nil
16309	}
16310	err = iter.page.NextWithContext(ctx)
16311	if err != nil {
16312		iter.i--
16313		return err
16314	}
16315	iter.i = 0
16316	return nil
16317}
16318
16319// Next advances to the next value.  If there was an error making
16320// the request the iterator does not advance and the error is returned.
16321// Deprecated: Use NextWithContext() instead.
16322func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
16323	return iter.NextWithContext(context.Background())
16324}
16325
16326// NotDone returns true if the enumeration should be started or is not yet complete.
16327func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
16328	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16329}
16330
16331// Response returns the raw server response from the last page request.
16332func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
16333	return iter.page.Response()
16334}
16335
16336// Value returns the current value or a zero-initialized value if the
16337// iterator has advanced beyond the end of the collection.
16338func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
16339	if !iter.page.NotDone() {
16340		return OutboundRule{}
16341	}
16342	return iter.page.Values()[iter.i]
16343}
16344
16345// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
16346func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
16347	return LoadBalancerOutboundRuleListResultIterator{page: page}
16348}
16349
16350// IsEmpty returns true if the ListResult contains no values.
16351func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
16352	return lborlr.Value == nil || len(*lborlr.Value) == 0
16353}
16354
16355// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
16356// It returns nil if no more results exist.
16357func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
16358	if lborlr.NextLink == nil || len(to.String(lborlr.NextLink)) < 1 {
16359		return nil, nil
16360	}
16361	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16362		autorest.AsJSON(),
16363		autorest.AsGet(),
16364		autorest.WithBaseURL(to.String(lborlr.NextLink)))
16365}
16366
16367// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
16368type LoadBalancerOutboundRuleListResultPage struct {
16369	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
16370	lborlr LoadBalancerOutboundRuleListResult
16371}
16372
16373// NextWithContext advances to the next page of values.  If there was an error making
16374// the request the page does not advance and the error is returned.
16375func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
16376	if tracing.IsEnabled() {
16377		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
16378		defer func() {
16379			sc := -1
16380			if page.Response().Response.Response != nil {
16381				sc = page.Response().Response.Response.StatusCode
16382			}
16383			tracing.EndSpan(ctx, sc, err)
16384		}()
16385	}
16386	next, err := page.fn(ctx, page.lborlr)
16387	if err != nil {
16388		return err
16389	}
16390	page.lborlr = next
16391	return nil
16392}
16393
16394// Next advances to the next page of values.  If there was an error making
16395// the request the page does not advance and the error is returned.
16396// Deprecated: Use NextWithContext() instead.
16397func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
16398	return page.NextWithContext(context.Background())
16399}
16400
16401// NotDone returns true if the page enumeration should be started or is not yet complete.
16402func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
16403	return !page.lborlr.IsEmpty()
16404}
16405
16406// Response returns the raw server response from the last page request.
16407func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
16408	return page.lborlr
16409}
16410
16411// Values returns the slice of values for the current page or nil if there are no values.
16412func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
16413	if page.lborlr.IsEmpty() {
16414		return nil
16415	}
16416	return *page.lborlr.Value
16417}
16418
16419// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
16420func NewLoadBalancerOutboundRuleListResultPage(getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
16421	return LoadBalancerOutboundRuleListResultPage{fn: getNextPage}
16422}
16423
16424// LoadBalancerProbeListResult response for ListProbe API service call.
16425type LoadBalancerProbeListResult struct {
16426	autorest.Response `json:"-"`
16427	// Value - A list of probes in a load balancer.
16428	Value *[]Probe `json:"value,omitempty"`
16429	// NextLink - READ-ONLY; The URL to get the next set of results.
16430	NextLink *string `json:"nextLink,omitempty"`
16431}
16432
16433// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
16434type LoadBalancerProbeListResultIterator struct {
16435	i    int
16436	page LoadBalancerProbeListResultPage
16437}
16438
16439// NextWithContext advances to the next value.  If there was an error making
16440// the request the iterator does not advance and the error is returned.
16441func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
16442	if tracing.IsEnabled() {
16443		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
16444		defer func() {
16445			sc := -1
16446			if iter.Response().Response.Response != nil {
16447				sc = iter.Response().Response.Response.StatusCode
16448			}
16449			tracing.EndSpan(ctx, sc, err)
16450		}()
16451	}
16452	iter.i++
16453	if iter.i < len(iter.page.Values()) {
16454		return nil
16455	}
16456	err = iter.page.NextWithContext(ctx)
16457	if err != nil {
16458		iter.i--
16459		return err
16460	}
16461	iter.i = 0
16462	return nil
16463}
16464
16465// Next advances to the next value.  If there was an error making
16466// the request the iterator does not advance and the error is returned.
16467// Deprecated: Use NextWithContext() instead.
16468func (iter *LoadBalancerProbeListResultIterator) Next() error {
16469	return iter.NextWithContext(context.Background())
16470}
16471
16472// NotDone returns true if the enumeration should be started or is not yet complete.
16473func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
16474	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16475}
16476
16477// Response returns the raw server response from the last page request.
16478func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
16479	return iter.page.Response()
16480}
16481
16482// Value returns the current value or a zero-initialized value if the
16483// iterator has advanced beyond the end of the collection.
16484func (iter LoadBalancerProbeListResultIterator) Value() Probe {
16485	if !iter.page.NotDone() {
16486		return Probe{}
16487	}
16488	return iter.page.Values()[iter.i]
16489}
16490
16491// Creates a new instance of the LoadBalancerProbeListResultIterator type.
16492func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
16493	return LoadBalancerProbeListResultIterator{page: page}
16494}
16495
16496// IsEmpty returns true if the ListResult contains no values.
16497func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
16498	return lbplr.Value == nil || len(*lbplr.Value) == 0
16499}
16500
16501// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
16502// It returns nil if no more results exist.
16503func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
16504	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
16505		return nil, nil
16506	}
16507	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16508		autorest.AsJSON(),
16509		autorest.AsGet(),
16510		autorest.WithBaseURL(to.String(lbplr.NextLink)))
16511}
16512
16513// LoadBalancerProbeListResultPage contains a page of Probe values.
16514type LoadBalancerProbeListResultPage struct {
16515	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
16516	lbplr LoadBalancerProbeListResult
16517}
16518
16519// NextWithContext advances to the next page of values.  If there was an error making
16520// the request the page does not advance and the error is returned.
16521func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
16522	if tracing.IsEnabled() {
16523		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
16524		defer func() {
16525			sc := -1
16526			if page.Response().Response.Response != nil {
16527				sc = page.Response().Response.Response.StatusCode
16528			}
16529			tracing.EndSpan(ctx, sc, err)
16530		}()
16531	}
16532	next, err := page.fn(ctx, page.lbplr)
16533	if err != nil {
16534		return err
16535	}
16536	page.lbplr = next
16537	return nil
16538}
16539
16540// Next advances to the next page of values.  If there was an error making
16541// the request the page does not advance and the error is returned.
16542// Deprecated: Use NextWithContext() instead.
16543func (page *LoadBalancerProbeListResultPage) Next() error {
16544	return page.NextWithContext(context.Background())
16545}
16546
16547// NotDone returns true if the page enumeration should be started or is not yet complete.
16548func (page LoadBalancerProbeListResultPage) NotDone() bool {
16549	return !page.lbplr.IsEmpty()
16550}
16551
16552// Response returns the raw server response from the last page request.
16553func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
16554	return page.lbplr
16555}
16556
16557// Values returns the slice of values for the current page or nil if there are no values.
16558func (page LoadBalancerProbeListResultPage) Values() []Probe {
16559	if page.lbplr.IsEmpty() {
16560		return nil
16561	}
16562	return *page.lbplr.Value
16563}
16564
16565// Creates a new instance of the LoadBalancerProbeListResultPage type.
16566func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
16567	return LoadBalancerProbeListResultPage{fn: getNextPage}
16568}
16569
16570// LoadBalancerPropertiesFormat properties of the load balancer.
16571type LoadBalancerPropertiesFormat struct {
16572	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer
16573	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
16574	// BackendAddressPools - Collection of backend address pools used by a load balancer
16575	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
16576	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning
16577	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
16578	// Probes - Collection of probe objects used in the load balancer
16579	Probes *[]Probe `json:"probes,omitempty"`
16580	// 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.
16581	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
16582	// 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.
16583	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
16584	// OutboundRules - The outbound rules.
16585	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
16586	// ResourceGUID - The resource GUID property of the load balancer resource.
16587	ResourceGUID *string `json:"resourceGuid,omitempty"`
16588	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
16589	ProvisioningState *string `json:"provisioningState,omitempty"`
16590}
16591
16592// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
16593// long-running operation.
16594type LoadBalancersCreateOrUpdateFuture struct {
16595	azure.Future
16596}
16597
16598// Result returns the result of the asynchronous operation.
16599// If the operation has not completed it will return an error.
16600func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
16601	var done bool
16602	done, err = future.DoneWithContext(context.Background(), client)
16603	if err != nil {
16604		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16605		return
16606	}
16607	if !done {
16608		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
16609		return
16610	}
16611	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16612	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
16613		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
16614		if err != nil {
16615			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
16616		}
16617	}
16618	return
16619}
16620
16621// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
16622// operation.
16623type LoadBalancersDeleteFuture struct {
16624	azure.Future
16625}
16626
16627// Result returns the result of the asynchronous operation.
16628// If the operation has not completed it will return an error.
16629func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
16630	var done bool
16631	done, err = future.DoneWithContext(context.Background(), client)
16632	if err != nil {
16633		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
16634		return
16635	}
16636	if !done {
16637		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
16638		return
16639	}
16640	ar.Response = future.Response()
16641	return
16642}
16643
16644// LoadBalancerSku SKU of a load balancer
16645type LoadBalancerSku struct {
16646	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
16647	Name LoadBalancerSkuName `json:"name,omitempty"`
16648}
16649
16650// LoadBalancersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
16651// operation.
16652type LoadBalancersUpdateTagsFuture struct {
16653	azure.Future
16654}
16655
16656// Result returns the result of the asynchronous operation.
16657// If the operation has not completed it will return an error.
16658func (future *LoadBalancersUpdateTagsFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
16659	var done bool
16660	done, err = future.DoneWithContext(context.Background(), client)
16661	if err != nil {
16662		err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
16663		return
16664	}
16665	if !done {
16666		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersUpdateTagsFuture")
16667		return
16668	}
16669	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16670	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
16671		lb, err = client.UpdateTagsResponder(lb.Response.Response)
16672		if err != nil {
16673			err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", lb.Response.Response, "Failure responding to request")
16674		}
16675	}
16676	return
16677}
16678
16679// LoadBalancingRule a load balancing rule for a load balancer.
16680type LoadBalancingRule struct {
16681	autorest.Response `json:"-"`
16682	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
16683	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
16684	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16685	Name *string `json:"name,omitempty"`
16686	// Etag - A unique read-only string that changes whenever the resource is updated.
16687	Etag *string `json:"etag,omitempty"`
16688	// ID - Resource ID.
16689	ID *string `json:"id,omitempty"`
16690}
16691
16692// MarshalJSON is the custom marshaler for LoadBalancingRule.
16693func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
16694	objectMap := make(map[string]interface{})
16695	if lbr.LoadBalancingRulePropertiesFormat != nil {
16696		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
16697	}
16698	if lbr.Name != nil {
16699		objectMap["name"] = lbr.Name
16700	}
16701	if lbr.Etag != nil {
16702		objectMap["etag"] = lbr.Etag
16703	}
16704	if lbr.ID != nil {
16705		objectMap["id"] = lbr.ID
16706	}
16707	return json.Marshal(objectMap)
16708}
16709
16710// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
16711func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
16712	var m map[string]*json.RawMessage
16713	err := json.Unmarshal(body, &m)
16714	if err != nil {
16715		return err
16716	}
16717	for k, v := range m {
16718		switch k {
16719		case "properties":
16720			if v != nil {
16721				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
16722				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
16723				if err != nil {
16724					return err
16725				}
16726				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
16727			}
16728		case "name":
16729			if v != nil {
16730				var name string
16731				err = json.Unmarshal(*v, &name)
16732				if err != nil {
16733					return err
16734				}
16735				lbr.Name = &name
16736			}
16737		case "etag":
16738			if v != nil {
16739				var etag string
16740				err = json.Unmarshal(*v, &etag)
16741				if err != nil {
16742					return err
16743				}
16744				lbr.Etag = &etag
16745			}
16746		case "id":
16747			if v != nil {
16748				var ID string
16749				err = json.Unmarshal(*v, &ID)
16750				if err != nil {
16751					return err
16752				}
16753				lbr.ID = &ID
16754			}
16755		}
16756	}
16757
16758	return nil
16759}
16760
16761// LoadBalancingRulePropertiesFormat properties of the load balancer.
16762type LoadBalancingRulePropertiesFormat struct {
16763	// FrontendIPConfiguration - A reference to frontend IP addresses.
16764	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
16765	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
16766	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
16767	// Probe - The reference of the load balancer probe used by the load balancing rule.
16768	Probe *SubResource `json:"probe,omitempty"`
16769	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
16770	Protocol TransportProtocol `json:"protocol,omitempty"`
16771	// LoadDistribution - The load distribution policy for this rule. Possible values are 'Default', 'SourceIP', and 'SourceIPProtocol'. Possible values include: 'Default', 'SourceIP', 'SourceIPProtocol'
16772	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
16773	// 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"
16774	FrontendPort *int32 `json:"frontendPort,omitempty"`
16775	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port"
16776	BackendPort *int32 `json:"backendPort,omitempty"`
16777	// 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.
16778	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
16779	// 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.
16780	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
16781	// 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.
16782	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
16783	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
16784	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
16785	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
16786	ProvisioningState *string `json:"provisioningState,omitempty"`
16787}
16788
16789// LocalNetworkGateway a common class for general resource information
16790type LocalNetworkGateway struct {
16791	autorest.Response `json:"-"`
16792	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
16793	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
16794	// Etag - A unique read-only string that changes whenever the resource is updated.
16795	Etag *string `json:"etag,omitempty"`
16796	// ID - Resource ID.
16797	ID *string `json:"id,omitempty"`
16798	// Name - READ-ONLY; Resource name.
16799	Name *string `json:"name,omitempty"`
16800	// Type - READ-ONLY; Resource type.
16801	Type *string `json:"type,omitempty"`
16802	// Location - Resource location.
16803	Location *string `json:"location,omitempty"`
16804	// Tags - Resource tags.
16805	Tags map[string]*string `json:"tags"`
16806}
16807
16808// MarshalJSON is the custom marshaler for LocalNetworkGateway.
16809func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
16810	objectMap := make(map[string]interface{})
16811	if lng.LocalNetworkGatewayPropertiesFormat != nil {
16812		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
16813	}
16814	if lng.Etag != nil {
16815		objectMap["etag"] = lng.Etag
16816	}
16817	if lng.ID != nil {
16818		objectMap["id"] = lng.ID
16819	}
16820	if lng.Location != nil {
16821		objectMap["location"] = lng.Location
16822	}
16823	if lng.Tags != nil {
16824		objectMap["tags"] = lng.Tags
16825	}
16826	return json.Marshal(objectMap)
16827}
16828
16829// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
16830func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
16831	var m map[string]*json.RawMessage
16832	err := json.Unmarshal(body, &m)
16833	if err != nil {
16834		return err
16835	}
16836	for k, v := range m {
16837		switch k {
16838		case "properties":
16839			if v != nil {
16840				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
16841				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
16842				if err != nil {
16843					return err
16844				}
16845				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
16846			}
16847		case "etag":
16848			if v != nil {
16849				var etag string
16850				err = json.Unmarshal(*v, &etag)
16851				if err != nil {
16852					return err
16853				}
16854				lng.Etag = &etag
16855			}
16856		case "id":
16857			if v != nil {
16858				var ID string
16859				err = json.Unmarshal(*v, &ID)
16860				if err != nil {
16861					return err
16862				}
16863				lng.ID = &ID
16864			}
16865		case "name":
16866			if v != nil {
16867				var name string
16868				err = json.Unmarshal(*v, &name)
16869				if err != nil {
16870					return err
16871				}
16872				lng.Name = &name
16873			}
16874		case "type":
16875			if v != nil {
16876				var typeVar string
16877				err = json.Unmarshal(*v, &typeVar)
16878				if err != nil {
16879					return err
16880				}
16881				lng.Type = &typeVar
16882			}
16883		case "location":
16884			if v != nil {
16885				var location string
16886				err = json.Unmarshal(*v, &location)
16887				if err != nil {
16888					return err
16889				}
16890				lng.Location = &location
16891			}
16892		case "tags":
16893			if v != nil {
16894				var tags map[string]*string
16895				err = json.Unmarshal(*v, &tags)
16896				if err != nil {
16897					return err
16898				}
16899				lng.Tags = tags
16900			}
16901		}
16902	}
16903
16904	return nil
16905}
16906
16907// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
16908type LocalNetworkGatewayListResult struct {
16909	autorest.Response `json:"-"`
16910	// Value - A list of local network gateways that exists in a resource group.
16911	Value *[]LocalNetworkGateway `json:"value,omitempty"`
16912	// NextLink - READ-ONLY; The URL to get the next set of results.
16913	NextLink *string `json:"nextLink,omitempty"`
16914}
16915
16916// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
16917// values.
16918type LocalNetworkGatewayListResultIterator struct {
16919	i    int
16920	page LocalNetworkGatewayListResultPage
16921}
16922
16923// NextWithContext advances to the next value.  If there was an error making
16924// the request the iterator does not advance and the error is returned.
16925func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
16926	if tracing.IsEnabled() {
16927		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
16928		defer func() {
16929			sc := -1
16930			if iter.Response().Response.Response != nil {
16931				sc = iter.Response().Response.Response.StatusCode
16932			}
16933			tracing.EndSpan(ctx, sc, err)
16934		}()
16935	}
16936	iter.i++
16937	if iter.i < len(iter.page.Values()) {
16938		return nil
16939	}
16940	err = iter.page.NextWithContext(ctx)
16941	if err != nil {
16942		iter.i--
16943		return err
16944	}
16945	iter.i = 0
16946	return nil
16947}
16948
16949// Next advances to the next value.  If there was an error making
16950// the request the iterator does not advance and the error is returned.
16951// Deprecated: Use NextWithContext() instead.
16952func (iter *LocalNetworkGatewayListResultIterator) Next() error {
16953	return iter.NextWithContext(context.Background())
16954}
16955
16956// NotDone returns true if the enumeration should be started or is not yet complete.
16957func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
16958	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16959}
16960
16961// Response returns the raw server response from the last page request.
16962func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
16963	return iter.page.Response()
16964}
16965
16966// Value returns the current value or a zero-initialized value if the
16967// iterator has advanced beyond the end of the collection.
16968func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
16969	if !iter.page.NotDone() {
16970		return LocalNetworkGateway{}
16971	}
16972	return iter.page.Values()[iter.i]
16973}
16974
16975// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
16976func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
16977	return LocalNetworkGatewayListResultIterator{page: page}
16978}
16979
16980// IsEmpty returns true if the ListResult contains no values.
16981func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
16982	return lnglr.Value == nil || len(*lnglr.Value) == 0
16983}
16984
16985// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
16986// It returns nil if no more results exist.
16987func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
16988	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
16989		return nil, nil
16990	}
16991	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16992		autorest.AsJSON(),
16993		autorest.AsGet(),
16994		autorest.WithBaseURL(to.String(lnglr.NextLink)))
16995}
16996
16997// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
16998type LocalNetworkGatewayListResultPage struct {
16999	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
17000	lnglr LocalNetworkGatewayListResult
17001}
17002
17003// NextWithContext advances to the next page of values.  If there was an error making
17004// the request the page does not advance and the error is returned.
17005func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
17006	if tracing.IsEnabled() {
17007		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
17008		defer func() {
17009			sc := -1
17010			if page.Response().Response.Response != nil {
17011				sc = page.Response().Response.Response.StatusCode
17012			}
17013			tracing.EndSpan(ctx, sc, err)
17014		}()
17015	}
17016	next, err := page.fn(ctx, page.lnglr)
17017	if err != nil {
17018		return err
17019	}
17020	page.lnglr = next
17021	return nil
17022}
17023
17024// Next advances to the next page of values.  If there was an error making
17025// the request the page does not advance and the error is returned.
17026// Deprecated: Use NextWithContext() instead.
17027func (page *LocalNetworkGatewayListResultPage) Next() error {
17028	return page.NextWithContext(context.Background())
17029}
17030
17031// NotDone returns true if the page enumeration should be started or is not yet complete.
17032func (page LocalNetworkGatewayListResultPage) NotDone() bool {
17033	return !page.lnglr.IsEmpty()
17034}
17035
17036// Response returns the raw server response from the last page request.
17037func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
17038	return page.lnglr
17039}
17040
17041// Values returns the slice of values for the current page or nil if there are no values.
17042func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
17043	if page.lnglr.IsEmpty() {
17044		return nil
17045	}
17046	return *page.lnglr.Value
17047}
17048
17049// Creates a new instance of the LocalNetworkGatewayListResultPage type.
17050func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
17051	return LocalNetworkGatewayListResultPage{fn: getNextPage}
17052}
17053
17054// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties
17055type LocalNetworkGatewayPropertiesFormat struct {
17056	// LocalNetworkAddressSpace - Local network site address space.
17057	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
17058	// GatewayIPAddress - IP address of local network gateway.
17059	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
17060	// BgpSettings - Local network gateway's BGP speaker settings.
17061	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
17062	// ResourceGUID - The resource GUID property of the LocalNetworkGateway resource.
17063	ResourceGUID *string `json:"resourceGuid,omitempty"`
17064	// ProvisioningState - READ-ONLY; The provisioning state of the LocalNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17065	ProvisioningState *string `json:"provisioningState,omitempty"`
17066}
17067
17068// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17069// long-running operation.
17070type LocalNetworkGatewaysCreateOrUpdateFuture struct {
17071	azure.Future
17072}
17073
17074// Result returns the result of the asynchronous operation.
17075// If the operation has not completed it will return an error.
17076func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
17077	var done bool
17078	done, err = future.DoneWithContext(context.Background(), client)
17079	if err != nil {
17080		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17081		return
17082	}
17083	if !done {
17084		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
17085		return
17086	}
17087	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17088	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
17089		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
17090		if err != nil {
17091			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
17092		}
17093	}
17094	return
17095}
17096
17097// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
17098// long-running operation.
17099type LocalNetworkGatewaysDeleteFuture struct {
17100	azure.Future
17101}
17102
17103// Result returns the result of the asynchronous operation.
17104// If the operation has not completed it will return an error.
17105func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
17106	var done bool
17107	done, err = future.DoneWithContext(context.Background(), client)
17108	if err != nil {
17109		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
17110		return
17111	}
17112	if !done {
17113		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
17114		return
17115	}
17116	ar.Response = future.Response()
17117	return
17118}
17119
17120// LocalNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
17121// long-running operation.
17122type LocalNetworkGatewaysUpdateTagsFuture struct {
17123	azure.Future
17124}
17125
17126// Result returns the result of the asynchronous operation.
17127// If the operation has not completed it will return an error.
17128func (future *LocalNetworkGatewaysUpdateTagsFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
17129	var done bool
17130	done, err = future.DoneWithContext(context.Background(), client)
17131	if err != nil {
17132		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
17133		return
17134	}
17135	if !done {
17136		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysUpdateTagsFuture")
17137		return
17138	}
17139	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17140	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
17141		lng, err = client.UpdateTagsResponder(lng.Response.Response)
17142		if err != nil {
17143			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", lng.Response.Response, "Failure responding to request")
17144		}
17145	}
17146	return
17147}
17148
17149// LogSpecification description of logging specification.
17150type LogSpecification struct {
17151	// Name - The name of the specification.
17152	Name *string `json:"name,omitempty"`
17153	// DisplayName - The display name of the specification.
17154	DisplayName *string `json:"displayName,omitempty"`
17155	// BlobDuration - Duration of the blob.
17156	BlobDuration *string `json:"blobDuration,omitempty"`
17157}
17158
17159// ManagedServiceIdentity identity for the resource.
17160type ManagedServiceIdentity struct {
17161	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
17162	PrincipalID *string `json:"principalId,omitempty"`
17163	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
17164	TenantID *string `json:"tenantId,omitempty"`
17165	// 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'
17166	Type ResourceIdentityType `json:"type,omitempty"`
17167	// 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}'.
17168	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
17169}
17170
17171// MarshalJSON is the custom marshaler for ManagedServiceIdentity.
17172func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
17173	objectMap := make(map[string]interface{})
17174	if msi.Type != "" {
17175		objectMap["type"] = msi.Type
17176	}
17177	if msi.UserAssignedIdentities != nil {
17178		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
17179	}
17180	return json.Marshal(objectMap)
17181}
17182
17183// ManagedServiceIdentityUserAssignedIdentitiesValue ...
17184type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
17185	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
17186	PrincipalID *string `json:"principalId,omitempty"`
17187	// ClientID - READ-ONLY; The client id of user assigned identity.
17188	ClientID *string `json:"clientId,omitempty"`
17189}
17190
17191// MatchedRule matched rule.
17192type MatchedRule struct {
17193	// RuleName - Name of the matched network security rule.
17194	RuleName *string `json:"ruleName,omitempty"`
17195	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
17196	Action *string `json:"action,omitempty"`
17197}
17198
17199// MetricSpecification description of metrics specification.
17200type MetricSpecification struct {
17201	// Name - The name of the metric.
17202	Name *string `json:"name,omitempty"`
17203	// DisplayName - The display name of the metric.
17204	DisplayName *string `json:"displayName,omitempty"`
17205	// DisplayDescription - The description of the metric.
17206	DisplayDescription *string `json:"displayDescription,omitempty"`
17207	// Unit - Units the metric to be displayed in.
17208	Unit *string `json:"unit,omitempty"`
17209	// AggregationType - The aggregation type.
17210	AggregationType *string `json:"aggregationType,omitempty"`
17211	// Availabilities - List of availability.
17212	Availabilities *[]Availability `json:"availabilities,omitempty"`
17213	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
17214	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
17215	// FillGapWithZero - Whether gaps would be filled with zeros.
17216	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
17217	// MetricFilterPattern - Pattern for the filter of the metric.
17218	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
17219	// Dimensions - List of dimensions.
17220	Dimensions *[]Dimension `json:"dimensions,omitempty"`
17221	// IsInternal - Whether the metric is internal.
17222	IsInternal *bool `json:"isInternal,omitempty"`
17223	// SourceMdmAccount - The source MDM account.
17224	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
17225	// SourceMdmNamespace - The source MDM namespace.
17226	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
17227	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
17228	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
17229}
17230
17231// NextHopParameters parameters that define the source and destination endpoint.
17232type NextHopParameters struct {
17233	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
17234	TargetResourceID *string `json:"targetResourceId,omitempty"`
17235	// SourceIPAddress - The source IP address.
17236	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
17237	// DestinationIPAddress - The destination IP address.
17238	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
17239	// 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).
17240	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
17241}
17242
17243// NextHopResult the information about next hop from the specified VM.
17244type NextHopResult struct {
17245	autorest.Response `json:"-"`
17246	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
17247	NextHopType NextHopType `json:"nextHopType,omitempty"`
17248	// NextHopIPAddress - Next hop IP Address
17249	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
17250	// 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'.
17251	RouteTableID *string `json:"routeTableId,omitempty"`
17252}
17253
17254// Operation network REST API operation definition.
17255type Operation struct {
17256	// Name - Operation name: {provider}/{resource}/{operation}
17257	Name *string `json:"name,omitempty"`
17258	// Display - Display metadata associated with the operation.
17259	Display *OperationDisplay `json:"display,omitempty"`
17260	// Origin - Origin of the operation.
17261	Origin *string `json:"origin,omitempty"`
17262	// OperationPropertiesFormat - Operation properties format.
17263	*OperationPropertiesFormat `json:"properties,omitempty"`
17264}
17265
17266// MarshalJSON is the custom marshaler for Operation.
17267func (o Operation) MarshalJSON() ([]byte, error) {
17268	objectMap := make(map[string]interface{})
17269	if o.Name != nil {
17270		objectMap["name"] = o.Name
17271	}
17272	if o.Display != nil {
17273		objectMap["display"] = o.Display
17274	}
17275	if o.Origin != nil {
17276		objectMap["origin"] = o.Origin
17277	}
17278	if o.OperationPropertiesFormat != nil {
17279		objectMap["properties"] = o.OperationPropertiesFormat
17280	}
17281	return json.Marshal(objectMap)
17282}
17283
17284// UnmarshalJSON is the custom unmarshaler for Operation struct.
17285func (o *Operation) UnmarshalJSON(body []byte) error {
17286	var m map[string]*json.RawMessage
17287	err := json.Unmarshal(body, &m)
17288	if err != nil {
17289		return err
17290	}
17291	for k, v := range m {
17292		switch k {
17293		case "name":
17294			if v != nil {
17295				var name string
17296				err = json.Unmarshal(*v, &name)
17297				if err != nil {
17298					return err
17299				}
17300				o.Name = &name
17301			}
17302		case "display":
17303			if v != nil {
17304				var display OperationDisplay
17305				err = json.Unmarshal(*v, &display)
17306				if err != nil {
17307					return err
17308				}
17309				o.Display = &display
17310			}
17311		case "origin":
17312			if v != nil {
17313				var origin string
17314				err = json.Unmarshal(*v, &origin)
17315				if err != nil {
17316					return err
17317				}
17318				o.Origin = &origin
17319			}
17320		case "properties":
17321			if v != nil {
17322				var operationPropertiesFormat OperationPropertiesFormat
17323				err = json.Unmarshal(*v, &operationPropertiesFormat)
17324				if err != nil {
17325					return err
17326				}
17327				o.OperationPropertiesFormat = &operationPropertiesFormat
17328			}
17329		}
17330	}
17331
17332	return nil
17333}
17334
17335// OperationDisplay display metadata associated with the operation.
17336type OperationDisplay struct {
17337	// Provider - Service provider: Microsoft Network.
17338	Provider *string `json:"provider,omitempty"`
17339	// Resource - Resource on which the operation is performed.
17340	Resource *string `json:"resource,omitempty"`
17341	// Operation - Type of the operation: get, read, delete, etc.
17342	Operation *string `json:"operation,omitempty"`
17343	// Description - Description of the operation.
17344	Description *string `json:"description,omitempty"`
17345}
17346
17347// OperationListResult result of the request to list Network operations. It contains a list of operations
17348// and a URL link to get the next set of results.
17349type OperationListResult struct {
17350	autorest.Response `json:"-"`
17351	// Value - List of Network operations supported by the Network resource provider.
17352	Value *[]Operation `json:"value,omitempty"`
17353	// NextLink - URL to get the next set of operation list results if there are any.
17354	NextLink *string `json:"nextLink,omitempty"`
17355}
17356
17357// OperationListResultIterator provides access to a complete listing of Operation values.
17358type OperationListResultIterator struct {
17359	i    int
17360	page OperationListResultPage
17361}
17362
17363// NextWithContext advances to the next value.  If there was an error making
17364// the request the iterator does not advance and the error is returned.
17365func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
17366	if tracing.IsEnabled() {
17367		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
17368		defer func() {
17369			sc := -1
17370			if iter.Response().Response.Response != nil {
17371				sc = iter.Response().Response.Response.StatusCode
17372			}
17373			tracing.EndSpan(ctx, sc, err)
17374		}()
17375	}
17376	iter.i++
17377	if iter.i < len(iter.page.Values()) {
17378		return nil
17379	}
17380	err = iter.page.NextWithContext(ctx)
17381	if err != nil {
17382		iter.i--
17383		return err
17384	}
17385	iter.i = 0
17386	return nil
17387}
17388
17389// Next advances to the next value.  If there was an error making
17390// the request the iterator does not advance and the error is returned.
17391// Deprecated: Use NextWithContext() instead.
17392func (iter *OperationListResultIterator) Next() error {
17393	return iter.NextWithContext(context.Background())
17394}
17395
17396// NotDone returns true if the enumeration should be started or is not yet complete.
17397func (iter OperationListResultIterator) NotDone() bool {
17398	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17399}
17400
17401// Response returns the raw server response from the last page request.
17402func (iter OperationListResultIterator) Response() OperationListResult {
17403	return iter.page.Response()
17404}
17405
17406// Value returns the current value or a zero-initialized value if the
17407// iterator has advanced beyond the end of the collection.
17408func (iter OperationListResultIterator) Value() Operation {
17409	if !iter.page.NotDone() {
17410		return Operation{}
17411	}
17412	return iter.page.Values()[iter.i]
17413}
17414
17415// Creates a new instance of the OperationListResultIterator type.
17416func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
17417	return OperationListResultIterator{page: page}
17418}
17419
17420// IsEmpty returns true if the ListResult contains no values.
17421func (olr OperationListResult) IsEmpty() bool {
17422	return olr.Value == nil || len(*olr.Value) == 0
17423}
17424
17425// operationListResultPreparer prepares a request to retrieve the next set of results.
17426// It returns nil if no more results exist.
17427func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
17428	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
17429		return nil, nil
17430	}
17431	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17432		autorest.AsJSON(),
17433		autorest.AsGet(),
17434		autorest.WithBaseURL(to.String(olr.NextLink)))
17435}
17436
17437// OperationListResultPage contains a page of Operation values.
17438type OperationListResultPage struct {
17439	fn  func(context.Context, OperationListResult) (OperationListResult, error)
17440	olr OperationListResult
17441}
17442
17443// NextWithContext advances to the next page of values.  If there was an error making
17444// the request the page does not advance and the error is returned.
17445func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
17446	if tracing.IsEnabled() {
17447		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
17448		defer func() {
17449			sc := -1
17450			if page.Response().Response.Response != nil {
17451				sc = page.Response().Response.Response.StatusCode
17452			}
17453			tracing.EndSpan(ctx, sc, err)
17454		}()
17455	}
17456	next, err := page.fn(ctx, page.olr)
17457	if err != nil {
17458		return err
17459	}
17460	page.olr = next
17461	return nil
17462}
17463
17464// Next advances to the next page of values.  If there was an error making
17465// the request the page does not advance and the error is returned.
17466// Deprecated: Use NextWithContext() instead.
17467func (page *OperationListResultPage) Next() error {
17468	return page.NextWithContext(context.Background())
17469}
17470
17471// NotDone returns true if the page enumeration should be started or is not yet complete.
17472func (page OperationListResultPage) NotDone() bool {
17473	return !page.olr.IsEmpty()
17474}
17475
17476// Response returns the raw server response from the last page request.
17477func (page OperationListResultPage) Response() OperationListResult {
17478	return page.olr
17479}
17480
17481// Values returns the slice of values for the current page or nil if there are no values.
17482func (page OperationListResultPage) Values() []Operation {
17483	if page.olr.IsEmpty() {
17484		return nil
17485	}
17486	return *page.olr.Value
17487}
17488
17489// Creates a new instance of the OperationListResultPage type.
17490func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
17491	return OperationListResultPage{fn: getNextPage}
17492}
17493
17494// OperationPropertiesFormat description of operation properties format.
17495type OperationPropertiesFormat struct {
17496	// ServiceSpecification - Specification of the service.
17497	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
17498}
17499
17500// OperationPropertiesFormatServiceSpecification specification of the service.
17501type OperationPropertiesFormatServiceSpecification struct {
17502	// MetricSpecifications - Operation service specification.
17503	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
17504	// LogSpecifications - Operation log specification.
17505	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
17506}
17507
17508// OutboundRule outbound rule of the load balancer.
17509type OutboundRule struct {
17510	autorest.Response `json:"-"`
17511	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
17512	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
17513	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17514	Name *string `json:"name,omitempty"`
17515	// Etag - A unique read-only string that changes whenever the resource is updated.
17516	Etag *string `json:"etag,omitempty"`
17517	// ID - Resource ID.
17518	ID *string `json:"id,omitempty"`
17519}
17520
17521// MarshalJSON is the custom marshaler for OutboundRule.
17522func (or OutboundRule) MarshalJSON() ([]byte, error) {
17523	objectMap := make(map[string]interface{})
17524	if or.OutboundRulePropertiesFormat != nil {
17525		objectMap["properties"] = or.OutboundRulePropertiesFormat
17526	}
17527	if or.Name != nil {
17528		objectMap["name"] = or.Name
17529	}
17530	if or.Etag != nil {
17531		objectMap["etag"] = or.Etag
17532	}
17533	if or.ID != nil {
17534		objectMap["id"] = or.ID
17535	}
17536	return json.Marshal(objectMap)
17537}
17538
17539// UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
17540func (or *OutboundRule) UnmarshalJSON(body []byte) error {
17541	var m map[string]*json.RawMessage
17542	err := json.Unmarshal(body, &m)
17543	if err != nil {
17544		return err
17545	}
17546	for k, v := range m {
17547		switch k {
17548		case "properties":
17549			if v != nil {
17550				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
17551				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
17552				if err != nil {
17553					return err
17554				}
17555				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
17556			}
17557		case "name":
17558			if v != nil {
17559				var name string
17560				err = json.Unmarshal(*v, &name)
17561				if err != nil {
17562					return err
17563				}
17564				or.Name = &name
17565			}
17566		case "etag":
17567			if v != nil {
17568				var etag string
17569				err = json.Unmarshal(*v, &etag)
17570				if err != nil {
17571					return err
17572				}
17573				or.Etag = &etag
17574			}
17575		case "id":
17576			if v != nil {
17577				var ID string
17578				err = json.Unmarshal(*v, &ID)
17579				if err != nil {
17580					return err
17581				}
17582				or.ID = &ID
17583			}
17584		}
17585	}
17586
17587	return nil
17588}
17589
17590// OutboundRulePropertiesFormat outbound rule of the load balancer.
17591type OutboundRulePropertiesFormat struct {
17592	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
17593	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
17594	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
17595	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
17596	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
17597	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
17598	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17599	ProvisioningState *string `json:"provisioningState,omitempty"`
17600	// Protocol - Protocol - TCP, UDP or All. Possible values include: 'Protocol1TCP', 'Protocol1UDP', 'Protocol1All'
17601	Protocol Protocol1 `json:"protocol,omitempty"`
17602	// 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.
17603	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
17604	// IdleTimeoutInMinutes - The timeout for the TCP idle connection
17605	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
17606}
17607
17608// P2SVpnGateway p2SVpnGateway Resource.
17609type P2SVpnGateway struct {
17610	autorest.Response        `json:"-"`
17611	*P2SVpnGatewayProperties `json:"properties,omitempty"`
17612	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
17613	Etag *string `json:"etag,omitempty"`
17614	// ID - Resource ID.
17615	ID *string `json:"id,omitempty"`
17616	// Name - READ-ONLY; Resource name.
17617	Name *string `json:"name,omitempty"`
17618	// Type - READ-ONLY; Resource type.
17619	Type *string `json:"type,omitempty"`
17620	// Location - Resource location.
17621	Location *string `json:"location,omitempty"`
17622	// Tags - Resource tags.
17623	Tags map[string]*string `json:"tags"`
17624}
17625
17626// MarshalJSON is the custom marshaler for P2SVpnGateway.
17627func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
17628	objectMap := make(map[string]interface{})
17629	if pvg.P2SVpnGatewayProperties != nil {
17630		objectMap["properties"] = pvg.P2SVpnGatewayProperties
17631	}
17632	if pvg.ID != nil {
17633		objectMap["id"] = pvg.ID
17634	}
17635	if pvg.Location != nil {
17636		objectMap["location"] = pvg.Location
17637	}
17638	if pvg.Tags != nil {
17639		objectMap["tags"] = pvg.Tags
17640	}
17641	return json.Marshal(objectMap)
17642}
17643
17644// UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
17645func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
17646	var m map[string]*json.RawMessage
17647	err := json.Unmarshal(body, &m)
17648	if err != nil {
17649		return err
17650	}
17651	for k, v := range m {
17652		switch k {
17653		case "properties":
17654			if v != nil {
17655				var p2SVpnGatewayProperties P2SVpnGatewayProperties
17656				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
17657				if err != nil {
17658					return err
17659				}
17660				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
17661			}
17662		case "etag":
17663			if v != nil {
17664				var etag string
17665				err = json.Unmarshal(*v, &etag)
17666				if err != nil {
17667					return err
17668				}
17669				pvg.Etag = &etag
17670			}
17671		case "id":
17672			if v != nil {
17673				var ID string
17674				err = json.Unmarshal(*v, &ID)
17675				if err != nil {
17676					return err
17677				}
17678				pvg.ID = &ID
17679			}
17680		case "name":
17681			if v != nil {
17682				var name string
17683				err = json.Unmarshal(*v, &name)
17684				if err != nil {
17685					return err
17686				}
17687				pvg.Name = &name
17688			}
17689		case "type":
17690			if v != nil {
17691				var typeVar string
17692				err = json.Unmarshal(*v, &typeVar)
17693				if err != nil {
17694					return err
17695				}
17696				pvg.Type = &typeVar
17697			}
17698		case "location":
17699			if v != nil {
17700				var location string
17701				err = json.Unmarshal(*v, &location)
17702				if err != nil {
17703					return err
17704				}
17705				pvg.Location = &location
17706			}
17707		case "tags":
17708			if v != nil {
17709				var tags map[string]*string
17710				err = json.Unmarshal(*v, &tags)
17711				if err != nil {
17712					return err
17713				}
17714				pvg.Tags = tags
17715			}
17716		}
17717	}
17718
17719	return nil
17720}
17721
17722// P2SVpnGatewayProperties parameters for P2SVpnGateway
17723type P2SVpnGatewayProperties struct {
17724	// VirtualHub - The VirtualHub to which the gateway belongs
17725	VirtualHub *SubResource `json:"virtualHub,omitempty"`
17726	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17727	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17728	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
17729	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
17730	// P2SVpnServerConfiguration - The P2SVpnServerConfiguration to which the p2sVpnGateway is attached to.
17731	P2SVpnServerConfiguration *SubResource `json:"p2SVpnServerConfiguration,omitempty"`
17732	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
17733	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
17734	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
17735	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
17736}
17737
17738// P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17739// long-running operation.
17740type P2sVpnGatewaysCreateOrUpdateFuture struct {
17741	azure.Future
17742}
17743
17744// Result returns the result of the asynchronous operation.
17745// If the operation has not completed it will return an error.
17746func (future *P2sVpnGatewaysCreateOrUpdateFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
17747	var done bool
17748	done, err = future.DoneWithContext(context.Background(), client)
17749	if err != nil {
17750		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17751		return
17752	}
17753	if !done {
17754		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
17755		return
17756	}
17757	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17758	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
17759		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
17760		if err != nil {
17761			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
17762		}
17763	}
17764	return
17765}
17766
17767// P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
17768// operation.
17769type P2sVpnGatewaysDeleteFuture struct {
17770	azure.Future
17771}
17772
17773// Result returns the result of the asynchronous operation.
17774// If the operation has not completed it will return an error.
17775func (future *P2sVpnGatewaysDeleteFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
17776	var done bool
17777	done, err = future.DoneWithContext(context.Background(), client)
17778	if err != nil {
17779		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
17780		return
17781	}
17782	if !done {
17783		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
17784		return
17785	}
17786	ar.Response = future.Response()
17787	return
17788}
17789
17790// P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
17791// long-running operation.
17792type P2sVpnGatewaysGenerateVpnProfileFuture struct {
17793	azure.Future
17794}
17795
17796// Result returns the result of the asynchronous operation.
17797// If the operation has not completed it will return an error.
17798func (future *P2sVpnGatewaysGenerateVpnProfileFuture) Result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
17799	var done bool
17800	done, err = future.DoneWithContext(context.Background(), client)
17801	if err != nil {
17802		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
17803		return
17804	}
17805	if !done {
17806		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
17807		return
17808	}
17809	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17810	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
17811		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
17812		if err != nil {
17813			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
17814		}
17815	}
17816	return
17817}
17818
17819// P2sVpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
17820// long-running operation.
17821type P2sVpnGatewaysUpdateTagsFuture struct {
17822	azure.Future
17823}
17824
17825// Result returns the result of the asynchronous operation.
17826// If the operation has not completed it will return an error.
17827func (future *P2sVpnGatewaysUpdateTagsFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
17828	var done bool
17829	done, err = future.DoneWithContext(context.Background(), client)
17830	if err != nil {
17831		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
17832		return
17833	}
17834	if !done {
17835		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysUpdateTagsFuture")
17836		return
17837	}
17838	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17839	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
17840		pvg, err = client.UpdateTagsResponder(pvg.Response.Response)
17841		if err != nil {
17842			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", pvg.Response.Response, "Failure responding to request")
17843		}
17844	}
17845	return
17846}
17847
17848// P2SVpnProfileParameters vpn Client Parameters for package generation
17849type P2SVpnProfileParameters struct {
17850	// AuthenticationMethod - VPN client Authentication Method. Possible values are: 'EAPTLS' and 'EAPMSCHAPv2'. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
17851	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
17852}
17853
17854// P2SVpnServerConfigRadiusClientRootCertificate radius client root certificate of
17855// P2SVpnServerConfiguration.
17856type P2SVpnServerConfigRadiusClientRootCertificate struct {
17857	// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat - Properties of the Radius client root certificate.
17858	*P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
17859	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17860	Name *string `json:"name,omitempty"`
17861	// Etag - A unique read-only string that changes whenever the resource is updated.
17862	Etag *string `json:"etag,omitempty"`
17863	// ID - Resource ID.
17864	ID *string `json:"id,omitempty"`
17865}
17866
17867// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusClientRootCertificate.
17868func (pvscrcrc P2SVpnServerConfigRadiusClientRootCertificate) MarshalJSON() ([]byte, error) {
17869	objectMap := make(map[string]interface{})
17870	if pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat != nil {
17871		objectMap["properties"] = pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
17872	}
17873	if pvscrcrc.Name != nil {
17874		objectMap["name"] = pvscrcrc.Name
17875	}
17876	if pvscrcrc.Etag != nil {
17877		objectMap["etag"] = pvscrcrc.Etag
17878	}
17879	if pvscrcrc.ID != nil {
17880		objectMap["id"] = pvscrcrc.ID
17881	}
17882	return json.Marshal(objectMap)
17883}
17884
17885// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusClientRootCertificate struct.
17886func (pvscrcrc *P2SVpnServerConfigRadiusClientRootCertificate) UnmarshalJSON(body []byte) error {
17887	var m map[string]*json.RawMessage
17888	err := json.Unmarshal(body, &m)
17889	if err != nil {
17890		return err
17891	}
17892	for k, v := range m {
17893		switch k {
17894		case "properties":
17895			if v != nil {
17896				var p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
17897				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat)
17898				if err != nil {
17899					return err
17900				}
17901				pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
17902			}
17903		case "name":
17904			if v != nil {
17905				var name string
17906				err = json.Unmarshal(*v, &name)
17907				if err != nil {
17908					return err
17909				}
17910				pvscrcrc.Name = &name
17911			}
17912		case "etag":
17913			if v != nil {
17914				var etag string
17915				err = json.Unmarshal(*v, &etag)
17916				if err != nil {
17917					return err
17918				}
17919				pvscrcrc.Etag = &etag
17920			}
17921		case "id":
17922			if v != nil {
17923				var ID string
17924				err = json.Unmarshal(*v, &ID)
17925				if err != nil {
17926					return err
17927				}
17928				pvscrcrc.ID = &ID
17929			}
17930		}
17931	}
17932
17933	return nil
17934}
17935
17936// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat properties of the Radius client root
17937// certificate of P2SVpnServerConfiguration.
17938type P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat struct {
17939	// Thumbprint - The Radius client root certificate thumbprint.
17940	Thumbprint *string `json:"thumbprint,omitempty"`
17941	// ProvisioningState - READ-ONLY; The provisioning state of the Radius client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17942	ProvisioningState *string `json:"provisioningState,omitempty"`
17943}
17944
17945// P2SVpnServerConfigRadiusServerRootCertificate radius Server root certificate of
17946// P2SVpnServerConfiguration.
17947type P2SVpnServerConfigRadiusServerRootCertificate struct {
17948	// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration Radius Server root certificate.
17949	*P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat `json:"properties,omitempty"`
17950	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17951	Name *string `json:"name,omitempty"`
17952	// Etag - A unique read-only string that changes whenever the resource is updated.
17953	Etag *string `json:"etag,omitempty"`
17954	// ID - Resource ID.
17955	ID *string `json:"id,omitempty"`
17956}
17957
17958// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusServerRootCertificate.
17959func (pvscrsrc P2SVpnServerConfigRadiusServerRootCertificate) MarshalJSON() ([]byte, error) {
17960	objectMap := make(map[string]interface{})
17961	if pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat != nil {
17962		objectMap["properties"] = pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
17963	}
17964	if pvscrsrc.Name != nil {
17965		objectMap["name"] = pvscrsrc.Name
17966	}
17967	if pvscrsrc.Etag != nil {
17968		objectMap["etag"] = pvscrsrc.Etag
17969	}
17970	if pvscrsrc.ID != nil {
17971		objectMap["id"] = pvscrsrc.ID
17972	}
17973	return json.Marshal(objectMap)
17974}
17975
17976// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusServerRootCertificate struct.
17977func (pvscrsrc *P2SVpnServerConfigRadiusServerRootCertificate) UnmarshalJSON(body []byte) error {
17978	var m map[string]*json.RawMessage
17979	err := json.Unmarshal(body, &m)
17980	if err != nil {
17981		return err
17982	}
17983	for k, v := range m {
17984		switch k {
17985		case "properties":
17986			if v != nil {
17987				var p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
17988				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat)
17989				if err != nil {
17990					return err
17991				}
17992				pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
17993			}
17994		case "name":
17995			if v != nil {
17996				var name string
17997				err = json.Unmarshal(*v, &name)
17998				if err != nil {
17999					return err
18000				}
18001				pvscrsrc.Name = &name
18002			}
18003		case "etag":
18004			if v != nil {
18005				var etag string
18006				err = json.Unmarshal(*v, &etag)
18007				if err != nil {
18008					return err
18009				}
18010				pvscrsrc.Etag = &etag
18011			}
18012		case "id":
18013			if v != nil {
18014				var ID string
18015				err = json.Unmarshal(*v, &ID)
18016				if err != nil {
18017					return err
18018				}
18019				pvscrsrc.ID = &ID
18020			}
18021		}
18022	}
18023
18024	return nil
18025}
18026
18027// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat properties of Radius Server root
18028// certificate of P2SVpnServerConfiguration.
18029type P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat struct {
18030	// PublicCertData - The certificate public data.
18031	PublicCertData *string `json:"publicCertData,omitempty"`
18032	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration Radius Server root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18033	ProvisioningState *string `json:"provisioningState,omitempty"`
18034}
18035
18036// P2SVpnServerConfiguration p2SVpnServerConfiguration Resource.
18037type P2SVpnServerConfiguration struct {
18038	autorest.Response                    `json:"-"`
18039	*P2SVpnServerConfigurationProperties `json:"properties,omitempty"`
18040	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
18041	Name *string `json:"name,omitempty"`
18042	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
18043	Etag *string `json:"etag,omitempty"`
18044	// ID - Resource ID.
18045	ID *string `json:"id,omitempty"`
18046}
18047
18048// MarshalJSON is the custom marshaler for P2SVpnServerConfiguration.
18049func (pvsc P2SVpnServerConfiguration) MarshalJSON() ([]byte, error) {
18050	objectMap := make(map[string]interface{})
18051	if pvsc.P2SVpnServerConfigurationProperties != nil {
18052		objectMap["properties"] = pvsc.P2SVpnServerConfigurationProperties
18053	}
18054	if pvsc.Name != nil {
18055		objectMap["name"] = pvsc.Name
18056	}
18057	if pvsc.ID != nil {
18058		objectMap["id"] = pvsc.ID
18059	}
18060	return json.Marshal(objectMap)
18061}
18062
18063// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfiguration struct.
18064func (pvsc *P2SVpnServerConfiguration) UnmarshalJSON(body []byte) error {
18065	var m map[string]*json.RawMessage
18066	err := json.Unmarshal(body, &m)
18067	if err != nil {
18068		return err
18069	}
18070	for k, v := range m {
18071		switch k {
18072		case "properties":
18073			if v != nil {
18074				var p2SVpnServerConfigurationProperties P2SVpnServerConfigurationProperties
18075				err = json.Unmarshal(*v, &p2SVpnServerConfigurationProperties)
18076				if err != nil {
18077					return err
18078				}
18079				pvsc.P2SVpnServerConfigurationProperties = &p2SVpnServerConfigurationProperties
18080			}
18081		case "name":
18082			if v != nil {
18083				var name string
18084				err = json.Unmarshal(*v, &name)
18085				if err != nil {
18086					return err
18087				}
18088				pvsc.Name = &name
18089			}
18090		case "etag":
18091			if v != nil {
18092				var etag string
18093				err = json.Unmarshal(*v, &etag)
18094				if err != nil {
18095					return err
18096				}
18097				pvsc.Etag = &etag
18098			}
18099		case "id":
18100			if v != nil {
18101				var ID string
18102				err = json.Unmarshal(*v, &ID)
18103				if err != nil {
18104					return err
18105				}
18106				pvsc.ID = &ID
18107			}
18108		}
18109	}
18110
18111	return nil
18112}
18113
18114// P2SVpnServerConfigurationProperties parameters for P2SVpnServerConfiguration
18115type P2SVpnServerConfigurationProperties struct {
18116	// 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 Parent VirtualWan resource name.
18117	Name *string `json:"name,omitempty"`
18118	// VpnProtocols - vpnProtocols for the P2SVpnServerConfiguration.
18119	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
18120	// P2SVpnServerConfigVpnClientRootCertificates - VPN client root certificate of P2SVpnServerConfiguration.
18121	P2SVpnServerConfigVpnClientRootCertificates *[]P2SVpnServerConfigVpnClientRootCertificate `json:"p2SVpnServerConfigVpnClientRootCertificates,omitempty"`
18122	// P2SVpnServerConfigVpnClientRevokedCertificates - VPN client revoked certificate of P2SVpnServerConfiguration.
18123	P2SVpnServerConfigVpnClientRevokedCertificates *[]P2SVpnServerConfigVpnClientRevokedCertificate `json:"p2SVpnServerConfigVpnClientRevokedCertificates,omitempty"`
18124	// P2SVpnServerConfigRadiusServerRootCertificates - Radius Server root certificate of P2SVpnServerConfiguration.
18125	P2SVpnServerConfigRadiusServerRootCertificates *[]P2SVpnServerConfigRadiusServerRootCertificate `json:"p2SVpnServerConfigRadiusServerRootCertificates,omitempty"`
18126	// P2SVpnServerConfigRadiusClientRootCertificates - Radius client root certificate of P2SVpnServerConfiguration.
18127	P2SVpnServerConfigRadiusClientRootCertificates *[]P2SVpnServerConfigRadiusClientRootCertificate `json:"p2SVpnServerConfigRadiusClientRootCertificates,omitempty"`
18128	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for P2SVpnServerConfiguration.
18129	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
18130	// RadiusServerAddress - The radius server address property of the P2SVpnServerConfiguration resource for point to site client connection.
18131	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
18132	// RadiusServerSecret - The radius secret property of the P2SVpnServerConfiguration resource for point to site client connection.
18133	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
18134	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18135	ProvisioningState *string `json:"provisioningState,omitempty"`
18136	// P2SVpnGateways - READ-ONLY
18137	P2SVpnGateways *[]SubResource `json:"p2SVpnGateways,omitempty"`
18138	// Etag - A unique read-only string that changes whenever the resource is updated.
18139	Etag *string `json:"etag,omitempty"`
18140}
18141
18142// P2sVpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
18143// of a long-running operation.
18144type P2sVpnServerConfigurationsCreateOrUpdateFuture struct {
18145	azure.Future
18146}
18147
18148// Result returns the result of the asynchronous operation.
18149// If the operation has not completed it will return an error.
18150func (future *P2sVpnServerConfigurationsCreateOrUpdateFuture) Result(client P2sVpnServerConfigurationsClient) (pvsc P2SVpnServerConfiguration, err error) {
18151	var done bool
18152	done, err = future.DoneWithContext(context.Background(), client)
18153	if err != nil {
18154		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18155		return
18156	}
18157	if !done {
18158		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsCreateOrUpdateFuture")
18159		return
18160	}
18161	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18162	if pvsc.Response.Response, err = future.GetResult(sender); err == nil && pvsc.Response.Response.StatusCode != http.StatusNoContent {
18163		pvsc, err = client.CreateOrUpdateResponder(pvsc.Response.Response)
18164		if err != nil {
18165			err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", pvsc.Response.Response, "Failure responding to request")
18166		}
18167	}
18168	return
18169}
18170
18171// P2sVpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
18172// long-running operation.
18173type P2sVpnServerConfigurationsDeleteFuture struct {
18174	azure.Future
18175}
18176
18177// Result returns the result of the asynchronous operation.
18178// If the operation has not completed it will return an error.
18179func (future *P2sVpnServerConfigurationsDeleteFuture) Result(client P2sVpnServerConfigurationsClient) (ar autorest.Response, err error) {
18180	var done bool
18181	done, err = future.DoneWithContext(context.Background(), client)
18182	if err != nil {
18183		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
18184		return
18185	}
18186	if !done {
18187		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsDeleteFuture")
18188		return
18189	}
18190	ar.Response = future.Response()
18191	return
18192}
18193
18194// P2SVpnServerConfigVpnClientRevokedCertificate VPN client revoked certificate of
18195// P2SVpnServerConfiguration.
18196type P2SVpnServerConfigVpnClientRevokedCertificate struct {
18197	// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
18198	*P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
18199	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
18200	Name *string `json:"name,omitempty"`
18201	// Etag - A unique read-only string that changes whenever the resource is updated.
18202	Etag *string `json:"etag,omitempty"`
18203	// ID - Resource ID.
18204	ID *string `json:"id,omitempty"`
18205}
18206
18207// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRevokedCertificate.
18208func (pvscvcrc P2SVpnServerConfigVpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
18209	objectMap := make(map[string]interface{})
18210	if pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat != nil {
18211		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
18212	}
18213	if pvscvcrc.Name != nil {
18214		objectMap["name"] = pvscvcrc.Name
18215	}
18216	if pvscvcrc.Etag != nil {
18217		objectMap["etag"] = pvscvcrc.Etag
18218	}
18219	if pvscvcrc.ID != nil {
18220		objectMap["id"] = pvscvcrc.ID
18221	}
18222	return json.Marshal(objectMap)
18223}
18224
18225// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRevokedCertificate struct.
18226func (pvscvcrc *P2SVpnServerConfigVpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
18227	var m map[string]*json.RawMessage
18228	err := json.Unmarshal(body, &m)
18229	if err != nil {
18230		return err
18231	}
18232	for k, v := range m {
18233		switch k {
18234		case "properties":
18235			if v != nil {
18236				var p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
18237				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat)
18238				if err != nil {
18239					return err
18240				}
18241				pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
18242			}
18243		case "name":
18244			if v != nil {
18245				var name string
18246				err = json.Unmarshal(*v, &name)
18247				if err != nil {
18248					return err
18249				}
18250				pvscvcrc.Name = &name
18251			}
18252		case "etag":
18253			if v != nil {
18254				var etag string
18255				err = json.Unmarshal(*v, &etag)
18256				if err != nil {
18257					return err
18258				}
18259				pvscvcrc.Etag = &etag
18260			}
18261		case "id":
18262			if v != nil {
18263				var ID string
18264				err = json.Unmarshal(*v, &ID)
18265				if err != nil {
18266					return err
18267				}
18268				pvscvcrc.ID = &ID
18269			}
18270		}
18271	}
18272
18273	return nil
18274}
18275
18276// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client
18277// certificate of P2SVpnServerConfiguration.
18278type P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat struct {
18279	// Thumbprint - The revoked VPN client certificate thumbprint.
18280	Thumbprint *string `json:"thumbprint,omitempty"`
18281	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18282	ProvisioningState *string `json:"provisioningState,omitempty"`
18283}
18284
18285// P2SVpnServerConfigVpnClientRootCertificate VPN client root certificate of P2SVpnServerConfiguration.
18286type P2SVpnServerConfigVpnClientRootCertificate struct {
18287	// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration VPN client root certificate.
18288	*P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
18289	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
18290	Name *string `json:"name,omitempty"`
18291	// Etag - A unique read-only string that changes whenever the resource is updated.
18292	Etag *string `json:"etag,omitempty"`
18293	// ID - Resource ID.
18294	ID *string `json:"id,omitempty"`
18295}
18296
18297// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRootCertificate.
18298func (pvscvcrc P2SVpnServerConfigVpnClientRootCertificate) MarshalJSON() ([]byte, error) {
18299	objectMap := make(map[string]interface{})
18300	if pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat != nil {
18301		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
18302	}
18303	if pvscvcrc.Name != nil {
18304		objectMap["name"] = pvscvcrc.Name
18305	}
18306	if pvscvcrc.Etag != nil {
18307		objectMap["etag"] = pvscvcrc.Etag
18308	}
18309	if pvscvcrc.ID != nil {
18310		objectMap["id"] = pvscvcrc.ID
18311	}
18312	return json.Marshal(objectMap)
18313}
18314
18315// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRootCertificate struct.
18316func (pvscvcrc *P2SVpnServerConfigVpnClientRootCertificate) UnmarshalJSON(body []byte) error {
18317	var m map[string]*json.RawMessage
18318	err := json.Unmarshal(body, &m)
18319	if err != nil {
18320		return err
18321	}
18322	for k, v := range m {
18323		switch k {
18324		case "properties":
18325			if v != nil {
18326				var p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
18327				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat)
18328				if err != nil {
18329					return err
18330				}
18331				pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
18332			}
18333		case "name":
18334			if v != nil {
18335				var name string
18336				err = json.Unmarshal(*v, &name)
18337				if err != nil {
18338					return err
18339				}
18340				pvscvcrc.Name = &name
18341			}
18342		case "etag":
18343			if v != nil {
18344				var etag string
18345				err = json.Unmarshal(*v, &etag)
18346				if err != nil {
18347					return err
18348				}
18349				pvscvcrc.Etag = &etag
18350			}
18351		case "id":
18352			if v != nil {
18353				var ID string
18354				err = json.Unmarshal(*v, &ID)
18355				if err != nil {
18356					return err
18357				}
18358				pvscvcrc.ID = &ID
18359			}
18360		}
18361	}
18362
18363	return nil
18364}
18365
18366// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat properties of VPN client root certificate of
18367// P2SVpnServerConfiguration.
18368type P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat struct {
18369	// PublicCertData - The certificate public data.
18370	PublicCertData *string `json:"publicCertData,omitempty"`
18371	// ProvisioningState - READ-ONLY; The provisioning state of the P2SVpnServerConfiguration VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18372	ProvisioningState *string `json:"provisioningState,omitempty"`
18373}
18374
18375// PacketCapture parameters that define the create packet capture operation.
18376type PacketCapture struct {
18377	*PacketCaptureParameters `json:"properties,omitempty"`
18378}
18379
18380// MarshalJSON is the custom marshaler for PacketCapture.
18381func (pc PacketCapture) MarshalJSON() ([]byte, error) {
18382	objectMap := make(map[string]interface{})
18383	if pc.PacketCaptureParameters != nil {
18384		objectMap["properties"] = pc.PacketCaptureParameters
18385	}
18386	return json.Marshal(objectMap)
18387}
18388
18389// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
18390func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
18391	var m map[string]*json.RawMessage
18392	err := json.Unmarshal(body, &m)
18393	if err != nil {
18394		return err
18395	}
18396	for k, v := range m {
18397		switch k {
18398		case "properties":
18399			if v != nil {
18400				var packetCaptureParameters PacketCaptureParameters
18401				err = json.Unmarshal(*v, &packetCaptureParameters)
18402				if err != nil {
18403					return err
18404				}
18405				pc.PacketCaptureParameters = &packetCaptureParameters
18406			}
18407		}
18408	}
18409
18410	return nil
18411}
18412
18413// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
18414type PacketCaptureFilter struct {
18415	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
18416	Protocol PcProtocol `json:"protocol,omitempty"`
18417	// 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.
18418	LocalIPAddress *string `json:"localIPAddress,omitempty"`
18419	// 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.
18420	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
18421	// 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.
18422	LocalPort *string `json:"localPort,omitempty"`
18423	// 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.
18424	RemotePort *string `json:"remotePort,omitempty"`
18425}
18426
18427// PacketCaptureListResult list of packet capture sessions.
18428type PacketCaptureListResult struct {
18429	autorest.Response `json:"-"`
18430	// Value - Information about packet capture sessions.
18431	Value *[]PacketCaptureResult `json:"value,omitempty"`
18432}
18433
18434// PacketCaptureParameters parameters that define the create packet capture operation.
18435type PacketCaptureParameters struct {
18436	// Target - The ID of the targeted resource, only VM is currently supported.
18437	Target *string `json:"target,omitempty"`
18438	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
18439	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
18440	// TotalBytesPerSession - Maximum size of the capture output.
18441	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
18442	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
18443	TimeLimitInSeconds *int32                        `json:"timeLimitInSeconds,omitempty"`
18444	StorageLocation    *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
18445	Filters            *[]PacketCaptureFilter        `json:"filters,omitempty"`
18446}
18447
18448// PacketCaptureQueryStatusResult status of packet capture session.
18449type PacketCaptureQueryStatusResult struct {
18450	autorest.Response `json:"-"`
18451	// Name - The name of the packet capture resource.
18452	Name *string `json:"name,omitempty"`
18453	// ID - The ID of the packet capture resource.
18454	ID *string `json:"id,omitempty"`
18455	// CaptureStartTime - The start time of the packet capture session.
18456	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
18457	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
18458	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
18459	// StopReason - The reason the current packet capture session was stopped.
18460	StopReason *string `json:"stopReason,omitempty"`
18461	// PacketCaptureError - List of errors of packet capture session.
18462	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
18463}
18464
18465// PacketCaptureResult information about packet capture session.
18466type PacketCaptureResult struct {
18467	autorest.Response `json:"-"`
18468	// Name - READ-ONLY; Name of the packet capture session.
18469	Name *string `json:"name,omitempty"`
18470	// ID - READ-ONLY; ID of the packet capture operation.
18471	ID                             *string `json:"id,omitempty"`
18472	Etag                           *string `json:"etag,omitempty"`
18473	*PacketCaptureResultProperties `json:"properties,omitempty"`
18474}
18475
18476// MarshalJSON is the custom marshaler for PacketCaptureResult.
18477func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
18478	objectMap := make(map[string]interface{})
18479	if pcr.Etag != nil {
18480		objectMap["etag"] = pcr.Etag
18481	}
18482	if pcr.PacketCaptureResultProperties != nil {
18483		objectMap["properties"] = pcr.PacketCaptureResultProperties
18484	}
18485	return json.Marshal(objectMap)
18486}
18487
18488// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
18489func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
18490	var m map[string]*json.RawMessage
18491	err := json.Unmarshal(body, &m)
18492	if err != nil {
18493		return err
18494	}
18495	for k, v := range m {
18496		switch k {
18497		case "name":
18498			if v != nil {
18499				var name string
18500				err = json.Unmarshal(*v, &name)
18501				if err != nil {
18502					return err
18503				}
18504				pcr.Name = &name
18505			}
18506		case "id":
18507			if v != nil {
18508				var ID string
18509				err = json.Unmarshal(*v, &ID)
18510				if err != nil {
18511					return err
18512				}
18513				pcr.ID = &ID
18514			}
18515		case "etag":
18516			if v != nil {
18517				var etag string
18518				err = json.Unmarshal(*v, &etag)
18519				if err != nil {
18520					return err
18521				}
18522				pcr.Etag = &etag
18523			}
18524		case "properties":
18525			if v != nil {
18526				var packetCaptureResultProperties PacketCaptureResultProperties
18527				err = json.Unmarshal(*v, &packetCaptureResultProperties)
18528				if err != nil {
18529					return err
18530				}
18531				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
18532			}
18533		}
18534	}
18535
18536	return nil
18537}
18538
18539// PacketCaptureResultProperties describes the properties of a packet capture session.
18540type PacketCaptureResultProperties struct {
18541	// ProvisioningState - The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18542	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18543	// Target - The ID of the targeted resource, only VM is currently supported.
18544	Target *string `json:"target,omitempty"`
18545	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
18546	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
18547	// TotalBytesPerSession - Maximum size of the capture output.
18548	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
18549	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
18550	TimeLimitInSeconds *int32                        `json:"timeLimitInSeconds,omitempty"`
18551	StorageLocation    *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
18552	Filters            *[]PacketCaptureFilter        `json:"filters,omitempty"`
18553}
18554
18555// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
18556// operation.
18557type PacketCapturesCreateFuture struct {
18558	azure.Future
18559}
18560
18561// Result returns the result of the asynchronous operation.
18562// If the operation has not completed it will return an error.
18563func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
18564	var done bool
18565	done, err = future.DoneWithContext(context.Background(), client)
18566	if err != nil {
18567		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
18568		return
18569	}
18570	if !done {
18571		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
18572		return
18573	}
18574	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18575	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
18576		pcr, err = client.CreateResponder(pcr.Response.Response)
18577		if err != nil {
18578			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
18579		}
18580	}
18581	return
18582}
18583
18584// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
18585// operation.
18586type PacketCapturesDeleteFuture struct {
18587	azure.Future
18588}
18589
18590// Result returns the result of the asynchronous operation.
18591// If the operation has not completed it will return an error.
18592func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
18593	var done bool
18594	done, err = future.DoneWithContext(context.Background(), client)
18595	if err != nil {
18596		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
18597		return
18598	}
18599	if !done {
18600		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
18601		return
18602	}
18603	ar.Response = future.Response()
18604	return
18605}
18606
18607// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
18608// operation.
18609type PacketCapturesGetStatusFuture struct {
18610	azure.Future
18611}
18612
18613// Result returns the result of the asynchronous operation.
18614// If the operation has not completed it will return an error.
18615func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
18616	var done bool
18617	done, err = future.DoneWithContext(context.Background(), client)
18618	if err != nil {
18619		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
18620		return
18621	}
18622	if !done {
18623		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
18624		return
18625	}
18626	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18627	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
18628		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
18629		if err != nil {
18630			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
18631		}
18632	}
18633	return
18634}
18635
18636// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
18637// operation.
18638type PacketCapturesStopFuture struct {
18639	azure.Future
18640}
18641
18642// Result returns the result of the asynchronous operation.
18643// If the operation has not completed it will return an error.
18644func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
18645	var done bool
18646	done, err = future.DoneWithContext(context.Background(), client)
18647	if err != nil {
18648		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
18649		return
18650	}
18651	if !done {
18652		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
18653		return
18654	}
18655	ar.Response = future.Response()
18656	return
18657}
18658
18659// PacketCaptureStorageLocation describes the storage location for a packet capture session.
18660type PacketCaptureStorageLocation struct {
18661	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
18662	StorageID *string `json:"storageId,omitempty"`
18663	// 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.
18664	StoragePath *string `json:"storagePath,omitempty"`
18665	// 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.
18666	FilePath *string `json:"filePath,omitempty"`
18667}
18668
18669// PatchRouteFilter route Filter Resource.
18670type PatchRouteFilter struct {
18671	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
18672	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
18673	Name *string `json:"name,omitempty"`
18674	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18675	Etag *string `json:"etag,omitempty"`
18676	// Type - READ-ONLY; Resource type.
18677	Type *string `json:"type,omitempty"`
18678	// Tags - Resource tags.
18679	Tags map[string]*string `json:"tags"`
18680	// ID - Resource ID.
18681	ID *string `json:"id,omitempty"`
18682}
18683
18684// MarshalJSON is the custom marshaler for PatchRouteFilter.
18685func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
18686	objectMap := make(map[string]interface{})
18687	if prf.RouteFilterPropertiesFormat != nil {
18688		objectMap["properties"] = prf.RouteFilterPropertiesFormat
18689	}
18690	if prf.Tags != nil {
18691		objectMap["tags"] = prf.Tags
18692	}
18693	if prf.ID != nil {
18694		objectMap["id"] = prf.ID
18695	}
18696	return json.Marshal(objectMap)
18697}
18698
18699// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
18700func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
18701	var m map[string]*json.RawMessage
18702	err := json.Unmarshal(body, &m)
18703	if err != nil {
18704		return err
18705	}
18706	for k, v := range m {
18707		switch k {
18708		case "properties":
18709			if v != nil {
18710				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
18711				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
18712				if err != nil {
18713					return err
18714				}
18715				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
18716			}
18717		case "name":
18718			if v != nil {
18719				var name string
18720				err = json.Unmarshal(*v, &name)
18721				if err != nil {
18722					return err
18723				}
18724				prf.Name = &name
18725			}
18726		case "etag":
18727			if v != nil {
18728				var etag string
18729				err = json.Unmarshal(*v, &etag)
18730				if err != nil {
18731					return err
18732				}
18733				prf.Etag = &etag
18734			}
18735		case "type":
18736			if v != nil {
18737				var typeVar string
18738				err = json.Unmarshal(*v, &typeVar)
18739				if err != nil {
18740					return err
18741				}
18742				prf.Type = &typeVar
18743			}
18744		case "tags":
18745			if v != nil {
18746				var tags map[string]*string
18747				err = json.Unmarshal(*v, &tags)
18748				if err != nil {
18749					return err
18750				}
18751				prf.Tags = tags
18752			}
18753		case "id":
18754			if v != nil {
18755				var ID string
18756				err = json.Unmarshal(*v, &ID)
18757				if err != nil {
18758					return err
18759				}
18760				prf.ID = &ID
18761			}
18762		}
18763	}
18764
18765	return nil
18766}
18767
18768// PatchRouteFilterRule route Filter Rule Resource
18769type PatchRouteFilterRule struct {
18770	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
18771	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
18772	Name *string `json:"name,omitempty"`
18773	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18774	Etag *string `json:"etag,omitempty"`
18775	// ID - Resource ID.
18776	ID *string `json:"id,omitempty"`
18777}
18778
18779// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
18780func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
18781	objectMap := make(map[string]interface{})
18782	if prfr.RouteFilterRulePropertiesFormat != nil {
18783		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
18784	}
18785	if prfr.ID != nil {
18786		objectMap["id"] = prfr.ID
18787	}
18788	return json.Marshal(objectMap)
18789}
18790
18791// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
18792func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
18793	var m map[string]*json.RawMessage
18794	err := json.Unmarshal(body, &m)
18795	if err != nil {
18796		return err
18797	}
18798	for k, v := range m {
18799		switch k {
18800		case "properties":
18801			if v != nil {
18802				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
18803				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
18804				if err != nil {
18805					return err
18806				}
18807				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
18808			}
18809		case "name":
18810			if v != nil {
18811				var name string
18812				err = json.Unmarshal(*v, &name)
18813				if err != nil {
18814					return err
18815				}
18816				prfr.Name = &name
18817			}
18818		case "etag":
18819			if v != nil {
18820				var etag string
18821				err = json.Unmarshal(*v, &etag)
18822				if err != nil {
18823					return err
18824				}
18825				prfr.Etag = &etag
18826			}
18827		case "id":
18828			if v != nil {
18829				var ID string
18830				err = json.Unmarshal(*v, &ID)
18831				if err != nil {
18832					return err
18833				}
18834				prfr.ID = &ID
18835			}
18836		}
18837	}
18838
18839	return nil
18840}
18841
18842// Probe a load balancer probe.
18843type Probe struct {
18844	autorest.Response `json:"-"`
18845	// ProbePropertiesFormat - Properties of load balancer probe.
18846	*ProbePropertiesFormat `json:"properties,omitempty"`
18847	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
18848	Name *string `json:"name,omitempty"`
18849	// Etag - A unique read-only string that changes whenever the resource is updated.
18850	Etag *string `json:"etag,omitempty"`
18851	// ID - Resource ID.
18852	ID *string `json:"id,omitempty"`
18853}
18854
18855// MarshalJSON is the custom marshaler for Probe.
18856func (p Probe) MarshalJSON() ([]byte, error) {
18857	objectMap := make(map[string]interface{})
18858	if p.ProbePropertiesFormat != nil {
18859		objectMap["properties"] = p.ProbePropertiesFormat
18860	}
18861	if p.Name != nil {
18862		objectMap["name"] = p.Name
18863	}
18864	if p.Etag != nil {
18865		objectMap["etag"] = p.Etag
18866	}
18867	if p.ID != nil {
18868		objectMap["id"] = p.ID
18869	}
18870	return json.Marshal(objectMap)
18871}
18872
18873// UnmarshalJSON is the custom unmarshaler for Probe struct.
18874func (p *Probe) UnmarshalJSON(body []byte) error {
18875	var m map[string]*json.RawMessage
18876	err := json.Unmarshal(body, &m)
18877	if err != nil {
18878		return err
18879	}
18880	for k, v := range m {
18881		switch k {
18882		case "properties":
18883			if v != nil {
18884				var probePropertiesFormat ProbePropertiesFormat
18885				err = json.Unmarshal(*v, &probePropertiesFormat)
18886				if err != nil {
18887					return err
18888				}
18889				p.ProbePropertiesFormat = &probePropertiesFormat
18890			}
18891		case "name":
18892			if v != nil {
18893				var name string
18894				err = json.Unmarshal(*v, &name)
18895				if err != nil {
18896					return err
18897				}
18898				p.Name = &name
18899			}
18900		case "etag":
18901			if v != nil {
18902				var etag string
18903				err = json.Unmarshal(*v, &etag)
18904				if err != nil {
18905					return err
18906				}
18907				p.Etag = &etag
18908			}
18909		case "id":
18910			if v != nil {
18911				var ID string
18912				err = json.Unmarshal(*v, &ID)
18913				if err != nil {
18914					return err
18915				}
18916				p.ID = &ID
18917			}
18918		}
18919	}
18920
18921	return nil
18922}
18923
18924// ProbePropertiesFormat load balancer probe resource.
18925type ProbePropertiesFormat struct {
18926	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
18927	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
18928	// Protocol - The protocol of the end point. Possible values are: 'Http', 'Tcp', or 'Https'. If 'Tcp' is specified, a received ACK is required for the probe to be successful. If 'Http' or 'Https' is specified, a 200 OK response from the specifies URI is required for the probe to be successful. Possible values include: 'ProbeProtocolHTTP', 'ProbeProtocolTCP', 'ProbeProtocolHTTPS'
18929	Protocol ProbeProtocol `json:"protocol,omitempty"`
18930	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
18931	Port *int32 `json:"port,omitempty"`
18932	// 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.
18933	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
18934	// 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.
18935	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
18936	// 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.
18937	RequestPath *string `json:"requestPath,omitempty"`
18938	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18939	ProvisioningState *string `json:"provisioningState,omitempty"`
18940}
18941
18942// Profile network profile resource.
18943type Profile struct {
18944	autorest.Response `json:"-"`
18945	// ProfilePropertiesFormat - Network profile properties.
18946	*ProfilePropertiesFormat `json:"properties,omitempty"`
18947	// Etag - A unique read-only string that changes whenever the resource is updated.
18948	Etag *string `json:"etag,omitempty"`
18949	// ID - Resource ID.
18950	ID *string `json:"id,omitempty"`
18951	// Name - READ-ONLY; Resource name.
18952	Name *string `json:"name,omitempty"`
18953	// Type - READ-ONLY; Resource type.
18954	Type *string `json:"type,omitempty"`
18955	// Location - Resource location.
18956	Location *string `json:"location,omitempty"`
18957	// Tags - Resource tags.
18958	Tags map[string]*string `json:"tags"`
18959}
18960
18961// MarshalJSON is the custom marshaler for Profile.
18962func (p Profile) MarshalJSON() ([]byte, error) {
18963	objectMap := make(map[string]interface{})
18964	if p.ProfilePropertiesFormat != nil {
18965		objectMap["properties"] = p.ProfilePropertiesFormat
18966	}
18967	if p.Etag != nil {
18968		objectMap["etag"] = p.Etag
18969	}
18970	if p.ID != nil {
18971		objectMap["id"] = p.ID
18972	}
18973	if p.Location != nil {
18974		objectMap["location"] = p.Location
18975	}
18976	if p.Tags != nil {
18977		objectMap["tags"] = p.Tags
18978	}
18979	return json.Marshal(objectMap)
18980}
18981
18982// UnmarshalJSON is the custom unmarshaler for Profile struct.
18983func (p *Profile) UnmarshalJSON(body []byte) error {
18984	var m map[string]*json.RawMessage
18985	err := json.Unmarshal(body, &m)
18986	if err != nil {
18987		return err
18988	}
18989	for k, v := range m {
18990		switch k {
18991		case "properties":
18992			if v != nil {
18993				var profilePropertiesFormat ProfilePropertiesFormat
18994				err = json.Unmarshal(*v, &profilePropertiesFormat)
18995				if err != nil {
18996					return err
18997				}
18998				p.ProfilePropertiesFormat = &profilePropertiesFormat
18999			}
19000		case "etag":
19001			if v != nil {
19002				var etag string
19003				err = json.Unmarshal(*v, &etag)
19004				if err != nil {
19005					return err
19006				}
19007				p.Etag = &etag
19008			}
19009		case "id":
19010			if v != nil {
19011				var ID string
19012				err = json.Unmarshal(*v, &ID)
19013				if err != nil {
19014					return err
19015				}
19016				p.ID = &ID
19017			}
19018		case "name":
19019			if v != nil {
19020				var name string
19021				err = json.Unmarshal(*v, &name)
19022				if err != nil {
19023					return err
19024				}
19025				p.Name = &name
19026			}
19027		case "type":
19028			if v != nil {
19029				var typeVar string
19030				err = json.Unmarshal(*v, &typeVar)
19031				if err != nil {
19032					return err
19033				}
19034				p.Type = &typeVar
19035			}
19036		case "location":
19037			if v != nil {
19038				var location string
19039				err = json.Unmarshal(*v, &location)
19040				if err != nil {
19041					return err
19042				}
19043				p.Location = &location
19044			}
19045		case "tags":
19046			if v != nil {
19047				var tags map[string]*string
19048				err = json.Unmarshal(*v, &tags)
19049				if err != nil {
19050					return err
19051				}
19052				p.Tags = tags
19053			}
19054		}
19055	}
19056
19057	return nil
19058}
19059
19060// ProfileListResult response for ListNetworkProfiles API service call.
19061type ProfileListResult struct {
19062	autorest.Response `json:"-"`
19063	// Value - A list of network profiles that exist in a resource group.
19064	Value *[]Profile `json:"value,omitempty"`
19065	// NextLink - The URL to get the next set of results.
19066	NextLink *string `json:"nextLink,omitempty"`
19067}
19068
19069// ProfileListResultIterator provides access to a complete listing of Profile values.
19070type ProfileListResultIterator struct {
19071	i    int
19072	page ProfileListResultPage
19073}
19074
19075// NextWithContext advances to the next value.  If there was an error making
19076// the request the iterator does not advance and the error is returned.
19077func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
19078	if tracing.IsEnabled() {
19079		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
19080		defer func() {
19081			sc := -1
19082			if iter.Response().Response.Response != nil {
19083				sc = iter.Response().Response.Response.StatusCode
19084			}
19085			tracing.EndSpan(ctx, sc, err)
19086		}()
19087	}
19088	iter.i++
19089	if iter.i < len(iter.page.Values()) {
19090		return nil
19091	}
19092	err = iter.page.NextWithContext(ctx)
19093	if err != nil {
19094		iter.i--
19095		return err
19096	}
19097	iter.i = 0
19098	return nil
19099}
19100
19101// Next advances to the next value.  If there was an error making
19102// the request the iterator does not advance and the error is returned.
19103// Deprecated: Use NextWithContext() instead.
19104func (iter *ProfileListResultIterator) Next() error {
19105	return iter.NextWithContext(context.Background())
19106}
19107
19108// NotDone returns true if the enumeration should be started or is not yet complete.
19109func (iter ProfileListResultIterator) NotDone() bool {
19110	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19111}
19112
19113// Response returns the raw server response from the last page request.
19114func (iter ProfileListResultIterator) Response() ProfileListResult {
19115	return iter.page.Response()
19116}
19117
19118// Value returns the current value or a zero-initialized value if the
19119// iterator has advanced beyond the end of the collection.
19120func (iter ProfileListResultIterator) Value() Profile {
19121	if !iter.page.NotDone() {
19122		return Profile{}
19123	}
19124	return iter.page.Values()[iter.i]
19125}
19126
19127// Creates a new instance of the ProfileListResultIterator type.
19128func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
19129	return ProfileListResultIterator{page: page}
19130}
19131
19132// IsEmpty returns true if the ListResult contains no values.
19133func (plr ProfileListResult) IsEmpty() bool {
19134	return plr.Value == nil || len(*plr.Value) == 0
19135}
19136
19137// profileListResultPreparer prepares a request to retrieve the next set of results.
19138// It returns nil if no more results exist.
19139func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
19140	if plr.NextLink == nil || len(to.String(plr.NextLink)) < 1 {
19141		return nil, nil
19142	}
19143	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19144		autorest.AsJSON(),
19145		autorest.AsGet(),
19146		autorest.WithBaseURL(to.String(plr.NextLink)))
19147}
19148
19149// ProfileListResultPage contains a page of Profile values.
19150type ProfileListResultPage struct {
19151	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
19152	plr ProfileListResult
19153}
19154
19155// NextWithContext advances to the next page of values.  If there was an error making
19156// the request the page does not advance and the error is returned.
19157func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
19158	if tracing.IsEnabled() {
19159		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
19160		defer func() {
19161			sc := -1
19162			if page.Response().Response.Response != nil {
19163				sc = page.Response().Response.Response.StatusCode
19164			}
19165			tracing.EndSpan(ctx, sc, err)
19166		}()
19167	}
19168	next, err := page.fn(ctx, page.plr)
19169	if err != nil {
19170		return err
19171	}
19172	page.plr = next
19173	return nil
19174}
19175
19176// Next advances to the next page of values.  If there was an error making
19177// the request the page does not advance and the error is returned.
19178// Deprecated: Use NextWithContext() instead.
19179func (page *ProfileListResultPage) Next() error {
19180	return page.NextWithContext(context.Background())
19181}
19182
19183// NotDone returns true if the page enumeration should be started or is not yet complete.
19184func (page ProfileListResultPage) NotDone() bool {
19185	return !page.plr.IsEmpty()
19186}
19187
19188// Response returns the raw server response from the last page request.
19189func (page ProfileListResultPage) Response() ProfileListResult {
19190	return page.plr
19191}
19192
19193// Values returns the slice of values for the current page or nil if there are no values.
19194func (page ProfileListResultPage) Values() []Profile {
19195	if page.plr.IsEmpty() {
19196		return nil
19197	}
19198	return *page.plr.Value
19199}
19200
19201// Creates a new instance of the ProfileListResultPage type.
19202func NewProfileListResultPage(getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
19203	return ProfileListResultPage{fn: getNextPage}
19204}
19205
19206// ProfilePropertiesFormat network profile properties.
19207type ProfilePropertiesFormat struct {
19208	// ContainerNetworkInterfaces - List of child container network interfaces.
19209	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
19210	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
19211	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
19212	// ResourceGUID - READ-ONLY; The resource GUID property of the network interface resource.
19213	ResourceGUID *string `json:"resourceGuid,omitempty"`
19214	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
19215	ProvisioningState *string `json:"provisioningState,omitempty"`
19216}
19217
19218// ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19219// operation.
19220type ProfilesDeleteFuture struct {
19221	azure.Future
19222}
19223
19224// Result returns the result of the asynchronous operation.
19225// If the operation has not completed it will return an error.
19226func (future *ProfilesDeleteFuture) Result(client ProfilesClient) (ar autorest.Response, err error) {
19227	var done bool
19228	done, err = future.DoneWithContext(context.Background(), client)
19229	if err != nil {
19230		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
19231		return
19232	}
19233	if !done {
19234		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
19235		return
19236	}
19237	ar.Response = future.Response()
19238	return
19239}
19240
19241// ProtocolConfiguration configuration of the protocol.
19242type ProtocolConfiguration struct {
19243	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
19244}
19245
19246// PublicIPAddress public IP address resource.
19247type PublicIPAddress struct {
19248	autorest.Response `json:"-"`
19249	// Sku - The public IP address SKU.
19250	Sku *PublicIPAddressSku `json:"sku,omitempty"`
19251	// PublicIPAddressPropertiesFormat - Public IP address properties.
19252	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
19253	// Etag - A unique read-only string that changes whenever the resource is updated.
19254	Etag *string `json:"etag,omitempty"`
19255	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
19256	Zones *[]string `json:"zones,omitempty"`
19257	// ID - Resource ID.
19258	ID *string `json:"id,omitempty"`
19259	// Name - READ-ONLY; Resource name.
19260	Name *string `json:"name,omitempty"`
19261	// Type - READ-ONLY; Resource type.
19262	Type *string `json:"type,omitempty"`
19263	// Location - Resource location.
19264	Location *string `json:"location,omitempty"`
19265	// Tags - Resource tags.
19266	Tags map[string]*string `json:"tags"`
19267}
19268
19269// MarshalJSON is the custom marshaler for PublicIPAddress.
19270func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
19271	objectMap := make(map[string]interface{})
19272	if pia.Sku != nil {
19273		objectMap["sku"] = pia.Sku
19274	}
19275	if pia.PublicIPAddressPropertiesFormat != nil {
19276		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
19277	}
19278	if pia.Etag != nil {
19279		objectMap["etag"] = pia.Etag
19280	}
19281	if pia.Zones != nil {
19282		objectMap["zones"] = pia.Zones
19283	}
19284	if pia.ID != nil {
19285		objectMap["id"] = pia.ID
19286	}
19287	if pia.Location != nil {
19288		objectMap["location"] = pia.Location
19289	}
19290	if pia.Tags != nil {
19291		objectMap["tags"] = pia.Tags
19292	}
19293	return json.Marshal(objectMap)
19294}
19295
19296// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
19297func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
19298	var m map[string]*json.RawMessage
19299	err := json.Unmarshal(body, &m)
19300	if err != nil {
19301		return err
19302	}
19303	for k, v := range m {
19304		switch k {
19305		case "sku":
19306			if v != nil {
19307				var sku PublicIPAddressSku
19308				err = json.Unmarshal(*v, &sku)
19309				if err != nil {
19310					return err
19311				}
19312				pia.Sku = &sku
19313			}
19314		case "properties":
19315			if v != nil {
19316				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
19317				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
19318				if err != nil {
19319					return err
19320				}
19321				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
19322			}
19323		case "etag":
19324			if v != nil {
19325				var etag string
19326				err = json.Unmarshal(*v, &etag)
19327				if err != nil {
19328					return err
19329				}
19330				pia.Etag = &etag
19331			}
19332		case "zones":
19333			if v != nil {
19334				var zones []string
19335				err = json.Unmarshal(*v, &zones)
19336				if err != nil {
19337					return err
19338				}
19339				pia.Zones = &zones
19340			}
19341		case "id":
19342			if v != nil {
19343				var ID string
19344				err = json.Unmarshal(*v, &ID)
19345				if err != nil {
19346					return err
19347				}
19348				pia.ID = &ID
19349			}
19350		case "name":
19351			if v != nil {
19352				var name string
19353				err = json.Unmarshal(*v, &name)
19354				if err != nil {
19355					return err
19356				}
19357				pia.Name = &name
19358			}
19359		case "type":
19360			if v != nil {
19361				var typeVar string
19362				err = json.Unmarshal(*v, &typeVar)
19363				if err != nil {
19364					return err
19365				}
19366				pia.Type = &typeVar
19367			}
19368		case "location":
19369			if v != nil {
19370				var location string
19371				err = json.Unmarshal(*v, &location)
19372				if err != nil {
19373					return err
19374				}
19375				pia.Location = &location
19376			}
19377		case "tags":
19378			if v != nil {
19379				var tags map[string]*string
19380				err = json.Unmarshal(*v, &tags)
19381				if err != nil {
19382					return err
19383				}
19384				pia.Tags = tags
19385			}
19386		}
19387	}
19388
19389	return nil
19390}
19391
19392// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address
19393type PublicIPAddressDNSSettings struct {
19394	// 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.
19395	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
19396	// 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.
19397	Fqdn *string `json:"fqdn,omitempty"`
19398	// 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.
19399	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
19400}
19401
19402// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
19403// long-running operation.
19404type PublicIPAddressesCreateOrUpdateFuture struct {
19405	azure.Future
19406}
19407
19408// Result returns the result of the asynchronous operation.
19409// If the operation has not completed it will return an error.
19410func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
19411	var done bool
19412	done, err = future.DoneWithContext(context.Background(), client)
19413	if err != nil {
19414		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19415		return
19416	}
19417	if !done {
19418		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
19419		return
19420	}
19421	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19422	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
19423		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
19424		if err != nil {
19425			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
19426		}
19427	}
19428	return
19429}
19430
19431// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19432// operation.
19433type PublicIPAddressesDeleteFuture struct {
19434	azure.Future
19435}
19436
19437// Result returns the result of the asynchronous operation.
19438// If the operation has not completed it will return an error.
19439func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
19440	var done bool
19441	done, err = future.DoneWithContext(context.Background(), client)
19442	if err != nil {
19443		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
19444		return
19445	}
19446	if !done {
19447		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
19448		return
19449	}
19450	ar.Response = future.Response()
19451	return
19452}
19453
19454// PublicIPAddressesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
19455// long-running operation.
19456type PublicIPAddressesUpdateTagsFuture struct {
19457	azure.Future
19458}
19459
19460// Result returns the result of the asynchronous operation.
19461// If the operation has not completed it will return an error.
19462func (future *PublicIPAddressesUpdateTagsFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
19463	var done bool
19464	done, err = future.DoneWithContext(context.Background(), client)
19465	if err != nil {
19466		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
19467		return
19468	}
19469	if !done {
19470		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesUpdateTagsFuture")
19471		return
19472	}
19473	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19474	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
19475		pia, err = client.UpdateTagsResponder(pia.Response.Response)
19476		if err != nil {
19477			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", pia.Response.Response, "Failure responding to request")
19478		}
19479	}
19480	return
19481}
19482
19483// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
19484type PublicIPAddressListResult struct {
19485	autorest.Response `json:"-"`
19486	// Value - A list of public IP addresses that exists in a resource group.
19487	Value *[]PublicIPAddress `json:"value,omitempty"`
19488	// NextLink - The URL to get the next set of results.
19489	NextLink *string `json:"nextLink,omitempty"`
19490}
19491
19492// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
19493type PublicIPAddressListResultIterator struct {
19494	i    int
19495	page PublicIPAddressListResultPage
19496}
19497
19498// NextWithContext advances to the next value.  If there was an error making
19499// the request the iterator does not advance and the error is returned.
19500func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
19501	if tracing.IsEnabled() {
19502		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
19503		defer func() {
19504			sc := -1
19505			if iter.Response().Response.Response != nil {
19506				sc = iter.Response().Response.Response.StatusCode
19507			}
19508			tracing.EndSpan(ctx, sc, err)
19509		}()
19510	}
19511	iter.i++
19512	if iter.i < len(iter.page.Values()) {
19513		return nil
19514	}
19515	err = iter.page.NextWithContext(ctx)
19516	if err != nil {
19517		iter.i--
19518		return err
19519	}
19520	iter.i = 0
19521	return nil
19522}
19523
19524// Next advances to the next value.  If there was an error making
19525// the request the iterator does not advance and the error is returned.
19526// Deprecated: Use NextWithContext() instead.
19527func (iter *PublicIPAddressListResultIterator) Next() error {
19528	return iter.NextWithContext(context.Background())
19529}
19530
19531// NotDone returns true if the enumeration should be started or is not yet complete.
19532func (iter PublicIPAddressListResultIterator) NotDone() bool {
19533	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19534}
19535
19536// Response returns the raw server response from the last page request.
19537func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
19538	return iter.page.Response()
19539}
19540
19541// Value returns the current value or a zero-initialized value if the
19542// iterator has advanced beyond the end of the collection.
19543func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
19544	if !iter.page.NotDone() {
19545		return PublicIPAddress{}
19546	}
19547	return iter.page.Values()[iter.i]
19548}
19549
19550// Creates a new instance of the PublicIPAddressListResultIterator type.
19551func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
19552	return PublicIPAddressListResultIterator{page: page}
19553}
19554
19555// IsEmpty returns true if the ListResult contains no values.
19556func (pialr PublicIPAddressListResult) IsEmpty() bool {
19557	return pialr.Value == nil || len(*pialr.Value) == 0
19558}
19559
19560// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
19561// It returns nil if no more results exist.
19562func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
19563	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
19564		return nil, nil
19565	}
19566	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19567		autorest.AsJSON(),
19568		autorest.AsGet(),
19569		autorest.WithBaseURL(to.String(pialr.NextLink)))
19570}
19571
19572// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
19573type PublicIPAddressListResultPage struct {
19574	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
19575	pialr PublicIPAddressListResult
19576}
19577
19578// NextWithContext advances to the next page of values.  If there was an error making
19579// the request the page does not advance and the error is returned.
19580func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
19581	if tracing.IsEnabled() {
19582		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
19583		defer func() {
19584			sc := -1
19585			if page.Response().Response.Response != nil {
19586				sc = page.Response().Response.Response.StatusCode
19587			}
19588			tracing.EndSpan(ctx, sc, err)
19589		}()
19590	}
19591	next, err := page.fn(ctx, page.pialr)
19592	if err != nil {
19593		return err
19594	}
19595	page.pialr = next
19596	return nil
19597}
19598
19599// Next advances to the next page of values.  If there was an error making
19600// the request the page does not advance and the error is returned.
19601// Deprecated: Use NextWithContext() instead.
19602func (page *PublicIPAddressListResultPage) Next() error {
19603	return page.NextWithContext(context.Background())
19604}
19605
19606// NotDone returns true if the page enumeration should be started or is not yet complete.
19607func (page PublicIPAddressListResultPage) NotDone() bool {
19608	return !page.pialr.IsEmpty()
19609}
19610
19611// Response returns the raw server response from the last page request.
19612func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
19613	return page.pialr
19614}
19615
19616// Values returns the slice of values for the current page or nil if there are no values.
19617func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
19618	if page.pialr.IsEmpty() {
19619		return nil
19620	}
19621	return *page.pialr.Value
19622}
19623
19624// Creates a new instance of the PublicIPAddressListResultPage type.
19625func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
19626	return PublicIPAddressListResultPage{fn: getNextPage}
19627}
19628
19629// PublicIPAddressPropertiesFormat public IP address properties.
19630type PublicIPAddressPropertiesFormat struct {
19631	// PublicIPAllocationMethod - The public IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
19632	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
19633	// PublicIPAddressVersion - The public IP address version. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6'
19634	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
19635	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
19636	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
19637	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
19638	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
19639	// IPTags - The list of tags associated with the public IP address.
19640	IPTags *[]IPTag `json:"ipTags,omitempty"`
19641	// IPAddress - The IP address associated with the public IP address resource.
19642	IPAddress *string `json:"ipAddress,omitempty"`
19643	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
19644	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
19645	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
19646	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
19647	// ResourceGUID - The resource GUID property of the public IP resource.
19648	ResourceGUID *string `json:"resourceGuid,omitempty"`
19649	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
19650	ProvisioningState *string `json:"provisioningState,omitempty"`
19651}
19652
19653// PublicIPAddressSku SKU of a public IP address
19654type PublicIPAddressSku struct {
19655	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
19656	Name PublicIPAddressSkuName `json:"name,omitempty"`
19657}
19658
19659// PublicIPPrefix public IP prefix resource.
19660type PublicIPPrefix struct {
19661	autorest.Response `json:"-"`
19662	// Sku - The public IP prefix SKU.
19663	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
19664	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
19665	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
19666	// Etag - A unique read-only string that changes whenever the resource is updated.
19667	Etag *string `json:"etag,omitempty"`
19668	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
19669	Zones *[]string `json:"zones,omitempty"`
19670	// ID - Resource ID.
19671	ID *string `json:"id,omitempty"`
19672	// Name - READ-ONLY; Resource name.
19673	Name *string `json:"name,omitempty"`
19674	// Type - READ-ONLY; Resource type.
19675	Type *string `json:"type,omitempty"`
19676	// Location - Resource location.
19677	Location *string `json:"location,omitempty"`
19678	// Tags - Resource tags.
19679	Tags map[string]*string `json:"tags"`
19680}
19681
19682// MarshalJSON is the custom marshaler for PublicIPPrefix.
19683func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
19684	objectMap := make(map[string]interface{})
19685	if pip.Sku != nil {
19686		objectMap["sku"] = pip.Sku
19687	}
19688	if pip.PublicIPPrefixPropertiesFormat != nil {
19689		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
19690	}
19691	if pip.Etag != nil {
19692		objectMap["etag"] = pip.Etag
19693	}
19694	if pip.Zones != nil {
19695		objectMap["zones"] = pip.Zones
19696	}
19697	if pip.ID != nil {
19698		objectMap["id"] = pip.ID
19699	}
19700	if pip.Location != nil {
19701		objectMap["location"] = pip.Location
19702	}
19703	if pip.Tags != nil {
19704		objectMap["tags"] = pip.Tags
19705	}
19706	return json.Marshal(objectMap)
19707}
19708
19709// UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
19710func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
19711	var m map[string]*json.RawMessage
19712	err := json.Unmarshal(body, &m)
19713	if err != nil {
19714		return err
19715	}
19716	for k, v := range m {
19717		switch k {
19718		case "sku":
19719			if v != nil {
19720				var sku PublicIPPrefixSku
19721				err = json.Unmarshal(*v, &sku)
19722				if err != nil {
19723					return err
19724				}
19725				pip.Sku = &sku
19726			}
19727		case "properties":
19728			if v != nil {
19729				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
19730				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
19731				if err != nil {
19732					return err
19733				}
19734				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
19735			}
19736		case "etag":
19737			if v != nil {
19738				var etag string
19739				err = json.Unmarshal(*v, &etag)
19740				if err != nil {
19741					return err
19742				}
19743				pip.Etag = &etag
19744			}
19745		case "zones":
19746			if v != nil {
19747				var zones []string
19748				err = json.Unmarshal(*v, &zones)
19749				if err != nil {
19750					return err
19751				}
19752				pip.Zones = &zones
19753			}
19754		case "id":
19755			if v != nil {
19756				var ID string
19757				err = json.Unmarshal(*v, &ID)
19758				if err != nil {
19759					return err
19760				}
19761				pip.ID = &ID
19762			}
19763		case "name":
19764			if v != nil {
19765				var name string
19766				err = json.Unmarshal(*v, &name)
19767				if err != nil {
19768					return err
19769				}
19770				pip.Name = &name
19771			}
19772		case "type":
19773			if v != nil {
19774				var typeVar string
19775				err = json.Unmarshal(*v, &typeVar)
19776				if err != nil {
19777					return err
19778				}
19779				pip.Type = &typeVar
19780			}
19781		case "location":
19782			if v != nil {
19783				var location string
19784				err = json.Unmarshal(*v, &location)
19785				if err != nil {
19786					return err
19787				}
19788				pip.Location = &location
19789			}
19790		case "tags":
19791			if v != nil {
19792				var tags map[string]*string
19793				err = json.Unmarshal(*v, &tags)
19794				if err != nil {
19795					return err
19796				}
19797				pip.Tags = tags
19798			}
19799		}
19800	}
19801
19802	return nil
19803}
19804
19805// PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
19806// long-running operation.
19807type PublicIPPrefixesCreateOrUpdateFuture struct {
19808	azure.Future
19809}
19810
19811// Result returns the result of the asynchronous operation.
19812// If the operation has not completed it will return an error.
19813func (future *PublicIPPrefixesCreateOrUpdateFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
19814	var done bool
19815	done, err = future.DoneWithContext(context.Background(), client)
19816	if err != nil {
19817		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19818		return
19819	}
19820	if !done {
19821		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
19822		return
19823	}
19824	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19825	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
19826		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
19827		if err != nil {
19828			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
19829		}
19830	}
19831	return
19832}
19833
19834// PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19835// operation.
19836type PublicIPPrefixesDeleteFuture struct {
19837	azure.Future
19838}
19839
19840// Result returns the result of the asynchronous operation.
19841// If the operation has not completed it will return an error.
19842func (future *PublicIPPrefixesDeleteFuture) Result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
19843	var done bool
19844	done, err = future.DoneWithContext(context.Background(), client)
19845	if err != nil {
19846		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
19847		return
19848	}
19849	if !done {
19850		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
19851		return
19852	}
19853	ar.Response = future.Response()
19854	return
19855}
19856
19857// PublicIPPrefixesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
19858// long-running operation.
19859type PublicIPPrefixesUpdateTagsFuture struct {
19860	azure.Future
19861}
19862
19863// Result returns the result of the asynchronous operation.
19864// If the operation has not completed it will return an error.
19865func (future *PublicIPPrefixesUpdateTagsFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
19866	var done bool
19867	done, err = future.DoneWithContext(context.Background(), client)
19868	if err != nil {
19869		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
19870		return
19871	}
19872	if !done {
19873		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesUpdateTagsFuture")
19874		return
19875	}
19876	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19877	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
19878		pip, err = client.UpdateTagsResponder(pip.Response.Response)
19879		if err != nil {
19880			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", pip.Response.Response, "Failure responding to request")
19881		}
19882	}
19883	return
19884}
19885
19886// PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
19887type PublicIPPrefixListResult struct {
19888	autorest.Response `json:"-"`
19889	// Value - A list of public IP prefixes that exists in a resource group.
19890	Value *[]PublicIPPrefix `json:"value,omitempty"`
19891	// NextLink - The URL to get the next set of results.
19892	NextLink *string `json:"nextLink,omitempty"`
19893}
19894
19895// PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
19896type PublicIPPrefixListResultIterator struct {
19897	i    int
19898	page PublicIPPrefixListResultPage
19899}
19900
19901// NextWithContext advances to the next value.  If there was an error making
19902// the request the iterator does not advance and the error is returned.
19903func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
19904	if tracing.IsEnabled() {
19905		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
19906		defer func() {
19907			sc := -1
19908			if iter.Response().Response.Response != nil {
19909				sc = iter.Response().Response.Response.StatusCode
19910			}
19911			tracing.EndSpan(ctx, sc, err)
19912		}()
19913	}
19914	iter.i++
19915	if iter.i < len(iter.page.Values()) {
19916		return nil
19917	}
19918	err = iter.page.NextWithContext(ctx)
19919	if err != nil {
19920		iter.i--
19921		return err
19922	}
19923	iter.i = 0
19924	return nil
19925}
19926
19927// Next advances to the next value.  If there was an error making
19928// the request the iterator does not advance and the error is returned.
19929// Deprecated: Use NextWithContext() instead.
19930func (iter *PublicIPPrefixListResultIterator) Next() error {
19931	return iter.NextWithContext(context.Background())
19932}
19933
19934// NotDone returns true if the enumeration should be started or is not yet complete.
19935func (iter PublicIPPrefixListResultIterator) NotDone() bool {
19936	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19937}
19938
19939// Response returns the raw server response from the last page request.
19940func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
19941	return iter.page.Response()
19942}
19943
19944// Value returns the current value or a zero-initialized value if the
19945// iterator has advanced beyond the end of the collection.
19946func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
19947	if !iter.page.NotDone() {
19948		return PublicIPPrefix{}
19949	}
19950	return iter.page.Values()[iter.i]
19951}
19952
19953// Creates a new instance of the PublicIPPrefixListResultIterator type.
19954func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
19955	return PublicIPPrefixListResultIterator{page: page}
19956}
19957
19958// IsEmpty returns true if the ListResult contains no values.
19959func (piplr PublicIPPrefixListResult) IsEmpty() bool {
19960	return piplr.Value == nil || len(*piplr.Value) == 0
19961}
19962
19963// publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
19964// It returns nil if no more results exist.
19965func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
19966	if piplr.NextLink == nil || len(to.String(piplr.NextLink)) < 1 {
19967		return nil, nil
19968	}
19969	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19970		autorest.AsJSON(),
19971		autorest.AsGet(),
19972		autorest.WithBaseURL(to.String(piplr.NextLink)))
19973}
19974
19975// PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
19976type PublicIPPrefixListResultPage struct {
19977	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
19978	piplr PublicIPPrefixListResult
19979}
19980
19981// NextWithContext advances to the next page of values.  If there was an error making
19982// the request the page does not advance and the error is returned.
19983func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
19984	if tracing.IsEnabled() {
19985		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
19986		defer func() {
19987			sc := -1
19988			if page.Response().Response.Response != nil {
19989				sc = page.Response().Response.Response.StatusCode
19990			}
19991			tracing.EndSpan(ctx, sc, err)
19992		}()
19993	}
19994	next, err := page.fn(ctx, page.piplr)
19995	if err != nil {
19996		return err
19997	}
19998	page.piplr = next
19999	return nil
20000}
20001
20002// Next advances to the next page of values.  If there was an error making
20003// the request the page does not advance and the error is returned.
20004// Deprecated: Use NextWithContext() instead.
20005func (page *PublicIPPrefixListResultPage) Next() error {
20006	return page.NextWithContext(context.Background())
20007}
20008
20009// NotDone returns true if the page enumeration should be started or is not yet complete.
20010func (page PublicIPPrefixListResultPage) NotDone() bool {
20011	return !page.piplr.IsEmpty()
20012}
20013
20014// Response returns the raw server response from the last page request.
20015func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
20016	return page.piplr
20017}
20018
20019// Values returns the slice of values for the current page or nil if there are no values.
20020func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
20021	if page.piplr.IsEmpty() {
20022		return nil
20023	}
20024	return *page.piplr.Value
20025}
20026
20027// Creates a new instance of the PublicIPPrefixListResultPage type.
20028func NewPublicIPPrefixListResultPage(getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
20029	return PublicIPPrefixListResultPage{fn: getNextPage}
20030}
20031
20032// PublicIPPrefixPropertiesFormat public IP prefix properties.
20033type PublicIPPrefixPropertiesFormat struct {
20034	// PublicIPAddressVersion - The public IP address version. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6'
20035	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
20036	// IPTags - The list of tags associated with the public IP prefix.
20037	IPTags *[]IPTag `json:"ipTags,omitempty"`
20038	// PrefixLength - The Length of the Public IP Prefix.
20039	PrefixLength *int32 `json:"prefixLength,omitempty"`
20040	// IPPrefix - The allocated Prefix
20041	IPPrefix *string `json:"ipPrefix,omitempty"`
20042	// PublicIPAddresses - The list of all referenced PublicIPAddresses
20043	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
20044	// LoadBalancerFrontendIPConfiguration - READ-ONLY; The reference to load balancer frontend IP configuration associated with the public IP prefix.
20045	LoadBalancerFrontendIPConfiguration *SubResource `json:"loadBalancerFrontendIpConfiguration,omitempty"`
20046	// ResourceGUID - The resource GUID property of the public IP prefix resource.
20047	ResourceGUID *string `json:"resourceGuid,omitempty"`
20048	// ProvisioningState - The provisioning state of the Public IP prefix resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
20049	ProvisioningState *string `json:"provisioningState,omitempty"`
20050}
20051
20052// PublicIPPrefixSku SKU of a public IP prefix
20053type PublicIPPrefixSku struct {
20054	// Name - Name of a public IP prefix SKU. Possible values include: 'Standard'
20055	Name PublicIPPrefixSkuName `json:"name,omitempty"`
20056}
20057
20058// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
20059type QueryTroubleshootingParameters struct {
20060	// TargetResourceID - The target resource ID to query the troubleshooting result.
20061	TargetResourceID *string `json:"targetResourceId,omitempty"`
20062}
20063
20064// ReferencedPublicIPAddress ...
20065type ReferencedPublicIPAddress struct {
20066	// ID - The PublicIPAddress Reference
20067	ID *string `json:"id,omitempty"`
20068}
20069
20070// Resource common resource representation.
20071type Resource struct {
20072	// ID - Resource ID.
20073	ID *string `json:"id,omitempty"`
20074	// Name - READ-ONLY; Resource name.
20075	Name *string `json:"name,omitempty"`
20076	// Type - READ-ONLY; Resource type.
20077	Type *string `json:"type,omitempty"`
20078	// Location - Resource location.
20079	Location *string `json:"location,omitempty"`
20080	// Tags - Resource tags.
20081	Tags map[string]*string `json:"tags"`
20082}
20083
20084// MarshalJSON is the custom marshaler for Resource.
20085func (r Resource) MarshalJSON() ([]byte, error) {
20086	objectMap := make(map[string]interface{})
20087	if r.ID != nil {
20088		objectMap["id"] = r.ID
20089	}
20090	if r.Location != nil {
20091		objectMap["location"] = r.Location
20092	}
20093	if r.Tags != nil {
20094		objectMap["tags"] = r.Tags
20095	}
20096	return json.Marshal(objectMap)
20097}
20098
20099// ResourceNavigationLink resourceNavigationLink resource.
20100type ResourceNavigationLink struct {
20101	// ResourceNavigationLinkFormat - Resource navigation link properties format.
20102	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
20103	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
20104	Name *string `json:"name,omitempty"`
20105	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20106	Etag *string `json:"etag,omitempty"`
20107	// ID - Resource ID.
20108	ID *string `json:"id,omitempty"`
20109}
20110
20111// MarshalJSON is the custom marshaler for ResourceNavigationLink.
20112func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
20113	objectMap := make(map[string]interface{})
20114	if rnl.ResourceNavigationLinkFormat != nil {
20115		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
20116	}
20117	if rnl.Name != nil {
20118		objectMap["name"] = rnl.Name
20119	}
20120	if rnl.ID != nil {
20121		objectMap["id"] = rnl.ID
20122	}
20123	return json.Marshal(objectMap)
20124}
20125
20126// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
20127func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
20128	var m map[string]*json.RawMessage
20129	err := json.Unmarshal(body, &m)
20130	if err != nil {
20131		return err
20132	}
20133	for k, v := range m {
20134		switch k {
20135		case "properties":
20136			if v != nil {
20137				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
20138				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
20139				if err != nil {
20140					return err
20141				}
20142				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
20143			}
20144		case "name":
20145			if v != nil {
20146				var name string
20147				err = json.Unmarshal(*v, &name)
20148				if err != nil {
20149					return err
20150				}
20151				rnl.Name = &name
20152			}
20153		case "etag":
20154			if v != nil {
20155				var etag string
20156				err = json.Unmarshal(*v, &etag)
20157				if err != nil {
20158					return err
20159				}
20160				rnl.Etag = &etag
20161			}
20162		case "id":
20163			if v != nil {
20164				var ID string
20165				err = json.Unmarshal(*v, &ID)
20166				if err != nil {
20167					return err
20168				}
20169				rnl.ID = &ID
20170			}
20171		}
20172	}
20173
20174	return nil
20175}
20176
20177// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
20178type ResourceNavigationLinkFormat struct {
20179	// LinkedResourceType - Resource type of the linked resource.
20180	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
20181	// Link - Link to the external resource
20182	Link *string `json:"link,omitempty"`
20183	// ProvisioningState - READ-ONLY; Provisioning state of the ResourceNavigationLink resource.
20184	ProvisioningState *string `json:"provisioningState,omitempty"`
20185}
20186
20187// RetentionPolicyParameters parameters that define the retention policy for flow log.
20188type RetentionPolicyParameters struct {
20189	// Days - Number of days to retain flow log records.
20190	Days *int32 `json:"days,omitempty"`
20191	// Enabled - Flag to enable/disable retention.
20192	Enabled *bool `json:"enabled,omitempty"`
20193}
20194
20195// Route route resource
20196type Route struct {
20197	autorest.Response `json:"-"`
20198	// RoutePropertiesFormat - Properties of the route.
20199	*RoutePropertiesFormat `json:"properties,omitempty"`
20200	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
20201	Name *string `json:"name,omitempty"`
20202	// Etag - A unique read-only string that changes whenever the resource is updated.
20203	Etag *string `json:"etag,omitempty"`
20204	// ID - Resource ID.
20205	ID *string `json:"id,omitempty"`
20206}
20207
20208// MarshalJSON is the custom marshaler for Route.
20209func (r Route) MarshalJSON() ([]byte, error) {
20210	objectMap := make(map[string]interface{})
20211	if r.RoutePropertiesFormat != nil {
20212		objectMap["properties"] = r.RoutePropertiesFormat
20213	}
20214	if r.Name != nil {
20215		objectMap["name"] = r.Name
20216	}
20217	if r.Etag != nil {
20218		objectMap["etag"] = r.Etag
20219	}
20220	if r.ID != nil {
20221		objectMap["id"] = r.ID
20222	}
20223	return json.Marshal(objectMap)
20224}
20225
20226// UnmarshalJSON is the custom unmarshaler for Route struct.
20227func (r *Route) UnmarshalJSON(body []byte) error {
20228	var m map[string]*json.RawMessage
20229	err := json.Unmarshal(body, &m)
20230	if err != nil {
20231		return err
20232	}
20233	for k, v := range m {
20234		switch k {
20235		case "properties":
20236			if v != nil {
20237				var routePropertiesFormat RoutePropertiesFormat
20238				err = json.Unmarshal(*v, &routePropertiesFormat)
20239				if err != nil {
20240					return err
20241				}
20242				r.RoutePropertiesFormat = &routePropertiesFormat
20243			}
20244		case "name":
20245			if v != nil {
20246				var name string
20247				err = json.Unmarshal(*v, &name)
20248				if err != nil {
20249					return err
20250				}
20251				r.Name = &name
20252			}
20253		case "etag":
20254			if v != nil {
20255				var etag string
20256				err = json.Unmarshal(*v, &etag)
20257				if err != nil {
20258					return err
20259				}
20260				r.Etag = &etag
20261			}
20262		case "id":
20263			if v != nil {
20264				var ID string
20265				err = json.Unmarshal(*v, &ID)
20266				if err != nil {
20267					return err
20268				}
20269				r.ID = &ID
20270			}
20271		}
20272	}
20273
20274	return nil
20275}
20276
20277// RouteFilter route Filter Resource.
20278type RouteFilter struct {
20279	autorest.Response            `json:"-"`
20280	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
20281	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
20282	Etag *string `json:"etag,omitempty"`
20283	// ID - Resource ID.
20284	ID *string `json:"id,omitempty"`
20285	// Name - READ-ONLY; Resource name.
20286	Name *string `json:"name,omitempty"`
20287	// Type - READ-ONLY; Resource type.
20288	Type *string `json:"type,omitempty"`
20289	// Location - Resource location.
20290	Location *string `json:"location,omitempty"`
20291	// Tags - Resource tags.
20292	Tags map[string]*string `json:"tags"`
20293}
20294
20295// MarshalJSON is the custom marshaler for RouteFilter.
20296func (rf RouteFilter) MarshalJSON() ([]byte, error) {
20297	objectMap := make(map[string]interface{})
20298	if rf.RouteFilterPropertiesFormat != nil {
20299		objectMap["properties"] = rf.RouteFilterPropertiesFormat
20300	}
20301	if rf.ID != nil {
20302		objectMap["id"] = rf.ID
20303	}
20304	if rf.Location != nil {
20305		objectMap["location"] = rf.Location
20306	}
20307	if rf.Tags != nil {
20308		objectMap["tags"] = rf.Tags
20309	}
20310	return json.Marshal(objectMap)
20311}
20312
20313// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
20314func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
20315	var m map[string]*json.RawMessage
20316	err := json.Unmarshal(body, &m)
20317	if err != nil {
20318		return err
20319	}
20320	for k, v := range m {
20321		switch k {
20322		case "properties":
20323			if v != nil {
20324				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
20325				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
20326				if err != nil {
20327					return err
20328				}
20329				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
20330			}
20331		case "etag":
20332			if v != nil {
20333				var etag string
20334				err = json.Unmarshal(*v, &etag)
20335				if err != nil {
20336					return err
20337				}
20338				rf.Etag = &etag
20339			}
20340		case "id":
20341			if v != nil {
20342				var ID string
20343				err = json.Unmarshal(*v, &ID)
20344				if err != nil {
20345					return err
20346				}
20347				rf.ID = &ID
20348			}
20349		case "name":
20350			if v != nil {
20351				var name string
20352				err = json.Unmarshal(*v, &name)
20353				if err != nil {
20354					return err
20355				}
20356				rf.Name = &name
20357			}
20358		case "type":
20359			if v != nil {
20360				var typeVar string
20361				err = json.Unmarshal(*v, &typeVar)
20362				if err != nil {
20363					return err
20364				}
20365				rf.Type = &typeVar
20366			}
20367		case "location":
20368			if v != nil {
20369				var location string
20370				err = json.Unmarshal(*v, &location)
20371				if err != nil {
20372					return err
20373				}
20374				rf.Location = &location
20375			}
20376		case "tags":
20377			if v != nil {
20378				var tags map[string]*string
20379				err = json.Unmarshal(*v, &tags)
20380				if err != nil {
20381					return err
20382				}
20383				rf.Tags = tags
20384			}
20385		}
20386	}
20387
20388	return nil
20389}
20390
20391// RouteFilterListResult response for the ListRouteFilters API service call.
20392type RouteFilterListResult struct {
20393	autorest.Response `json:"-"`
20394	// Value - Gets a list of route filters in a resource group.
20395	Value *[]RouteFilter `json:"value,omitempty"`
20396	// NextLink - The URL to get the next set of results.
20397	NextLink *string `json:"nextLink,omitempty"`
20398}
20399
20400// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
20401type RouteFilterListResultIterator struct {
20402	i    int
20403	page RouteFilterListResultPage
20404}
20405
20406// NextWithContext advances to the next value.  If there was an error making
20407// the request the iterator does not advance and the error is returned.
20408func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
20409	if tracing.IsEnabled() {
20410		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
20411		defer func() {
20412			sc := -1
20413			if iter.Response().Response.Response != nil {
20414				sc = iter.Response().Response.Response.StatusCode
20415			}
20416			tracing.EndSpan(ctx, sc, err)
20417		}()
20418	}
20419	iter.i++
20420	if iter.i < len(iter.page.Values()) {
20421		return nil
20422	}
20423	err = iter.page.NextWithContext(ctx)
20424	if err != nil {
20425		iter.i--
20426		return err
20427	}
20428	iter.i = 0
20429	return nil
20430}
20431
20432// Next advances to the next value.  If there was an error making
20433// the request the iterator does not advance and the error is returned.
20434// Deprecated: Use NextWithContext() instead.
20435func (iter *RouteFilterListResultIterator) Next() error {
20436	return iter.NextWithContext(context.Background())
20437}
20438
20439// NotDone returns true if the enumeration should be started or is not yet complete.
20440func (iter RouteFilterListResultIterator) NotDone() bool {
20441	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20442}
20443
20444// Response returns the raw server response from the last page request.
20445func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
20446	return iter.page.Response()
20447}
20448
20449// Value returns the current value or a zero-initialized value if the
20450// iterator has advanced beyond the end of the collection.
20451func (iter RouteFilterListResultIterator) Value() RouteFilter {
20452	if !iter.page.NotDone() {
20453		return RouteFilter{}
20454	}
20455	return iter.page.Values()[iter.i]
20456}
20457
20458// Creates a new instance of the RouteFilterListResultIterator type.
20459func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
20460	return RouteFilterListResultIterator{page: page}
20461}
20462
20463// IsEmpty returns true if the ListResult contains no values.
20464func (rflr RouteFilterListResult) IsEmpty() bool {
20465	return rflr.Value == nil || len(*rflr.Value) == 0
20466}
20467
20468// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
20469// It returns nil if no more results exist.
20470func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
20471	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
20472		return nil, nil
20473	}
20474	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20475		autorest.AsJSON(),
20476		autorest.AsGet(),
20477		autorest.WithBaseURL(to.String(rflr.NextLink)))
20478}
20479
20480// RouteFilterListResultPage contains a page of RouteFilter values.
20481type RouteFilterListResultPage struct {
20482	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
20483	rflr RouteFilterListResult
20484}
20485
20486// NextWithContext advances to the next page of values.  If there was an error making
20487// the request the page does not advance and the error is returned.
20488func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
20489	if tracing.IsEnabled() {
20490		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
20491		defer func() {
20492			sc := -1
20493			if page.Response().Response.Response != nil {
20494				sc = page.Response().Response.Response.StatusCode
20495			}
20496			tracing.EndSpan(ctx, sc, err)
20497		}()
20498	}
20499	next, err := page.fn(ctx, page.rflr)
20500	if err != nil {
20501		return err
20502	}
20503	page.rflr = next
20504	return nil
20505}
20506
20507// Next advances to the next page of values.  If there was an error making
20508// the request the page does not advance and the error is returned.
20509// Deprecated: Use NextWithContext() instead.
20510func (page *RouteFilterListResultPage) Next() error {
20511	return page.NextWithContext(context.Background())
20512}
20513
20514// NotDone returns true if the page enumeration should be started or is not yet complete.
20515func (page RouteFilterListResultPage) NotDone() bool {
20516	return !page.rflr.IsEmpty()
20517}
20518
20519// Response returns the raw server response from the last page request.
20520func (page RouteFilterListResultPage) Response() RouteFilterListResult {
20521	return page.rflr
20522}
20523
20524// Values returns the slice of values for the current page or nil if there are no values.
20525func (page RouteFilterListResultPage) Values() []RouteFilter {
20526	if page.rflr.IsEmpty() {
20527		return nil
20528	}
20529	return *page.rflr.Value
20530}
20531
20532// Creates a new instance of the RouteFilterListResultPage type.
20533func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
20534	return RouteFilterListResultPage{fn: getNextPage}
20535}
20536
20537// RouteFilterPropertiesFormat route Filter Resource
20538type RouteFilterPropertiesFormat struct {
20539	// Rules - Collection of RouteFilterRules contained within a route filter.
20540	Rules *[]RouteFilterRule `json:"rules,omitempty"`
20541	// Peerings - A collection of references to express route circuit peerings.
20542	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
20543	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
20544	ProvisioningState *string `json:"provisioningState,omitempty"`
20545}
20546
20547// RouteFilterRule route Filter Rule Resource
20548type RouteFilterRule struct {
20549	autorest.Response                `json:"-"`
20550	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
20551	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
20552	Name *string `json:"name,omitempty"`
20553	// Location - Resource location.
20554	Location *string `json:"location,omitempty"`
20555	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20556	Etag *string `json:"etag,omitempty"`
20557	// ID - Resource ID.
20558	ID *string `json:"id,omitempty"`
20559}
20560
20561// MarshalJSON is the custom marshaler for RouteFilterRule.
20562func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
20563	objectMap := make(map[string]interface{})
20564	if rfr.RouteFilterRulePropertiesFormat != nil {
20565		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
20566	}
20567	if rfr.Name != nil {
20568		objectMap["name"] = rfr.Name
20569	}
20570	if rfr.Location != nil {
20571		objectMap["location"] = rfr.Location
20572	}
20573	if rfr.ID != nil {
20574		objectMap["id"] = rfr.ID
20575	}
20576	return json.Marshal(objectMap)
20577}
20578
20579// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
20580func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
20581	var m map[string]*json.RawMessage
20582	err := json.Unmarshal(body, &m)
20583	if err != nil {
20584		return err
20585	}
20586	for k, v := range m {
20587		switch k {
20588		case "properties":
20589			if v != nil {
20590				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
20591				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
20592				if err != nil {
20593					return err
20594				}
20595				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
20596			}
20597		case "name":
20598			if v != nil {
20599				var name string
20600				err = json.Unmarshal(*v, &name)
20601				if err != nil {
20602					return err
20603				}
20604				rfr.Name = &name
20605			}
20606		case "location":
20607			if v != nil {
20608				var location string
20609				err = json.Unmarshal(*v, &location)
20610				if err != nil {
20611					return err
20612				}
20613				rfr.Location = &location
20614			}
20615		case "etag":
20616			if v != nil {
20617				var etag string
20618				err = json.Unmarshal(*v, &etag)
20619				if err != nil {
20620					return err
20621				}
20622				rfr.Etag = &etag
20623			}
20624		case "id":
20625			if v != nil {
20626				var ID string
20627				err = json.Unmarshal(*v, &ID)
20628				if err != nil {
20629					return err
20630				}
20631				rfr.ID = &ID
20632			}
20633		}
20634	}
20635
20636	return nil
20637}
20638
20639// RouteFilterRuleListResult response for the ListRouteFilterRules API service call
20640type RouteFilterRuleListResult struct {
20641	autorest.Response `json:"-"`
20642	// Value - Gets a list of RouteFilterRules in a resource group.
20643	Value *[]RouteFilterRule `json:"value,omitempty"`
20644	// NextLink - The URL to get the next set of results.
20645	NextLink *string `json:"nextLink,omitempty"`
20646}
20647
20648// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
20649type RouteFilterRuleListResultIterator struct {
20650	i    int
20651	page RouteFilterRuleListResultPage
20652}
20653
20654// NextWithContext advances to the next value.  If there was an error making
20655// the request the iterator does not advance and the error is returned.
20656func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
20657	if tracing.IsEnabled() {
20658		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
20659		defer func() {
20660			sc := -1
20661			if iter.Response().Response.Response != nil {
20662				sc = iter.Response().Response.Response.StatusCode
20663			}
20664			tracing.EndSpan(ctx, sc, err)
20665		}()
20666	}
20667	iter.i++
20668	if iter.i < len(iter.page.Values()) {
20669		return nil
20670	}
20671	err = iter.page.NextWithContext(ctx)
20672	if err != nil {
20673		iter.i--
20674		return err
20675	}
20676	iter.i = 0
20677	return nil
20678}
20679
20680// Next advances to the next value.  If there was an error making
20681// the request the iterator does not advance and the error is returned.
20682// Deprecated: Use NextWithContext() instead.
20683func (iter *RouteFilterRuleListResultIterator) Next() error {
20684	return iter.NextWithContext(context.Background())
20685}
20686
20687// NotDone returns true if the enumeration should be started or is not yet complete.
20688func (iter RouteFilterRuleListResultIterator) NotDone() bool {
20689	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20690}
20691
20692// Response returns the raw server response from the last page request.
20693func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
20694	return iter.page.Response()
20695}
20696
20697// Value returns the current value or a zero-initialized value if the
20698// iterator has advanced beyond the end of the collection.
20699func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
20700	if !iter.page.NotDone() {
20701		return RouteFilterRule{}
20702	}
20703	return iter.page.Values()[iter.i]
20704}
20705
20706// Creates a new instance of the RouteFilterRuleListResultIterator type.
20707func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
20708	return RouteFilterRuleListResultIterator{page: page}
20709}
20710
20711// IsEmpty returns true if the ListResult contains no values.
20712func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
20713	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
20714}
20715
20716// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
20717// It returns nil if no more results exist.
20718func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
20719	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
20720		return nil, nil
20721	}
20722	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20723		autorest.AsJSON(),
20724		autorest.AsGet(),
20725		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
20726}
20727
20728// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
20729type RouteFilterRuleListResultPage struct {
20730	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
20731	rfrlr RouteFilterRuleListResult
20732}
20733
20734// NextWithContext advances to the next page of values.  If there was an error making
20735// the request the page does not advance and the error is returned.
20736func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
20737	if tracing.IsEnabled() {
20738		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
20739		defer func() {
20740			sc := -1
20741			if page.Response().Response.Response != nil {
20742				sc = page.Response().Response.Response.StatusCode
20743			}
20744			tracing.EndSpan(ctx, sc, err)
20745		}()
20746	}
20747	next, err := page.fn(ctx, page.rfrlr)
20748	if err != nil {
20749		return err
20750	}
20751	page.rfrlr = next
20752	return nil
20753}
20754
20755// Next advances to the next page of values.  If there was an error making
20756// the request the page does not advance and the error is returned.
20757// Deprecated: Use NextWithContext() instead.
20758func (page *RouteFilterRuleListResultPage) Next() error {
20759	return page.NextWithContext(context.Background())
20760}
20761
20762// NotDone returns true if the page enumeration should be started or is not yet complete.
20763func (page RouteFilterRuleListResultPage) NotDone() bool {
20764	return !page.rfrlr.IsEmpty()
20765}
20766
20767// Response returns the raw server response from the last page request.
20768func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
20769	return page.rfrlr
20770}
20771
20772// Values returns the slice of values for the current page or nil if there are no values.
20773func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
20774	if page.rfrlr.IsEmpty() {
20775		return nil
20776	}
20777	return *page.rfrlr.Value
20778}
20779
20780// Creates a new instance of the RouteFilterRuleListResultPage type.
20781func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
20782	return RouteFilterRuleListResultPage{fn: getNextPage}
20783}
20784
20785// RouteFilterRulePropertiesFormat route Filter Rule Resource
20786type RouteFilterRulePropertiesFormat struct {
20787	// Access - The access type of the rule. Valid values are: 'Allow', 'Deny'. Possible values include: 'Allow', 'Deny'
20788	Access Access `json:"access,omitempty"`
20789	// RouteFilterRuleType - The rule type of the rule. Valid value is: 'Community'
20790	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
20791	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020']
20792	Communities *[]string `json:"communities,omitempty"`
20793	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
20794	ProvisioningState *string `json:"provisioningState,omitempty"`
20795}
20796
20797// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
20798// long-running operation.
20799type RouteFilterRulesCreateOrUpdateFuture struct {
20800	azure.Future
20801}
20802
20803// Result returns the result of the asynchronous operation.
20804// If the operation has not completed it will return an error.
20805func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
20806	var done bool
20807	done, err = future.DoneWithContext(context.Background(), client)
20808	if err != nil {
20809		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20810		return
20811	}
20812	if !done {
20813		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
20814		return
20815	}
20816	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20817	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
20818		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
20819		if err != nil {
20820			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
20821		}
20822	}
20823	return
20824}
20825
20826// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20827// operation.
20828type RouteFilterRulesDeleteFuture struct {
20829	azure.Future
20830}
20831
20832// Result returns the result of the asynchronous operation.
20833// If the operation has not completed it will return an error.
20834func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
20835	var done bool
20836	done, err = future.DoneWithContext(context.Background(), client)
20837	if err != nil {
20838		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
20839		return
20840	}
20841	if !done {
20842		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
20843		return
20844	}
20845	ar.Response = future.Response()
20846	return
20847}
20848
20849// RouteFilterRulesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
20850// operation.
20851type RouteFilterRulesUpdateFuture struct {
20852	azure.Future
20853}
20854
20855// Result returns the result of the asynchronous operation.
20856// If the operation has not completed it will return an error.
20857func (future *RouteFilterRulesUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
20858	var done bool
20859	done, err = future.DoneWithContext(context.Background(), client)
20860	if err != nil {
20861		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", future.Response(), "Polling failure")
20862		return
20863	}
20864	if !done {
20865		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesUpdateFuture")
20866		return
20867	}
20868	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20869	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
20870		rfr, err = client.UpdateResponder(rfr.Response.Response)
20871		if err != nil {
20872			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
20873		}
20874	}
20875	return
20876}
20877
20878// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
20879// long-running operation.
20880type RouteFiltersCreateOrUpdateFuture struct {
20881	azure.Future
20882}
20883
20884// Result returns the result of the asynchronous operation.
20885// If the operation has not completed it will return an error.
20886func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
20887	var done bool
20888	done, err = future.DoneWithContext(context.Background(), client)
20889	if err != nil {
20890		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20891		return
20892	}
20893	if !done {
20894		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
20895		return
20896	}
20897	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20898	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
20899		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
20900		if err != nil {
20901			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
20902		}
20903	}
20904	return
20905}
20906
20907// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20908// operation.
20909type RouteFiltersDeleteFuture struct {
20910	azure.Future
20911}
20912
20913// Result returns the result of the asynchronous operation.
20914// If the operation has not completed it will return an error.
20915func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
20916	var done bool
20917	done, err = future.DoneWithContext(context.Background(), client)
20918	if err != nil {
20919		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
20920		return
20921	}
20922	if !done {
20923		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
20924		return
20925	}
20926	ar.Response = future.Response()
20927	return
20928}
20929
20930// RouteFiltersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
20931// operation.
20932type RouteFiltersUpdateFuture struct {
20933	azure.Future
20934}
20935
20936// Result returns the result of the asynchronous operation.
20937// If the operation has not completed it will return an error.
20938func (future *RouteFiltersUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
20939	var done bool
20940	done, err = future.DoneWithContext(context.Background(), client)
20941	if err != nil {
20942		err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", future.Response(), "Polling failure")
20943		return
20944	}
20945	if !done {
20946		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersUpdateFuture")
20947		return
20948	}
20949	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20950	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
20951		rf, err = client.UpdateResponder(rf.Response.Response)
20952		if err != nil {
20953			err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
20954		}
20955	}
20956	return
20957}
20958
20959// RouteListResult response for the ListRoute API service call
20960type RouteListResult struct {
20961	autorest.Response `json:"-"`
20962	// Value - Gets a list of routes in a resource group.
20963	Value *[]Route `json:"value,omitempty"`
20964	// NextLink - The URL to get the next set of results.
20965	NextLink *string `json:"nextLink,omitempty"`
20966}
20967
20968// RouteListResultIterator provides access to a complete listing of Route values.
20969type RouteListResultIterator struct {
20970	i    int
20971	page RouteListResultPage
20972}
20973
20974// NextWithContext advances to the next value.  If there was an error making
20975// the request the iterator does not advance and the error is returned.
20976func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
20977	if tracing.IsEnabled() {
20978		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
20979		defer func() {
20980			sc := -1
20981			if iter.Response().Response.Response != nil {
20982				sc = iter.Response().Response.Response.StatusCode
20983			}
20984			tracing.EndSpan(ctx, sc, err)
20985		}()
20986	}
20987	iter.i++
20988	if iter.i < len(iter.page.Values()) {
20989		return nil
20990	}
20991	err = iter.page.NextWithContext(ctx)
20992	if err != nil {
20993		iter.i--
20994		return err
20995	}
20996	iter.i = 0
20997	return nil
20998}
20999
21000// Next advances to the next value.  If there was an error making
21001// the request the iterator does not advance and the error is returned.
21002// Deprecated: Use NextWithContext() instead.
21003func (iter *RouteListResultIterator) Next() error {
21004	return iter.NextWithContext(context.Background())
21005}
21006
21007// NotDone returns true if the enumeration should be started or is not yet complete.
21008func (iter RouteListResultIterator) NotDone() bool {
21009	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21010}
21011
21012// Response returns the raw server response from the last page request.
21013func (iter RouteListResultIterator) Response() RouteListResult {
21014	return iter.page.Response()
21015}
21016
21017// Value returns the current value or a zero-initialized value if the
21018// iterator has advanced beyond the end of the collection.
21019func (iter RouteListResultIterator) Value() Route {
21020	if !iter.page.NotDone() {
21021		return Route{}
21022	}
21023	return iter.page.Values()[iter.i]
21024}
21025
21026// Creates a new instance of the RouteListResultIterator type.
21027func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
21028	return RouteListResultIterator{page: page}
21029}
21030
21031// IsEmpty returns true if the ListResult contains no values.
21032func (rlr RouteListResult) IsEmpty() bool {
21033	return rlr.Value == nil || len(*rlr.Value) == 0
21034}
21035
21036// routeListResultPreparer prepares a request to retrieve the next set of results.
21037// It returns nil if no more results exist.
21038func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
21039	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
21040		return nil, nil
21041	}
21042	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21043		autorest.AsJSON(),
21044		autorest.AsGet(),
21045		autorest.WithBaseURL(to.String(rlr.NextLink)))
21046}
21047
21048// RouteListResultPage contains a page of Route values.
21049type RouteListResultPage struct {
21050	fn  func(context.Context, RouteListResult) (RouteListResult, error)
21051	rlr RouteListResult
21052}
21053
21054// NextWithContext advances to the next page of values.  If there was an error making
21055// the request the page does not advance and the error is returned.
21056func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
21057	if tracing.IsEnabled() {
21058		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
21059		defer func() {
21060			sc := -1
21061			if page.Response().Response.Response != nil {
21062				sc = page.Response().Response.Response.StatusCode
21063			}
21064			tracing.EndSpan(ctx, sc, err)
21065		}()
21066	}
21067	next, err := page.fn(ctx, page.rlr)
21068	if err != nil {
21069		return err
21070	}
21071	page.rlr = next
21072	return nil
21073}
21074
21075// Next advances to the next page of values.  If there was an error making
21076// the request the page does not advance and the error is returned.
21077// Deprecated: Use NextWithContext() instead.
21078func (page *RouteListResultPage) Next() error {
21079	return page.NextWithContext(context.Background())
21080}
21081
21082// NotDone returns true if the page enumeration should be started or is not yet complete.
21083func (page RouteListResultPage) NotDone() bool {
21084	return !page.rlr.IsEmpty()
21085}
21086
21087// Response returns the raw server response from the last page request.
21088func (page RouteListResultPage) Response() RouteListResult {
21089	return page.rlr
21090}
21091
21092// Values returns the slice of values for the current page or nil if there are no values.
21093func (page RouteListResultPage) Values() []Route {
21094	if page.rlr.IsEmpty() {
21095		return nil
21096	}
21097	return *page.rlr.Value
21098}
21099
21100// Creates a new instance of the RouteListResultPage type.
21101func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
21102	return RouteListResultPage{fn: getNextPage}
21103}
21104
21105// RoutePropertiesFormat route resource
21106type RoutePropertiesFormat struct {
21107	// AddressPrefix - The destination CIDR to which the route applies.
21108	AddressPrefix *string `json:"addressPrefix,omitempty"`
21109	// NextHopType - The type of Azure hop the packet should be sent to. Possible values are: 'VirtualNetworkGateway', 'VnetLocal', 'Internet', 'VirtualAppliance', and 'None'. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
21110	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
21111	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
21112	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
21113	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
21114	ProvisioningState *string `json:"provisioningState,omitempty"`
21115}
21116
21117// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
21118// operation.
21119type RoutesCreateOrUpdateFuture struct {
21120	azure.Future
21121}
21122
21123// Result returns the result of the asynchronous operation.
21124// If the operation has not completed it will return an error.
21125func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
21126	var done bool
21127	done, err = future.DoneWithContext(context.Background(), client)
21128	if err != nil {
21129		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21130		return
21131	}
21132	if !done {
21133		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
21134		return
21135	}
21136	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21137	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
21138		r, err = client.CreateOrUpdateResponder(r.Response.Response)
21139		if err != nil {
21140			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
21141		}
21142	}
21143	return
21144}
21145
21146// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
21147type RoutesDeleteFuture struct {
21148	azure.Future
21149}
21150
21151// Result returns the result of the asynchronous operation.
21152// If the operation has not completed it will return an error.
21153func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
21154	var done bool
21155	done, err = future.DoneWithContext(context.Background(), client)
21156	if err != nil {
21157		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
21158		return
21159	}
21160	if !done {
21161		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
21162		return
21163	}
21164	ar.Response = future.Response()
21165	return
21166}
21167
21168// RouteTable route table resource.
21169type RouteTable struct {
21170	autorest.Response `json:"-"`
21171	// RouteTablePropertiesFormat - Properties of the route table.
21172	*RouteTablePropertiesFormat `json:"properties,omitempty"`
21173	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
21174	Etag *string `json:"etag,omitempty"`
21175	// ID - Resource ID.
21176	ID *string `json:"id,omitempty"`
21177	// Name - READ-ONLY; Resource name.
21178	Name *string `json:"name,omitempty"`
21179	// Type - READ-ONLY; Resource type.
21180	Type *string `json:"type,omitempty"`
21181	// Location - Resource location.
21182	Location *string `json:"location,omitempty"`
21183	// Tags - Resource tags.
21184	Tags map[string]*string `json:"tags"`
21185}
21186
21187// MarshalJSON is the custom marshaler for RouteTable.
21188func (rt RouteTable) MarshalJSON() ([]byte, error) {
21189	objectMap := make(map[string]interface{})
21190	if rt.RouteTablePropertiesFormat != nil {
21191		objectMap["properties"] = rt.RouteTablePropertiesFormat
21192	}
21193	if rt.Etag != nil {
21194		objectMap["etag"] = rt.Etag
21195	}
21196	if rt.ID != nil {
21197		objectMap["id"] = rt.ID
21198	}
21199	if rt.Location != nil {
21200		objectMap["location"] = rt.Location
21201	}
21202	if rt.Tags != nil {
21203		objectMap["tags"] = rt.Tags
21204	}
21205	return json.Marshal(objectMap)
21206}
21207
21208// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
21209func (rt *RouteTable) UnmarshalJSON(body []byte) error {
21210	var m map[string]*json.RawMessage
21211	err := json.Unmarshal(body, &m)
21212	if err != nil {
21213		return err
21214	}
21215	for k, v := range m {
21216		switch k {
21217		case "properties":
21218			if v != nil {
21219				var routeTablePropertiesFormat RouteTablePropertiesFormat
21220				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
21221				if err != nil {
21222					return err
21223				}
21224				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
21225			}
21226		case "etag":
21227			if v != nil {
21228				var etag string
21229				err = json.Unmarshal(*v, &etag)
21230				if err != nil {
21231					return err
21232				}
21233				rt.Etag = &etag
21234			}
21235		case "id":
21236			if v != nil {
21237				var ID string
21238				err = json.Unmarshal(*v, &ID)
21239				if err != nil {
21240					return err
21241				}
21242				rt.ID = &ID
21243			}
21244		case "name":
21245			if v != nil {
21246				var name string
21247				err = json.Unmarshal(*v, &name)
21248				if err != nil {
21249					return err
21250				}
21251				rt.Name = &name
21252			}
21253		case "type":
21254			if v != nil {
21255				var typeVar string
21256				err = json.Unmarshal(*v, &typeVar)
21257				if err != nil {
21258					return err
21259				}
21260				rt.Type = &typeVar
21261			}
21262		case "location":
21263			if v != nil {
21264				var location string
21265				err = json.Unmarshal(*v, &location)
21266				if err != nil {
21267					return err
21268				}
21269				rt.Location = &location
21270			}
21271		case "tags":
21272			if v != nil {
21273				var tags map[string]*string
21274				err = json.Unmarshal(*v, &tags)
21275				if err != nil {
21276					return err
21277				}
21278				rt.Tags = tags
21279			}
21280		}
21281	}
21282
21283	return nil
21284}
21285
21286// RouteTableListResult response for the ListRouteTable API service call.
21287type RouteTableListResult struct {
21288	autorest.Response `json:"-"`
21289	// Value - Gets a list of route tables in a resource group.
21290	Value *[]RouteTable `json:"value,omitempty"`
21291	// NextLink - The URL to get the next set of results.
21292	NextLink *string `json:"nextLink,omitempty"`
21293}
21294
21295// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
21296type RouteTableListResultIterator struct {
21297	i    int
21298	page RouteTableListResultPage
21299}
21300
21301// NextWithContext advances to the next value.  If there was an error making
21302// the request the iterator does not advance and the error is returned.
21303func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
21304	if tracing.IsEnabled() {
21305		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
21306		defer func() {
21307			sc := -1
21308			if iter.Response().Response.Response != nil {
21309				sc = iter.Response().Response.Response.StatusCode
21310			}
21311			tracing.EndSpan(ctx, sc, err)
21312		}()
21313	}
21314	iter.i++
21315	if iter.i < len(iter.page.Values()) {
21316		return nil
21317	}
21318	err = iter.page.NextWithContext(ctx)
21319	if err != nil {
21320		iter.i--
21321		return err
21322	}
21323	iter.i = 0
21324	return nil
21325}
21326
21327// Next advances to the next value.  If there was an error making
21328// the request the iterator does not advance and the error is returned.
21329// Deprecated: Use NextWithContext() instead.
21330func (iter *RouteTableListResultIterator) Next() error {
21331	return iter.NextWithContext(context.Background())
21332}
21333
21334// NotDone returns true if the enumeration should be started or is not yet complete.
21335func (iter RouteTableListResultIterator) NotDone() bool {
21336	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21337}
21338
21339// Response returns the raw server response from the last page request.
21340func (iter RouteTableListResultIterator) Response() RouteTableListResult {
21341	return iter.page.Response()
21342}
21343
21344// Value returns the current value or a zero-initialized value if the
21345// iterator has advanced beyond the end of the collection.
21346func (iter RouteTableListResultIterator) Value() RouteTable {
21347	if !iter.page.NotDone() {
21348		return RouteTable{}
21349	}
21350	return iter.page.Values()[iter.i]
21351}
21352
21353// Creates a new instance of the RouteTableListResultIterator type.
21354func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
21355	return RouteTableListResultIterator{page: page}
21356}
21357
21358// IsEmpty returns true if the ListResult contains no values.
21359func (rtlr RouteTableListResult) IsEmpty() bool {
21360	return rtlr.Value == nil || len(*rtlr.Value) == 0
21361}
21362
21363// routeTableListResultPreparer prepares a request to retrieve the next set of results.
21364// It returns nil if no more results exist.
21365func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
21366	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
21367		return nil, nil
21368	}
21369	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21370		autorest.AsJSON(),
21371		autorest.AsGet(),
21372		autorest.WithBaseURL(to.String(rtlr.NextLink)))
21373}
21374
21375// RouteTableListResultPage contains a page of RouteTable values.
21376type RouteTableListResultPage struct {
21377	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
21378	rtlr RouteTableListResult
21379}
21380
21381// NextWithContext advances to the next page of values.  If there was an error making
21382// the request the page does not advance and the error is returned.
21383func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
21384	if tracing.IsEnabled() {
21385		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
21386		defer func() {
21387			sc := -1
21388			if page.Response().Response.Response != nil {
21389				sc = page.Response().Response.Response.StatusCode
21390			}
21391			tracing.EndSpan(ctx, sc, err)
21392		}()
21393	}
21394	next, err := page.fn(ctx, page.rtlr)
21395	if err != nil {
21396		return err
21397	}
21398	page.rtlr = next
21399	return nil
21400}
21401
21402// Next advances to the next page of values.  If there was an error making
21403// the request the page does not advance and the error is returned.
21404// Deprecated: Use NextWithContext() instead.
21405func (page *RouteTableListResultPage) Next() error {
21406	return page.NextWithContext(context.Background())
21407}
21408
21409// NotDone returns true if the page enumeration should be started or is not yet complete.
21410func (page RouteTableListResultPage) NotDone() bool {
21411	return !page.rtlr.IsEmpty()
21412}
21413
21414// Response returns the raw server response from the last page request.
21415func (page RouteTableListResultPage) Response() RouteTableListResult {
21416	return page.rtlr
21417}
21418
21419// Values returns the slice of values for the current page or nil if there are no values.
21420func (page RouteTableListResultPage) Values() []RouteTable {
21421	if page.rtlr.IsEmpty() {
21422		return nil
21423	}
21424	return *page.rtlr.Value
21425}
21426
21427// Creates a new instance of the RouteTableListResultPage type.
21428func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
21429	return RouteTableListResultPage{fn: getNextPage}
21430}
21431
21432// RouteTablePropertiesFormat route Table resource
21433type RouteTablePropertiesFormat struct {
21434	// Routes - Collection of routes contained within a route table.
21435	Routes *[]Route `json:"routes,omitempty"`
21436	// Subnets - READ-ONLY; A collection of references to subnets.
21437	Subnets *[]Subnet `json:"subnets,omitempty"`
21438	// DisableBgpRoutePropagation - Gets or sets whether to disable the routes learned by BGP on that route table. True means disable.
21439	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
21440	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
21441	ProvisioningState *string `json:"provisioningState,omitempty"`
21442}
21443
21444// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21445// long-running operation.
21446type RouteTablesCreateOrUpdateFuture struct {
21447	azure.Future
21448}
21449
21450// Result returns the result of the asynchronous operation.
21451// If the operation has not completed it will return an error.
21452func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
21453	var done bool
21454	done, err = future.DoneWithContext(context.Background(), client)
21455	if err != nil {
21456		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21457		return
21458	}
21459	if !done {
21460		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
21461		return
21462	}
21463	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21464	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
21465		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
21466		if err != nil {
21467			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
21468		}
21469	}
21470	return
21471}
21472
21473// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21474// operation.
21475type RouteTablesDeleteFuture struct {
21476	azure.Future
21477}
21478
21479// Result returns the result of the asynchronous operation.
21480// If the operation has not completed it will return an error.
21481func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
21482	var done bool
21483	done, err = future.DoneWithContext(context.Background(), client)
21484	if err != nil {
21485		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
21486		return
21487	}
21488	if !done {
21489		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
21490		return
21491	}
21492	ar.Response = future.Response()
21493	return
21494}
21495
21496// RouteTablesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
21497// operation.
21498type RouteTablesUpdateTagsFuture struct {
21499	azure.Future
21500}
21501
21502// Result returns the result of the asynchronous operation.
21503// If the operation has not completed it will return an error.
21504func (future *RouteTablesUpdateTagsFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
21505	var done bool
21506	done, err = future.DoneWithContext(context.Background(), client)
21507	if err != nil {
21508		err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
21509		return
21510	}
21511	if !done {
21512		err = azure.NewAsyncOpIncompleteError("network.RouteTablesUpdateTagsFuture")
21513		return
21514	}
21515	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21516	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
21517		rt, err = client.UpdateTagsResponder(rt.Response.Response)
21518		if err != nil {
21519			err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", rt.Response.Response, "Failure responding to request")
21520		}
21521	}
21522	return
21523}
21524
21525// SecurityGroup networkSecurityGroup resource.
21526type SecurityGroup struct {
21527	autorest.Response `json:"-"`
21528	// SecurityGroupPropertiesFormat - Properties of the network security group
21529	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
21530	// Etag - A unique read-only string that changes whenever the resource is updated.
21531	Etag *string `json:"etag,omitempty"`
21532	// ID - Resource ID.
21533	ID *string `json:"id,omitempty"`
21534	// Name - READ-ONLY; Resource name.
21535	Name *string `json:"name,omitempty"`
21536	// Type - READ-ONLY; Resource type.
21537	Type *string `json:"type,omitempty"`
21538	// Location - Resource location.
21539	Location *string `json:"location,omitempty"`
21540	// Tags - Resource tags.
21541	Tags map[string]*string `json:"tags"`
21542}
21543
21544// MarshalJSON is the custom marshaler for SecurityGroup.
21545func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
21546	objectMap := make(map[string]interface{})
21547	if sg.SecurityGroupPropertiesFormat != nil {
21548		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
21549	}
21550	if sg.Etag != nil {
21551		objectMap["etag"] = sg.Etag
21552	}
21553	if sg.ID != nil {
21554		objectMap["id"] = sg.ID
21555	}
21556	if sg.Location != nil {
21557		objectMap["location"] = sg.Location
21558	}
21559	if sg.Tags != nil {
21560		objectMap["tags"] = sg.Tags
21561	}
21562	return json.Marshal(objectMap)
21563}
21564
21565// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
21566func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
21567	var m map[string]*json.RawMessage
21568	err := json.Unmarshal(body, &m)
21569	if err != nil {
21570		return err
21571	}
21572	for k, v := range m {
21573		switch k {
21574		case "properties":
21575			if v != nil {
21576				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
21577				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
21578				if err != nil {
21579					return err
21580				}
21581				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
21582			}
21583		case "etag":
21584			if v != nil {
21585				var etag string
21586				err = json.Unmarshal(*v, &etag)
21587				if err != nil {
21588					return err
21589				}
21590				sg.Etag = &etag
21591			}
21592		case "id":
21593			if v != nil {
21594				var ID string
21595				err = json.Unmarshal(*v, &ID)
21596				if err != nil {
21597					return err
21598				}
21599				sg.ID = &ID
21600			}
21601		case "name":
21602			if v != nil {
21603				var name string
21604				err = json.Unmarshal(*v, &name)
21605				if err != nil {
21606					return err
21607				}
21608				sg.Name = &name
21609			}
21610		case "type":
21611			if v != nil {
21612				var typeVar string
21613				err = json.Unmarshal(*v, &typeVar)
21614				if err != nil {
21615					return err
21616				}
21617				sg.Type = &typeVar
21618			}
21619		case "location":
21620			if v != nil {
21621				var location string
21622				err = json.Unmarshal(*v, &location)
21623				if err != nil {
21624					return err
21625				}
21626				sg.Location = &location
21627			}
21628		case "tags":
21629			if v != nil {
21630				var tags map[string]*string
21631				err = json.Unmarshal(*v, &tags)
21632				if err != nil {
21633					return err
21634				}
21635				sg.Tags = tags
21636			}
21637		}
21638	}
21639
21640	return nil
21641}
21642
21643// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
21644type SecurityGroupListResult struct {
21645	autorest.Response `json:"-"`
21646	// Value - A list of NetworkSecurityGroup resources.
21647	Value *[]SecurityGroup `json:"value,omitempty"`
21648	// NextLink - The URL to get the next set of results.
21649	NextLink *string `json:"nextLink,omitempty"`
21650}
21651
21652// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
21653type SecurityGroupListResultIterator struct {
21654	i    int
21655	page SecurityGroupListResultPage
21656}
21657
21658// NextWithContext advances to the next value.  If there was an error making
21659// the request the iterator does not advance and the error is returned.
21660func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
21661	if tracing.IsEnabled() {
21662		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
21663		defer func() {
21664			sc := -1
21665			if iter.Response().Response.Response != nil {
21666				sc = iter.Response().Response.Response.StatusCode
21667			}
21668			tracing.EndSpan(ctx, sc, err)
21669		}()
21670	}
21671	iter.i++
21672	if iter.i < len(iter.page.Values()) {
21673		return nil
21674	}
21675	err = iter.page.NextWithContext(ctx)
21676	if err != nil {
21677		iter.i--
21678		return err
21679	}
21680	iter.i = 0
21681	return nil
21682}
21683
21684// Next advances to the next value.  If there was an error making
21685// the request the iterator does not advance and the error is returned.
21686// Deprecated: Use NextWithContext() instead.
21687func (iter *SecurityGroupListResultIterator) Next() error {
21688	return iter.NextWithContext(context.Background())
21689}
21690
21691// NotDone returns true if the enumeration should be started or is not yet complete.
21692func (iter SecurityGroupListResultIterator) NotDone() bool {
21693	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21694}
21695
21696// Response returns the raw server response from the last page request.
21697func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
21698	return iter.page.Response()
21699}
21700
21701// Value returns the current value or a zero-initialized value if the
21702// iterator has advanced beyond the end of the collection.
21703func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
21704	if !iter.page.NotDone() {
21705		return SecurityGroup{}
21706	}
21707	return iter.page.Values()[iter.i]
21708}
21709
21710// Creates a new instance of the SecurityGroupListResultIterator type.
21711func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
21712	return SecurityGroupListResultIterator{page: page}
21713}
21714
21715// IsEmpty returns true if the ListResult contains no values.
21716func (sglr SecurityGroupListResult) IsEmpty() bool {
21717	return sglr.Value == nil || len(*sglr.Value) == 0
21718}
21719
21720// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
21721// It returns nil if no more results exist.
21722func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
21723	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
21724		return nil, nil
21725	}
21726	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21727		autorest.AsJSON(),
21728		autorest.AsGet(),
21729		autorest.WithBaseURL(to.String(sglr.NextLink)))
21730}
21731
21732// SecurityGroupListResultPage contains a page of SecurityGroup values.
21733type SecurityGroupListResultPage struct {
21734	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
21735	sglr SecurityGroupListResult
21736}
21737
21738// NextWithContext advances to the next page of values.  If there was an error making
21739// the request the page does not advance and the error is returned.
21740func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
21741	if tracing.IsEnabled() {
21742		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
21743		defer func() {
21744			sc := -1
21745			if page.Response().Response.Response != nil {
21746				sc = page.Response().Response.Response.StatusCode
21747			}
21748			tracing.EndSpan(ctx, sc, err)
21749		}()
21750	}
21751	next, err := page.fn(ctx, page.sglr)
21752	if err != nil {
21753		return err
21754	}
21755	page.sglr = next
21756	return nil
21757}
21758
21759// Next advances to the next page of values.  If there was an error making
21760// the request the page does not advance and the error is returned.
21761// Deprecated: Use NextWithContext() instead.
21762func (page *SecurityGroupListResultPage) Next() error {
21763	return page.NextWithContext(context.Background())
21764}
21765
21766// NotDone returns true if the page enumeration should be started or is not yet complete.
21767func (page SecurityGroupListResultPage) NotDone() bool {
21768	return !page.sglr.IsEmpty()
21769}
21770
21771// Response returns the raw server response from the last page request.
21772func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
21773	return page.sglr
21774}
21775
21776// Values returns the slice of values for the current page or nil if there are no values.
21777func (page SecurityGroupListResultPage) Values() []SecurityGroup {
21778	if page.sglr.IsEmpty() {
21779		return nil
21780	}
21781	return *page.sglr.Value
21782}
21783
21784// Creates a new instance of the SecurityGroupListResultPage type.
21785func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
21786	return SecurityGroupListResultPage{fn: getNextPage}
21787}
21788
21789// SecurityGroupNetworkInterface network interface and all its associated security rules.
21790type SecurityGroupNetworkInterface struct {
21791	// ID - ID of the network interface.
21792	ID                       *string                   `json:"id,omitempty"`
21793	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
21794}
21795
21796// SecurityGroupPropertiesFormat network Security Group resource.
21797type SecurityGroupPropertiesFormat struct {
21798	// SecurityRules - A collection of security rules of the network security group.
21799	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
21800	// DefaultSecurityRules - The default security rules of network security group.
21801	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
21802	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
21803	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
21804	// Subnets - READ-ONLY; A collection of references to subnets.
21805	Subnets *[]Subnet `json:"subnets,omitempty"`
21806	// ResourceGUID - The resource GUID property of the network security group resource.
21807	ResourceGUID *string `json:"resourceGuid,omitempty"`
21808	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
21809	ProvisioningState *string `json:"provisioningState,omitempty"`
21810}
21811
21812// SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
21813type SecurityGroupResult struct {
21814	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
21815	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
21816	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
21817	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
21818}
21819
21820// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21821// long-running operation.
21822type SecurityGroupsCreateOrUpdateFuture struct {
21823	azure.Future
21824}
21825
21826// Result returns the result of the asynchronous operation.
21827// If the operation has not completed it will return an error.
21828func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
21829	var done bool
21830	done, err = future.DoneWithContext(context.Background(), client)
21831	if err != nil {
21832		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21833		return
21834	}
21835	if !done {
21836		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
21837		return
21838	}
21839	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21840	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
21841		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
21842		if err != nil {
21843			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
21844		}
21845	}
21846	return
21847}
21848
21849// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21850// operation.
21851type SecurityGroupsDeleteFuture struct {
21852	azure.Future
21853}
21854
21855// Result returns the result of the asynchronous operation.
21856// If the operation has not completed it will return an error.
21857func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
21858	var done bool
21859	done, err = future.DoneWithContext(context.Background(), client)
21860	if err != nil {
21861		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
21862		return
21863	}
21864	if !done {
21865		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
21866		return
21867	}
21868	ar.Response = future.Response()
21869	return
21870}
21871
21872// SecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
21873// long-running operation.
21874type SecurityGroupsUpdateTagsFuture struct {
21875	azure.Future
21876}
21877
21878// Result returns the result of the asynchronous operation.
21879// If the operation has not completed it will return an error.
21880func (future *SecurityGroupsUpdateTagsFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
21881	var done bool
21882	done, err = future.DoneWithContext(context.Background(), client)
21883	if err != nil {
21884		err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
21885		return
21886	}
21887	if !done {
21888		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsUpdateTagsFuture")
21889		return
21890	}
21891	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21892	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
21893		sg, err = client.UpdateTagsResponder(sg.Response.Response)
21894		if err != nil {
21895			err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", sg.Response.Response, "Failure responding to request")
21896		}
21897	}
21898	return
21899}
21900
21901// SecurityGroupViewParameters parameters that define the VM to check security groups for.
21902type SecurityGroupViewParameters struct {
21903	// TargetResourceID - ID of the target VM.
21904	TargetResourceID *string `json:"targetResourceId,omitempty"`
21905}
21906
21907// SecurityGroupViewResult the information about security rules applied to the specified VM.
21908type SecurityGroupViewResult struct {
21909	autorest.Response `json:"-"`
21910	// NetworkInterfaces - List of network interfaces on the specified VM.
21911	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
21912}
21913
21914// SecurityRule network security rule.
21915type SecurityRule struct {
21916	autorest.Response `json:"-"`
21917	// SecurityRulePropertiesFormat - Properties of the security rule
21918	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
21919	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21920	Name *string `json:"name,omitempty"`
21921	// Etag - A unique read-only string that changes whenever the resource is updated.
21922	Etag *string `json:"etag,omitempty"`
21923	// ID - Resource ID.
21924	ID *string `json:"id,omitempty"`
21925}
21926
21927// MarshalJSON is the custom marshaler for SecurityRule.
21928func (sr SecurityRule) MarshalJSON() ([]byte, error) {
21929	objectMap := make(map[string]interface{})
21930	if sr.SecurityRulePropertiesFormat != nil {
21931		objectMap["properties"] = sr.SecurityRulePropertiesFormat
21932	}
21933	if sr.Name != nil {
21934		objectMap["name"] = sr.Name
21935	}
21936	if sr.Etag != nil {
21937		objectMap["etag"] = sr.Etag
21938	}
21939	if sr.ID != nil {
21940		objectMap["id"] = sr.ID
21941	}
21942	return json.Marshal(objectMap)
21943}
21944
21945// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
21946func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
21947	var m map[string]*json.RawMessage
21948	err := json.Unmarshal(body, &m)
21949	if err != nil {
21950		return err
21951	}
21952	for k, v := range m {
21953		switch k {
21954		case "properties":
21955			if v != nil {
21956				var securityRulePropertiesFormat SecurityRulePropertiesFormat
21957				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
21958				if err != nil {
21959					return err
21960				}
21961				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
21962			}
21963		case "name":
21964			if v != nil {
21965				var name string
21966				err = json.Unmarshal(*v, &name)
21967				if err != nil {
21968					return err
21969				}
21970				sr.Name = &name
21971			}
21972		case "etag":
21973			if v != nil {
21974				var etag string
21975				err = json.Unmarshal(*v, &etag)
21976				if err != nil {
21977					return err
21978				}
21979				sr.Etag = &etag
21980			}
21981		case "id":
21982			if v != nil {
21983				var ID string
21984				err = json.Unmarshal(*v, &ID)
21985				if err != nil {
21986					return err
21987				}
21988				sr.ID = &ID
21989			}
21990		}
21991	}
21992
21993	return nil
21994}
21995
21996// SecurityRuleAssociations all security rules associated with the network interface.
21997type SecurityRuleAssociations struct {
21998	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
21999	SubnetAssociation           *SubnetAssociation    `json:"subnetAssociation,omitempty"`
22000	// DefaultSecurityRules - Collection of default security rules of the network security group.
22001	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
22002	// EffectiveSecurityRules - Collection of effective security rules.
22003	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
22004}
22005
22006// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
22007// belongs to a network security group.
22008type SecurityRuleListResult struct {
22009	autorest.Response `json:"-"`
22010	// Value - The security rules in a network security group.
22011	Value *[]SecurityRule `json:"value,omitempty"`
22012	// NextLink - The URL to get the next set of results.
22013	NextLink *string `json:"nextLink,omitempty"`
22014}
22015
22016// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
22017type SecurityRuleListResultIterator struct {
22018	i    int
22019	page SecurityRuleListResultPage
22020}
22021
22022// NextWithContext advances to the next value.  If there was an error making
22023// the request the iterator does not advance and the error is returned.
22024func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
22025	if tracing.IsEnabled() {
22026		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
22027		defer func() {
22028			sc := -1
22029			if iter.Response().Response.Response != nil {
22030				sc = iter.Response().Response.Response.StatusCode
22031			}
22032			tracing.EndSpan(ctx, sc, err)
22033		}()
22034	}
22035	iter.i++
22036	if iter.i < len(iter.page.Values()) {
22037		return nil
22038	}
22039	err = iter.page.NextWithContext(ctx)
22040	if err != nil {
22041		iter.i--
22042		return err
22043	}
22044	iter.i = 0
22045	return nil
22046}
22047
22048// Next advances to the next value.  If there was an error making
22049// the request the iterator does not advance and the error is returned.
22050// Deprecated: Use NextWithContext() instead.
22051func (iter *SecurityRuleListResultIterator) Next() error {
22052	return iter.NextWithContext(context.Background())
22053}
22054
22055// NotDone returns true if the enumeration should be started or is not yet complete.
22056func (iter SecurityRuleListResultIterator) NotDone() bool {
22057	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22058}
22059
22060// Response returns the raw server response from the last page request.
22061func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
22062	return iter.page.Response()
22063}
22064
22065// Value returns the current value or a zero-initialized value if the
22066// iterator has advanced beyond the end of the collection.
22067func (iter SecurityRuleListResultIterator) Value() SecurityRule {
22068	if !iter.page.NotDone() {
22069		return SecurityRule{}
22070	}
22071	return iter.page.Values()[iter.i]
22072}
22073
22074// Creates a new instance of the SecurityRuleListResultIterator type.
22075func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
22076	return SecurityRuleListResultIterator{page: page}
22077}
22078
22079// IsEmpty returns true if the ListResult contains no values.
22080func (srlr SecurityRuleListResult) IsEmpty() bool {
22081	return srlr.Value == nil || len(*srlr.Value) == 0
22082}
22083
22084// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
22085// It returns nil if no more results exist.
22086func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
22087	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
22088		return nil, nil
22089	}
22090	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22091		autorest.AsJSON(),
22092		autorest.AsGet(),
22093		autorest.WithBaseURL(to.String(srlr.NextLink)))
22094}
22095
22096// SecurityRuleListResultPage contains a page of SecurityRule values.
22097type SecurityRuleListResultPage struct {
22098	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
22099	srlr SecurityRuleListResult
22100}
22101
22102// NextWithContext advances to the next page of values.  If there was an error making
22103// the request the page does not advance and the error is returned.
22104func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
22105	if tracing.IsEnabled() {
22106		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
22107		defer func() {
22108			sc := -1
22109			if page.Response().Response.Response != nil {
22110				sc = page.Response().Response.Response.StatusCode
22111			}
22112			tracing.EndSpan(ctx, sc, err)
22113		}()
22114	}
22115	next, err := page.fn(ctx, page.srlr)
22116	if err != nil {
22117		return err
22118	}
22119	page.srlr = next
22120	return nil
22121}
22122
22123// Next advances to the next page of values.  If there was an error making
22124// the request the page does not advance and the error is returned.
22125// Deprecated: Use NextWithContext() instead.
22126func (page *SecurityRuleListResultPage) Next() error {
22127	return page.NextWithContext(context.Background())
22128}
22129
22130// NotDone returns true if the page enumeration should be started or is not yet complete.
22131func (page SecurityRuleListResultPage) NotDone() bool {
22132	return !page.srlr.IsEmpty()
22133}
22134
22135// Response returns the raw server response from the last page request.
22136func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
22137	return page.srlr
22138}
22139
22140// Values returns the slice of values for the current page or nil if there are no values.
22141func (page SecurityRuleListResultPage) Values() []SecurityRule {
22142	if page.srlr.IsEmpty() {
22143		return nil
22144	}
22145	return *page.srlr.Value
22146}
22147
22148// Creates a new instance of the SecurityRuleListResultPage type.
22149func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
22150	return SecurityRuleListResultPage{fn: getNextPage}
22151}
22152
22153// SecurityRulePropertiesFormat security rule resource.
22154type SecurityRulePropertiesFormat struct {
22155	// Description - A description for this rule. Restricted to 140 chars.
22156	Description *string `json:"description,omitempty"`
22157	// Protocol - Network protocol this rule applies to. Possible values are 'Tcp', 'Udp', and '*'. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolAsterisk'
22158	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
22159	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
22160	SourcePortRange *string `json:"sourcePortRange,omitempty"`
22161	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
22162	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
22163	// 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.
22164	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
22165	// SourceAddressPrefixes - The CIDR or source IP ranges.
22166	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
22167	// SourceApplicationSecurityGroups - The application security group specified as source.
22168	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
22169	// 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.
22170	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
22171	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
22172	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
22173	// DestinationApplicationSecurityGroups - The application security group specified as destination.
22174	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
22175	// SourcePortRanges - The source port ranges.
22176	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
22177	// DestinationPortRanges - The destination port ranges.
22178	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
22179	// Access - The network traffic is allowed or denied. Possible values are: 'Allow' and 'Deny'. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
22180	Access SecurityRuleAccess `json:"access,omitempty"`
22181	// 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.
22182	Priority *int32 `json:"priority,omitempty"`
22183	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values are: 'Inbound' and 'Outbound'. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
22184	Direction SecurityRuleDirection `json:"direction,omitempty"`
22185	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
22186	ProvisioningState *string `json:"provisioningState,omitempty"`
22187}
22188
22189// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22190// long-running operation.
22191type SecurityRulesCreateOrUpdateFuture struct {
22192	azure.Future
22193}
22194
22195// Result returns the result of the asynchronous operation.
22196// If the operation has not completed it will return an error.
22197func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
22198	var done bool
22199	done, err = future.DoneWithContext(context.Background(), client)
22200	if err != nil {
22201		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22202		return
22203	}
22204	if !done {
22205		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
22206		return
22207	}
22208	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22209	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
22210		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
22211		if err != nil {
22212			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
22213		}
22214	}
22215	return
22216}
22217
22218// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22219// operation.
22220type SecurityRulesDeleteFuture struct {
22221	azure.Future
22222}
22223
22224// Result returns the result of the asynchronous operation.
22225// If the operation has not completed it will return an error.
22226func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
22227	var done bool
22228	done, err = future.DoneWithContext(context.Background(), client)
22229	if err != nil {
22230		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
22231		return
22232	}
22233	if !done {
22234		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
22235		return
22236	}
22237	ar.Response = future.Response()
22238	return
22239}
22240
22241// SecurityRulesEvaluationResult network security rules evaluation result.
22242type SecurityRulesEvaluationResult struct {
22243	// Name - Name of the network security rule.
22244	Name *string `json:"name,omitempty"`
22245	// ProtocolMatched - Value indicating whether protocol is matched.
22246	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
22247	// SourceMatched - Value indicating whether source is matched.
22248	SourceMatched *bool `json:"sourceMatched,omitempty"`
22249	// SourcePortMatched - Value indicating whether source port is matched.
22250	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
22251	// DestinationMatched - Value indicating whether destination is matched.
22252	DestinationMatched *bool `json:"destinationMatched,omitempty"`
22253	// DestinationPortMatched - Value indicating whether destination port is matched.
22254	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
22255}
22256
22257// ServiceAssociationLink serviceAssociationLink resource.
22258type ServiceAssociationLink struct {
22259	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
22260	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
22261	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
22262	Name *string `json:"name,omitempty"`
22263	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22264	Etag *string `json:"etag,omitempty"`
22265	// ID - Resource ID.
22266	ID *string `json:"id,omitempty"`
22267}
22268
22269// MarshalJSON is the custom marshaler for ServiceAssociationLink.
22270func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
22271	objectMap := make(map[string]interface{})
22272	if sal.ServiceAssociationLinkPropertiesFormat != nil {
22273		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
22274	}
22275	if sal.Name != nil {
22276		objectMap["name"] = sal.Name
22277	}
22278	if sal.ID != nil {
22279		objectMap["id"] = sal.ID
22280	}
22281	return json.Marshal(objectMap)
22282}
22283
22284// UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
22285func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
22286	var m map[string]*json.RawMessage
22287	err := json.Unmarshal(body, &m)
22288	if err != nil {
22289		return err
22290	}
22291	for k, v := range m {
22292		switch k {
22293		case "properties":
22294			if v != nil {
22295				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
22296				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
22297				if err != nil {
22298					return err
22299				}
22300				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
22301			}
22302		case "name":
22303			if v != nil {
22304				var name string
22305				err = json.Unmarshal(*v, &name)
22306				if err != nil {
22307					return err
22308				}
22309				sal.Name = &name
22310			}
22311		case "etag":
22312			if v != nil {
22313				var etag string
22314				err = json.Unmarshal(*v, &etag)
22315				if err != nil {
22316					return err
22317				}
22318				sal.Etag = &etag
22319			}
22320		case "id":
22321			if v != nil {
22322				var ID string
22323				err = json.Unmarshal(*v, &ID)
22324				if err != nil {
22325					return err
22326				}
22327				sal.ID = &ID
22328			}
22329		}
22330	}
22331
22332	return nil
22333}
22334
22335// ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
22336type ServiceAssociationLinkPropertiesFormat struct {
22337	// LinkedResourceType - Resource type of the linked resource.
22338	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
22339	// Link - Link to the external resource.
22340	Link *string `json:"link,omitempty"`
22341	// ProvisioningState - READ-ONLY; Provisioning state of the ServiceAssociationLink resource.
22342	ProvisioningState *string `json:"provisioningState,omitempty"`
22343}
22344
22345// ServiceDelegationPropertiesFormat properties of a service delegation.
22346type ServiceDelegationPropertiesFormat struct {
22347	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers)
22348	ServiceName *string `json:"serviceName,omitempty"`
22349	// Actions - Describes the actions permitted to the service upon delegation
22350	Actions *[]string `json:"actions,omitempty"`
22351	// ProvisioningState - READ-ONLY; The provisioning state of the resource.
22352	ProvisioningState *string `json:"provisioningState,omitempty"`
22353}
22354
22355// ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
22356// a long-running operation.
22357type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
22358	azure.Future
22359}
22360
22361// Result returns the result of the asynchronous operation.
22362// If the operation has not completed it will return an error.
22363func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
22364	var done bool
22365	done, err = future.DoneWithContext(context.Background(), client)
22366	if err != nil {
22367		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22368		return
22369	}
22370	if !done {
22371		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
22372		return
22373	}
22374	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22375	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
22376		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
22377		if err != nil {
22378			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
22379		}
22380	}
22381	return
22382}
22383
22384// ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
22385// long-running operation.
22386type ServiceEndpointPoliciesDeleteFuture struct {
22387	azure.Future
22388}
22389
22390// Result returns the result of the asynchronous operation.
22391// If the operation has not completed it will return an error.
22392func (future *ServiceEndpointPoliciesDeleteFuture) Result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
22393	var done bool
22394	done, err = future.DoneWithContext(context.Background(), client)
22395	if err != nil {
22396		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
22397		return
22398	}
22399	if !done {
22400		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
22401		return
22402	}
22403	ar.Response = future.Response()
22404	return
22405}
22406
22407// ServiceEndpointPoliciesUpdateFuture an abstraction for monitoring and retrieving the results of a
22408// long-running operation.
22409type ServiceEndpointPoliciesUpdateFuture struct {
22410	azure.Future
22411}
22412
22413// Result returns the result of the asynchronous operation.
22414// If the operation has not completed it will return an error.
22415func (future *ServiceEndpointPoliciesUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
22416	var done bool
22417	done, err = future.DoneWithContext(context.Background(), client)
22418	if err != nil {
22419		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", future.Response(), "Polling failure")
22420		return
22421	}
22422	if !done {
22423		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesUpdateFuture")
22424		return
22425	}
22426	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22427	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
22428		sep, err = client.UpdateResponder(sep.Response.Response)
22429		if err != nil {
22430			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
22431		}
22432	}
22433	return
22434}
22435
22436// ServiceEndpointPolicy service End point policy resource.
22437type ServiceEndpointPolicy struct {
22438	autorest.Response `json:"-"`
22439	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy
22440	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
22441	// Etag - A unique read-only string that changes whenever the resource is updated.
22442	Etag *string `json:"etag,omitempty"`
22443	// ID - Resource ID.
22444	ID *string `json:"id,omitempty"`
22445	// Name - READ-ONLY; Resource name.
22446	Name *string `json:"name,omitempty"`
22447	// Type - READ-ONLY; Resource type.
22448	Type *string `json:"type,omitempty"`
22449	// Location - Resource location.
22450	Location *string `json:"location,omitempty"`
22451	// Tags - Resource tags.
22452	Tags map[string]*string `json:"tags"`
22453}
22454
22455// MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
22456func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
22457	objectMap := make(map[string]interface{})
22458	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
22459		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
22460	}
22461	if sep.Etag != nil {
22462		objectMap["etag"] = sep.Etag
22463	}
22464	if sep.ID != nil {
22465		objectMap["id"] = sep.ID
22466	}
22467	if sep.Location != nil {
22468		objectMap["location"] = sep.Location
22469	}
22470	if sep.Tags != nil {
22471		objectMap["tags"] = sep.Tags
22472	}
22473	return json.Marshal(objectMap)
22474}
22475
22476// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
22477func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
22478	var m map[string]*json.RawMessage
22479	err := json.Unmarshal(body, &m)
22480	if err != nil {
22481		return err
22482	}
22483	for k, v := range m {
22484		switch k {
22485		case "properties":
22486			if v != nil {
22487				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
22488				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
22489				if err != nil {
22490					return err
22491				}
22492				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
22493			}
22494		case "etag":
22495			if v != nil {
22496				var etag string
22497				err = json.Unmarshal(*v, &etag)
22498				if err != nil {
22499					return err
22500				}
22501				sep.Etag = &etag
22502			}
22503		case "id":
22504			if v != nil {
22505				var ID string
22506				err = json.Unmarshal(*v, &ID)
22507				if err != nil {
22508					return err
22509				}
22510				sep.ID = &ID
22511			}
22512		case "name":
22513			if v != nil {
22514				var name string
22515				err = json.Unmarshal(*v, &name)
22516				if err != nil {
22517					return err
22518				}
22519				sep.Name = &name
22520			}
22521		case "type":
22522			if v != nil {
22523				var typeVar string
22524				err = json.Unmarshal(*v, &typeVar)
22525				if err != nil {
22526					return err
22527				}
22528				sep.Type = &typeVar
22529			}
22530		case "location":
22531			if v != nil {
22532				var location string
22533				err = json.Unmarshal(*v, &location)
22534				if err != nil {
22535					return err
22536				}
22537				sep.Location = &location
22538			}
22539		case "tags":
22540			if v != nil {
22541				var tags map[string]*string
22542				err = json.Unmarshal(*v, &tags)
22543				if err != nil {
22544					return err
22545				}
22546				sep.Tags = tags
22547			}
22548		}
22549	}
22550
22551	return nil
22552}
22553
22554// ServiceEndpointPolicyDefinition service Endpoint policy definitions.
22555type ServiceEndpointPolicyDefinition struct {
22556	autorest.Response `json:"-"`
22557	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition
22558	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
22559	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
22560	Name *string `json:"name,omitempty"`
22561	// Etag - A unique read-only string that changes whenever the resource is updated.
22562	Etag *string `json:"etag,omitempty"`
22563	// ID - Resource ID.
22564	ID *string `json:"id,omitempty"`
22565}
22566
22567// MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
22568func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
22569	objectMap := make(map[string]interface{})
22570	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
22571		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
22572	}
22573	if sepd.Name != nil {
22574		objectMap["name"] = sepd.Name
22575	}
22576	if sepd.Etag != nil {
22577		objectMap["etag"] = sepd.Etag
22578	}
22579	if sepd.ID != nil {
22580		objectMap["id"] = sepd.ID
22581	}
22582	return json.Marshal(objectMap)
22583}
22584
22585// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
22586func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
22587	var m map[string]*json.RawMessage
22588	err := json.Unmarshal(body, &m)
22589	if err != nil {
22590		return err
22591	}
22592	for k, v := range m {
22593		switch k {
22594		case "properties":
22595			if v != nil {
22596				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
22597				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
22598				if err != nil {
22599					return err
22600				}
22601				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
22602			}
22603		case "name":
22604			if v != nil {
22605				var name string
22606				err = json.Unmarshal(*v, &name)
22607				if err != nil {
22608					return err
22609				}
22610				sepd.Name = &name
22611			}
22612		case "etag":
22613			if v != nil {
22614				var etag string
22615				err = json.Unmarshal(*v, &etag)
22616				if err != nil {
22617					return err
22618				}
22619				sepd.Etag = &etag
22620			}
22621		case "id":
22622			if v != nil {
22623				var ID string
22624				err = json.Unmarshal(*v, &ID)
22625				if err != nil {
22626					return err
22627				}
22628				sepd.ID = &ID
22629			}
22630		}
22631	}
22632
22633	return nil
22634}
22635
22636// ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
22637// call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
22638type ServiceEndpointPolicyDefinitionListResult struct {
22639	autorest.Response `json:"-"`
22640	// Value - The service endpoint policy definition in a service endpoint policy.
22641	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
22642	// NextLink - The URL to get the next set of results.
22643	NextLink *string `json:"nextLink,omitempty"`
22644}
22645
22646// ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
22647// ServiceEndpointPolicyDefinition values.
22648type ServiceEndpointPolicyDefinitionListResultIterator struct {
22649	i    int
22650	page ServiceEndpointPolicyDefinitionListResultPage
22651}
22652
22653// NextWithContext advances to the next value.  If there was an error making
22654// the request the iterator does not advance and the error is returned.
22655func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
22656	if tracing.IsEnabled() {
22657		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
22658		defer func() {
22659			sc := -1
22660			if iter.Response().Response.Response != nil {
22661				sc = iter.Response().Response.Response.StatusCode
22662			}
22663			tracing.EndSpan(ctx, sc, err)
22664		}()
22665	}
22666	iter.i++
22667	if iter.i < len(iter.page.Values()) {
22668		return nil
22669	}
22670	err = iter.page.NextWithContext(ctx)
22671	if err != nil {
22672		iter.i--
22673		return err
22674	}
22675	iter.i = 0
22676	return nil
22677}
22678
22679// Next advances to the next value.  If there was an error making
22680// the request the iterator does not advance and the error is returned.
22681// Deprecated: Use NextWithContext() instead.
22682func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
22683	return iter.NextWithContext(context.Background())
22684}
22685
22686// NotDone returns true if the enumeration should be started or is not yet complete.
22687func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
22688	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22689}
22690
22691// Response returns the raw server response from the last page request.
22692func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
22693	return iter.page.Response()
22694}
22695
22696// Value returns the current value or a zero-initialized value if the
22697// iterator has advanced beyond the end of the collection.
22698func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
22699	if !iter.page.NotDone() {
22700		return ServiceEndpointPolicyDefinition{}
22701	}
22702	return iter.page.Values()[iter.i]
22703}
22704
22705// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
22706func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
22707	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
22708}
22709
22710// IsEmpty returns true if the ListResult contains no values.
22711func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
22712	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
22713}
22714
22715// serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
22716// It returns nil if no more results exist.
22717func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
22718	if sepdlr.NextLink == nil || len(to.String(sepdlr.NextLink)) < 1 {
22719		return nil, nil
22720	}
22721	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22722		autorest.AsJSON(),
22723		autorest.AsGet(),
22724		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
22725}
22726
22727// ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
22728type ServiceEndpointPolicyDefinitionListResultPage struct {
22729	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
22730	sepdlr ServiceEndpointPolicyDefinitionListResult
22731}
22732
22733// NextWithContext advances to the next page of values.  If there was an error making
22734// the request the page does not advance and the error is returned.
22735func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
22736	if tracing.IsEnabled() {
22737		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
22738		defer func() {
22739			sc := -1
22740			if page.Response().Response.Response != nil {
22741				sc = page.Response().Response.Response.StatusCode
22742			}
22743			tracing.EndSpan(ctx, sc, err)
22744		}()
22745	}
22746	next, err := page.fn(ctx, page.sepdlr)
22747	if err != nil {
22748		return err
22749	}
22750	page.sepdlr = next
22751	return nil
22752}
22753
22754// Next advances to the next page of values.  If there was an error making
22755// the request the page does not advance and the error is returned.
22756// Deprecated: Use NextWithContext() instead.
22757func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
22758	return page.NextWithContext(context.Background())
22759}
22760
22761// NotDone returns true if the page enumeration should be started or is not yet complete.
22762func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
22763	return !page.sepdlr.IsEmpty()
22764}
22765
22766// Response returns the raw server response from the last page request.
22767func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
22768	return page.sepdlr
22769}
22770
22771// Values returns the slice of values for the current page or nil if there are no values.
22772func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
22773	if page.sepdlr.IsEmpty() {
22774		return nil
22775	}
22776	return *page.sepdlr.Value
22777}
22778
22779// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
22780func NewServiceEndpointPolicyDefinitionListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
22781	return ServiceEndpointPolicyDefinitionListResultPage{fn: getNextPage}
22782}
22783
22784// ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
22785type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
22786	// Description - A description for this rule. Restricted to 140 chars.
22787	Description *string `json:"description,omitempty"`
22788	// Service - service endpoint name.
22789	Service *string `json:"service,omitempty"`
22790	// ServiceResources - A list of service resources.
22791	ServiceResources *[]string `json:"serviceResources,omitempty"`
22792	// ProvisioningState - READ-ONLY; The provisioning state of the service end point policy definition. Possible values are: 'Updating', 'Deleting', and 'Failed'.
22793	ProvisioningState *string `json:"provisioningState,omitempty"`
22794}
22795
22796// ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
22797// results of a long-running operation.
22798type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
22799	azure.Future
22800}
22801
22802// Result returns the result of the asynchronous operation.
22803// If the operation has not completed it will return an error.
22804func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
22805	var done bool
22806	done, err = future.DoneWithContext(context.Background(), client)
22807	if err != nil {
22808		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22809		return
22810	}
22811	if !done {
22812		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
22813		return
22814	}
22815	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22816	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
22817		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
22818		if err != nil {
22819			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
22820		}
22821	}
22822	return
22823}
22824
22825// ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
22826// a long-running operation.
22827type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
22828	azure.Future
22829}
22830
22831// Result returns the result of the asynchronous operation.
22832// If the operation has not completed it will return an error.
22833func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
22834	var done bool
22835	done, err = future.DoneWithContext(context.Background(), client)
22836	if err != nil {
22837		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
22838		return
22839	}
22840	if !done {
22841		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
22842		return
22843	}
22844	ar.Response = future.Response()
22845	return
22846}
22847
22848// ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
22849type ServiceEndpointPolicyListResult struct {
22850	autorest.Response `json:"-"`
22851	// Value - A list of ServiceEndpointPolicy resources.
22852	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
22853	// NextLink - READ-ONLY; The URL to get the next set of results.
22854	NextLink *string `json:"nextLink,omitempty"`
22855}
22856
22857// ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
22858// values.
22859type ServiceEndpointPolicyListResultIterator struct {
22860	i    int
22861	page ServiceEndpointPolicyListResultPage
22862}
22863
22864// NextWithContext advances to the next value.  If there was an error making
22865// the request the iterator does not advance and the error is returned.
22866func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
22867	if tracing.IsEnabled() {
22868		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
22869		defer func() {
22870			sc := -1
22871			if iter.Response().Response.Response != nil {
22872				sc = iter.Response().Response.Response.StatusCode
22873			}
22874			tracing.EndSpan(ctx, sc, err)
22875		}()
22876	}
22877	iter.i++
22878	if iter.i < len(iter.page.Values()) {
22879		return nil
22880	}
22881	err = iter.page.NextWithContext(ctx)
22882	if err != nil {
22883		iter.i--
22884		return err
22885	}
22886	iter.i = 0
22887	return nil
22888}
22889
22890// Next advances to the next value.  If there was an error making
22891// the request the iterator does not advance and the error is returned.
22892// Deprecated: Use NextWithContext() instead.
22893func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
22894	return iter.NextWithContext(context.Background())
22895}
22896
22897// NotDone returns true if the enumeration should be started or is not yet complete.
22898func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
22899	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22900}
22901
22902// Response returns the raw server response from the last page request.
22903func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
22904	return iter.page.Response()
22905}
22906
22907// Value returns the current value or a zero-initialized value if the
22908// iterator has advanced beyond the end of the collection.
22909func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
22910	if !iter.page.NotDone() {
22911		return ServiceEndpointPolicy{}
22912	}
22913	return iter.page.Values()[iter.i]
22914}
22915
22916// Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
22917func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
22918	return ServiceEndpointPolicyListResultIterator{page: page}
22919}
22920
22921// IsEmpty returns true if the ListResult contains no values.
22922func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
22923	return seplr.Value == nil || len(*seplr.Value) == 0
22924}
22925
22926// serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
22927// It returns nil if no more results exist.
22928func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
22929	if seplr.NextLink == nil || len(to.String(seplr.NextLink)) < 1 {
22930		return nil, nil
22931	}
22932	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22933		autorest.AsJSON(),
22934		autorest.AsGet(),
22935		autorest.WithBaseURL(to.String(seplr.NextLink)))
22936}
22937
22938// ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
22939type ServiceEndpointPolicyListResultPage struct {
22940	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
22941	seplr ServiceEndpointPolicyListResult
22942}
22943
22944// NextWithContext advances to the next page of values.  If there was an error making
22945// the request the page does not advance and the error is returned.
22946func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
22947	if tracing.IsEnabled() {
22948		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
22949		defer func() {
22950			sc := -1
22951			if page.Response().Response.Response != nil {
22952				sc = page.Response().Response.Response.StatusCode
22953			}
22954			tracing.EndSpan(ctx, sc, err)
22955		}()
22956	}
22957	next, err := page.fn(ctx, page.seplr)
22958	if err != nil {
22959		return err
22960	}
22961	page.seplr = next
22962	return nil
22963}
22964
22965// Next advances to the next page of values.  If there was an error making
22966// the request the page does not advance and the error is returned.
22967// Deprecated: Use NextWithContext() instead.
22968func (page *ServiceEndpointPolicyListResultPage) Next() error {
22969	return page.NextWithContext(context.Background())
22970}
22971
22972// NotDone returns true if the page enumeration should be started or is not yet complete.
22973func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
22974	return !page.seplr.IsEmpty()
22975}
22976
22977// Response returns the raw server response from the last page request.
22978func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
22979	return page.seplr
22980}
22981
22982// Values returns the slice of values for the current page or nil if there are no values.
22983func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
22984	if page.seplr.IsEmpty() {
22985		return nil
22986	}
22987	return *page.seplr.Value
22988}
22989
22990// Creates a new instance of the ServiceEndpointPolicyListResultPage type.
22991func NewServiceEndpointPolicyListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
22992	return ServiceEndpointPolicyListResultPage{fn: getNextPage}
22993}
22994
22995// ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
22996type ServiceEndpointPolicyPropertiesFormat struct {
22997	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
22998	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
22999	// Subnets - READ-ONLY; A collection of references to subnets.
23000	Subnets *[]Subnet `json:"subnets,omitempty"`
23001	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
23002	ResourceGUID *string `json:"resourceGuid,omitempty"`
23003	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy. Possible values are: 'Updating', 'Deleting', and 'Failed'.
23004	ProvisioningState *string `json:"provisioningState,omitempty"`
23005}
23006
23007// ServiceEndpointPropertiesFormat the service endpoint properties.
23008type ServiceEndpointPropertiesFormat struct {
23009	// Service - The type of the endpoint service.
23010	Service *string `json:"service,omitempty"`
23011	// Locations - A list of locations.
23012	Locations *[]string `json:"locations,omitempty"`
23013	// ProvisioningState - The provisioning state of the resource.
23014	ProvisioningState *string `json:"provisioningState,omitempty"`
23015}
23016
23017// String ...
23018type String struct {
23019	autorest.Response `json:"-"`
23020	Value             *string `json:"value,omitempty"`
23021}
23022
23023// Subnet subnet in a virtual network resource.
23024type Subnet struct {
23025	autorest.Response `json:"-"`
23026	// SubnetPropertiesFormat - Properties of the subnet.
23027	*SubnetPropertiesFormat `json:"properties,omitempty"`
23028	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23029	Name *string `json:"name,omitempty"`
23030	// Etag - A unique read-only string that changes whenever the resource is updated.
23031	Etag *string `json:"etag,omitempty"`
23032	// ID - Resource ID.
23033	ID *string `json:"id,omitempty"`
23034}
23035
23036// MarshalJSON is the custom marshaler for Subnet.
23037func (s Subnet) MarshalJSON() ([]byte, error) {
23038	objectMap := make(map[string]interface{})
23039	if s.SubnetPropertiesFormat != nil {
23040		objectMap["properties"] = s.SubnetPropertiesFormat
23041	}
23042	if s.Name != nil {
23043		objectMap["name"] = s.Name
23044	}
23045	if s.Etag != nil {
23046		objectMap["etag"] = s.Etag
23047	}
23048	if s.ID != nil {
23049		objectMap["id"] = s.ID
23050	}
23051	return json.Marshal(objectMap)
23052}
23053
23054// UnmarshalJSON is the custom unmarshaler for Subnet struct.
23055func (s *Subnet) UnmarshalJSON(body []byte) error {
23056	var m map[string]*json.RawMessage
23057	err := json.Unmarshal(body, &m)
23058	if err != nil {
23059		return err
23060	}
23061	for k, v := range m {
23062		switch k {
23063		case "properties":
23064			if v != nil {
23065				var subnetPropertiesFormat SubnetPropertiesFormat
23066				err = json.Unmarshal(*v, &subnetPropertiesFormat)
23067				if err != nil {
23068					return err
23069				}
23070				s.SubnetPropertiesFormat = &subnetPropertiesFormat
23071			}
23072		case "name":
23073			if v != nil {
23074				var name string
23075				err = json.Unmarshal(*v, &name)
23076				if err != nil {
23077					return err
23078				}
23079				s.Name = &name
23080			}
23081		case "etag":
23082			if v != nil {
23083				var etag string
23084				err = json.Unmarshal(*v, &etag)
23085				if err != nil {
23086					return err
23087				}
23088				s.Etag = &etag
23089			}
23090		case "id":
23091			if v != nil {
23092				var ID string
23093				err = json.Unmarshal(*v, &ID)
23094				if err != nil {
23095					return err
23096				}
23097				s.ID = &ID
23098			}
23099		}
23100	}
23101
23102	return nil
23103}
23104
23105// SubnetAssociation network interface and its custom security rules.
23106type SubnetAssociation struct {
23107	// ID - READ-ONLY; Subnet ID.
23108	ID *string `json:"id,omitempty"`
23109	// SecurityRules - Collection of custom security rules.
23110	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
23111}
23112
23113// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
23114// network
23115type SubnetListResult struct {
23116	autorest.Response `json:"-"`
23117	// Value - The subnets in a virtual network.
23118	Value *[]Subnet `json:"value,omitempty"`
23119	// NextLink - The URL to get the next set of results.
23120	NextLink *string `json:"nextLink,omitempty"`
23121}
23122
23123// SubnetListResultIterator provides access to a complete listing of Subnet values.
23124type SubnetListResultIterator struct {
23125	i    int
23126	page SubnetListResultPage
23127}
23128
23129// NextWithContext advances to the next value.  If there was an error making
23130// the request the iterator does not advance and the error is returned.
23131func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
23132	if tracing.IsEnabled() {
23133		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
23134		defer func() {
23135			sc := -1
23136			if iter.Response().Response.Response != nil {
23137				sc = iter.Response().Response.Response.StatusCode
23138			}
23139			tracing.EndSpan(ctx, sc, err)
23140		}()
23141	}
23142	iter.i++
23143	if iter.i < len(iter.page.Values()) {
23144		return nil
23145	}
23146	err = iter.page.NextWithContext(ctx)
23147	if err != nil {
23148		iter.i--
23149		return err
23150	}
23151	iter.i = 0
23152	return nil
23153}
23154
23155// Next advances to the next value.  If there was an error making
23156// the request the iterator does not advance and the error is returned.
23157// Deprecated: Use NextWithContext() instead.
23158func (iter *SubnetListResultIterator) Next() error {
23159	return iter.NextWithContext(context.Background())
23160}
23161
23162// NotDone returns true if the enumeration should be started or is not yet complete.
23163func (iter SubnetListResultIterator) NotDone() bool {
23164	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23165}
23166
23167// Response returns the raw server response from the last page request.
23168func (iter SubnetListResultIterator) Response() SubnetListResult {
23169	return iter.page.Response()
23170}
23171
23172// Value returns the current value or a zero-initialized value if the
23173// iterator has advanced beyond the end of the collection.
23174func (iter SubnetListResultIterator) Value() Subnet {
23175	if !iter.page.NotDone() {
23176		return Subnet{}
23177	}
23178	return iter.page.Values()[iter.i]
23179}
23180
23181// Creates a new instance of the SubnetListResultIterator type.
23182func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
23183	return SubnetListResultIterator{page: page}
23184}
23185
23186// IsEmpty returns true if the ListResult contains no values.
23187func (slr SubnetListResult) IsEmpty() bool {
23188	return slr.Value == nil || len(*slr.Value) == 0
23189}
23190
23191// subnetListResultPreparer prepares a request to retrieve the next set of results.
23192// It returns nil if no more results exist.
23193func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
23194	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
23195		return nil, nil
23196	}
23197	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23198		autorest.AsJSON(),
23199		autorest.AsGet(),
23200		autorest.WithBaseURL(to.String(slr.NextLink)))
23201}
23202
23203// SubnetListResultPage contains a page of Subnet values.
23204type SubnetListResultPage struct {
23205	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
23206	slr SubnetListResult
23207}
23208
23209// NextWithContext advances to the next page of values.  If there was an error making
23210// the request the page does not advance and the error is returned.
23211func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
23212	if tracing.IsEnabled() {
23213		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
23214		defer func() {
23215			sc := -1
23216			if page.Response().Response.Response != nil {
23217				sc = page.Response().Response.Response.StatusCode
23218			}
23219			tracing.EndSpan(ctx, sc, err)
23220		}()
23221	}
23222	next, err := page.fn(ctx, page.slr)
23223	if err != nil {
23224		return err
23225	}
23226	page.slr = next
23227	return nil
23228}
23229
23230// Next advances to the next page of values.  If there was an error making
23231// the request the page does not advance and the error is returned.
23232// Deprecated: Use NextWithContext() instead.
23233func (page *SubnetListResultPage) Next() error {
23234	return page.NextWithContext(context.Background())
23235}
23236
23237// NotDone returns true if the page enumeration should be started or is not yet complete.
23238func (page SubnetListResultPage) NotDone() bool {
23239	return !page.slr.IsEmpty()
23240}
23241
23242// Response returns the raw server response from the last page request.
23243func (page SubnetListResultPage) Response() SubnetListResult {
23244	return page.slr
23245}
23246
23247// Values returns the slice of values for the current page or nil if there are no values.
23248func (page SubnetListResultPage) Values() []Subnet {
23249	if page.slr.IsEmpty() {
23250		return nil
23251	}
23252	return *page.slr.Value
23253}
23254
23255// Creates a new instance of the SubnetListResultPage type.
23256func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
23257	return SubnetListResultPage{fn: getNextPage}
23258}
23259
23260// SubnetPropertiesFormat properties of the subnet.
23261type SubnetPropertiesFormat struct {
23262	// AddressPrefix - The address prefix for the subnet.
23263	AddressPrefix *string `json:"addressPrefix,omitempty"`
23264	// AddressPrefixes - List of  address prefixes for the subnet.
23265	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
23266	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
23267	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
23268	// RouteTable - The reference of the RouteTable resource.
23269	RouteTable *RouteTable `json:"routeTable,omitempty"`
23270	// ServiceEndpoints - An array of service endpoints.
23271	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
23272	// ServiceEndpointPolicies - An array of service endpoint policies.
23273	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
23274	// InterfaceEndpoints - READ-ONLY; An array of references to interface endpoints
23275	InterfaceEndpoints *[]InterfaceEndpoint `json:"interfaceEndpoints,omitempty"`
23276	// IPConfigurations - READ-ONLY; Gets an array of references to the network interface IP configurations using subnet.
23277	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
23278	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
23279	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
23280	// ResourceNavigationLinks - Gets an array of references to the external resources using subnet.
23281	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
23282	// ServiceAssociationLinks - Gets an array of references to services injecting into this subnet.
23283	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
23284	// Delegations - Gets an array of references to the delegations on the subnet.
23285	Delegations *[]Delegation `json:"delegations,omitempty"`
23286	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
23287	Purpose *string `json:"purpose,omitempty"`
23288	// ProvisioningState - The provisioning state of the resource.
23289	ProvisioningState *string `json:"provisioningState,omitempty"`
23290}
23291
23292// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
23293// operation.
23294type SubnetsCreateOrUpdateFuture struct {
23295	azure.Future
23296}
23297
23298// Result returns the result of the asynchronous operation.
23299// If the operation has not completed it will return an error.
23300func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
23301	var done bool
23302	done, err = future.DoneWithContext(context.Background(), client)
23303	if err != nil {
23304		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23305		return
23306	}
23307	if !done {
23308		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
23309		return
23310	}
23311	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23312	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
23313		s, err = client.CreateOrUpdateResponder(s.Response.Response)
23314		if err != nil {
23315			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
23316		}
23317	}
23318	return
23319}
23320
23321// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23322// operation.
23323type SubnetsDeleteFuture struct {
23324	azure.Future
23325}
23326
23327// Result returns the result of the asynchronous operation.
23328// If the operation has not completed it will return an error.
23329func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
23330	var done bool
23331	done, err = future.DoneWithContext(context.Background(), client)
23332	if err != nil {
23333		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
23334		return
23335	}
23336	if !done {
23337		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
23338		return
23339	}
23340	ar.Response = future.Response()
23341	return
23342}
23343
23344// SubResource reference to another subresource.
23345type SubResource struct {
23346	// ID - Resource ID.
23347	ID *string `json:"id,omitempty"`
23348}
23349
23350// TagsObject tags object for patch operations.
23351type TagsObject struct {
23352	// Tags - Resource tags.
23353	Tags map[string]*string `json:"tags"`
23354}
23355
23356// MarshalJSON is the custom marshaler for TagsObject.
23357func (toVar TagsObject) MarshalJSON() ([]byte, error) {
23358	objectMap := make(map[string]interface{})
23359	if toVar.Tags != nil {
23360		objectMap["tags"] = toVar.Tags
23361	}
23362	return json.Marshal(objectMap)
23363}
23364
23365// Topology topology of the specified resource group.
23366type Topology struct {
23367	autorest.Response `json:"-"`
23368	// ID - READ-ONLY; GUID representing the operation id.
23369	ID *string `json:"id,omitempty"`
23370	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
23371	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
23372	// LastModified - READ-ONLY; The datetime when the topology was last modified.
23373	LastModified *date.Time          `json:"lastModified,omitempty"`
23374	Resources    *[]TopologyResource `json:"resources,omitempty"`
23375}
23376
23377// TopologyAssociation resources that have an association with the parent resource.
23378type TopologyAssociation struct {
23379	// Name - The name of the resource that is associated with the parent resource.
23380	Name *string `json:"name,omitempty"`
23381	// ResourceID - The ID of the resource that is associated with the parent resource.
23382	ResourceID *string `json:"resourceId,omitempty"`
23383	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
23384	AssociationType AssociationType `json:"associationType,omitempty"`
23385}
23386
23387// TopologyParameters parameters that define the representation of topology.
23388type TopologyParameters struct {
23389	// TargetResourceGroupName - The name of the target resource group to perform topology on.
23390	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
23391	// TargetVirtualNetwork - The reference of the Virtual Network resource.
23392	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
23393	// TargetSubnet - The reference of the Subnet resource.
23394	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
23395}
23396
23397// TopologyResource the network resource topology information for the given resource group.
23398type TopologyResource struct {
23399	// Name - Name of the resource.
23400	Name *string `json:"name,omitempty"`
23401	// ID - ID of the resource.
23402	ID *string `json:"id,omitempty"`
23403	// Location - Resource location.
23404	Location *string `json:"location,omitempty"`
23405	// Associations - Holds the associations the resource has with other resources in the resource group.
23406	Associations *[]TopologyAssociation `json:"associations,omitempty"`
23407}
23408
23409// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
23410type TrafficAnalyticsConfigurationProperties struct {
23411	// Enabled - Flag to enable/disable traffic analytics.
23412	Enabled *bool `json:"enabled,omitempty"`
23413	// WorkspaceID - The resource guid of the attached workspace
23414	WorkspaceID *string `json:"workspaceId,omitempty"`
23415	// WorkspaceRegion - The location of the attached workspace
23416	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
23417	// WorkspaceResourceID - Resource Id of the attached workspace
23418	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
23419	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics
23420	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
23421}
23422
23423// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
23424type TrafficAnalyticsProperties struct {
23425	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
23426}
23427
23428// TroubleshootingDetails information gained from troubleshooting of specified resource.
23429type TroubleshootingDetails struct {
23430	// ID - The id of the get troubleshoot operation.
23431	ID *string `json:"id,omitempty"`
23432	// ReasonType - Reason type of failure.
23433	ReasonType *string `json:"reasonType,omitempty"`
23434	// Summary - A summary of troubleshooting.
23435	Summary *string `json:"summary,omitempty"`
23436	// Detail - Details on troubleshooting results.
23437	Detail *string `json:"detail,omitempty"`
23438	// RecommendedActions - List of recommended actions.
23439	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
23440}
23441
23442// TroubleshootingParameters parameters that define the resource to troubleshoot.
23443type TroubleshootingParameters struct {
23444	// TargetResourceID - The target resource to troubleshoot.
23445	TargetResourceID           *string `json:"targetResourceId,omitempty"`
23446	*TroubleshootingProperties `json:"properties,omitempty"`
23447}
23448
23449// MarshalJSON is the custom marshaler for TroubleshootingParameters.
23450func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
23451	objectMap := make(map[string]interface{})
23452	if tp.TargetResourceID != nil {
23453		objectMap["targetResourceId"] = tp.TargetResourceID
23454	}
23455	if tp.TroubleshootingProperties != nil {
23456		objectMap["properties"] = tp.TroubleshootingProperties
23457	}
23458	return json.Marshal(objectMap)
23459}
23460
23461// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
23462func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
23463	var m map[string]*json.RawMessage
23464	err := json.Unmarshal(body, &m)
23465	if err != nil {
23466		return err
23467	}
23468	for k, v := range m {
23469		switch k {
23470		case "targetResourceId":
23471			if v != nil {
23472				var targetResourceID string
23473				err = json.Unmarshal(*v, &targetResourceID)
23474				if err != nil {
23475					return err
23476				}
23477				tp.TargetResourceID = &targetResourceID
23478			}
23479		case "properties":
23480			if v != nil {
23481				var troubleshootingProperties TroubleshootingProperties
23482				err = json.Unmarshal(*v, &troubleshootingProperties)
23483				if err != nil {
23484					return err
23485				}
23486				tp.TroubleshootingProperties = &troubleshootingProperties
23487			}
23488		}
23489	}
23490
23491	return nil
23492}
23493
23494// TroubleshootingProperties storage location provided for troubleshoot.
23495type TroubleshootingProperties struct {
23496	// StorageID - The ID for the storage account to save the troubleshoot result.
23497	StorageID *string `json:"storageId,omitempty"`
23498	// StoragePath - The path to the blob to save the troubleshoot result in.
23499	StoragePath *string `json:"storagePath,omitempty"`
23500}
23501
23502// TroubleshootingRecommendedActions recommended actions based on discovered issues.
23503type TroubleshootingRecommendedActions struct {
23504	// ActionID - ID of the recommended action.
23505	ActionID *string `json:"actionId,omitempty"`
23506	// ActionText - Description of recommended actions.
23507	ActionText *string `json:"actionText,omitempty"`
23508	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
23509	ActionURI *string `json:"actionUri,omitempty"`
23510	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
23511	ActionURIText *string `json:"actionUriText,omitempty"`
23512}
23513
23514// TroubleshootingResult troubleshooting information gained from specified resource.
23515type TroubleshootingResult struct {
23516	autorest.Response `json:"-"`
23517	// StartTime - The start time of the troubleshooting.
23518	StartTime *date.Time `json:"startTime,omitempty"`
23519	// EndTime - The end time of the troubleshooting.
23520	EndTime *date.Time `json:"endTime,omitempty"`
23521	// Code - The result code of the troubleshooting.
23522	Code *string `json:"code,omitempty"`
23523	// Results - Information from troubleshooting.
23524	Results *[]TroubleshootingDetails `json:"results,omitempty"`
23525}
23526
23527// TunnelConnectionHealth virtualNetworkGatewayConnection properties
23528type TunnelConnectionHealth struct {
23529	// Tunnel - READ-ONLY; Tunnel name.
23530	Tunnel *string `json:"tunnel,omitempty"`
23531	// ConnectionStatus - READ-ONLY; Virtual network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
23532	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
23533	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection
23534	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
23535	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection
23536	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
23537	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
23538	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
23539}
23540
23541// Usage describes network resource usage.
23542type Usage struct {
23543	// ID - READ-ONLY; Resource identifier.
23544	ID *string `json:"id,omitempty"`
23545	// Unit - An enum describing the unit of measurement.
23546	Unit *string `json:"unit,omitempty"`
23547	// CurrentValue - The current value of the usage.
23548	CurrentValue *int64 `json:"currentValue,omitempty"`
23549	// Limit - The limit of usage.
23550	Limit *int64 `json:"limit,omitempty"`
23551	// Name - The name of the type of usage.
23552	Name *UsageName `json:"name,omitempty"`
23553}
23554
23555// UsageName the usage names.
23556type UsageName struct {
23557	// Value - A string describing the resource name.
23558	Value *string `json:"value,omitempty"`
23559	// LocalizedValue - A localized string describing the resource name.
23560	LocalizedValue *string `json:"localizedValue,omitempty"`
23561}
23562
23563// UsagesListResult the list usages operation response.
23564type UsagesListResult struct {
23565	autorest.Response `json:"-"`
23566	// Value - The list network resource usages.
23567	Value *[]Usage `json:"value,omitempty"`
23568	// NextLink - URL to get the next set of results.
23569	NextLink *string `json:"nextLink,omitempty"`
23570}
23571
23572// UsagesListResultIterator provides access to a complete listing of Usage values.
23573type UsagesListResultIterator struct {
23574	i    int
23575	page UsagesListResultPage
23576}
23577
23578// NextWithContext advances to the next value.  If there was an error making
23579// the request the iterator does not advance and the error is returned.
23580func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
23581	if tracing.IsEnabled() {
23582		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
23583		defer func() {
23584			sc := -1
23585			if iter.Response().Response.Response != nil {
23586				sc = iter.Response().Response.Response.StatusCode
23587			}
23588			tracing.EndSpan(ctx, sc, err)
23589		}()
23590	}
23591	iter.i++
23592	if iter.i < len(iter.page.Values()) {
23593		return nil
23594	}
23595	err = iter.page.NextWithContext(ctx)
23596	if err != nil {
23597		iter.i--
23598		return err
23599	}
23600	iter.i = 0
23601	return nil
23602}
23603
23604// Next advances to the next value.  If there was an error making
23605// the request the iterator does not advance and the error is returned.
23606// Deprecated: Use NextWithContext() instead.
23607func (iter *UsagesListResultIterator) Next() error {
23608	return iter.NextWithContext(context.Background())
23609}
23610
23611// NotDone returns true if the enumeration should be started or is not yet complete.
23612func (iter UsagesListResultIterator) NotDone() bool {
23613	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23614}
23615
23616// Response returns the raw server response from the last page request.
23617func (iter UsagesListResultIterator) Response() UsagesListResult {
23618	return iter.page.Response()
23619}
23620
23621// Value returns the current value or a zero-initialized value if the
23622// iterator has advanced beyond the end of the collection.
23623func (iter UsagesListResultIterator) Value() Usage {
23624	if !iter.page.NotDone() {
23625		return Usage{}
23626	}
23627	return iter.page.Values()[iter.i]
23628}
23629
23630// Creates a new instance of the UsagesListResultIterator type.
23631func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
23632	return UsagesListResultIterator{page: page}
23633}
23634
23635// IsEmpty returns true if the ListResult contains no values.
23636func (ulr UsagesListResult) IsEmpty() bool {
23637	return ulr.Value == nil || len(*ulr.Value) == 0
23638}
23639
23640// usagesListResultPreparer prepares a request to retrieve the next set of results.
23641// It returns nil if no more results exist.
23642func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
23643	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
23644		return nil, nil
23645	}
23646	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23647		autorest.AsJSON(),
23648		autorest.AsGet(),
23649		autorest.WithBaseURL(to.String(ulr.NextLink)))
23650}
23651
23652// UsagesListResultPage contains a page of Usage values.
23653type UsagesListResultPage struct {
23654	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
23655	ulr UsagesListResult
23656}
23657
23658// NextWithContext advances to the next page of values.  If there was an error making
23659// the request the page does not advance and the error is returned.
23660func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
23661	if tracing.IsEnabled() {
23662		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
23663		defer func() {
23664			sc := -1
23665			if page.Response().Response.Response != nil {
23666				sc = page.Response().Response.Response.StatusCode
23667			}
23668			tracing.EndSpan(ctx, sc, err)
23669		}()
23670	}
23671	next, err := page.fn(ctx, page.ulr)
23672	if err != nil {
23673		return err
23674	}
23675	page.ulr = next
23676	return nil
23677}
23678
23679// Next advances to the next page of values.  If there was an error making
23680// the request the page does not advance and the error is returned.
23681// Deprecated: Use NextWithContext() instead.
23682func (page *UsagesListResultPage) Next() error {
23683	return page.NextWithContext(context.Background())
23684}
23685
23686// NotDone returns true if the page enumeration should be started or is not yet complete.
23687func (page UsagesListResultPage) NotDone() bool {
23688	return !page.ulr.IsEmpty()
23689}
23690
23691// Response returns the raw server response from the last page request.
23692func (page UsagesListResultPage) Response() UsagesListResult {
23693	return page.ulr
23694}
23695
23696// Values returns the slice of values for the current page or nil if there are no values.
23697func (page UsagesListResultPage) Values() []Usage {
23698	if page.ulr.IsEmpty() {
23699		return nil
23700	}
23701	return *page.ulr.Value
23702}
23703
23704// Creates a new instance of the UsagesListResultPage type.
23705func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
23706	return UsagesListResultPage{fn: getNextPage}
23707}
23708
23709// VerificationIPFlowParameters parameters that define the IP flow to be verified.
23710type VerificationIPFlowParameters struct {
23711	// TargetResourceID - The ID of the target resource to perform next-hop on.
23712	TargetResourceID *string `json:"targetResourceId,omitempty"`
23713	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
23714	Direction Direction `json:"direction,omitempty"`
23715	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
23716	Protocol IPFlowProtocol `json:"protocol,omitempty"`
23717	// 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.
23718	LocalPort *string `json:"localPort,omitempty"`
23719	// 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.
23720	RemotePort *string `json:"remotePort,omitempty"`
23721	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
23722	LocalIPAddress *string `json:"localIPAddress,omitempty"`
23723	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
23724	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
23725	// 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).
23726	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
23727}
23728
23729// VerificationIPFlowResult results of IP flow verification on the target resource.
23730type VerificationIPFlowResult struct {
23731	autorest.Response `json:"-"`
23732	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
23733	Access Access `json:"access,omitempty"`
23734	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
23735	RuleName *string `json:"ruleName,omitempty"`
23736}
23737
23738// VirtualHub virtualHub Resource.
23739type VirtualHub struct {
23740	autorest.Response     `json:"-"`
23741	*VirtualHubProperties `json:"properties,omitempty"`
23742	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
23743	Etag *string `json:"etag,omitempty"`
23744	// ID - Resource ID.
23745	ID *string `json:"id,omitempty"`
23746	// Name - READ-ONLY; Resource name.
23747	Name *string `json:"name,omitempty"`
23748	// Type - READ-ONLY; Resource type.
23749	Type *string `json:"type,omitempty"`
23750	// Location - Resource location.
23751	Location *string `json:"location,omitempty"`
23752	// Tags - Resource tags.
23753	Tags map[string]*string `json:"tags"`
23754}
23755
23756// MarshalJSON is the custom marshaler for VirtualHub.
23757func (vh VirtualHub) MarshalJSON() ([]byte, error) {
23758	objectMap := make(map[string]interface{})
23759	if vh.VirtualHubProperties != nil {
23760		objectMap["properties"] = vh.VirtualHubProperties
23761	}
23762	if vh.ID != nil {
23763		objectMap["id"] = vh.ID
23764	}
23765	if vh.Location != nil {
23766		objectMap["location"] = vh.Location
23767	}
23768	if vh.Tags != nil {
23769		objectMap["tags"] = vh.Tags
23770	}
23771	return json.Marshal(objectMap)
23772}
23773
23774// UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
23775func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
23776	var m map[string]*json.RawMessage
23777	err := json.Unmarshal(body, &m)
23778	if err != nil {
23779		return err
23780	}
23781	for k, v := range m {
23782		switch k {
23783		case "properties":
23784			if v != nil {
23785				var virtualHubProperties VirtualHubProperties
23786				err = json.Unmarshal(*v, &virtualHubProperties)
23787				if err != nil {
23788					return err
23789				}
23790				vh.VirtualHubProperties = &virtualHubProperties
23791			}
23792		case "etag":
23793			if v != nil {
23794				var etag string
23795				err = json.Unmarshal(*v, &etag)
23796				if err != nil {
23797					return err
23798				}
23799				vh.Etag = &etag
23800			}
23801		case "id":
23802			if v != nil {
23803				var ID string
23804				err = json.Unmarshal(*v, &ID)
23805				if err != nil {
23806					return err
23807				}
23808				vh.ID = &ID
23809			}
23810		case "name":
23811			if v != nil {
23812				var name string
23813				err = json.Unmarshal(*v, &name)
23814				if err != nil {
23815					return err
23816				}
23817				vh.Name = &name
23818			}
23819		case "type":
23820			if v != nil {
23821				var typeVar string
23822				err = json.Unmarshal(*v, &typeVar)
23823				if err != nil {
23824					return err
23825				}
23826				vh.Type = &typeVar
23827			}
23828		case "location":
23829			if v != nil {
23830				var location string
23831				err = json.Unmarshal(*v, &location)
23832				if err != nil {
23833					return err
23834				}
23835				vh.Location = &location
23836			}
23837		case "tags":
23838			if v != nil {
23839				var tags map[string]*string
23840				err = json.Unmarshal(*v, &tags)
23841				if err != nil {
23842					return err
23843				}
23844				vh.Tags = tags
23845			}
23846		}
23847	}
23848
23849	return nil
23850}
23851
23852// VirtualHubID virtual Hub identifier.
23853type VirtualHubID struct {
23854	// 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.
23855	ID *string `json:"id,omitempty"`
23856}
23857
23858// VirtualHubProperties parameters for VirtualHub
23859type VirtualHubProperties struct {
23860	// VirtualWan - The VirtualWAN to which the VirtualHub belongs
23861	VirtualWan *SubResource `json:"virtualWan,omitempty"`
23862	// VpnGateway - The VpnGateway associated with this VirtualHub
23863	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
23864	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub
23865	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
23866	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub
23867	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
23868	// VirtualNetworkConnections - list of all vnet connections with this VirtualHub.
23869	VirtualNetworkConnections *[]HubVirtualNetworkConnection `json:"virtualNetworkConnections,omitempty"`
23870	// AddressPrefix - Address-prefix for this VirtualHub.
23871	AddressPrefix *string `json:"addressPrefix,omitempty"`
23872	// RouteTable - The routeTable associated with this virtual hub.
23873	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
23874	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23875	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23876}
23877
23878// VirtualHubRoute virtualHub route
23879type VirtualHubRoute struct {
23880	// AddressPrefixes - list of all addressPrefixes.
23881	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
23882	// NextHopIPAddress - NextHop ip address.
23883	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
23884}
23885
23886// VirtualHubRouteTable virtualHub route table
23887type VirtualHubRouteTable struct {
23888	// Routes - list of all routes.
23889	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
23890}
23891
23892// VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23893// long-running operation.
23894type VirtualHubsCreateOrUpdateFuture struct {
23895	azure.Future
23896}
23897
23898// Result returns the result of the asynchronous operation.
23899// If the operation has not completed it will return an error.
23900func (future *VirtualHubsCreateOrUpdateFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
23901	var done bool
23902	done, err = future.DoneWithContext(context.Background(), client)
23903	if err != nil {
23904		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23905		return
23906	}
23907	if !done {
23908		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
23909		return
23910	}
23911	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23912	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
23913		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
23914		if err != nil {
23915			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
23916		}
23917	}
23918	return
23919}
23920
23921// VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23922// operation.
23923type VirtualHubsDeleteFuture struct {
23924	azure.Future
23925}
23926
23927// Result returns the result of the asynchronous operation.
23928// If the operation has not completed it will return an error.
23929func (future *VirtualHubsDeleteFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
23930	var done bool
23931	done, err = future.DoneWithContext(context.Background(), client)
23932	if err != nil {
23933		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
23934		return
23935	}
23936	if !done {
23937		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
23938		return
23939	}
23940	ar.Response = future.Response()
23941	return
23942}
23943
23944// VirtualHubsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
23945// operation.
23946type VirtualHubsUpdateTagsFuture struct {
23947	azure.Future
23948}
23949
23950// Result returns the result of the asynchronous operation.
23951// If the operation has not completed it will return an error.
23952func (future *VirtualHubsUpdateTagsFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
23953	var done bool
23954	done, err = future.DoneWithContext(context.Background(), client)
23955	if err != nil {
23956		err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
23957		return
23958	}
23959	if !done {
23960		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsUpdateTagsFuture")
23961		return
23962	}
23963	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23964	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
23965		vh, err = client.UpdateTagsResponder(vh.Response.Response)
23966		if err != nil {
23967			err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", vh.Response.Response, "Failure responding to request")
23968		}
23969	}
23970	return
23971}
23972
23973// VirtualNetwork virtual Network resource.
23974type VirtualNetwork struct {
23975	autorest.Response `json:"-"`
23976	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
23977	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
23978	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
23979	Etag *string `json:"etag,omitempty"`
23980	// ID - Resource ID.
23981	ID *string `json:"id,omitempty"`
23982	// Name - READ-ONLY; Resource name.
23983	Name *string `json:"name,omitempty"`
23984	// Type - READ-ONLY; Resource type.
23985	Type *string `json:"type,omitempty"`
23986	// Location - Resource location.
23987	Location *string `json:"location,omitempty"`
23988	// Tags - Resource tags.
23989	Tags map[string]*string `json:"tags"`
23990}
23991
23992// MarshalJSON is the custom marshaler for VirtualNetwork.
23993func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
23994	objectMap := make(map[string]interface{})
23995	if vn.VirtualNetworkPropertiesFormat != nil {
23996		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
23997	}
23998	if vn.Etag != nil {
23999		objectMap["etag"] = vn.Etag
24000	}
24001	if vn.ID != nil {
24002		objectMap["id"] = vn.ID
24003	}
24004	if vn.Location != nil {
24005		objectMap["location"] = vn.Location
24006	}
24007	if vn.Tags != nil {
24008		objectMap["tags"] = vn.Tags
24009	}
24010	return json.Marshal(objectMap)
24011}
24012
24013// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
24014func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
24015	var m map[string]*json.RawMessage
24016	err := json.Unmarshal(body, &m)
24017	if err != nil {
24018		return err
24019	}
24020	for k, v := range m {
24021		switch k {
24022		case "properties":
24023			if v != nil {
24024				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
24025				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
24026				if err != nil {
24027					return err
24028				}
24029				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
24030			}
24031		case "etag":
24032			if v != nil {
24033				var etag string
24034				err = json.Unmarshal(*v, &etag)
24035				if err != nil {
24036					return err
24037				}
24038				vn.Etag = &etag
24039			}
24040		case "id":
24041			if v != nil {
24042				var ID string
24043				err = json.Unmarshal(*v, &ID)
24044				if err != nil {
24045					return err
24046				}
24047				vn.ID = &ID
24048			}
24049		case "name":
24050			if v != nil {
24051				var name string
24052				err = json.Unmarshal(*v, &name)
24053				if err != nil {
24054					return err
24055				}
24056				vn.Name = &name
24057			}
24058		case "type":
24059			if v != nil {
24060				var typeVar string
24061				err = json.Unmarshal(*v, &typeVar)
24062				if err != nil {
24063					return err
24064				}
24065				vn.Type = &typeVar
24066			}
24067		case "location":
24068			if v != nil {
24069				var location string
24070				err = json.Unmarshal(*v, &location)
24071				if err != nil {
24072					return err
24073				}
24074				vn.Location = &location
24075			}
24076		case "tags":
24077			if v != nil {
24078				var tags map[string]*string
24079				err = json.Unmarshal(*v, &tags)
24080				if err != nil {
24081					return err
24082				}
24083				vn.Tags = tags
24084			}
24085		}
24086	}
24087
24088	return nil
24089}
24090
24091// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
24092// resource.
24093type VirtualNetworkConnectionGatewayReference struct {
24094	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
24095	ID *string `json:"id,omitempty"`
24096}
24097
24098// VirtualNetworkGateway a common class for general resource information
24099type VirtualNetworkGateway struct {
24100	autorest.Response `json:"-"`
24101	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
24102	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
24103	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
24104	Etag *string `json:"etag,omitempty"`
24105	// ID - Resource ID.
24106	ID *string `json:"id,omitempty"`
24107	// Name - READ-ONLY; Resource name.
24108	Name *string `json:"name,omitempty"`
24109	// Type - READ-ONLY; Resource type.
24110	Type *string `json:"type,omitempty"`
24111	// Location - Resource location.
24112	Location *string `json:"location,omitempty"`
24113	// Tags - Resource tags.
24114	Tags map[string]*string `json:"tags"`
24115}
24116
24117// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
24118func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
24119	objectMap := make(map[string]interface{})
24120	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
24121		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
24122	}
24123	if vng.Etag != nil {
24124		objectMap["etag"] = vng.Etag
24125	}
24126	if vng.ID != nil {
24127		objectMap["id"] = vng.ID
24128	}
24129	if vng.Location != nil {
24130		objectMap["location"] = vng.Location
24131	}
24132	if vng.Tags != nil {
24133		objectMap["tags"] = vng.Tags
24134	}
24135	return json.Marshal(objectMap)
24136}
24137
24138// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
24139func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
24140	var m map[string]*json.RawMessage
24141	err := json.Unmarshal(body, &m)
24142	if err != nil {
24143		return err
24144	}
24145	for k, v := range m {
24146		switch k {
24147		case "properties":
24148			if v != nil {
24149				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
24150				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
24151				if err != nil {
24152					return err
24153				}
24154				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
24155			}
24156		case "etag":
24157			if v != nil {
24158				var etag string
24159				err = json.Unmarshal(*v, &etag)
24160				if err != nil {
24161					return err
24162				}
24163				vng.Etag = &etag
24164			}
24165		case "id":
24166			if v != nil {
24167				var ID string
24168				err = json.Unmarshal(*v, &ID)
24169				if err != nil {
24170					return err
24171				}
24172				vng.ID = &ID
24173			}
24174		case "name":
24175			if v != nil {
24176				var name string
24177				err = json.Unmarshal(*v, &name)
24178				if err != nil {
24179					return err
24180				}
24181				vng.Name = &name
24182			}
24183		case "type":
24184			if v != nil {
24185				var typeVar string
24186				err = json.Unmarshal(*v, &typeVar)
24187				if err != nil {
24188					return err
24189				}
24190				vng.Type = &typeVar
24191			}
24192		case "location":
24193			if v != nil {
24194				var location string
24195				err = json.Unmarshal(*v, &location)
24196				if err != nil {
24197					return err
24198				}
24199				vng.Location = &location
24200			}
24201		case "tags":
24202			if v != nil {
24203				var tags map[string]*string
24204				err = json.Unmarshal(*v, &tags)
24205				if err != nil {
24206					return err
24207				}
24208				vng.Tags = tags
24209			}
24210		}
24211	}
24212
24213	return nil
24214}
24215
24216// VirtualNetworkGatewayConnection a common class for general resource information
24217type VirtualNetworkGatewayConnection struct {
24218	autorest.Response `json:"-"`
24219	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
24220	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
24221	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
24222	Etag *string `json:"etag,omitempty"`
24223	// ID - Resource ID.
24224	ID *string `json:"id,omitempty"`
24225	// Name - READ-ONLY; Resource name.
24226	Name *string `json:"name,omitempty"`
24227	// Type - READ-ONLY; Resource type.
24228	Type *string `json:"type,omitempty"`
24229	// Location - Resource location.
24230	Location *string `json:"location,omitempty"`
24231	// Tags - Resource tags.
24232	Tags map[string]*string `json:"tags"`
24233}
24234
24235// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
24236func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
24237	objectMap := make(map[string]interface{})
24238	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
24239		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
24240	}
24241	if vngc.Etag != nil {
24242		objectMap["etag"] = vngc.Etag
24243	}
24244	if vngc.ID != nil {
24245		objectMap["id"] = vngc.ID
24246	}
24247	if vngc.Location != nil {
24248		objectMap["location"] = vngc.Location
24249	}
24250	if vngc.Tags != nil {
24251		objectMap["tags"] = vngc.Tags
24252	}
24253	return json.Marshal(objectMap)
24254}
24255
24256// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
24257func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
24258	var m map[string]*json.RawMessage
24259	err := json.Unmarshal(body, &m)
24260	if err != nil {
24261		return err
24262	}
24263	for k, v := range m {
24264		switch k {
24265		case "properties":
24266			if v != nil {
24267				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
24268				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
24269				if err != nil {
24270					return err
24271				}
24272				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
24273			}
24274		case "etag":
24275			if v != nil {
24276				var etag string
24277				err = json.Unmarshal(*v, &etag)
24278				if err != nil {
24279					return err
24280				}
24281				vngc.Etag = &etag
24282			}
24283		case "id":
24284			if v != nil {
24285				var ID string
24286				err = json.Unmarshal(*v, &ID)
24287				if err != nil {
24288					return err
24289				}
24290				vngc.ID = &ID
24291			}
24292		case "name":
24293			if v != nil {
24294				var name string
24295				err = json.Unmarshal(*v, &name)
24296				if err != nil {
24297					return err
24298				}
24299				vngc.Name = &name
24300			}
24301		case "type":
24302			if v != nil {
24303				var typeVar string
24304				err = json.Unmarshal(*v, &typeVar)
24305				if err != nil {
24306					return err
24307				}
24308				vngc.Type = &typeVar
24309			}
24310		case "location":
24311			if v != nil {
24312				var location string
24313				err = json.Unmarshal(*v, &location)
24314				if err != nil {
24315					return err
24316				}
24317				vngc.Location = &location
24318			}
24319		case "tags":
24320			if v != nil {
24321				var tags map[string]*string
24322				err = json.Unmarshal(*v, &tags)
24323				if err != nil {
24324					return err
24325				}
24326				vngc.Tags = tags
24327			}
24328		}
24329	}
24330
24331	return nil
24332}
24333
24334// VirtualNetworkGatewayConnectionListEntity a common class for general resource information
24335type VirtualNetworkGatewayConnectionListEntity struct {
24336	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
24337	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
24338	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
24339	Etag *string `json:"etag,omitempty"`
24340	// ID - Resource ID.
24341	ID *string `json:"id,omitempty"`
24342	// Name - READ-ONLY; Resource name.
24343	Name *string `json:"name,omitempty"`
24344	// Type - READ-ONLY; Resource type.
24345	Type *string `json:"type,omitempty"`
24346	// Location - Resource location.
24347	Location *string `json:"location,omitempty"`
24348	// Tags - Resource tags.
24349	Tags map[string]*string `json:"tags"`
24350}
24351
24352// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
24353func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
24354	objectMap := make(map[string]interface{})
24355	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
24356		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
24357	}
24358	if vngcle.Etag != nil {
24359		objectMap["etag"] = vngcle.Etag
24360	}
24361	if vngcle.ID != nil {
24362		objectMap["id"] = vngcle.ID
24363	}
24364	if vngcle.Location != nil {
24365		objectMap["location"] = vngcle.Location
24366	}
24367	if vngcle.Tags != nil {
24368		objectMap["tags"] = vngcle.Tags
24369	}
24370	return json.Marshal(objectMap)
24371}
24372
24373// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
24374func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
24375	var m map[string]*json.RawMessage
24376	err := json.Unmarshal(body, &m)
24377	if err != nil {
24378		return err
24379	}
24380	for k, v := range m {
24381		switch k {
24382		case "properties":
24383			if v != nil {
24384				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
24385				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
24386				if err != nil {
24387					return err
24388				}
24389				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
24390			}
24391		case "etag":
24392			if v != nil {
24393				var etag string
24394				err = json.Unmarshal(*v, &etag)
24395				if err != nil {
24396					return err
24397				}
24398				vngcle.Etag = &etag
24399			}
24400		case "id":
24401			if v != nil {
24402				var ID string
24403				err = json.Unmarshal(*v, &ID)
24404				if err != nil {
24405					return err
24406				}
24407				vngcle.ID = &ID
24408			}
24409		case "name":
24410			if v != nil {
24411				var name string
24412				err = json.Unmarshal(*v, &name)
24413				if err != nil {
24414					return err
24415				}
24416				vngcle.Name = &name
24417			}
24418		case "type":
24419			if v != nil {
24420				var typeVar string
24421				err = json.Unmarshal(*v, &typeVar)
24422				if err != nil {
24423					return err
24424				}
24425				vngcle.Type = &typeVar
24426			}
24427		case "location":
24428			if v != nil {
24429				var location string
24430				err = json.Unmarshal(*v, &location)
24431				if err != nil {
24432					return err
24433				}
24434				vngcle.Location = &location
24435			}
24436		case "tags":
24437			if v != nil {
24438				var tags map[string]*string
24439				err = json.Unmarshal(*v, &tags)
24440				if err != nil {
24441					return err
24442				}
24443				vngcle.Tags = tags
24444			}
24445		}
24446	}
24447
24448	return nil
24449}
24450
24451// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties
24452type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
24453	// AuthorizationKey - The authorizationKey.
24454	AuthorizationKey *string `json:"authorizationKey,omitempty"`
24455	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
24456	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
24457	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
24458	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
24459	// LocalNetworkGateway2 - The reference to local network gateway resource.
24460	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
24461	// ConnectionType - Gateway connection type. Possible values are: 'IPsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
24462	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
24463	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
24464	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
24465	// RoutingWeight - The routing weight.
24466	RoutingWeight *int32 `json:"routingWeight,omitempty"`
24467	// SharedKey - The IPSec shared key.
24468	SharedKey *string `json:"sharedKey,omitempty"`
24469	// ConnectionStatus - READ-ONLY; Virtual network Gateway connection status. Possible values are 'Unknown', 'Connecting', 'Connected' and 'NotConnected'. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
24470	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
24471	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
24472	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
24473	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
24474	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
24475	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
24476	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
24477	// Peer - The reference to peerings resource.
24478	Peer *SubResource `json:"peer,omitempty"`
24479	// EnableBgp - EnableBgp flag
24480	EnableBgp *bool `json:"enableBgp,omitempty"`
24481	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
24482	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
24483	// IpsecPolicies - The IPSec Policies to be considered by this connection.
24484	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
24485	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
24486	ResourceGUID *string `json:"resourceGuid,omitempty"`
24487	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24488	ProvisioningState *string `json:"provisioningState,omitempty"`
24489	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding
24490	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
24491}
24492
24493// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
24494// service call
24495type VirtualNetworkGatewayConnectionListResult struct {
24496	autorest.Response `json:"-"`
24497	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
24498	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
24499	// NextLink - READ-ONLY; The URL to get the next set of results.
24500	NextLink *string `json:"nextLink,omitempty"`
24501}
24502
24503// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
24504// VirtualNetworkGatewayConnection values.
24505type VirtualNetworkGatewayConnectionListResultIterator struct {
24506	i    int
24507	page VirtualNetworkGatewayConnectionListResultPage
24508}
24509
24510// NextWithContext advances to the next value.  If there was an error making
24511// the request the iterator does not advance and the error is returned.
24512func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
24513	if tracing.IsEnabled() {
24514		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
24515		defer func() {
24516			sc := -1
24517			if iter.Response().Response.Response != nil {
24518				sc = iter.Response().Response.Response.StatusCode
24519			}
24520			tracing.EndSpan(ctx, sc, err)
24521		}()
24522	}
24523	iter.i++
24524	if iter.i < len(iter.page.Values()) {
24525		return nil
24526	}
24527	err = iter.page.NextWithContext(ctx)
24528	if err != nil {
24529		iter.i--
24530		return err
24531	}
24532	iter.i = 0
24533	return nil
24534}
24535
24536// Next advances to the next value.  If there was an error making
24537// the request the iterator does not advance and the error is returned.
24538// Deprecated: Use NextWithContext() instead.
24539func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
24540	return iter.NextWithContext(context.Background())
24541}
24542
24543// NotDone returns true if the enumeration should be started or is not yet complete.
24544func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
24545	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24546}
24547
24548// Response returns the raw server response from the last page request.
24549func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
24550	return iter.page.Response()
24551}
24552
24553// Value returns the current value or a zero-initialized value if the
24554// iterator has advanced beyond the end of the collection.
24555func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
24556	if !iter.page.NotDone() {
24557		return VirtualNetworkGatewayConnection{}
24558	}
24559	return iter.page.Values()[iter.i]
24560}
24561
24562// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
24563func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
24564	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
24565}
24566
24567// IsEmpty returns true if the ListResult contains no values.
24568func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
24569	return vngclr.Value == nil || len(*vngclr.Value) == 0
24570}
24571
24572// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
24573// It returns nil if no more results exist.
24574func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
24575	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
24576		return nil, nil
24577	}
24578	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24579		autorest.AsJSON(),
24580		autorest.AsGet(),
24581		autorest.WithBaseURL(to.String(vngclr.NextLink)))
24582}
24583
24584// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
24585type VirtualNetworkGatewayConnectionListResultPage struct {
24586	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
24587	vngclr VirtualNetworkGatewayConnectionListResult
24588}
24589
24590// NextWithContext advances to the next page of values.  If there was an error making
24591// the request the page does not advance and the error is returned.
24592func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
24593	if tracing.IsEnabled() {
24594		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
24595		defer func() {
24596			sc := -1
24597			if page.Response().Response.Response != nil {
24598				sc = page.Response().Response.Response.StatusCode
24599			}
24600			tracing.EndSpan(ctx, sc, err)
24601		}()
24602	}
24603	next, err := page.fn(ctx, page.vngclr)
24604	if err != nil {
24605		return err
24606	}
24607	page.vngclr = next
24608	return nil
24609}
24610
24611// Next advances to the next page of values.  If there was an error making
24612// the request the page does not advance and the error is returned.
24613// Deprecated: Use NextWithContext() instead.
24614func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
24615	return page.NextWithContext(context.Background())
24616}
24617
24618// NotDone returns true if the page enumeration should be started or is not yet complete.
24619func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
24620	return !page.vngclr.IsEmpty()
24621}
24622
24623// Response returns the raw server response from the last page request.
24624func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
24625	return page.vngclr
24626}
24627
24628// Values returns the slice of values for the current page or nil if there are no values.
24629func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
24630	if page.vngclr.IsEmpty() {
24631		return nil
24632	}
24633	return *page.vngclr.Value
24634}
24635
24636// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
24637func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
24638	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
24639}
24640
24641// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties
24642type VirtualNetworkGatewayConnectionPropertiesFormat struct {
24643	// AuthorizationKey - The authorizationKey.
24644	AuthorizationKey *string `json:"authorizationKey,omitempty"`
24645	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
24646	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
24647	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
24648	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
24649	// LocalNetworkGateway2 - The reference to local network gateway resource.
24650	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
24651	// ConnectionType - Gateway connection type. Possible values are: 'Ipsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
24652	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
24653	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
24654	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
24655	// RoutingWeight - The routing weight.
24656	RoutingWeight *int32 `json:"routingWeight,omitempty"`
24657	// SharedKey - The IPSec shared key.
24658	SharedKey *string `json:"sharedKey,omitempty"`
24659	// ConnectionStatus - READ-ONLY; Virtual network Gateway connection status. Possible values are 'Unknown', 'Connecting', 'Connected' and 'NotConnected'. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
24660	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
24661	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
24662	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
24663	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
24664	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
24665	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
24666	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
24667	// Peer - The reference to peerings resource.
24668	Peer *SubResource `json:"peer,omitempty"`
24669	// EnableBgp - EnableBgp flag
24670	EnableBgp *bool `json:"enableBgp,omitempty"`
24671	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
24672	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
24673	// IpsecPolicies - The IPSec Policies to be considered by this connection.
24674	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
24675	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
24676	ResourceGUID *string `json:"resourceGuid,omitempty"`
24677	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24678	ProvisioningState *string `json:"provisioningState,omitempty"`
24679	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding
24680	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
24681}
24682
24683// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
24684// results of a long-running operation.
24685type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
24686	azure.Future
24687}
24688
24689// Result returns the result of the asynchronous operation.
24690// If the operation has not completed it will return an error.
24691func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
24692	var done bool
24693	done, err = future.DoneWithContext(context.Background(), client)
24694	if err != nil {
24695		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24696		return
24697	}
24698	if !done {
24699		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
24700		return
24701	}
24702	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24703	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
24704		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
24705		if err != nil {
24706			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
24707		}
24708	}
24709	return
24710}
24711
24712// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
24713// a long-running operation.
24714type VirtualNetworkGatewayConnectionsDeleteFuture struct {
24715	azure.Future
24716}
24717
24718// Result returns the result of the asynchronous operation.
24719// If the operation has not completed it will return an error.
24720func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
24721	var done bool
24722	done, err = future.DoneWithContext(context.Background(), client)
24723	if err != nil {
24724		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
24725		return
24726	}
24727	if !done {
24728		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
24729		return
24730	}
24731	ar.Response = future.Response()
24732	return
24733}
24734
24735// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
24736// results of a long-running operation.
24737type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
24738	azure.Future
24739}
24740
24741// Result returns the result of the asynchronous operation.
24742// If the operation has not completed it will return an error.
24743func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
24744	var done bool
24745	done, err = future.DoneWithContext(context.Background(), client)
24746	if err != nil {
24747		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
24748		return
24749	}
24750	if !done {
24751		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
24752		return
24753	}
24754	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24755	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
24756		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
24757		if err != nil {
24758			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
24759		}
24760	}
24761	return
24762}
24763
24764// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
24765// results of a long-running operation.
24766type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
24767	azure.Future
24768}
24769
24770// Result returns the result of the asynchronous operation.
24771// If the operation has not completed it will return an error.
24772func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
24773	var done bool
24774	done, err = future.DoneWithContext(context.Background(), client)
24775	if err != nil {
24776		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
24777		return
24778	}
24779	if !done {
24780		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
24781		return
24782	}
24783	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24784	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
24785		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
24786		if err != nil {
24787			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
24788		}
24789	}
24790	return
24791}
24792
24793// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
24794// results of a long-running operation.
24795type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
24796	azure.Future
24797}
24798
24799// Result returns the result of the asynchronous operation.
24800// If the operation has not completed it will return an error.
24801func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
24802	var done bool
24803	done, err = future.DoneWithContext(context.Background(), client)
24804	if err != nil {
24805		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
24806		return
24807	}
24808	if !done {
24809		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
24810		return
24811	}
24812	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24813	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
24814		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
24815		if err != nil {
24816			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
24817		}
24818	}
24819	return
24820}
24821
24822// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway
24823type VirtualNetworkGatewayIPConfiguration struct {
24824	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
24825	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
24826	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
24827	Name *string `json:"name,omitempty"`
24828	// Etag - A unique read-only string that changes whenever the resource is updated.
24829	Etag *string `json:"etag,omitempty"`
24830	// ID - Resource ID.
24831	ID *string `json:"id,omitempty"`
24832}
24833
24834// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
24835func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
24836	objectMap := make(map[string]interface{})
24837	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
24838		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
24839	}
24840	if vngic.Name != nil {
24841		objectMap["name"] = vngic.Name
24842	}
24843	if vngic.Etag != nil {
24844		objectMap["etag"] = vngic.Etag
24845	}
24846	if vngic.ID != nil {
24847		objectMap["id"] = vngic.ID
24848	}
24849	return json.Marshal(objectMap)
24850}
24851
24852// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
24853func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
24854	var m map[string]*json.RawMessage
24855	err := json.Unmarshal(body, &m)
24856	if err != nil {
24857		return err
24858	}
24859	for k, v := range m {
24860		switch k {
24861		case "properties":
24862			if v != nil {
24863				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
24864				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
24865				if err != nil {
24866					return err
24867				}
24868				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
24869			}
24870		case "name":
24871			if v != nil {
24872				var name string
24873				err = json.Unmarshal(*v, &name)
24874				if err != nil {
24875					return err
24876				}
24877				vngic.Name = &name
24878			}
24879		case "etag":
24880			if v != nil {
24881				var etag string
24882				err = json.Unmarshal(*v, &etag)
24883				if err != nil {
24884					return err
24885				}
24886				vngic.Etag = &etag
24887			}
24888		case "id":
24889			if v != nil {
24890				var ID string
24891				err = json.Unmarshal(*v, &ID)
24892				if err != nil {
24893					return err
24894				}
24895				vngic.ID = &ID
24896			}
24897		}
24898	}
24899
24900	return nil
24901}
24902
24903// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration
24904type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
24905	// PrivateIPAllocationMethod - The private IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
24906	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
24907	// Subnet - The reference of the subnet resource.
24908	Subnet *SubResource `json:"subnet,omitempty"`
24909	// PublicIPAddress - The reference of the public IP resource.
24910	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
24911	// ProvisioningState - READ-ONLY; The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
24912	ProvisioningState *string `json:"provisioningState,omitempty"`
24913}
24914
24915// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
24916// service call
24917type VirtualNetworkGatewayListConnectionsResult struct {
24918	autorest.Response `json:"-"`
24919	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
24920	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
24921	// NextLink - READ-ONLY; The URL to get the next set of results.
24922	NextLink *string `json:"nextLink,omitempty"`
24923}
24924
24925// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
24926// VirtualNetworkGatewayConnectionListEntity values.
24927type VirtualNetworkGatewayListConnectionsResultIterator struct {
24928	i    int
24929	page VirtualNetworkGatewayListConnectionsResultPage
24930}
24931
24932// NextWithContext advances to the next value.  If there was an error making
24933// the request the iterator does not advance and the error is returned.
24934func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
24935	if tracing.IsEnabled() {
24936		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
24937		defer func() {
24938			sc := -1
24939			if iter.Response().Response.Response != nil {
24940				sc = iter.Response().Response.Response.StatusCode
24941			}
24942			tracing.EndSpan(ctx, sc, err)
24943		}()
24944	}
24945	iter.i++
24946	if iter.i < len(iter.page.Values()) {
24947		return nil
24948	}
24949	err = iter.page.NextWithContext(ctx)
24950	if err != nil {
24951		iter.i--
24952		return err
24953	}
24954	iter.i = 0
24955	return nil
24956}
24957
24958// Next advances to the next value.  If there was an error making
24959// the request the iterator does not advance and the error is returned.
24960// Deprecated: Use NextWithContext() instead.
24961func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
24962	return iter.NextWithContext(context.Background())
24963}
24964
24965// NotDone returns true if the enumeration should be started or is not yet complete.
24966func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
24967	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24968}
24969
24970// Response returns the raw server response from the last page request.
24971func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
24972	return iter.page.Response()
24973}
24974
24975// Value returns the current value or a zero-initialized value if the
24976// iterator has advanced beyond the end of the collection.
24977func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
24978	if !iter.page.NotDone() {
24979		return VirtualNetworkGatewayConnectionListEntity{}
24980	}
24981	return iter.page.Values()[iter.i]
24982}
24983
24984// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
24985func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
24986	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
24987}
24988
24989// IsEmpty returns true if the ListResult contains no values.
24990func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
24991	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
24992}
24993
24994// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
24995// It returns nil if no more results exist.
24996func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
24997	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
24998		return nil, nil
24999	}
25000	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25001		autorest.AsJSON(),
25002		autorest.AsGet(),
25003		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
25004}
25005
25006// VirtualNetworkGatewayListConnectionsResultPage contains a page of
25007// VirtualNetworkGatewayConnectionListEntity values.
25008type VirtualNetworkGatewayListConnectionsResultPage struct {
25009	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
25010	vnglcr VirtualNetworkGatewayListConnectionsResult
25011}
25012
25013// NextWithContext advances to the next page of values.  If there was an error making
25014// the request the page does not advance and the error is returned.
25015func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
25016	if tracing.IsEnabled() {
25017		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
25018		defer func() {
25019			sc := -1
25020			if page.Response().Response.Response != nil {
25021				sc = page.Response().Response.Response.StatusCode
25022			}
25023			tracing.EndSpan(ctx, sc, err)
25024		}()
25025	}
25026	next, err := page.fn(ctx, page.vnglcr)
25027	if err != nil {
25028		return err
25029	}
25030	page.vnglcr = next
25031	return nil
25032}
25033
25034// Next advances to the next page of values.  If there was an error making
25035// the request the page does not advance and the error is returned.
25036// Deprecated: Use NextWithContext() instead.
25037func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
25038	return page.NextWithContext(context.Background())
25039}
25040
25041// NotDone returns true if the page enumeration should be started or is not yet complete.
25042func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
25043	return !page.vnglcr.IsEmpty()
25044}
25045
25046// Response returns the raw server response from the last page request.
25047func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
25048	return page.vnglcr
25049}
25050
25051// Values returns the slice of values for the current page or nil if there are no values.
25052func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
25053	if page.vnglcr.IsEmpty() {
25054		return nil
25055	}
25056	return *page.vnglcr.Value
25057}
25058
25059// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
25060func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
25061	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
25062}
25063
25064// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
25065type VirtualNetworkGatewayListResult struct {
25066	autorest.Response `json:"-"`
25067	// Value - Gets a list of VirtualNetworkGateway resources that exists in a resource group.
25068	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
25069	// NextLink - READ-ONLY; The URL to get the next set of results.
25070	NextLink *string `json:"nextLink,omitempty"`
25071}
25072
25073// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
25074// values.
25075type VirtualNetworkGatewayListResultIterator struct {
25076	i    int
25077	page VirtualNetworkGatewayListResultPage
25078}
25079
25080// NextWithContext advances to the next value.  If there was an error making
25081// the request the iterator does not advance and the error is returned.
25082func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
25083	if tracing.IsEnabled() {
25084		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
25085		defer func() {
25086			sc := -1
25087			if iter.Response().Response.Response != nil {
25088				sc = iter.Response().Response.Response.StatusCode
25089			}
25090			tracing.EndSpan(ctx, sc, err)
25091		}()
25092	}
25093	iter.i++
25094	if iter.i < len(iter.page.Values()) {
25095		return nil
25096	}
25097	err = iter.page.NextWithContext(ctx)
25098	if err != nil {
25099		iter.i--
25100		return err
25101	}
25102	iter.i = 0
25103	return nil
25104}
25105
25106// Next advances to the next value.  If there was an error making
25107// the request the iterator does not advance and the error is returned.
25108// Deprecated: Use NextWithContext() instead.
25109func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
25110	return iter.NextWithContext(context.Background())
25111}
25112
25113// NotDone returns true if the enumeration should be started or is not yet complete.
25114func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
25115	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25116}
25117
25118// Response returns the raw server response from the last page request.
25119func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
25120	return iter.page.Response()
25121}
25122
25123// Value returns the current value or a zero-initialized value if the
25124// iterator has advanced beyond the end of the collection.
25125func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
25126	if !iter.page.NotDone() {
25127		return VirtualNetworkGateway{}
25128	}
25129	return iter.page.Values()[iter.i]
25130}
25131
25132// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
25133func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
25134	return VirtualNetworkGatewayListResultIterator{page: page}
25135}
25136
25137// IsEmpty returns true if the ListResult contains no values.
25138func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
25139	return vnglr.Value == nil || len(*vnglr.Value) == 0
25140}
25141
25142// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
25143// It returns nil if no more results exist.
25144func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
25145	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
25146		return nil, nil
25147	}
25148	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25149		autorest.AsJSON(),
25150		autorest.AsGet(),
25151		autorest.WithBaseURL(to.String(vnglr.NextLink)))
25152}
25153
25154// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
25155type VirtualNetworkGatewayListResultPage struct {
25156	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
25157	vnglr VirtualNetworkGatewayListResult
25158}
25159
25160// NextWithContext advances to the next page of values.  If there was an error making
25161// the request the page does not advance and the error is returned.
25162func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
25163	if tracing.IsEnabled() {
25164		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
25165		defer func() {
25166			sc := -1
25167			if page.Response().Response.Response != nil {
25168				sc = page.Response().Response.Response.StatusCode
25169			}
25170			tracing.EndSpan(ctx, sc, err)
25171		}()
25172	}
25173	next, err := page.fn(ctx, page.vnglr)
25174	if err != nil {
25175		return err
25176	}
25177	page.vnglr = next
25178	return nil
25179}
25180
25181// Next advances to the next page of values.  If there was an error making
25182// the request the page does not advance and the error is returned.
25183// Deprecated: Use NextWithContext() instead.
25184func (page *VirtualNetworkGatewayListResultPage) Next() error {
25185	return page.NextWithContext(context.Background())
25186}
25187
25188// NotDone returns true if the page enumeration should be started or is not yet complete.
25189func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
25190	return !page.vnglr.IsEmpty()
25191}
25192
25193// Response returns the raw server response from the last page request.
25194func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
25195	return page.vnglr
25196}
25197
25198// Values returns the slice of values for the current page or nil if there are no values.
25199func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
25200	if page.vnglr.IsEmpty() {
25201		return nil
25202	}
25203	return *page.vnglr.Value
25204}
25205
25206// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
25207func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
25208	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
25209}
25210
25211// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties
25212type VirtualNetworkGatewayPropertiesFormat struct {
25213	// IPConfigurations - IP configurations for virtual network gateway.
25214	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
25215	// GatewayType - The type of this virtual network gateway. Possible values are: 'Vpn' and 'ExpressRoute'. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
25216	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
25217	// VpnType - The type of this virtual network gateway. Possible values are: 'PolicyBased' and 'RouteBased'. Possible values include: 'PolicyBased', 'RouteBased'
25218	VpnType VpnType `json:"vpnType,omitempty"`
25219	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
25220	EnableBgp *bool `json:"enableBgp,omitempty"`
25221	// ActiveActive - ActiveActive flag
25222	ActiveActive *bool `json:"activeActive,omitempty"`
25223	// 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.
25224	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
25225	// Sku - The reference of the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
25226	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
25227	// VpnClientConfiguration - The reference of the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
25228	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
25229	// BgpSettings - Virtual network gateway's BGP speaker settings.
25230	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
25231	// ResourceGUID - The resource GUID property of the VirtualNetworkGateway resource.
25232	ResourceGUID *string `json:"resourceGuid,omitempty"`
25233	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
25234	ProvisioningState *string `json:"provisioningState,omitempty"`
25235}
25236
25237// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25238// long-running operation.
25239type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
25240	azure.Future
25241}
25242
25243// Result returns the result of the asynchronous operation.
25244// If the operation has not completed it will return an error.
25245func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
25246	var done bool
25247	done, err = future.DoneWithContext(context.Background(), client)
25248	if err != nil {
25249		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25250		return
25251	}
25252	if !done {
25253		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
25254		return
25255	}
25256	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25257	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
25258		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
25259		if err != nil {
25260			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
25261		}
25262	}
25263	return
25264}
25265
25266// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
25267// long-running operation.
25268type VirtualNetworkGatewaysDeleteFuture struct {
25269	azure.Future
25270}
25271
25272// Result returns the result of the asynchronous operation.
25273// If the operation has not completed it will return an error.
25274func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
25275	var done bool
25276	done, err = future.DoneWithContext(context.Background(), client)
25277	if err != nil {
25278		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
25279		return
25280	}
25281	if !done {
25282		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
25283		return
25284	}
25285	ar.Response = future.Response()
25286	return
25287}
25288
25289// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
25290// results of a long-running operation.
25291type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
25292	azure.Future
25293}
25294
25295// Result returns the result of the asynchronous operation.
25296// If the operation has not completed it will return an error.
25297func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
25298	var done bool
25299	done, err = future.DoneWithContext(context.Background(), client)
25300	if err != nil {
25301		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
25302		return
25303	}
25304	if !done {
25305		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
25306		return
25307	}
25308	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25309	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
25310		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
25311		if err != nil {
25312			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
25313		}
25314	}
25315	return
25316}
25317
25318// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
25319// of a long-running operation.
25320type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
25321	azure.Future
25322}
25323
25324// Result returns the result of the asynchronous operation.
25325// If the operation has not completed it will return an error.
25326func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
25327	var done bool
25328	done, err = future.DoneWithContext(context.Background(), client)
25329	if err != nil {
25330		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
25331		return
25332	}
25333	if !done {
25334		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
25335		return
25336	}
25337	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25338	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
25339		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
25340		if err != nil {
25341			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
25342		}
25343	}
25344	return
25345}
25346
25347// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
25348// of a long-running operation.
25349type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
25350	azure.Future
25351}
25352
25353// Result returns the result of the asynchronous operation.
25354// If the operation has not completed it will return an error.
25355func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
25356	var done bool
25357	done, err = future.DoneWithContext(context.Background(), client)
25358	if err != nil {
25359		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
25360		return
25361	}
25362	if !done {
25363		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
25364		return
25365	}
25366	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25367	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
25368		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
25369		if err != nil {
25370			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
25371		}
25372	}
25373	return
25374}
25375
25376// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
25377// a long-running operation.
25378type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
25379	azure.Future
25380}
25381
25382// Result returns the result of the asynchronous operation.
25383// If the operation has not completed it will return an error.
25384func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
25385	var done bool
25386	done, err = future.DoneWithContext(context.Background(), client)
25387	if err != nil {
25388		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
25389		return
25390	}
25391	if !done {
25392		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
25393		return
25394	}
25395	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25396	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
25397		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
25398		if err != nil {
25399			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
25400		}
25401	}
25402	return
25403}
25404
25405// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
25406// a long-running operation.
25407type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
25408	azure.Future
25409}
25410
25411// Result returns the result of the asynchronous operation.
25412// If the operation has not completed it will return an error.
25413func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
25414	var done bool
25415	done, err = future.DoneWithContext(context.Background(), client)
25416	if err != nil {
25417		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
25418		return
25419	}
25420	if !done {
25421		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
25422		return
25423	}
25424	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25425	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
25426		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
25427		if err != nil {
25428			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
25429		}
25430	}
25431	return
25432}
25433
25434// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
25435// results of a long-running operation.
25436type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
25437	azure.Future
25438}
25439
25440// Result returns the result of the asynchronous operation.
25441// If the operation has not completed it will return an error.
25442func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
25443	var done bool
25444	done, err = future.DoneWithContext(context.Background(), client)
25445	if err != nil {
25446		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
25447		return
25448	}
25449	if !done {
25450		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
25451		return
25452	}
25453	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25454	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
25455		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
25456		if err != nil {
25457			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
25458		}
25459	}
25460	return
25461}
25462
25463// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
25464// results of a long-running operation.
25465type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
25466	azure.Future
25467}
25468
25469// Result returns the result of the asynchronous operation.
25470// If the operation has not completed it will return an error.
25471func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
25472	var done bool
25473	done, err = future.DoneWithContext(context.Background(), client)
25474	if err != nil {
25475		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
25476		return
25477	}
25478	if !done {
25479		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
25480		return
25481	}
25482	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25483	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
25484		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
25485		if err != nil {
25486			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
25487		}
25488	}
25489	return
25490}
25491
25492// VirtualNetworkGatewaySku virtualNetworkGatewaySku details
25493type VirtualNetworkGatewaySku struct {
25494	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
25495	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
25496	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
25497	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
25498	// Capacity - The capacity.
25499	Capacity *int32 `json:"capacity,omitempty"`
25500}
25501
25502// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
25503// long-running operation.
25504type VirtualNetworkGatewaysResetFuture struct {
25505	azure.Future
25506}
25507
25508// Result returns the result of the asynchronous operation.
25509// If the operation has not completed it will return an error.
25510func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
25511	var done bool
25512	done, err = future.DoneWithContext(context.Background(), client)
25513	if err != nil {
25514		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
25515		return
25516	}
25517	if !done {
25518		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
25519		return
25520	}
25521	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25522	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
25523		vng, err = client.ResetResponder(vng.Response.Response)
25524		if err != nil {
25525			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
25526		}
25527	}
25528	return
25529}
25530
25531// VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
25532// results of a long-running operation.
25533type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
25534	azure.Future
25535}
25536
25537// Result returns the result of the asynchronous operation.
25538// If the operation has not completed it will return an error.
25539func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
25540	var done bool
25541	done, err = future.DoneWithContext(context.Background(), client)
25542	if err != nil {
25543		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
25544		return
25545	}
25546	if !done {
25547		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
25548		return
25549	}
25550	ar.Response = future.Response()
25551	return
25552}
25553
25554// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
25555// results of a long-running operation.
25556type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
25557	azure.Future
25558}
25559
25560// Result returns the result of the asynchronous operation.
25561// If the operation has not completed it will return an error.
25562func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
25563	var done bool
25564	done, err = future.DoneWithContext(context.Background(), client)
25565	if err != nil {
25566		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
25567		return
25568	}
25569	if !done {
25570		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
25571		return
25572	}
25573	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25574	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
25575		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
25576		if err != nil {
25577			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
25578		}
25579	}
25580	return
25581}
25582
25583// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
25584// long-running operation.
25585type VirtualNetworkGatewaysUpdateTagsFuture struct {
25586	azure.Future
25587}
25588
25589// Result returns the result of the asynchronous operation.
25590// If the operation has not completed it will return an error.
25591func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
25592	var done bool
25593	done, err = future.DoneWithContext(context.Background(), client)
25594	if err != nil {
25595		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
25596		return
25597	}
25598	if !done {
25599		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
25600		return
25601	}
25602	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25603	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
25604		vng, err = client.UpdateTagsResponder(vng.Response.Response)
25605		if err != nil {
25606			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
25607		}
25608	}
25609	return
25610}
25611
25612// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
25613type VirtualNetworkListResult struct {
25614	autorest.Response `json:"-"`
25615	// Value - Gets a list of VirtualNetwork resources in a resource group.
25616	Value *[]VirtualNetwork `json:"value,omitempty"`
25617	// NextLink - The URL to get the next set of results.
25618	NextLink *string `json:"nextLink,omitempty"`
25619}
25620
25621// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
25622type VirtualNetworkListResultIterator struct {
25623	i    int
25624	page VirtualNetworkListResultPage
25625}
25626
25627// NextWithContext advances to the next value.  If there was an error making
25628// the request the iterator does not advance and the error is returned.
25629func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
25630	if tracing.IsEnabled() {
25631		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
25632		defer func() {
25633			sc := -1
25634			if iter.Response().Response.Response != nil {
25635				sc = iter.Response().Response.Response.StatusCode
25636			}
25637			tracing.EndSpan(ctx, sc, err)
25638		}()
25639	}
25640	iter.i++
25641	if iter.i < len(iter.page.Values()) {
25642		return nil
25643	}
25644	err = iter.page.NextWithContext(ctx)
25645	if err != nil {
25646		iter.i--
25647		return err
25648	}
25649	iter.i = 0
25650	return nil
25651}
25652
25653// Next advances to the next value.  If there was an error making
25654// the request the iterator does not advance and the error is returned.
25655// Deprecated: Use NextWithContext() instead.
25656func (iter *VirtualNetworkListResultIterator) Next() error {
25657	return iter.NextWithContext(context.Background())
25658}
25659
25660// NotDone returns true if the enumeration should be started or is not yet complete.
25661func (iter VirtualNetworkListResultIterator) NotDone() bool {
25662	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25663}
25664
25665// Response returns the raw server response from the last page request.
25666func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
25667	return iter.page.Response()
25668}
25669
25670// Value returns the current value or a zero-initialized value if the
25671// iterator has advanced beyond the end of the collection.
25672func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
25673	if !iter.page.NotDone() {
25674		return VirtualNetwork{}
25675	}
25676	return iter.page.Values()[iter.i]
25677}
25678
25679// Creates a new instance of the VirtualNetworkListResultIterator type.
25680func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
25681	return VirtualNetworkListResultIterator{page: page}
25682}
25683
25684// IsEmpty returns true if the ListResult contains no values.
25685func (vnlr VirtualNetworkListResult) IsEmpty() bool {
25686	return vnlr.Value == nil || len(*vnlr.Value) == 0
25687}
25688
25689// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
25690// It returns nil if no more results exist.
25691func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
25692	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
25693		return nil, nil
25694	}
25695	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25696		autorest.AsJSON(),
25697		autorest.AsGet(),
25698		autorest.WithBaseURL(to.String(vnlr.NextLink)))
25699}
25700
25701// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
25702type VirtualNetworkListResultPage struct {
25703	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
25704	vnlr VirtualNetworkListResult
25705}
25706
25707// NextWithContext advances to the next page of values.  If there was an error making
25708// the request the page does not advance and the error is returned.
25709func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
25710	if tracing.IsEnabled() {
25711		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
25712		defer func() {
25713			sc := -1
25714			if page.Response().Response.Response != nil {
25715				sc = page.Response().Response.Response.StatusCode
25716			}
25717			tracing.EndSpan(ctx, sc, err)
25718		}()
25719	}
25720	next, err := page.fn(ctx, page.vnlr)
25721	if err != nil {
25722		return err
25723	}
25724	page.vnlr = next
25725	return nil
25726}
25727
25728// Next advances to the next page of values.  If there was an error making
25729// the request the page does not advance and the error is returned.
25730// Deprecated: Use NextWithContext() instead.
25731func (page *VirtualNetworkListResultPage) Next() error {
25732	return page.NextWithContext(context.Background())
25733}
25734
25735// NotDone returns true if the page enumeration should be started or is not yet complete.
25736func (page VirtualNetworkListResultPage) NotDone() bool {
25737	return !page.vnlr.IsEmpty()
25738}
25739
25740// Response returns the raw server response from the last page request.
25741func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
25742	return page.vnlr
25743}
25744
25745// Values returns the slice of values for the current page or nil if there are no values.
25746func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
25747	if page.vnlr.IsEmpty() {
25748		return nil
25749	}
25750	return *page.vnlr.Value
25751}
25752
25753// Creates a new instance of the VirtualNetworkListResultPage type.
25754func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
25755	return VirtualNetworkListResultPage{fn: getNextPage}
25756}
25757
25758// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
25759type VirtualNetworkListUsageResult struct {
25760	autorest.Response `json:"-"`
25761	// Value - READ-ONLY; VirtualNetwork usage stats.
25762	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
25763	// NextLink - The URL to get the next set of results.
25764	NextLink *string `json:"nextLink,omitempty"`
25765}
25766
25767// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
25768// values.
25769type VirtualNetworkListUsageResultIterator struct {
25770	i    int
25771	page VirtualNetworkListUsageResultPage
25772}
25773
25774// NextWithContext advances to the next value.  If there was an error making
25775// the request the iterator does not advance and the error is returned.
25776func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
25777	if tracing.IsEnabled() {
25778		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
25779		defer func() {
25780			sc := -1
25781			if iter.Response().Response.Response != nil {
25782				sc = iter.Response().Response.Response.StatusCode
25783			}
25784			tracing.EndSpan(ctx, sc, err)
25785		}()
25786	}
25787	iter.i++
25788	if iter.i < len(iter.page.Values()) {
25789		return nil
25790	}
25791	err = iter.page.NextWithContext(ctx)
25792	if err != nil {
25793		iter.i--
25794		return err
25795	}
25796	iter.i = 0
25797	return nil
25798}
25799
25800// Next advances to the next value.  If there was an error making
25801// the request the iterator does not advance and the error is returned.
25802// Deprecated: Use NextWithContext() instead.
25803func (iter *VirtualNetworkListUsageResultIterator) Next() error {
25804	return iter.NextWithContext(context.Background())
25805}
25806
25807// NotDone returns true if the enumeration should be started or is not yet complete.
25808func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
25809	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25810}
25811
25812// Response returns the raw server response from the last page request.
25813func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
25814	return iter.page.Response()
25815}
25816
25817// Value returns the current value or a zero-initialized value if the
25818// iterator has advanced beyond the end of the collection.
25819func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
25820	if !iter.page.NotDone() {
25821		return VirtualNetworkUsage{}
25822	}
25823	return iter.page.Values()[iter.i]
25824}
25825
25826// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
25827func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
25828	return VirtualNetworkListUsageResultIterator{page: page}
25829}
25830
25831// IsEmpty returns true if the ListResult contains no values.
25832func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
25833	return vnlur.Value == nil || len(*vnlur.Value) == 0
25834}
25835
25836// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
25837// It returns nil if no more results exist.
25838func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
25839	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
25840		return nil, nil
25841	}
25842	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25843		autorest.AsJSON(),
25844		autorest.AsGet(),
25845		autorest.WithBaseURL(to.String(vnlur.NextLink)))
25846}
25847
25848// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
25849type VirtualNetworkListUsageResultPage struct {
25850	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
25851	vnlur VirtualNetworkListUsageResult
25852}
25853
25854// NextWithContext advances to the next page of values.  If there was an error making
25855// the request the page does not advance and the error is returned.
25856func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
25857	if tracing.IsEnabled() {
25858		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
25859		defer func() {
25860			sc := -1
25861			if page.Response().Response.Response != nil {
25862				sc = page.Response().Response.Response.StatusCode
25863			}
25864			tracing.EndSpan(ctx, sc, err)
25865		}()
25866	}
25867	next, err := page.fn(ctx, page.vnlur)
25868	if err != nil {
25869		return err
25870	}
25871	page.vnlur = next
25872	return nil
25873}
25874
25875// Next advances to the next page of values.  If there was an error making
25876// the request the page does not advance and the error is returned.
25877// Deprecated: Use NextWithContext() instead.
25878func (page *VirtualNetworkListUsageResultPage) Next() error {
25879	return page.NextWithContext(context.Background())
25880}
25881
25882// NotDone returns true if the page enumeration should be started or is not yet complete.
25883func (page VirtualNetworkListUsageResultPage) NotDone() bool {
25884	return !page.vnlur.IsEmpty()
25885}
25886
25887// Response returns the raw server response from the last page request.
25888func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
25889	return page.vnlur
25890}
25891
25892// Values returns the slice of values for the current page or nil if there are no values.
25893func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
25894	if page.vnlur.IsEmpty() {
25895		return nil
25896	}
25897	return *page.vnlur.Value
25898}
25899
25900// Creates a new instance of the VirtualNetworkListUsageResultPage type.
25901func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
25902	return VirtualNetworkListUsageResultPage{fn: getNextPage}
25903}
25904
25905// VirtualNetworkPeering peerings in a virtual network resource.
25906type VirtualNetworkPeering struct {
25907	autorest.Response `json:"-"`
25908	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
25909	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
25910	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
25911	Name *string `json:"name,omitempty"`
25912	// Etag - A unique read-only string that changes whenever the resource is updated.
25913	Etag *string `json:"etag,omitempty"`
25914	// ID - Resource ID.
25915	ID *string `json:"id,omitempty"`
25916}
25917
25918// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
25919func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
25920	objectMap := make(map[string]interface{})
25921	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
25922		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
25923	}
25924	if vnp.Name != nil {
25925		objectMap["name"] = vnp.Name
25926	}
25927	if vnp.Etag != nil {
25928		objectMap["etag"] = vnp.Etag
25929	}
25930	if vnp.ID != nil {
25931		objectMap["id"] = vnp.ID
25932	}
25933	return json.Marshal(objectMap)
25934}
25935
25936// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
25937func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
25938	var m map[string]*json.RawMessage
25939	err := json.Unmarshal(body, &m)
25940	if err != nil {
25941		return err
25942	}
25943	for k, v := range m {
25944		switch k {
25945		case "properties":
25946			if v != nil {
25947				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
25948				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
25949				if err != nil {
25950					return err
25951				}
25952				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
25953			}
25954		case "name":
25955			if v != nil {
25956				var name string
25957				err = json.Unmarshal(*v, &name)
25958				if err != nil {
25959					return err
25960				}
25961				vnp.Name = &name
25962			}
25963		case "etag":
25964			if v != nil {
25965				var etag string
25966				err = json.Unmarshal(*v, &etag)
25967				if err != nil {
25968					return err
25969				}
25970				vnp.Etag = &etag
25971			}
25972		case "id":
25973			if v != nil {
25974				var ID string
25975				err = json.Unmarshal(*v, &ID)
25976				if err != nil {
25977					return err
25978				}
25979				vnp.ID = &ID
25980			}
25981		}
25982	}
25983
25984	return nil
25985}
25986
25987// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
25988// belong to a virtual network.
25989type VirtualNetworkPeeringListResult struct {
25990	autorest.Response `json:"-"`
25991	// Value - The peerings in a virtual network.
25992	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
25993	// NextLink - The URL to get the next set of results.
25994	NextLink *string `json:"nextLink,omitempty"`
25995}
25996
25997// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
25998// values.
25999type VirtualNetworkPeeringListResultIterator struct {
26000	i    int
26001	page VirtualNetworkPeeringListResultPage
26002}
26003
26004// NextWithContext advances to the next value.  If there was an error making
26005// the request the iterator does not advance and the error is returned.
26006func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
26007	if tracing.IsEnabled() {
26008		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
26009		defer func() {
26010			sc := -1
26011			if iter.Response().Response.Response != nil {
26012				sc = iter.Response().Response.Response.StatusCode
26013			}
26014			tracing.EndSpan(ctx, sc, err)
26015		}()
26016	}
26017	iter.i++
26018	if iter.i < len(iter.page.Values()) {
26019		return nil
26020	}
26021	err = iter.page.NextWithContext(ctx)
26022	if err != nil {
26023		iter.i--
26024		return err
26025	}
26026	iter.i = 0
26027	return nil
26028}
26029
26030// Next advances to the next value.  If there was an error making
26031// the request the iterator does not advance and the error is returned.
26032// Deprecated: Use NextWithContext() instead.
26033func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
26034	return iter.NextWithContext(context.Background())
26035}
26036
26037// NotDone returns true if the enumeration should be started or is not yet complete.
26038func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
26039	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26040}
26041
26042// Response returns the raw server response from the last page request.
26043func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
26044	return iter.page.Response()
26045}
26046
26047// Value returns the current value or a zero-initialized value if the
26048// iterator has advanced beyond the end of the collection.
26049func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
26050	if !iter.page.NotDone() {
26051		return VirtualNetworkPeering{}
26052	}
26053	return iter.page.Values()[iter.i]
26054}
26055
26056// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
26057func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
26058	return VirtualNetworkPeeringListResultIterator{page: page}
26059}
26060
26061// IsEmpty returns true if the ListResult contains no values.
26062func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
26063	return vnplr.Value == nil || len(*vnplr.Value) == 0
26064}
26065
26066// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
26067// It returns nil if no more results exist.
26068func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
26069	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
26070		return nil, nil
26071	}
26072	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26073		autorest.AsJSON(),
26074		autorest.AsGet(),
26075		autorest.WithBaseURL(to.String(vnplr.NextLink)))
26076}
26077
26078// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
26079type VirtualNetworkPeeringListResultPage struct {
26080	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
26081	vnplr VirtualNetworkPeeringListResult
26082}
26083
26084// NextWithContext advances to the next page of values.  If there was an error making
26085// the request the page does not advance and the error is returned.
26086func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
26087	if tracing.IsEnabled() {
26088		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
26089		defer func() {
26090			sc := -1
26091			if page.Response().Response.Response != nil {
26092				sc = page.Response().Response.Response.StatusCode
26093			}
26094			tracing.EndSpan(ctx, sc, err)
26095		}()
26096	}
26097	next, err := page.fn(ctx, page.vnplr)
26098	if err != nil {
26099		return err
26100	}
26101	page.vnplr = next
26102	return nil
26103}
26104
26105// Next advances to the next page of values.  If there was an error making
26106// the request the page does not advance and the error is returned.
26107// Deprecated: Use NextWithContext() instead.
26108func (page *VirtualNetworkPeeringListResultPage) Next() error {
26109	return page.NextWithContext(context.Background())
26110}
26111
26112// NotDone returns true if the page enumeration should be started or is not yet complete.
26113func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
26114	return !page.vnplr.IsEmpty()
26115}
26116
26117// Response returns the raw server response from the last page request.
26118func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
26119	return page.vnplr
26120}
26121
26122// Values returns the slice of values for the current page or nil if there are no values.
26123func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
26124	if page.vnplr.IsEmpty() {
26125		return nil
26126	}
26127	return *page.vnplr.Value
26128}
26129
26130// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
26131func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
26132	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
26133}
26134
26135// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
26136type VirtualNetworkPeeringPropertiesFormat struct {
26137	// AllowVirtualNetworkAccess - Whether the VMs in the linked virtual network space would be able to access all the VMs in local Virtual network space.
26138	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
26139	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the remote virtual network will be allowed/disallowed.
26140	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
26141	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
26142	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
26143	// 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.
26144	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
26145	// 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).
26146	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
26147	// RemoteAddressSpace - The reference of the remote virtual network address space.
26148	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
26149	// PeeringState - The status of the virtual network peering. Possible values are 'Initiated', 'Connected', and 'Disconnected'. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
26150	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
26151	// ProvisioningState - The provisioning state of the resource.
26152	ProvisioningState *string `json:"provisioningState,omitempty"`
26153}
26154
26155// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26156// long-running operation.
26157type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
26158	azure.Future
26159}
26160
26161// Result returns the result of the asynchronous operation.
26162// If the operation has not completed it will return an error.
26163func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
26164	var done bool
26165	done, err = future.DoneWithContext(context.Background(), client)
26166	if err != nil {
26167		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26168		return
26169	}
26170	if !done {
26171		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
26172		return
26173	}
26174	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26175	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
26176		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
26177		if err != nil {
26178			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
26179		}
26180	}
26181	return
26182}
26183
26184// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
26185// long-running operation.
26186type VirtualNetworkPeeringsDeleteFuture struct {
26187	azure.Future
26188}
26189
26190// Result returns the result of the asynchronous operation.
26191// If the operation has not completed it will return an error.
26192func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
26193	var done bool
26194	done, err = future.DoneWithContext(context.Background(), client)
26195	if err != nil {
26196		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
26197		return
26198	}
26199	if !done {
26200		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
26201		return
26202	}
26203	ar.Response = future.Response()
26204	return
26205}
26206
26207// VirtualNetworkPropertiesFormat properties of the virtual network.
26208type VirtualNetworkPropertiesFormat struct {
26209	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
26210	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
26211	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
26212	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
26213	// Subnets - A list of subnets in a Virtual Network.
26214	Subnets *[]Subnet `json:"subnets,omitempty"`
26215	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
26216	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
26217	// ResourceGUID - The resourceGuid property of the Virtual Network resource.
26218	ResourceGUID *string `json:"resourceGuid,omitempty"`
26219	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
26220	ProvisioningState *string `json:"provisioningState,omitempty"`
26221	// 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.
26222	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
26223	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
26224	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
26225	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
26226	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
26227}
26228
26229// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26230// long-running operation.
26231type VirtualNetworksCreateOrUpdateFuture struct {
26232	azure.Future
26233}
26234
26235// Result returns the result of the asynchronous operation.
26236// If the operation has not completed it will return an error.
26237func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
26238	var done bool
26239	done, err = future.DoneWithContext(context.Background(), client)
26240	if err != nil {
26241		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26242		return
26243	}
26244	if !done {
26245		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
26246		return
26247	}
26248	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26249	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
26250		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
26251		if err != nil {
26252			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
26253		}
26254	}
26255	return
26256}
26257
26258// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26259// operation.
26260type VirtualNetworksDeleteFuture struct {
26261	azure.Future
26262}
26263
26264// Result returns the result of the asynchronous operation.
26265// If the operation has not completed it will return an error.
26266func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
26267	var done bool
26268	done, err = future.DoneWithContext(context.Background(), client)
26269	if err != nil {
26270		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
26271		return
26272	}
26273	if !done {
26274		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
26275		return
26276	}
26277	ar.Response = future.Response()
26278	return
26279}
26280
26281// VirtualNetworksUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
26282// long-running operation.
26283type VirtualNetworksUpdateTagsFuture struct {
26284	azure.Future
26285}
26286
26287// Result returns the result of the asynchronous operation.
26288// If the operation has not completed it will return an error.
26289func (future *VirtualNetworksUpdateTagsFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
26290	var done bool
26291	done, err = future.DoneWithContext(context.Background(), client)
26292	if err != nil {
26293		err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26294		return
26295	}
26296	if !done {
26297		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksUpdateTagsFuture")
26298		return
26299	}
26300	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26301	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
26302		vn, err = client.UpdateTagsResponder(vn.Response.Response)
26303		if err != nil {
26304			err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", vn.Response.Response, "Failure responding to request")
26305		}
26306	}
26307	return
26308}
26309
26310// VirtualNetworkTap virtual Network Tap resource
26311type VirtualNetworkTap struct {
26312	autorest.Response `json:"-"`
26313	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
26314	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
26315	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
26316	Etag *string `json:"etag,omitempty"`
26317	// ID - Resource ID.
26318	ID *string `json:"id,omitempty"`
26319	// Name - READ-ONLY; Resource name.
26320	Name *string `json:"name,omitempty"`
26321	// Type - READ-ONLY; Resource type.
26322	Type *string `json:"type,omitempty"`
26323	// Location - Resource location.
26324	Location *string `json:"location,omitempty"`
26325	// Tags - Resource tags.
26326	Tags map[string]*string `json:"tags"`
26327}
26328
26329// MarshalJSON is the custom marshaler for VirtualNetworkTap.
26330func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
26331	objectMap := make(map[string]interface{})
26332	if vnt.VirtualNetworkTapPropertiesFormat != nil {
26333		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
26334	}
26335	if vnt.Etag != nil {
26336		objectMap["etag"] = vnt.Etag
26337	}
26338	if vnt.ID != nil {
26339		objectMap["id"] = vnt.ID
26340	}
26341	if vnt.Location != nil {
26342		objectMap["location"] = vnt.Location
26343	}
26344	if vnt.Tags != nil {
26345		objectMap["tags"] = vnt.Tags
26346	}
26347	return json.Marshal(objectMap)
26348}
26349
26350// UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
26351func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
26352	var m map[string]*json.RawMessage
26353	err := json.Unmarshal(body, &m)
26354	if err != nil {
26355		return err
26356	}
26357	for k, v := range m {
26358		switch k {
26359		case "properties":
26360			if v != nil {
26361				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
26362				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
26363				if err != nil {
26364					return err
26365				}
26366				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
26367			}
26368		case "etag":
26369			if v != nil {
26370				var etag string
26371				err = json.Unmarshal(*v, &etag)
26372				if err != nil {
26373					return err
26374				}
26375				vnt.Etag = &etag
26376			}
26377		case "id":
26378			if v != nil {
26379				var ID string
26380				err = json.Unmarshal(*v, &ID)
26381				if err != nil {
26382					return err
26383				}
26384				vnt.ID = &ID
26385			}
26386		case "name":
26387			if v != nil {
26388				var name string
26389				err = json.Unmarshal(*v, &name)
26390				if err != nil {
26391					return err
26392				}
26393				vnt.Name = &name
26394			}
26395		case "type":
26396			if v != nil {
26397				var typeVar string
26398				err = json.Unmarshal(*v, &typeVar)
26399				if err != nil {
26400					return err
26401				}
26402				vnt.Type = &typeVar
26403			}
26404		case "location":
26405			if v != nil {
26406				var location string
26407				err = json.Unmarshal(*v, &location)
26408				if err != nil {
26409					return err
26410				}
26411				vnt.Location = &location
26412			}
26413		case "tags":
26414			if v != nil {
26415				var tags map[string]*string
26416				err = json.Unmarshal(*v, &tags)
26417				if err != nil {
26418					return err
26419				}
26420				vnt.Tags = tags
26421			}
26422		}
26423	}
26424
26425	return nil
26426}
26427
26428// VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
26429type VirtualNetworkTapListResult struct {
26430	autorest.Response `json:"-"`
26431	// Value - A list of VirtualNetworkTaps in a resource group.
26432	Value *[]VirtualNetworkTap `json:"value,omitempty"`
26433	// NextLink - The URL to get the next set of results.
26434	NextLink *string `json:"nextLink,omitempty"`
26435}
26436
26437// VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
26438type VirtualNetworkTapListResultIterator struct {
26439	i    int
26440	page VirtualNetworkTapListResultPage
26441}
26442
26443// NextWithContext advances to the next value.  If there was an error making
26444// the request the iterator does not advance and the error is returned.
26445func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
26446	if tracing.IsEnabled() {
26447		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
26448		defer func() {
26449			sc := -1
26450			if iter.Response().Response.Response != nil {
26451				sc = iter.Response().Response.Response.StatusCode
26452			}
26453			tracing.EndSpan(ctx, sc, err)
26454		}()
26455	}
26456	iter.i++
26457	if iter.i < len(iter.page.Values()) {
26458		return nil
26459	}
26460	err = iter.page.NextWithContext(ctx)
26461	if err != nil {
26462		iter.i--
26463		return err
26464	}
26465	iter.i = 0
26466	return nil
26467}
26468
26469// Next advances to the next value.  If there was an error making
26470// the request the iterator does not advance and the error is returned.
26471// Deprecated: Use NextWithContext() instead.
26472func (iter *VirtualNetworkTapListResultIterator) Next() error {
26473	return iter.NextWithContext(context.Background())
26474}
26475
26476// NotDone returns true if the enumeration should be started or is not yet complete.
26477func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
26478	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26479}
26480
26481// Response returns the raw server response from the last page request.
26482func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
26483	return iter.page.Response()
26484}
26485
26486// Value returns the current value or a zero-initialized value if the
26487// iterator has advanced beyond the end of the collection.
26488func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
26489	if !iter.page.NotDone() {
26490		return VirtualNetworkTap{}
26491	}
26492	return iter.page.Values()[iter.i]
26493}
26494
26495// Creates a new instance of the VirtualNetworkTapListResultIterator type.
26496func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
26497	return VirtualNetworkTapListResultIterator{page: page}
26498}
26499
26500// IsEmpty returns true if the ListResult contains no values.
26501func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
26502	return vntlr.Value == nil || len(*vntlr.Value) == 0
26503}
26504
26505// virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
26506// It returns nil if no more results exist.
26507func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
26508	if vntlr.NextLink == nil || len(to.String(vntlr.NextLink)) < 1 {
26509		return nil, nil
26510	}
26511	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26512		autorest.AsJSON(),
26513		autorest.AsGet(),
26514		autorest.WithBaseURL(to.String(vntlr.NextLink)))
26515}
26516
26517// VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
26518type VirtualNetworkTapListResultPage struct {
26519	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
26520	vntlr VirtualNetworkTapListResult
26521}
26522
26523// NextWithContext advances to the next page of values.  If there was an error making
26524// the request the page does not advance and the error is returned.
26525func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
26526	if tracing.IsEnabled() {
26527		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
26528		defer func() {
26529			sc := -1
26530			if page.Response().Response.Response != nil {
26531				sc = page.Response().Response.Response.StatusCode
26532			}
26533			tracing.EndSpan(ctx, sc, err)
26534		}()
26535	}
26536	next, err := page.fn(ctx, page.vntlr)
26537	if err != nil {
26538		return err
26539	}
26540	page.vntlr = next
26541	return nil
26542}
26543
26544// Next advances to the next page of values.  If there was an error making
26545// the request the page does not advance and the error is returned.
26546// Deprecated: Use NextWithContext() instead.
26547func (page *VirtualNetworkTapListResultPage) Next() error {
26548	return page.NextWithContext(context.Background())
26549}
26550
26551// NotDone returns true if the page enumeration should be started or is not yet complete.
26552func (page VirtualNetworkTapListResultPage) NotDone() bool {
26553	return !page.vntlr.IsEmpty()
26554}
26555
26556// Response returns the raw server response from the last page request.
26557func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
26558	return page.vntlr
26559}
26560
26561// Values returns the slice of values for the current page or nil if there are no values.
26562func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
26563	if page.vntlr.IsEmpty() {
26564		return nil
26565	}
26566	return *page.vntlr.Value
26567}
26568
26569// Creates a new instance of the VirtualNetworkTapListResultPage type.
26570func NewVirtualNetworkTapListResultPage(getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
26571	return VirtualNetworkTapListResultPage{fn: getNextPage}
26572}
26573
26574// VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
26575type VirtualNetworkTapPropertiesFormat struct {
26576	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
26577	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
26578	// ResourceGUID - READ-ONLY; The resourceGuid property of the virtual network tap.
26579	ResourceGUID *string `json:"resourceGuid,omitempty"`
26580	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap. Possible values are: 'Updating', 'Deleting', and 'Failed'.
26581	ProvisioningState *string `json:"provisioningState,omitempty"`
26582	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap
26583	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
26584	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap
26585	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
26586	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
26587	DestinationPort *int32 `json:"destinationPort,omitempty"`
26588}
26589
26590// VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26591// long-running operation.
26592type VirtualNetworkTapsCreateOrUpdateFuture struct {
26593	azure.Future
26594}
26595
26596// Result returns the result of the asynchronous operation.
26597// If the operation has not completed it will return an error.
26598func (future *VirtualNetworkTapsCreateOrUpdateFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
26599	var done bool
26600	done, err = future.DoneWithContext(context.Background(), client)
26601	if err != nil {
26602		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26603		return
26604	}
26605	if !done {
26606		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
26607		return
26608	}
26609	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26610	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
26611		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
26612		if err != nil {
26613			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
26614		}
26615	}
26616	return
26617}
26618
26619// VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
26620// long-running operation.
26621type VirtualNetworkTapsDeleteFuture struct {
26622	azure.Future
26623}
26624
26625// Result returns the result of the asynchronous operation.
26626// If the operation has not completed it will return an error.
26627func (future *VirtualNetworkTapsDeleteFuture) Result(client VirtualNetworkTapsClient) (ar autorest.Response, err error) {
26628	var done bool
26629	done, err = future.DoneWithContext(context.Background(), client)
26630	if err != nil {
26631		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
26632		return
26633	}
26634	if !done {
26635		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
26636		return
26637	}
26638	ar.Response = future.Response()
26639	return
26640}
26641
26642// VirtualNetworkTapsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
26643// long-running operation.
26644type VirtualNetworkTapsUpdateTagsFuture struct {
26645	azure.Future
26646}
26647
26648// Result returns the result of the asynchronous operation.
26649// If the operation has not completed it will return an error.
26650func (future *VirtualNetworkTapsUpdateTagsFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
26651	var done bool
26652	done, err = future.DoneWithContext(context.Background(), client)
26653	if err != nil {
26654		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26655		return
26656	}
26657	if !done {
26658		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsUpdateTagsFuture")
26659		return
26660	}
26661	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26662	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
26663		vnt, err = client.UpdateTagsResponder(vnt.Response.Response)
26664		if err != nil {
26665			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", vnt.Response.Response, "Failure responding to request")
26666		}
26667	}
26668	return
26669}
26670
26671// VirtualNetworkUsage usage details for subnet.
26672type VirtualNetworkUsage struct {
26673	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
26674	CurrentValue *float64 `json:"currentValue,omitempty"`
26675	// ID - READ-ONLY; Subnet identifier.
26676	ID *string `json:"id,omitempty"`
26677	// Limit - READ-ONLY; Indicates the size of the subnet.
26678	Limit *float64 `json:"limit,omitempty"`
26679	// Name - READ-ONLY; The name containing common and localized value for usage.
26680	Name *VirtualNetworkUsageName `json:"name,omitempty"`
26681	// Unit - READ-ONLY; Usage units. Returns 'Count'
26682	Unit *string `json:"unit,omitempty"`
26683}
26684
26685// VirtualNetworkUsageName usage strings container.
26686type VirtualNetworkUsageName struct {
26687	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
26688	LocalizedValue *string `json:"localizedValue,omitempty"`
26689	// Value - READ-ONLY; Subnet size and usage string.
26690	Value *string `json:"value,omitempty"`
26691}
26692
26693// VirtualWAN virtualWAN Resource.
26694type VirtualWAN struct {
26695	autorest.Response     `json:"-"`
26696	*VirtualWanProperties `json:"properties,omitempty"`
26697	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
26698	Etag *string `json:"etag,omitempty"`
26699	// ID - Resource ID.
26700	ID *string `json:"id,omitempty"`
26701	// Name - READ-ONLY; Resource name.
26702	Name *string `json:"name,omitempty"`
26703	// Type - READ-ONLY; Resource type.
26704	Type *string `json:"type,omitempty"`
26705	// Location - Resource location.
26706	Location *string `json:"location,omitempty"`
26707	// Tags - Resource tags.
26708	Tags map[string]*string `json:"tags"`
26709}
26710
26711// MarshalJSON is the custom marshaler for VirtualWAN.
26712func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
26713	objectMap := make(map[string]interface{})
26714	if vw.VirtualWanProperties != nil {
26715		objectMap["properties"] = vw.VirtualWanProperties
26716	}
26717	if vw.ID != nil {
26718		objectMap["id"] = vw.ID
26719	}
26720	if vw.Location != nil {
26721		objectMap["location"] = vw.Location
26722	}
26723	if vw.Tags != nil {
26724		objectMap["tags"] = vw.Tags
26725	}
26726	return json.Marshal(objectMap)
26727}
26728
26729// UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
26730func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
26731	var m map[string]*json.RawMessage
26732	err := json.Unmarshal(body, &m)
26733	if err != nil {
26734		return err
26735	}
26736	for k, v := range m {
26737		switch k {
26738		case "properties":
26739			if v != nil {
26740				var virtualWanProperties VirtualWanProperties
26741				err = json.Unmarshal(*v, &virtualWanProperties)
26742				if err != nil {
26743					return err
26744				}
26745				vw.VirtualWanProperties = &virtualWanProperties
26746			}
26747		case "etag":
26748			if v != nil {
26749				var etag string
26750				err = json.Unmarshal(*v, &etag)
26751				if err != nil {
26752					return err
26753				}
26754				vw.Etag = &etag
26755			}
26756		case "id":
26757			if v != nil {
26758				var ID string
26759				err = json.Unmarshal(*v, &ID)
26760				if err != nil {
26761					return err
26762				}
26763				vw.ID = &ID
26764			}
26765		case "name":
26766			if v != nil {
26767				var name string
26768				err = json.Unmarshal(*v, &name)
26769				if err != nil {
26770					return err
26771				}
26772				vw.Name = &name
26773			}
26774		case "type":
26775			if v != nil {
26776				var typeVar string
26777				err = json.Unmarshal(*v, &typeVar)
26778				if err != nil {
26779					return err
26780				}
26781				vw.Type = &typeVar
26782			}
26783		case "location":
26784			if v != nil {
26785				var location string
26786				err = json.Unmarshal(*v, &location)
26787				if err != nil {
26788					return err
26789				}
26790				vw.Location = &location
26791			}
26792		case "tags":
26793			if v != nil {
26794				var tags map[string]*string
26795				err = json.Unmarshal(*v, &tags)
26796				if err != nil {
26797					return err
26798				}
26799				vw.Tags = tags
26800			}
26801		}
26802	}
26803
26804	return nil
26805}
26806
26807// VirtualWanProperties parameters for VirtualWAN
26808type VirtualWanProperties struct {
26809	// DisableVpnEncryption - Vpn encryption to be disabled or not.
26810	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
26811	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
26812	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
26813	// VpnSites - READ-ONLY
26814	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
26815	// SecurityProviderName - The Security Provider name.
26816	SecurityProviderName *string `json:"securityProviderName,omitempty"`
26817	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
26818	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
26819	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
26820	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
26821	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
26822	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
26823	// P2SVpnServerConfigurations - list of all P2SVpnServerConfigurations associated with the virtual wan.
26824	P2SVpnServerConfigurations *[]P2SVpnServerConfiguration `json:"p2SVpnServerConfigurations,omitempty"`
26825	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26826	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26827}
26828
26829// VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26830// long-running operation.
26831type VirtualWansCreateOrUpdateFuture struct {
26832	azure.Future
26833}
26834
26835// Result returns the result of the asynchronous operation.
26836// If the operation has not completed it will return an error.
26837func (future *VirtualWansCreateOrUpdateFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
26838	var done bool
26839	done, err = future.DoneWithContext(context.Background(), client)
26840	if err != nil {
26841		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26842		return
26843	}
26844	if !done {
26845		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
26846		return
26847	}
26848	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26849	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
26850		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
26851		if err != nil {
26852			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
26853		}
26854	}
26855	return
26856}
26857
26858// VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26859// operation.
26860type VirtualWansDeleteFuture struct {
26861	azure.Future
26862}
26863
26864// Result returns the result of the asynchronous operation.
26865// If the operation has not completed it will return an error.
26866func (future *VirtualWansDeleteFuture) Result(client VirtualWansClient) (ar autorest.Response, err error) {
26867	var done bool
26868	done, err = future.DoneWithContext(context.Background(), client)
26869	if err != nil {
26870		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
26871		return
26872	}
26873	if !done {
26874		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
26875		return
26876	}
26877	ar.Response = future.Response()
26878	return
26879}
26880
26881// VirtualWanSecurityProvider collection of SecurityProviders.
26882type VirtualWanSecurityProvider struct {
26883	// Name - Name of the security provider.
26884	Name *string `json:"name,omitempty"`
26885	// URL - Url of the security provider.
26886	URL *string `json:"url,omitempty"`
26887	// Type - Name of the security provider. Possible values include: 'External', 'Native'
26888	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
26889}
26890
26891// VirtualWanSecurityProviders collection of SecurityProviders.
26892type VirtualWanSecurityProviders struct {
26893	autorest.Response  `json:"-"`
26894	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
26895}
26896
26897// VirtualWansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
26898// operation.
26899type VirtualWansUpdateTagsFuture struct {
26900	azure.Future
26901}
26902
26903// Result returns the result of the asynchronous operation.
26904// If the operation has not completed it will return an error.
26905func (future *VirtualWansUpdateTagsFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
26906	var done bool
26907	done, err = future.DoneWithContext(context.Background(), client)
26908	if err != nil {
26909		err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26910		return
26911	}
26912	if !done {
26913		err = azure.NewAsyncOpIncompleteError("network.VirtualWansUpdateTagsFuture")
26914		return
26915	}
26916	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26917	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
26918		vw, err = client.UpdateTagsResponder(vw.Response.Response)
26919		if err != nil {
26920			err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", vw.Response.Response, "Failure responding to request")
26921		}
26922	}
26923	return
26924}
26925
26926// VpnClientConfiguration vpnClientConfiguration for P2S client.
26927type VpnClientConfiguration struct {
26928	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
26929	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
26930	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
26931	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
26932	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
26933	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
26934	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
26935	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
26936	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
26937	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
26938	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
26939	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
26940	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
26941	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
26942}
26943
26944// VpnClientConnectionHealth vpnClientConnectionHealth properties
26945type VpnClientConnectionHealth struct {
26946	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection
26947	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
26948	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection
26949	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
26950	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
26951	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
26952	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
26953	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
26954}
26955
26956// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
26957type VpnClientIPsecParameters struct {
26958	autorest.Response `json:"-"`
26959	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
26960	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
26961	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
26962	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
26963	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
26964	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
26965	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
26966	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
26967	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
26968	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
26969	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
26970	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
26971	// DhGroup - The DH Groups used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
26972	DhGroup DhGroup `json:"dhGroup,omitempty"`
26973	// PfsGroup - The Pfs Groups used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
26974	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
26975}
26976
26977// VpnClientParameters vpn Client Parameters for package generation
26978type VpnClientParameters struct {
26979	// ProcessorArchitecture - VPN client Processor Architecture. Possible values are: 'AMD64' and 'X86'. Possible values include: 'Amd64', 'X86'
26980	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
26981	// AuthenticationMethod - VPN client Authentication Method. Possible values are: 'EAPTLS' and 'EAPMSCHAPv2'. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
26982	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
26983	// 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.
26984	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
26985	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
26986	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
26987}
26988
26989// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
26990type VpnClientRevokedCertificate struct {
26991	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
26992	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
26993	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26994	Name *string `json:"name,omitempty"`
26995	// Etag - A unique read-only string that changes whenever the resource is updated.
26996	Etag *string `json:"etag,omitempty"`
26997	// ID - Resource ID.
26998	ID *string `json:"id,omitempty"`
26999}
27000
27001// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
27002func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
27003	objectMap := make(map[string]interface{})
27004	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
27005		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
27006	}
27007	if vcrc.Name != nil {
27008		objectMap["name"] = vcrc.Name
27009	}
27010	if vcrc.Etag != nil {
27011		objectMap["etag"] = vcrc.Etag
27012	}
27013	if vcrc.ID != nil {
27014		objectMap["id"] = vcrc.ID
27015	}
27016	return json.Marshal(objectMap)
27017}
27018
27019// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
27020func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
27021	var m map[string]*json.RawMessage
27022	err := json.Unmarshal(body, &m)
27023	if err != nil {
27024		return err
27025	}
27026	for k, v := range m {
27027		switch k {
27028		case "properties":
27029			if v != nil {
27030				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
27031				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
27032				if err != nil {
27033					return err
27034				}
27035				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
27036			}
27037		case "name":
27038			if v != nil {
27039				var name string
27040				err = json.Unmarshal(*v, &name)
27041				if err != nil {
27042					return err
27043				}
27044				vcrc.Name = &name
27045			}
27046		case "etag":
27047			if v != nil {
27048				var etag string
27049				err = json.Unmarshal(*v, &etag)
27050				if err != nil {
27051					return err
27052				}
27053				vcrc.Etag = &etag
27054			}
27055		case "id":
27056			if v != nil {
27057				var ID string
27058				err = json.Unmarshal(*v, &ID)
27059				if err != nil {
27060					return err
27061				}
27062				vcrc.ID = &ID
27063			}
27064		}
27065	}
27066
27067	return nil
27068}
27069
27070// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
27071// network gateway.
27072type VpnClientRevokedCertificatePropertiesFormat struct {
27073	// Thumbprint - The revoked VPN client certificate thumbprint.
27074	Thumbprint *string `json:"thumbprint,omitempty"`
27075	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
27076	ProvisioningState *string `json:"provisioningState,omitempty"`
27077}
27078
27079// VpnClientRootCertificate VPN client root certificate of virtual network gateway
27080type VpnClientRootCertificate struct {
27081	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
27082	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
27083	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27084	Name *string `json:"name,omitempty"`
27085	// Etag - A unique read-only string that changes whenever the resource is updated.
27086	Etag *string `json:"etag,omitempty"`
27087	// ID - Resource ID.
27088	ID *string `json:"id,omitempty"`
27089}
27090
27091// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
27092func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
27093	objectMap := make(map[string]interface{})
27094	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
27095		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
27096	}
27097	if vcrc.Name != nil {
27098		objectMap["name"] = vcrc.Name
27099	}
27100	if vcrc.Etag != nil {
27101		objectMap["etag"] = vcrc.Etag
27102	}
27103	if vcrc.ID != nil {
27104		objectMap["id"] = vcrc.ID
27105	}
27106	return json.Marshal(objectMap)
27107}
27108
27109// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
27110func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
27111	var m map[string]*json.RawMessage
27112	err := json.Unmarshal(body, &m)
27113	if err != nil {
27114		return err
27115	}
27116	for k, v := range m {
27117		switch k {
27118		case "properties":
27119			if v != nil {
27120				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
27121				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
27122				if err != nil {
27123					return err
27124				}
27125				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
27126			}
27127		case "name":
27128			if v != nil {
27129				var name string
27130				err = json.Unmarshal(*v, &name)
27131				if err != nil {
27132					return err
27133				}
27134				vcrc.Name = &name
27135			}
27136		case "etag":
27137			if v != nil {
27138				var etag string
27139				err = json.Unmarshal(*v, &etag)
27140				if err != nil {
27141					return err
27142				}
27143				vcrc.Etag = &etag
27144			}
27145		case "id":
27146			if v != nil {
27147				var ID string
27148				err = json.Unmarshal(*v, &ID)
27149				if err != nil {
27150					return err
27151				}
27152				vcrc.ID = &ID
27153			}
27154		}
27155	}
27156
27157	return nil
27158}
27159
27160// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway
27161type VpnClientRootCertificatePropertiesFormat struct {
27162	// PublicCertData - The certificate public data.
27163	PublicCertData *string `json:"publicCertData,omitempty"`
27164	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
27165	ProvisioningState *string `json:"provisioningState,omitempty"`
27166}
27167
27168// VpnConnection vpnConnection Resource.
27169type VpnConnection struct {
27170	autorest.Response        `json:"-"`
27171	*VpnConnectionProperties `json:"properties,omitempty"`
27172	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27173	Name *string `json:"name,omitempty"`
27174	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
27175	Etag *string `json:"etag,omitempty"`
27176	// ID - Resource ID.
27177	ID *string `json:"id,omitempty"`
27178}
27179
27180// MarshalJSON is the custom marshaler for VpnConnection.
27181func (vc VpnConnection) MarshalJSON() ([]byte, error) {
27182	objectMap := make(map[string]interface{})
27183	if vc.VpnConnectionProperties != nil {
27184		objectMap["properties"] = vc.VpnConnectionProperties
27185	}
27186	if vc.Name != nil {
27187		objectMap["name"] = vc.Name
27188	}
27189	if vc.ID != nil {
27190		objectMap["id"] = vc.ID
27191	}
27192	return json.Marshal(objectMap)
27193}
27194
27195// UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
27196func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
27197	var m map[string]*json.RawMessage
27198	err := json.Unmarshal(body, &m)
27199	if err != nil {
27200		return err
27201	}
27202	for k, v := range m {
27203		switch k {
27204		case "properties":
27205			if v != nil {
27206				var vpnConnectionProperties VpnConnectionProperties
27207				err = json.Unmarshal(*v, &vpnConnectionProperties)
27208				if err != nil {
27209					return err
27210				}
27211				vc.VpnConnectionProperties = &vpnConnectionProperties
27212			}
27213		case "name":
27214			if v != nil {
27215				var name string
27216				err = json.Unmarshal(*v, &name)
27217				if err != nil {
27218					return err
27219				}
27220				vc.Name = &name
27221			}
27222		case "etag":
27223			if v != nil {
27224				var etag string
27225				err = json.Unmarshal(*v, &etag)
27226				if err != nil {
27227					return err
27228				}
27229				vc.Etag = &etag
27230			}
27231		case "id":
27232			if v != nil {
27233				var ID string
27234				err = json.Unmarshal(*v, &ID)
27235				if err != nil {
27236					return err
27237				}
27238				vc.ID = &ID
27239			}
27240		}
27241	}
27242
27243	return nil
27244}
27245
27246// VpnConnectionProperties parameters for VpnConnection
27247type VpnConnectionProperties struct {
27248	// RemoteVpnSite - Id of the connected vpn site.
27249	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
27250	// RoutingWeight - routing weight for vpn connection.
27251	RoutingWeight *int32 `json:"routingWeight,omitempty"`
27252	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
27253	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
27254	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
27255	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
27256	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
27257	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
27258	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
27259	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
27260	// ConnectionBandwidth - Expected bandwidth in MBPS.
27261	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
27262	// SharedKey - SharedKey for the vpn connection.
27263	SharedKey *string `json:"sharedKey,omitempty"`
27264	// EnableBgp - EnableBgp flag
27265	EnableBgp *bool `json:"enableBgp,omitempty"`
27266	// IpsecPolicies - The IPSec Policies to be considered by this connection.
27267	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
27268	// EnableRateLimiting - EnableBgp flag
27269	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
27270	// EnableInternetSecurity - Enable internet security
27271	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
27272	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27273	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27274}
27275
27276// VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27277// long-running operation.
27278type VpnConnectionsCreateOrUpdateFuture struct {
27279	azure.Future
27280}
27281
27282// Result returns the result of the asynchronous operation.
27283// If the operation has not completed it will return an error.
27284func (future *VpnConnectionsCreateOrUpdateFuture) Result(client VpnConnectionsClient) (vc VpnConnection, err error) {
27285	var done bool
27286	done, err = future.DoneWithContext(context.Background(), client)
27287	if err != nil {
27288		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27289		return
27290	}
27291	if !done {
27292		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
27293		return
27294	}
27295	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27296	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
27297		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
27298		if err != nil {
27299			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
27300		}
27301	}
27302	return
27303}
27304
27305// VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27306// operation.
27307type VpnConnectionsDeleteFuture struct {
27308	azure.Future
27309}
27310
27311// Result returns the result of the asynchronous operation.
27312// If the operation has not completed it will return an error.
27313func (future *VpnConnectionsDeleteFuture) Result(client VpnConnectionsClient) (ar autorest.Response, err error) {
27314	var done bool
27315	done, err = future.DoneWithContext(context.Background(), client)
27316	if err != nil {
27317		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
27318		return
27319	}
27320	if !done {
27321		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
27322		return
27323	}
27324	ar.Response = future.Response()
27325	return
27326}
27327
27328// VpnDeviceScriptParameters vpn device configuration script generation parameters
27329type VpnDeviceScriptParameters struct {
27330	// Vendor - The vendor for the vpn device.
27331	Vendor *string `json:"vendor,omitempty"`
27332	// DeviceFamily - The device family for the vpn device.
27333	DeviceFamily *string `json:"deviceFamily,omitempty"`
27334	// FirmwareVersion - The firmware version for the vpn device.
27335	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
27336}
27337
27338// VpnGateway vpnGateway Resource.
27339type VpnGateway struct {
27340	autorest.Response     `json:"-"`
27341	*VpnGatewayProperties `json:"properties,omitempty"`
27342	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
27343	Etag *string `json:"etag,omitempty"`
27344	// ID - Resource ID.
27345	ID *string `json:"id,omitempty"`
27346	// Name - READ-ONLY; Resource name.
27347	Name *string `json:"name,omitempty"`
27348	// Type - READ-ONLY; Resource type.
27349	Type *string `json:"type,omitempty"`
27350	// Location - Resource location.
27351	Location *string `json:"location,omitempty"`
27352	// Tags - Resource tags.
27353	Tags map[string]*string `json:"tags"`
27354}
27355
27356// MarshalJSON is the custom marshaler for VpnGateway.
27357func (vg VpnGateway) MarshalJSON() ([]byte, error) {
27358	objectMap := make(map[string]interface{})
27359	if vg.VpnGatewayProperties != nil {
27360		objectMap["properties"] = vg.VpnGatewayProperties
27361	}
27362	if vg.ID != nil {
27363		objectMap["id"] = vg.ID
27364	}
27365	if vg.Location != nil {
27366		objectMap["location"] = vg.Location
27367	}
27368	if vg.Tags != nil {
27369		objectMap["tags"] = vg.Tags
27370	}
27371	return json.Marshal(objectMap)
27372}
27373
27374// UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
27375func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
27376	var m map[string]*json.RawMessage
27377	err := json.Unmarshal(body, &m)
27378	if err != nil {
27379		return err
27380	}
27381	for k, v := range m {
27382		switch k {
27383		case "properties":
27384			if v != nil {
27385				var vpnGatewayProperties VpnGatewayProperties
27386				err = json.Unmarshal(*v, &vpnGatewayProperties)
27387				if err != nil {
27388					return err
27389				}
27390				vg.VpnGatewayProperties = &vpnGatewayProperties
27391			}
27392		case "etag":
27393			if v != nil {
27394				var etag string
27395				err = json.Unmarshal(*v, &etag)
27396				if err != nil {
27397					return err
27398				}
27399				vg.Etag = &etag
27400			}
27401		case "id":
27402			if v != nil {
27403				var ID string
27404				err = json.Unmarshal(*v, &ID)
27405				if err != nil {
27406					return err
27407				}
27408				vg.ID = &ID
27409			}
27410		case "name":
27411			if v != nil {
27412				var name string
27413				err = json.Unmarshal(*v, &name)
27414				if err != nil {
27415					return err
27416				}
27417				vg.Name = &name
27418			}
27419		case "type":
27420			if v != nil {
27421				var typeVar string
27422				err = json.Unmarshal(*v, &typeVar)
27423				if err != nil {
27424					return err
27425				}
27426				vg.Type = &typeVar
27427			}
27428		case "location":
27429			if v != nil {
27430				var location string
27431				err = json.Unmarshal(*v, &location)
27432				if err != nil {
27433					return err
27434				}
27435				vg.Location = &location
27436			}
27437		case "tags":
27438			if v != nil {
27439				var tags map[string]*string
27440				err = json.Unmarshal(*v, &tags)
27441				if err != nil {
27442					return err
27443				}
27444				vg.Tags = tags
27445			}
27446		}
27447	}
27448
27449	return nil
27450}
27451
27452// VpnGatewayProperties parameters for VpnGateway
27453type VpnGatewayProperties struct {
27454	// VirtualHub - The VirtualHub to which the gateway belongs
27455	VirtualHub *SubResource `json:"virtualHub,omitempty"`
27456	// Connections - list of all vpn connections to the gateway.
27457	Connections *[]VpnConnection `json:"connections,omitempty"`
27458	// BgpSettings - Local network gateway's BGP speaker settings.
27459	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
27460	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27461	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27462	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
27463	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
27464}
27465
27466// VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27467// long-running operation.
27468type VpnGatewaysCreateOrUpdateFuture struct {
27469	azure.Future
27470}
27471
27472// Result returns the result of the asynchronous operation.
27473// If the operation has not completed it will return an error.
27474func (future *VpnGatewaysCreateOrUpdateFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
27475	var done bool
27476	done, err = future.DoneWithContext(context.Background(), client)
27477	if err != nil {
27478		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27479		return
27480	}
27481	if !done {
27482		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
27483		return
27484	}
27485	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27486	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
27487		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
27488		if err != nil {
27489			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
27490		}
27491	}
27492	return
27493}
27494
27495// VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27496// operation.
27497type VpnGatewaysDeleteFuture struct {
27498	azure.Future
27499}
27500
27501// Result returns the result of the asynchronous operation.
27502// If the operation has not completed it will return an error.
27503func (future *VpnGatewaysDeleteFuture) Result(client VpnGatewaysClient) (ar autorest.Response, err error) {
27504	var done bool
27505	done, err = future.DoneWithContext(context.Background(), client)
27506	if err != nil {
27507		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
27508		return
27509	}
27510	if !done {
27511		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
27512		return
27513	}
27514	ar.Response = future.Response()
27515	return
27516}
27517
27518// VpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
27519// operation.
27520type VpnGatewaysUpdateTagsFuture struct {
27521	azure.Future
27522}
27523
27524// Result returns the result of the asynchronous operation.
27525// If the operation has not completed it will return an error.
27526func (future *VpnGatewaysUpdateTagsFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
27527	var done bool
27528	done, err = future.DoneWithContext(context.Background(), client)
27529	if err != nil {
27530		err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
27531		return
27532	}
27533	if !done {
27534		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysUpdateTagsFuture")
27535		return
27536	}
27537	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27538	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
27539		vg, err = client.UpdateTagsResponder(vg.Response.Response)
27540		if err != nil {
27541			err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", vg.Response.Response, "Failure responding to request")
27542		}
27543	}
27544	return
27545}
27546
27547// VpnProfileResponse vpn Profile Response for package generation
27548type VpnProfileResponse struct {
27549	autorest.Response `json:"-"`
27550	// ProfileURL - URL to the VPN profile
27551	ProfileURL *string `json:"profileUrl,omitempty"`
27552}
27553
27554// VpnSite vpnSite Resource.
27555type VpnSite struct {
27556	autorest.Response  `json:"-"`
27557	*VpnSiteProperties `json:"properties,omitempty"`
27558	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
27559	Etag *string `json:"etag,omitempty"`
27560	// ID - Resource ID.
27561	ID *string `json:"id,omitempty"`
27562	// Name - READ-ONLY; Resource name.
27563	Name *string `json:"name,omitempty"`
27564	// Type - READ-ONLY; Resource type.
27565	Type *string `json:"type,omitempty"`
27566	// Location - Resource location.
27567	Location *string `json:"location,omitempty"`
27568	// Tags - Resource tags.
27569	Tags map[string]*string `json:"tags"`
27570}
27571
27572// MarshalJSON is the custom marshaler for VpnSite.
27573func (vs VpnSite) MarshalJSON() ([]byte, error) {
27574	objectMap := make(map[string]interface{})
27575	if vs.VpnSiteProperties != nil {
27576		objectMap["properties"] = vs.VpnSiteProperties
27577	}
27578	if vs.ID != nil {
27579		objectMap["id"] = vs.ID
27580	}
27581	if vs.Location != nil {
27582		objectMap["location"] = vs.Location
27583	}
27584	if vs.Tags != nil {
27585		objectMap["tags"] = vs.Tags
27586	}
27587	return json.Marshal(objectMap)
27588}
27589
27590// UnmarshalJSON is the custom unmarshaler for VpnSite struct.
27591func (vs *VpnSite) UnmarshalJSON(body []byte) error {
27592	var m map[string]*json.RawMessage
27593	err := json.Unmarshal(body, &m)
27594	if err != nil {
27595		return err
27596	}
27597	for k, v := range m {
27598		switch k {
27599		case "properties":
27600			if v != nil {
27601				var vpnSiteProperties VpnSiteProperties
27602				err = json.Unmarshal(*v, &vpnSiteProperties)
27603				if err != nil {
27604					return err
27605				}
27606				vs.VpnSiteProperties = &vpnSiteProperties
27607			}
27608		case "etag":
27609			if v != nil {
27610				var etag string
27611				err = json.Unmarshal(*v, &etag)
27612				if err != nil {
27613					return err
27614				}
27615				vs.Etag = &etag
27616			}
27617		case "id":
27618			if v != nil {
27619				var ID string
27620				err = json.Unmarshal(*v, &ID)
27621				if err != nil {
27622					return err
27623				}
27624				vs.ID = &ID
27625			}
27626		case "name":
27627			if v != nil {
27628				var name string
27629				err = json.Unmarshal(*v, &name)
27630				if err != nil {
27631					return err
27632				}
27633				vs.Name = &name
27634			}
27635		case "type":
27636			if v != nil {
27637				var typeVar string
27638				err = json.Unmarshal(*v, &typeVar)
27639				if err != nil {
27640					return err
27641				}
27642				vs.Type = &typeVar
27643			}
27644		case "location":
27645			if v != nil {
27646				var location string
27647				err = json.Unmarshal(*v, &location)
27648				if err != nil {
27649					return err
27650				}
27651				vs.Location = &location
27652			}
27653		case "tags":
27654			if v != nil {
27655				var tags map[string]*string
27656				err = json.Unmarshal(*v, &tags)
27657				if err != nil {
27658					return err
27659				}
27660				vs.Tags = tags
27661			}
27662		}
27663	}
27664
27665	return nil
27666}
27667
27668// VpnSiteID vpnSite Resource.
27669type VpnSiteID struct {
27670	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
27671	VpnSite *string `json:"vpnSite,omitempty"`
27672}
27673
27674// VpnSiteProperties parameters for VpnSite
27675type VpnSiteProperties struct {
27676	// VirtualWan - The VirtualWAN to which the vpnSite belongs
27677	VirtualWan *SubResource `json:"virtualWan,omitempty"`
27678	// DeviceProperties - The device properties
27679	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
27680	// IPAddress - The ip-address for the vpn-site.
27681	IPAddress *string `json:"ipAddress,omitempty"`
27682	// SiteKey - The key for vpn-site that can be used for connections.
27683	SiteKey *string `json:"siteKey,omitempty"`
27684	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
27685	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
27686	// BgpProperties - The set of bgp properties.
27687	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
27688	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27689	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27690	// IsSecuritySite - IsSecuritySite flag
27691	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
27692}
27693
27694// VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
27695// long-running operation.
27696type VpnSitesConfigurationDownloadFuture struct {
27697	azure.Future
27698}
27699
27700// Result returns the result of the asynchronous operation.
27701// If the operation has not completed it will return an error.
27702func (future *VpnSitesConfigurationDownloadFuture) Result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
27703	var done bool
27704	done, err = future.DoneWithContext(context.Background(), client)
27705	if err != nil {
27706		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
27707		return
27708	}
27709	if !done {
27710		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
27711		return
27712	}
27713	ar.Response = future.Response()
27714	return
27715}
27716
27717// VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
27718// operation.
27719type VpnSitesCreateOrUpdateFuture struct {
27720	azure.Future
27721}
27722
27723// Result returns the result of the asynchronous operation.
27724// If the operation has not completed it will return an error.
27725func (future *VpnSitesCreateOrUpdateFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
27726	var done bool
27727	done, err = future.DoneWithContext(context.Background(), client)
27728	if err != nil {
27729		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27730		return
27731	}
27732	if !done {
27733		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
27734		return
27735	}
27736	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27737	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
27738		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
27739		if err != nil {
27740			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
27741		}
27742	}
27743	return
27744}
27745
27746// VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27747// operation.
27748type VpnSitesDeleteFuture struct {
27749	azure.Future
27750}
27751
27752// Result returns the result of the asynchronous operation.
27753// If the operation has not completed it will return an error.
27754func (future *VpnSitesDeleteFuture) Result(client VpnSitesClient) (ar autorest.Response, err error) {
27755	var done bool
27756	done, err = future.DoneWithContext(context.Background(), client)
27757	if err != nil {
27758		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
27759		return
27760	}
27761	if !done {
27762		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
27763		return
27764	}
27765	ar.Response = future.Response()
27766	return
27767}
27768
27769// VpnSitesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
27770// operation.
27771type VpnSitesUpdateTagsFuture struct {
27772	azure.Future
27773}
27774
27775// Result returns the result of the asynchronous operation.
27776// If the operation has not completed it will return an error.
27777func (future *VpnSitesUpdateTagsFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
27778	var done bool
27779	done, err = future.DoneWithContext(context.Background(), client)
27780	if err != nil {
27781		err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
27782		return
27783	}
27784	if !done {
27785		err = azure.NewAsyncOpIncompleteError("network.VpnSitesUpdateTagsFuture")
27786		return
27787	}
27788	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27789	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
27790		vs, err = client.UpdateTagsResponder(vs.Response.Response)
27791		if err != nil {
27792			err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", vs.Response.Response, "Failure responding to request")
27793		}
27794	}
27795	return
27796}
27797
27798// Watcher network watcher in a resource group.
27799type Watcher struct {
27800	autorest.Response `json:"-"`
27801	// Etag - A unique read-only string that changes whenever the resource is updated.
27802	Etag                     *string `json:"etag,omitempty"`
27803	*WatcherPropertiesFormat `json:"properties,omitempty"`
27804	// ID - Resource ID.
27805	ID *string `json:"id,omitempty"`
27806	// Name - READ-ONLY; Resource name.
27807	Name *string `json:"name,omitempty"`
27808	// Type - READ-ONLY; Resource type.
27809	Type *string `json:"type,omitempty"`
27810	// Location - Resource location.
27811	Location *string `json:"location,omitempty"`
27812	// Tags - Resource tags.
27813	Tags map[string]*string `json:"tags"`
27814}
27815
27816// MarshalJSON is the custom marshaler for Watcher.
27817func (w Watcher) MarshalJSON() ([]byte, error) {
27818	objectMap := make(map[string]interface{})
27819	if w.Etag != nil {
27820		objectMap["etag"] = w.Etag
27821	}
27822	if w.WatcherPropertiesFormat != nil {
27823		objectMap["properties"] = w.WatcherPropertiesFormat
27824	}
27825	if w.ID != nil {
27826		objectMap["id"] = w.ID
27827	}
27828	if w.Location != nil {
27829		objectMap["location"] = w.Location
27830	}
27831	if w.Tags != nil {
27832		objectMap["tags"] = w.Tags
27833	}
27834	return json.Marshal(objectMap)
27835}
27836
27837// UnmarshalJSON is the custom unmarshaler for Watcher struct.
27838func (w *Watcher) UnmarshalJSON(body []byte) error {
27839	var m map[string]*json.RawMessage
27840	err := json.Unmarshal(body, &m)
27841	if err != nil {
27842		return err
27843	}
27844	for k, v := range m {
27845		switch k {
27846		case "etag":
27847			if v != nil {
27848				var etag string
27849				err = json.Unmarshal(*v, &etag)
27850				if err != nil {
27851					return err
27852				}
27853				w.Etag = &etag
27854			}
27855		case "properties":
27856			if v != nil {
27857				var watcherPropertiesFormat WatcherPropertiesFormat
27858				err = json.Unmarshal(*v, &watcherPropertiesFormat)
27859				if err != nil {
27860					return err
27861				}
27862				w.WatcherPropertiesFormat = &watcherPropertiesFormat
27863			}
27864		case "id":
27865			if v != nil {
27866				var ID string
27867				err = json.Unmarshal(*v, &ID)
27868				if err != nil {
27869					return err
27870				}
27871				w.ID = &ID
27872			}
27873		case "name":
27874			if v != nil {
27875				var name string
27876				err = json.Unmarshal(*v, &name)
27877				if err != nil {
27878					return err
27879				}
27880				w.Name = &name
27881			}
27882		case "type":
27883			if v != nil {
27884				var typeVar string
27885				err = json.Unmarshal(*v, &typeVar)
27886				if err != nil {
27887					return err
27888				}
27889				w.Type = &typeVar
27890			}
27891		case "location":
27892			if v != nil {
27893				var location string
27894				err = json.Unmarshal(*v, &location)
27895				if err != nil {
27896					return err
27897				}
27898				w.Location = &location
27899			}
27900		case "tags":
27901			if v != nil {
27902				var tags map[string]*string
27903				err = json.Unmarshal(*v, &tags)
27904				if err != nil {
27905					return err
27906				}
27907				w.Tags = tags
27908			}
27909		}
27910	}
27911
27912	return nil
27913}
27914
27915// WatcherListResult list of network watcher resources.
27916type WatcherListResult struct {
27917	autorest.Response `json:"-"`
27918	Value             *[]Watcher `json:"value,omitempty"`
27919}
27920
27921// WatcherPropertiesFormat the network watcher properties.
27922type WatcherPropertiesFormat struct {
27923	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27924	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27925}
27926
27927// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
27928// long-running operation.
27929type WatchersCheckConnectivityFuture struct {
27930	azure.Future
27931}
27932
27933// Result returns the result of the asynchronous operation.
27934// If the operation has not completed it will return an error.
27935func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
27936	var done bool
27937	done, err = future.DoneWithContext(context.Background(), client)
27938	if err != nil {
27939		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
27940		return
27941	}
27942	if !done {
27943		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
27944		return
27945	}
27946	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27947	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
27948		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
27949		if err != nil {
27950			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
27951		}
27952	}
27953	return
27954}
27955
27956// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27957// operation.
27958type WatchersDeleteFuture struct {
27959	azure.Future
27960}
27961
27962// Result returns the result of the asynchronous operation.
27963// If the operation has not completed it will return an error.
27964func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
27965	var done bool
27966	done, err = future.DoneWithContext(context.Background(), client)
27967	if err != nil {
27968		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
27969		return
27970	}
27971	if !done {
27972		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
27973		return
27974	}
27975	ar.Response = future.Response()
27976	return
27977}
27978
27979// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
27980// long-running operation.
27981type WatchersGetAzureReachabilityReportFuture struct {
27982	azure.Future
27983}
27984
27985// Result returns the result of the asynchronous operation.
27986// If the operation has not completed it will return an error.
27987func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
27988	var done bool
27989	done, err = future.DoneWithContext(context.Background(), client)
27990	if err != nil {
27991		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
27992		return
27993	}
27994	if !done {
27995		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
27996		return
27997	}
27998	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27999	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
28000		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
28001		if err != nil {
28002			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
28003		}
28004	}
28005	return
28006}
28007
28008// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
28009// long-running operation.
28010type WatchersGetFlowLogStatusFuture struct {
28011	azure.Future
28012}
28013
28014// Result returns the result of the asynchronous operation.
28015// If the operation has not completed it will return an error.
28016func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
28017	var done bool
28018	done, err = future.DoneWithContext(context.Background(), client)
28019	if err != nil {
28020		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
28021		return
28022	}
28023	if !done {
28024		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
28025		return
28026	}
28027	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28028	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
28029		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
28030		if err != nil {
28031			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
28032		}
28033	}
28034	return
28035}
28036
28037// WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
28038// of a long-running operation.
28039type WatchersGetNetworkConfigurationDiagnosticFuture struct {
28040	azure.Future
28041}
28042
28043// Result returns the result of the asynchronous operation.
28044// If the operation has not completed it will return an error.
28045func (future *WatchersGetNetworkConfigurationDiagnosticFuture) Result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
28046	var done bool
28047	done, err = future.DoneWithContext(context.Background(), client)
28048	if err != nil {
28049		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
28050		return
28051	}
28052	if !done {
28053		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
28054		return
28055	}
28056	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28057	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
28058		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
28059		if err != nil {
28060			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
28061		}
28062	}
28063	return
28064}
28065
28066// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
28067// operation.
28068type WatchersGetNextHopFuture struct {
28069	azure.Future
28070}
28071
28072// Result returns the result of the asynchronous operation.
28073// If the operation has not completed it will return an error.
28074func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
28075	var done bool
28076	done, err = future.DoneWithContext(context.Background(), client)
28077	if err != nil {
28078		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
28079		return
28080	}
28081	if !done {
28082		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
28083		return
28084	}
28085	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28086	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
28087		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
28088		if err != nil {
28089			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
28090		}
28091	}
28092	return
28093}
28094
28095// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
28096// long-running operation.
28097type WatchersGetTroubleshootingFuture struct {
28098	azure.Future
28099}
28100
28101// Result returns the result of the asynchronous operation.
28102// If the operation has not completed it will return an error.
28103func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
28104	var done bool
28105	done, err = future.DoneWithContext(context.Background(), client)
28106	if err != nil {
28107		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
28108		return
28109	}
28110	if !done {
28111		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
28112		return
28113	}
28114	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28115	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
28116		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
28117		if err != nil {
28118			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
28119		}
28120	}
28121	return
28122}
28123
28124// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
28125// long-running operation.
28126type WatchersGetTroubleshootingResultFuture struct {
28127	azure.Future
28128}
28129
28130// Result returns the result of the asynchronous operation.
28131// If the operation has not completed it will return an error.
28132func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
28133	var done bool
28134	done, err = future.DoneWithContext(context.Background(), client)
28135	if err != nil {
28136		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
28137		return
28138	}
28139	if !done {
28140		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
28141		return
28142	}
28143	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28144	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
28145		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
28146		if err != nil {
28147			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
28148		}
28149	}
28150	return
28151}
28152
28153// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
28154// long-running operation.
28155type WatchersGetVMSecurityRulesFuture struct {
28156	azure.Future
28157}
28158
28159// Result returns the result of the asynchronous operation.
28160// If the operation has not completed it will return an error.
28161func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
28162	var done bool
28163	done, err = future.DoneWithContext(context.Background(), client)
28164	if err != nil {
28165		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
28166		return
28167	}
28168	if !done {
28169		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
28170		return
28171	}
28172	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28173	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
28174		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
28175		if err != nil {
28176			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
28177		}
28178	}
28179	return
28180}
28181
28182// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
28183// long-running operation.
28184type WatchersListAvailableProvidersFuture struct {
28185	azure.Future
28186}
28187
28188// Result returns the result of the asynchronous operation.
28189// If the operation has not completed it will return an error.
28190func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
28191	var done bool
28192	done, err = future.DoneWithContext(context.Background(), client)
28193	if err != nil {
28194		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
28195		return
28196	}
28197	if !done {
28198		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
28199		return
28200	}
28201	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28202	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
28203		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
28204		if err != nil {
28205			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
28206		}
28207	}
28208	return
28209}
28210
28211// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
28212// long-running operation.
28213type WatchersSetFlowLogConfigurationFuture struct {
28214	azure.Future
28215}
28216
28217// Result returns the result of the asynchronous operation.
28218// If the operation has not completed it will return an error.
28219func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
28220	var done bool
28221	done, err = future.DoneWithContext(context.Background(), client)
28222	if err != nil {
28223		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
28224		return
28225	}
28226	if !done {
28227		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
28228		return
28229	}
28230	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28231	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
28232		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
28233		if err != nil {
28234			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
28235		}
28236	}
28237	return
28238}
28239
28240// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
28241// operation.
28242type WatchersVerifyIPFlowFuture struct {
28243	azure.Future
28244}
28245
28246// Result returns the result of the asynchronous operation.
28247// If the operation has not completed it will return an error.
28248func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
28249	var done bool
28250	done, err = future.DoneWithContext(context.Background(), client)
28251	if err != nil {
28252		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
28253		return
28254	}
28255	if !done {
28256		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
28257		return
28258	}
28259	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28260	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
28261		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
28262		if err != nil {
28263			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
28264		}
28265	}
28266	return
28267}
28268