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-02-01/network"
33
34// Access enumerates the values for access.
35type Access string
36
37const (
38	// Allow ...
39	Allow Access = "Allow"
40	// Deny ...
41	Deny Access = "Deny"
42)
43
44// PossibleAccessValues returns an array of possible values for the Access const type.
45func PossibleAccessValues() []Access {
46	return []Access{Allow, Deny}
47}
48
49// ApplicationGatewayBackendHealthServerHealth enumerates the values for application gateway backend health
50// server health.
51type ApplicationGatewayBackendHealthServerHealth string
52
53const (
54	// Down ...
55	Down ApplicationGatewayBackendHealthServerHealth = "Down"
56	// Draining ...
57	Draining ApplicationGatewayBackendHealthServerHealth = "Draining"
58	// Partial ...
59	Partial ApplicationGatewayBackendHealthServerHealth = "Partial"
60	// Unknown ...
61	Unknown ApplicationGatewayBackendHealthServerHealth = "Unknown"
62	// Up ...
63	Up ApplicationGatewayBackendHealthServerHealth = "Up"
64)
65
66// PossibleApplicationGatewayBackendHealthServerHealthValues returns an array of possible values for the ApplicationGatewayBackendHealthServerHealth const type.
67func PossibleApplicationGatewayBackendHealthServerHealthValues() []ApplicationGatewayBackendHealthServerHealth {
68	return []ApplicationGatewayBackendHealthServerHealth{Down, Draining, Partial, Unknown, Up}
69}
70
71// ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity.
72type ApplicationGatewayCookieBasedAffinity string
73
74const (
75	// Disabled ...
76	Disabled ApplicationGatewayCookieBasedAffinity = "Disabled"
77	// Enabled ...
78	Enabled ApplicationGatewayCookieBasedAffinity = "Enabled"
79)
80
81// PossibleApplicationGatewayCookieBasedAffinityValues returns an array of possible values for the ApplicationGatewayCookieBasedAffinity const type.
82func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayCookieBasedAffinity {
83	return []ApplicationGatewayCookieBasedAffinity{Disabled, Enabled}
84}
85
86// ApplicationGatewayFirewallMode enumerates the values for application gateway firewall mode.
87type ApplicationGatewayFirewallMode string
88
89const (
90	// Detection ...
91	Detection ApplicationGatewayFirewallMode = "Detection"
92	// Prevention ...
93	Prevention ApplicationGatewayFirewallMode = "Prevention"
94)
95
96// PossibleApplicationGatewayFirewallModeValues returns an array of possible values for the ApplicationGatewayFirewallMode const type.
97func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewallMode {
98	return []ApplicationGatewayFirewallMode{Detection, Prevention}
99}
100
101// ApplicationGatewayOperationalState enumerates the values for application gateway operational state.
102type ApplicationGatewayOperationalState string
103
104const (
105	// Running ...
106	Running ApplicationGatewayOperationalState = "Running"
107	// Starting ...
108	Starting ApplicationGatewayOperationalState = "Starting"
109	// Stopped ...
110	Stopped ApplicationGatewayOperationalState = "Stopped"
111	// Stopping ...
112	Stopping ApplicationGatewayOperationalState = "Stopping"
113)
114
115// PossibleApplicationGatewayOperationalStateValues returns an array of possible values for the ApplicationGatewayOperationalState const type.
116func PossibleApplicationGatewayOperationalStateValues() []ApplicationGatewayOperationalState {
117	return []ApplicationGatewayOperationalState{Running, Starting, Stopped, Stopping}
118}
119
120// ApplicationGatewayProtocol enumerates the values for application gateway protocol.
121type ApplicationGatewayProtocol string
122
123const (
124	// HTTP ...
125	HTTP ApplicationGatewayProtocol = "Http"
126	// HTTPS ...
127	HTTPS ApplicationGatewayProtocol = "Https"
128)
129
130// PossibleApplicationGatewayProtocolValues returns an array of possible values for the ApplicationGatewayProtocol const type.
131func PossibleApplicationGatewayProtocolValues() []ApplicationGatewayProtocol {
132	return []ApplicationGatewayProtocol{HTTP, HTTPS}
133}
134
135// ApplicationGatewayRedirectType enumerates the values for application gateway redirect type.
136type ApplicationGatewayRedirectType string
137
138const (
139	// Found ...
140	Found ApplicationGatewayRedirectType = "Found"
141	// Permanent ...
142	Permanent ApplicationGatewayRedirectType = "Permanent"
143	// SeeOther ...
144	SeeOther ApplicationGatewayRedirectType = "SeeOther"
145	// Temporary ...
146	Temporary ApplicationGatewayRedirectType = "Temporary"
147)
148
149// PossibleApplicationGatewayRedirectTypeValues returns an array of possible values for the ApplicationGatewayRedirectType const type.
150func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirectType {
151	return []ApplicationGatewayRedirectType{Found, Permanent, SeeOther, Temporary}
152}
153
154// ApplicationGatewayRequestRoutingRuleType enumerates the values for application gateway request routing rule
155// type.
156type ApplicationGatewayRequestRoutingRuleType string
157
158const (
159	// Basic ...
160	Basic ApplicationGatewayRequestRoutingRuleType = "Basic"
161	// PathBasedRouting ...
162	PathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting"
163)
164
165// PossibleApplicationGatewayRequestRoutingRuleTypeValues returns an array of possible values for the ApplicationGatewayRequestRoutingRuleType const type.
166func PossibleApplicationGatewayRequestRoutingRuleTypeValues() []ApplicationGatewayRequestRoutingRuleType {
167	return []ApplicationGatewayRequestRoutingRuleType{Basic, PathBasedRouting}
168}
169
170// ApplicationGatewaySkuName enumerates the values for application gateway sku name.
171type ApplicationGatewaySkuName string
172
173const (
174	// StandardLarge ...
175	StandardLarge ApplicationGatewaySkuName = "Standard_Large"
176	// StandardMedium ...
177	StandardMedium ApplicationGatewaySkuName = "Standard_Medium"
178	// StandardSmall ...
179	StandardSmall ApplicationGatewaySkuName = "Standard_Small"
180	// WAFLarge ...
181	WAFLarge ApplicationGatewaySkuName = "WAF_Large"
182	// WAFMedium ...
183	WAFMedium ApplicationGatewaySkuName = "WAF_Medium"
184)
185
186// PossibleApplicationGatewaySkuNameValues returns an array of possible values for the ApplicationGatewaySkuName const type.
187func PossibleApplicationGatewaySkuNameValues() []ApplicationGatewaySkuName {
188	return []ApplicationGatewaySkuName{StandardLarge, StandardMedium, StandardSmall, WAFLarge, WAFMedium}
189}
190
191// ApplicationGatewaySslCipherSuite enumerates the values for application gateway ssl cipher suite.
192type ApplicationGatewaySslCipherSuite string
193
194const (
195	// TLSDHEDSSWITH3DESEDECBCSHA ...
196	TLSDHEDSSWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
197	// TLSDHEDSSWITHAES128CBCSHA ...
198	TLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
199	// TLSDHEDSSWITHAES128CBCSHA256 ...
200	TLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
201	// TLSDHEDSSWITHAES256CBCSHA ...
202	TLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"
203	// TLSDHEDSSWITHAES256CBCSHA256 ...
204	TLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"
205	// TLSDHERSAWITHAES128CBCSHA ...
206	TLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
207	// TLSDHERSAWITHAES128GCMSHA256 ...
208	TLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
209	// TLSDHERSAWITHAES256CBCSHA ...
210	TLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
211	// TLSDHERSAWITHAES256GCMSHA384 ...
212	TLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"
213	// TLSECDHEECDSAWITHAES128CBCSHA ...
214	TLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
215	// TLSECDHEECDSAWITHAES128CBCSHA256 ...
216	TLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
217	// TLSECDHEECDSAWITHAES128GCMSHA256 ...
218	TLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
219	// TLSECDHEECDSAWITHAES256CBCSHA ...
220	TLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
221	// TLSECDHEECDSAWITHAES256CBCSHA384 ...
222	TLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
223	// TLSECDHEECDSAWITHAES256GCMSHA384 ...
224	TLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
225	// TLSECDHERSAWITHAES128CBCSHA ...
226	TLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
227	// TLSECDHERSAWITHAES128CBCSHA256 ...
228	TLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
229	// TLSECDHERSAWITHAES128GCMSHA256 ...
230	TLSECDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
231	// TLSECDHERSAWITHAES256CBCSHA ...
232	TLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
233	// TLSECDHERSAWITHAES256CBCSHA384 ...
234	TLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
235	// TLSECDHERSAWITHAES256GCMSHA384 ...
236	TLSECDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
237	// TLSRSAWITH3DESEDECBCSHA ...
238	TLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
239	// TLSRSAWITHAES128CBCSHA ...
240	TLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA"
241	// TLSRSAWITHAES128CBCSHA256 ...
242	TLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256"
243	// TLSRSAWITHAES128GCMSHA256 ...
244	TLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256"
245	// TLSRSAWITHAES256CBCSHA ...
246	TLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA"
247	// TLSRSAWITHAES256CBCSHA256 ...
248	TLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256"
249	// TLSRSAWITHAES256GCMSHA384 ...
250	TLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384"
251)
252
253// PossibleApplicationGatewaySslCipherSuiteValues returns an array of possible values for the ApplicationGatewaySslCipherSuite const type.
254func PossibleApplicationGatewaySslCipherSuiteValues() []ApplicationGatewaySslCipherSuite {
255	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}
256}
257
258// ApplicationGatewaySslPolicyName enumerates the values for application gateway ssl policy name.
259type ApplicationGatewaySslPolicyName string
260
261const (
262	// AppGwSslPolicy20150501 ...
263	AppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501"
264	// AppGwSslPolicy20170401 ...
265	AppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401"
266	// AppGwSslPolicy20170401S ...
267	AppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S"
268)
269
270// PossibleApplicationGatewaySslPolicyNameValues returns an array of possible values for the ApplicationGatewaySslPolicyName const type.
271func PossibleApplicationGatewaySslPolicyNameValues() []ApplicationGatewaySslPolicyName {
272	return []ApplicationGatewaySslPolicyName{AppGwSslPolicy20150501, AppGwSslPolicy20170401, AppGwSslPolicy20170401S}
273}
274
275// ApplicationGatewaySslPolicyType enumerates the values for application gateway ssl policy type.
276type ApplicationGatewaySslPolicyType string
277
278const (
279	// Custom ...
280	Custom ApplicationGatewaySslPolicyType = "Custom"
281	// Predefined ...
282	Predefined ApplicationGatewaySslPolicyType = "Predefined"
283)
284
285// PossibleApplicationGatewaySslPolicyTypeValues returns an array of possible values for the ApplicationGatewaySslPolicyType const type.
286func PossibleApplicationGatewaySslPolicyTypeValues() []ApplicationGatewaySslPolicyType {
287	return []ApplicationGatewaySslPolicyType{Custom, Predefined}
288}
289
290// ApplicationGatewaySslProtocol enumerates the values for application gateway ssl protocol.
291type ApplicationGatewaySslProtocol string
292
293const (
294	// TLSv10 ...
295	TLSv10 ApplicationGatewaySslProtocol = "TLSv1_0"
296	// TLSv11 ...
297	TLSv11 ApplicationGatewaySslProtocol = "TLSv1_1"
298	// TLSv12 ...
299	TLSv12 ApplicationGatewaySslProtocol = "TLSv1_2"
300)
301
302// PossibleApplicationGatewaySslProtocolValues returns an array of possible values for the ApplicationGatewaySslProtocol const type.
303func PossibleApplicationGatewaySslProtocolValues() []ApplicationGatewaySslProtocol {
304	return []ApplicationGatewaySslProtocol{TLSv10, TLSv11, TLSv12}
305}
306
307// ApplicationGatewayTier enumerates the values for application gateway tier.
308type ApplicationGatewayTier string
309
310const (
311	// Standard ...
312	Standard ApplicationGatewayTier = "Standard"
313	// WAF ...
314	WAF ApplicationGatewayTier = "WAF"
315)
316
317// PossibleApplicationGatewayTierValues returns an array of possible values for the ApplicationGatewayTier const type.
318func PossibleApplicationGatewayTierValues() []ApplicationGatewayTier {
319	return []ApplicationGatewayTier{Standard, WAF}
320}
321
322// AssociationType enumerates the values for association type.
323type AssociationType string
324
325const (
326	// Associated ...
327	Associated AssociationType = "Associated"
328	// Contains ...
329	Contains AssociationType = "Contains"
330)
331
332// PossibleAssociationTypeValues returns an array of possible values for the AssociationType const type.
333func PossibleAssociationTypeValues() []AssociationType {
334	return []AssociationType{Associated, Contains}
335}
336
337// AuthenticationMethod enumerates the values for authentication method.
338type AuthenticationMethod string
339
340const (
341	// EAPMSCHAPv2 ...
342	EAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2"
343	// EAPTLS ...
344	EAPTLS AuthenticationMethod = "EAPTLS"
345)
346
347// PossibleAuthenticationMethodValues returns an array of possible values for the AuthenticationMethod const type.
348func PossibleAuthenticationMethodValues() []AuthenticationMethod {
349	return []AuthenticationMethod{EAPMSCHAPv2, EAPTLS}
350}
351
352// AuthorizationUseStatus enumerates the values for authorization use status.
353type AuthorizationUseStatus string
354
355const (
356	// Available ...
357	Available AuthorizationUseStatus = "Available"
358	// InUse ...
359	InUse AuthorizationUseStatus = "InUse"
360)
361
362// PossibleAuthorizationUseStatusValues returns an array of possible values for the AuthorizationUseStatus const type.
363func PossibleAuthorizationUseStatusValues() []AuthorizationUseStatus {
364	return []AuthorizationUseStatus{Available, InUse}
365}
366
367// BgpPeerState enumerates the values for bgp peer state.
368type BgpPeerState string
369
370const (
371	// BgpPeerStateConnected ...
372	BgpPeerStateConnected BgpPeerState = "Connected"
373	// BgpPeerStateConnecting ...
374	BgpPeerStateConnecting BgpPeerState = "Connecting"
375	// BgpPeerStateIdle ...
376	BgpPeerStateIdle BgpPeerState = "Idle"
377	// BgpPeerStateStopped ...
378	BgpPeerStateStopped BgpPeerState = "Stopped"
379	// BgpPeerStateUnknown ...
380	BgpPeerStateUnknown BgpPeerState = "Unknown"
381)
382
383// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
384func PossibleBgpPeerStateValues() []BgpPeerState {
385	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
386}
387
388// CircuitConnectionStatus enumerates the values for circuit connection status.
389type CircuitConnectionStatus string
390
391const (
392	// Connected ...
393	Connected CircuitConnectionStatus = "Connected"
394	// Connecting ...
395	Connecting CircuitConnectionStatus = "Connecting"
396	// Disconnected ...
397	Disconnected CircuitConnectionStatus = "Disconnected"
398)
399
400// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
401func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
402	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
403}
404
405// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
406type ConnectionMonitorSourceStatus string
407
408const (
409	// Active ...
410	Active ConnectionMonitorSourceStatus = "Active"
411	// Inactive ...
412	Inactive ConnectionMonitorSourceStatus = "Inactive"
413	// Uknown ...
414	Uknown ConnectionMonitorSourceStatus = "Uknown"
415)
416
417// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
418func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
419	return []ConnectionMonitorSourceStatus{Active, Inactive, Uknown}
420}
421
422// ConnectionState enumerates the values for connection state.
423type ConnectionState string
424
425const (
426	// ConnectionStateReachable ...
427	ConnectionStateReachable ConnectionState = "Reachable"
428	// ConnectionStateUnknown ...
429	ConnectionStateUnknown ConnectionState = "Unknown"
430	// ConnectionStateUnreachable ...
431	ConnectionStateUnreachable ConnectionState = "Unreachable"
432)
433
434// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
435func PossibleConnectionStateValues() []ConnectionState {
436	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
437}
438
439// ConnectionStatus enumerates the values for connection status.
440type ConnectionStatus string
441
442const (
443	// ConnectionStatusConnected ...
444	ConnectionStatusConnected ConnectionStatus = "Connected"
445	// ConnectionStatusDegraded ...
446	ConnectionStatusDegraded ConnectionStatus = "Degraded"
447	// ConnectionStatusDisconnected ...
448	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
449	// ConnectionStatusUnknown ...
450	ConnectionStatusUnknown ConnectionStatus = "Unknown"
451)
452
453// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
454func PossibleConnectionStatusValues() []ConnectionStatus {
455	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
456}
457
458// DhGroup enumerates the values for dh group.
459type DhGroup string
460
461const (
462	// DHGroup1 ...
463	DHGroup1 DhGroup = "DHGroup1"
464	// DHGroup14 ...
465	DHGroup14 DhGroup = "DHGroup14"
466	// DHGroup2 ...
467	DHGroup2 DhGroup = "DHGroup2"
468	// DHGroup2048 ...
469	DHGroup2048 DhGroup = "DHGroup2048"
470	// DHGroup24 ...
471	DHGroup24 DhGroup = "DHGroup24"
472	// ECP256 ...
473	ECP256 DhGroup = "ECP256"
474	// ECP384 ...
475	ECP384 DhGroup = "ECP384"
476	// None ...
477	None DhGroup = "None"
478)
479
480// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
481func PossibleDhGroupValues() []DhGroup {
482	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
483}
484
485// Direction enumerates the values for direction.
486type Direction string
487
488const (
489	// Inbound ...
490	Inbound Direction = "Inbound"
491	// Outbound ...
492	Outbound Direction = "Outbound"
493)
494
495// PossibleDirectionValues returns an array of possible values for the Direction const type.
496func PossibleDirectionValues() []Direction {
497	return []Direction{Inbound, Outbound}
498}
499
500// EffectiveRouteSource enumerates the values for effective route source.
501type EffectiveRouteSource string
502
503const (
504	// EffectiveRouteSourceDefault ...
505	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
506	// EffectiveRouteSourceUnknown ...
507	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
508	// EffectiveRouteSourceUser ...
509	EffectiveRouteSourceUser EffectiveRouteSource = "User"
510	// EffectiveRouteSourceVirtualNetworkGateway ...
511	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
512)
513
514// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
515func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
516	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
517}
518
519// EffectiveRouteState enumerates the values for effective route state.
520type EffectiveRouteState string
521
522const (
523	// EffectiveRouteStateActive ...
524	EffectiveRouteStateActive EffectiveRouteState = "Active"
525	// EffectiveRouteStateInvalid ...
526	EffectiveRouteStateInvalid EffectiveRouteState = "Invalid"
527)
528
529// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
530func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
531	return []EffectiveRouteState{EffectiveRouteStateActive, EffectiveRouteStateInvalid}
532}
533
534// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
535type EffectiveSecurityRuleProtocol string
536
537const (
538	// All ...
539	All EffectiveSecurityRuleProtocol = "All"
540	// TCP ...
541	TCP EffectiveSecurityRuleProtocol = "Tcp"
542	// UDP ...
543	UDP EffectiveSecurityRuleProtocol = "Udp"
544)
545
546// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
547func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
548	return []EffectiveSecurityRuleProtocol{All, TCP, UDP}
549}
550
551// EvaluationState enumerates the values for evaluation state.
552type EvaluationState string
553
554const (
555	// Completed ...
556	Completed EvaluationState = "Completed"
557	// InProgress ...
558	InProgress EvaluationState = "InProgress"
559	// NotStarted ...
560	NotStarted EvaluationState = "NotStarted"
561)
562
563// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
564func PossibleEvaluationStateValues() []EvaluationState {
565	return []EvaluationState{Completed, InProgress, NotStarted}
566}
567
568// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
569// peering advertised public prefix state.
570type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
571
572const (
573	// Configured ...
574	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
575	// Configuring ...
576	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
577	// NotConfigured ...
578	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
579	// ValidationNeeded ...
580	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
581)
582
583// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
584func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
585	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
586}
587
588// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
589type ExpressRouteCircuitPeeringState string
590
591const (
592	// ExpressRouteCircuitPeeringStateDisabled ...
593	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
594	// ExpressRouteCircuitPeeringStateEnabled ...
595	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
596)
597
598// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
599func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
600	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
601}
602
603// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
604type ExpressRouteCircuitSkuFamily string
605
606const (
607	// MeteredData ...
608	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
609	// UnlimitedData ...
610	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
611)
612
613// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
614func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
615	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
616}
617
618// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
619type ExpressRouteCircuitSkuTier string
620
621const (
622	// ExpressRouteCircuitSkuTierPremium ...
623	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
624	// ExpressRouteCircuitSkuTierStandard ...
625	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
626)
627
628// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
629func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
630	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
631}
632
633// ExpressRoutePeeringState enumerates the values for express route peering state.
634type ExpressRoutePeeringState string
635
636const (
637	// ExpressRoutePeeringStateDisabled ...
638	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
639	// ExpressRoutePeeringStateEnabled ...
640	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
641)
642
643// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
644func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
645	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
646}
647
648// ExpressRoutePeeringType enumerates the values for express route peering type.
649type ExpressRoutePeeringType string
650
651const (
652	// AzurePrivatePeering ...
653	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
654	// AzurePublicPeering ...
655	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
656	// MicrosoftPeering ...
657	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
658)
659
660// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
661func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
662	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
663}
664
665// HTTPMethod enumerates the values for http method.
666type HTTPMethod string
667
668const (
669	// Get ...
670	Get HTTPMethod = "Get"
671)
672
673// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
674func PossibleHTTPMethodValues() []HTTPMethod {
675	return []HTTPMethod{Get}
676}
677
678// IkeEncryption enumerates the values for ike encryption.
679type IkeEncryption string
680
681const (
682	// AES128 ...
683	AES128 IkeEncryption = "AES128"
684	// AES192 ...
685	AES192 IkeEncryption = "AES192"
686	// AES256 ...
687	AES256 IkeEncryption = "AES256"
688	// DES ...
689	DES IkeEncryption = "DES"
690	// DES3 ...
691	DES3 IkeEncryption = "DES3"
692	// GCMAES128 ...
693	GCMAES128 IkeEncryption = "GCMAES128"
694	// GCMAES256 ...
695	GCMAES256 IkeEncryption = "GCMAES256"
696)
697
698// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
699func PossibleIkeEncryptionValues() []IkeEncryption {
700	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
701}
702
703// IkeIntegrity enumerates the values for ike integrity.
704type IkeIntegrity string
705
706const (
707	// IkeIntegrityGCMAES128 ...
708	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
709	// IkeIntegrityGCMAES256 ...
710	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
711	// IkeIntegrityMD5 ...
712	IkeIntegrityMD5 IkeIntegrity = "MD5"
713	// IkeIntegritySHA1 ...
714	IkeIntegritySHA1 IkeIntegrity = "SHA1"
715	// IkeIntegritySHA256 ...
716	IkeIntegritySHA256 IkeIntegrity = "SHA256"
717	// IkeIntegritySHA384 ...
718	IkeIntegritySHA384 IkeIntegrity = "SHA384"
719)
720
721// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
722func PossibleIkeIntegrityValues() []IkeIntegrity {
723	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
724}
725
726// IPAllocationMethod enumerates the values for ip allocation method.
727type IPAllocationMethod string
728
729const (
730	// Dynamic ...
731	Dynamic IPAllocationMethod = "Dynamic"
732	// Static ...
733	Static IPAllocationMethod = "Static"
734)
735
736// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
737func PossibleIPAllocationMethodValues() []IPAllocationMethod {
738	return []IPAllocationMethod{Dynamic, Static}
739}
740
741// IPFlowProtocol enumerates the values for ip flow protocol.
742type IPFlowProtocol string
743
744const (
745	// IPFlowProtocolTCP ...
746	IPFlowProtocolTCP IPFlowProtocol = "TCP"
747	// IPFlowProtocolUDP ...
748	IPFlowProtocolUDP IPFlowProtocol = "UDP"
749)
750
751// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
752func PossibleIPFlowProtocolValues() []IPFlowProtocol {
753	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
754}
755
756// IpsecEncryption enumerates the values for ipsec encryption.
757type IpsecEncryption string
758
759const (
760	// IpsecEncryptionAES128 ...
761	IpsecEncryptionAES128 IpsecEncryption = "AES128"
762	// IpsecEncryptionAES192 ...
763	IpsecEncryptionAES192 IpsecEncryption = "AES192"
764	// IpsecEncryptionAES256 ...
765	IpsecEncryptionAES256 IpsecEncryption = "AES256"
766	// IpsecEncryptionDES ...
767	IpsecEncryptionDES IpsecEncryption = "DES"
768	// IpsecEncryptionDES3 ...
769	IpsecEncryptionDES3 IpsecEncryption = "DES3"
770	// IpsecEncryptionGCMAES128 ...
771	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
772	// IpsecEncryptionGCMAES192 ...
773	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
774	// IpsecEncryptionGCMAES256 ...
775	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
776	// IpsecEncryptionNone ...
777	IpsecEncryptionNone IpsecEncryption = "None"
778)
779
780// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
781func PossibleIpsecEncryptionValues() []IpsecEncryption {
782	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
783}
784
785// IpsecIntegrity enumerates the values for ipsec integrity.
786type IpsecIntegrity string
787
788const (
789	// IpsecIntegrityGCMAES128 ...
790	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
791	// IpsecIntegrityGCMAES192 ...
792	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
793	// IpsecIntegrityGCMAES256 ...
794	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
795	// IpsecIntegrityMD5 ...
796	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
797	// IpsecIntegritySHA1 ...
798	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
799	// IpsecIntegritySHA256 ...
800	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
801)
802
803// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
804func PossibleIpsecIntegrityValues() []IpsecIntegrity {
805	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
806}
807
808// IPVersion enumerates the values for ip version.
809type IPVersion string
810
811const (
812	// IPv4 ...
813	IPv4 IPVersion = "IPv4"
814	// IPv6 ...
815	IPv6 IPVersion = "IPv6"
816)
817
818// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
819func PossibleIPVersionValues() []IPVersion {
820	return []IPVersion{IPv4, IPv6}
821}
822
823// IssueType enumerates the values for issue type.
824type IssueType string
825
826const (
827	// IssueTypeAgentStopped ...
828	IssueTypeAgentStopped IssueType = "AgentStopped"
829	// IssueTypeDNSResolution ...
830	IssueTypeDNSResolution IssueType = "DnsResolution"
831	// IssueTypeGuestFirewall ...
832	IssueTypeGuestFirewall IssueType = "GuestFirewall"
833	// IssueTypeNetworkSecurityRule ...
834	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
835	// IssueTypePlatform ...
836	IssueTypePlatform IssueType = "Platform"
837	// IssueTypePortThrottled ...
838	IssueTypePortThrottled IssueType = "PortThrottled"
839	// IssueTypeSocketBind ...
840	IssueTypeSocketBind IssueType = "SocketBind"
841	// IssueTypeUnknown ...
842	IssueTypeUnknown IssueType = "Unknown"
843	// IssueTypeUserDefinedRoute ...
844	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
845)
846
847// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
848func PossibleIssueTypeValues() []IssueType {
849	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
850}
851
852// LoadBalancerSkuName enumerates the values for load balancer sku name.
853type LoadBalancerSkuName string
854
855const (
856	// LoadBalancerSkuNameBasic ...
857	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
858	// LoadBalancerSkuNameStandard ...
859	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
860)
861
862// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
863func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
864	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
865}
866
867// LoadDistribution enumerates the values for load distribution.
868type LoadDistribution string
869
870const (
871	// Default ...
872	Default LoadDistribution = "Default"
873	// SourceIP ...
874	SourceIP LoadDistribution = "SourceIP"
875	// SourceIPProtocol ...
876	SourceIPProtocol LoadDistribution = "SourceIPProtocol"
877)
878
879// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
880func PossibleLoadDistributionValues() []LoadDistribution {
881	return []LoadDistribution{Default, SourceIP, SourceIPProtocol}
882}
883
884// NextHopType enumerates the values for next hop type.
885type NextHopType string
886
887const (
888	// NextHopTypeHyperNetGateway ...
889	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
890	// NextHopTypeInternet ...
891	NextHopTypeInternet NextHopType = "Internet"
892	// NextHopTypeNone ...
893	NextHopTypeNone NextHopType = "None"
894	// NextHopTypeVirtualAppliance ...
895	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
896	// NextHopTypeVirtualNetworkGateway ...
897	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
898	// NextHopTypeVnetLocal ...
899	NextHopTypeVnetLocal NextHopType = "VnetLocal"
900)
901
902// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
903func PossibleNextHopTypeValues() []NextHopType {
904	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
905}
906
907// OperationStatus enumerates the values for operation status.
908type OperationStatus string
909
910const (
911	// OperationStatusFailed ...
912	OperationStatusFailed OperationStatus = "Failed"
913	// OperationStatusInProgress ...
914	OperationStatusInProgress OperationStatus = "InProgress"
915	// OperationStatusSucceeded ...
916	OperationStatusSucceeded OperationStatus = "Succeeded"
917)
918
919// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
920func PossibleOperationStatusValues() []OperationStatus {
921	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
922}
923
924// Origin enumerates the values for origin.
925type Origin string
926
927const (
928	// OriginInbound ...
929	OriginInbound Origin = "Inbound"
930	// OriginLocal ...
931	OriginLocal Origin = "Local"
932	// OriginOutbound ...
933	OriginOutbound Origin = "Outbound"
934)
935
936// PossibleOriginValues returns an array of possible values for the Origin const type.
937func PossibleOriginValues() []Origin {
938	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
939}
940
941// PcError enumerates the values for pc error.
942type PcError string
943
944const (
945	// AgentStopped ...
946	AgentStopped PcError = "AgentStopped"
947	// CaptureFailed ...
948	CaptureFailed PcError = "CaptureFailed"
949	// InternalError ...
950	InternalError PcError = "InternalError"
951	// LocalFileFailed ...
952	LocalFileFailed PcError = "LocalFileFailed"
953	// StorageFailed ...
954	StorageFailed PcError = "StorageFailed"
955)
956
957// PossiblePcErrorValues returns an array of possible values for the PcError const type.
958func PossiblePcErrorValues() []PcError {
959	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
960}
961
962// PcProtocol enumerates the values for pc protocol.
963type PcProtocol string
964
965const (
966	// PcProtocolAny ...
967	PcProtocolAny PcProtocol = "Any"
968	// PcProtocolTCP ...
969	PcProtocolTCP PcProtocol = "TCP"
970	// PcProtocolUDP ...
971	PcProtocolUDP PcProtocol = "UDP"
972)
973
974// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
975func PossiblePcProtocolValues() []PcProtocol {
976	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
977}
978
979// PcStatus enumerates the values for pc status.
980type PcStatus string
981
982const (
983	// PcStatusError ...
984	PcStatusError PcStatus = "Error"
985	// PcStatusNotStarted ...
986	PcStatusNotStarted PcStatus = "NotStarted"
987	// PcStatusRunning ...
988	PcStatusRunning PcStatus = "Running"
989	// PcStatusStopped ...
990	PcStatusStopped PcStatus = "Stopped"
991	// PcStatusUnknown ...
992	PcStatusUnknown PcStatus = "Unknown"
993)
994
995// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
996func PossiblePcStatusValues() []PcStatus {
997	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
998}
999
1000// PfsGroup enumerates the values for pfs group.
1001type PfsGroup string
1002
1003const (
1004	// PfsGroupECP256 ...
1005	PfsGroupECP256 PfsGroup = "ECP256"
1006	// PfsGroupECP384 ...
1007	PfsGroupECP384 PfsGroup = "ECP384"
1008	// PfsGroupNone ...
1009	PfsGroupNone PfsGroup = "None"
1010	// PfsGroupPFS1 ...
1011	PfsGroupPFS1 PfsGroup = "PFS1"
1012	// PfsGroupPFS14 ...
1013	PfsGroupPFS14 PfsGroup = "PFS14"
1014	// PfsGroupPFS2 ...
1015	PfsGroupPFS2 PfsGroup = "PFS2"
1016	// PfsGroupPFS2048 ...
1017	PfsGroupPFS2048 PfsGroup = "PFS2048"
1018	// PfsGroupPFS24 ...
1019	PfsGroupPFS24 PfsGroup = "PFS24"
1020	// PfsGroupPFSMM ...
1021	PfsGroupPFSMM PfsGroup = "PFSMM"
1022)
1023
1024// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1025func PossiblePfsGroupValues() []PfsGroup {
1026	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1027}
1028
1029// ProbeProtocol enumerates the values for probe protocol.
1030type ProbeProtocol string
1031
1032const (
1033	// ProbeProtocolHTTP ...
1034	ProbeProtocolHTTP ProbeProtocol = "Http"
1035	// ProbeProtocolHTTPS ...
1036	ProbeProtocolHTTPS ProbeProtocol = "Https"
1037	// ProbeProtocolTCP ...
1038	ProbeProtocolTCP ProbeProtocol = "Tcp"
1039)
1040
1041// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1042func PossibleProbeProtocolValues() []ProbeProtocol {
1043	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1044}
1045
1046// ProcessorArchitecture enumerates the values for processor architecture.
1047type ProcessorArchitecture string
1048
1049const (
1050	// Amd64 ...
1051	Amd64 ProcessorArchitecture = "Amd64"
1052	// X86 ...
1053	X86 ProcessorArchitecture = "X86"
1054)
1055
1056// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1057func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1058	return []ProcessorArchitecture{Amd64, X86}
1059}
1060
1061// Protocol enumerates the values for protocol.
1062type Protocol string
1063
1064const (
1065	// ProtocolHTTP ...
1066	ProtocolHTTP Protocol = "Http"
1067	// ProtocolHTTPS ...
1068	ProtocolHTTPS Protocol = "Https"
1069	// ProtocolIcmp ...
1070	ProtocolIcmp Protocol = "Icmp"
1071	// ProtocolTCP ...
1072	ProtocolTCP Protocol = "Tcp"
1073)
1074
1075// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1076func PossibleProtocolValues() []Protocol {
1077	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1078}
1079
1080// ProvisioningState enumerates the values for provisioning state.
1081type ProvisioningState string
1082
1083const (
1084	// Deleting ...
1085	Deleting ProvisioningState = "Deleting"
1086	// Failed ...
1087	Failed ProvisioningState = "Failed"
1088	// Succeeded ...
1089	Succeeded ProvisioningState = "Succeeded"
1090	// Updating ...
1091	Updating ProvisioningState = "Updating"
1092)
1093
1094// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1095func PossibleProvisioningStateValues() []ProvisioningState {
1096	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1097}
1098
1099// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1100type PublicIPAddressSkuName string
1101
1102const (
1103	// PublicIPAddressSkuNameBasic ...
1104	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1105	// PublicIPAddressSkuNameStandard ...
1106	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1107)
1108
1109// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1110func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1111	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1112}
1113
1114// RouteNextHopType enumerates the values for route next hop type.
1115type RouteNextHopType string
1116
1117const (
1118	// RouteNextHopTypeInternet ...
1119	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1120	// RouteNextHopTypeNone ...
1121	RouteNextHopTypeNone RouteNextHopType = "None"
1122	// RouteNextHopTypeVirtualAppliance ...
1123	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1124	// RouteNextHopTypeVirtualNetworkGateway ...
1125	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1126	// RouteNextHopTypeVnetLocal ...
1127	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1128)
1129
1130// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1131func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1132	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1133}
1134
1135// SecurityRuleAccess enumerates the values for security rule access.
1136type SecurityRuleAccess string
1137
1138const (
1139	// SecurityRuleAccessAllow ...
1140	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1141	// SecurityRuleAccessDeny ...
1142	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1143)
1144
1145// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1146func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1147	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1148}
1149
1150// SecurityRuleDirection enumerates the values for security rule direction.
1151type SecurityRuleDirection string
1152
1153const (
1154	// SecurityRuleDirectionInbound ...
1155	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1156	// SecurityRuleDirectionOutbound ...
1157	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1158)
1159
1160// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1161func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1162	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1163}
1164
1165// SecurityRuleProtocol enumerates the values for security rule protocol.
1166type SecurityRuleProtocol string
1167
1168const (
1169	// SecurityRuleProtocolAsterisk ...
1170	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1171	// SecurityRuleProtocolTCP ...
1172	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1173	// SecurityRuleProtocolUDP ...
1174	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1175)
1176
1177// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1178func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1179	return []SecurityRuleProtocol{SecurityRuleProtocolAsterisk, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1180}
1181
1182// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1183type ServiceProviderProvisioningState string
1184
1185const (
1186	// Deprovisioning ...
1187	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1188	// NotProvisioned ...
1189	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1190	// Provisioned ...
1191	Provisioned ServiceProviderProvisioningState = "Provisioned"
1192	// Provisioning ...
1193	Provisioning ServiceProviderProvisioningState = "Provisioning"
1194)
1195
1196// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1197func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1198	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1199}
1200
1201// Severity enumerates the values for severity.
1202type Severity string
1203
1204const (
1205	// SeverityError ...
1206	SeverityError Severity = "Error"
1207	// SeverityWarning ...
1208	SeverityWarning Severity = "Warning"
1209)
1210
1211// PossibleSeverityValues returns an array of possible values for the Severity const type.
1212func PossibleSeverityValues() []Severity {
1213	return []Severity{SeverityError, SeverityWarning}
1214}
1215
1216// TransportProtocol enumerates the values for transport protocol.
1217type TransportProtocol string
1218
1219const (
1220	// TransportProtocolAll ...
1221	TransportProtocolAll TransportProtocol = "All"
1222	// TransportProtocolTCP ...
1223	TransportProtocolTCP TransportProtocol = "Tcp"
1224	// TransportProtocolUDP ...
1225	TransportProtocolUDP TransportProtocol = "Udp"
1226)
1227
1228// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1229func PossibleTransportProtocolValues() []TransportProtocol {
1230	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1231}
1232
1233// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1234type VirtualNetworkGatewayConnectionStatus string
1235
1236const (
1237	// VirtualNetworkGatewayConnectionStatusConnected ...
1238	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1239	// VirtualNetworkGatewayConnectionStatusConnecting ...
1240	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1241	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1242	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1243	// VirtualNetworkGatewayConnectionStatusUnknown ...
1244	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1245)
1246
1247// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1248func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1249	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1250}
1251
1252// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1253type VirtualNetworkGatewayConnectionType string
1254
1255const (
1256	// ExpressRoute ...
1257	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1258	// IPsec ...
1259	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1260	// Vnet2Vnet ...
1261	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1262	// VPNClient ...
1263	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1264)
1265
1266// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1267func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1268	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1269}
1270
1271// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1272type VirtualNetworkGatewaySkuName string
1273
1274const (
1275	// VirtualNetworkGatewaySkuNameBasic ...
1276	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1277	// VirtualNetworkGatewaySkuNameHighPerformance ...
1278	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1279	// VirtualNetworkGatewaySkuNameStandard ...
1280	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1281	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1282	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1283	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1284	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1285	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1286	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1287	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1288	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1289)
1290
1291// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
1292func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
1293	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw3}
1294}
1295
1296// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
1297type VirtualNetworkGatewaySkuTier string
1298
1299const (
1300	// VirtualNetworkGatewaySkuTierBasic ...
1301	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
1302	// VirtualNetworkGatewaySkuTierHighPerformance ...
1303	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
1304	// VirtualNetworkGatewaySkuTierStandard ...
1305	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
1306	// VirtualNetworkGatewaySkuTierUltraPerformance ...
1307	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
1308	// VirtualNetworkGatewaySkuTierVpnGw1 ...
1309	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
1310	// VirtualNetworkGatewaySkuTierVpnGw2 ...
1311	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
1312	// VirtualNetworkGatewaySkuTierVpnGw3 ...
1313	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
1314)
1315
1316// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
1317func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
1318	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw3}
1319}
1320
1321// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
1322type VirtualNetworkGatewayType string
1323
1324const (
1325	// VirtualNetworkGatewayTypeExpressRoute ...
1326	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
1327	// VirtualNetworkGatewayTypeVpn ...
1328	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
1329)
1330
1331// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
1332func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
1333	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
1334}
1335
1336// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
1337type VirtualNetworkPeeringState string
1338
1339const (
1340	// VirtualNetworkPeeringStateConnected ...
1341	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
1342	// VirtualNetworkPeeringStateDisconnected ...
1343	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
1344	// VirtualNetworkPeeringStateInitiated ...
1345	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
1346)
1347
1348// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
1349func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
1350	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
1351}
1352
1353// VpnClientProtocol enumerates the values for vpn client protocol.
1354type VpnClientProtocol string
1355
1356const (
1357	// IkeV2 ...
1358	IkeV2 VpnClientProtocol = "IkeV2"
1359	// SSTP ...
1360	SSTP VpnClientProtocol = "SSTP"
1361)
1362
1363// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
1364func PossibleVpnClientProtocolValues() []VpnClientProtocol {
1365	return []VpnClientProtocol{IkeV2, SSTP}
1366}
1367
1368// VpnType enumerates the values for vpn type.
1369type VpnType string
1370
1371const (
1372	// PolicyBased ...
1373	PolicyBased VpnType = "PolicyBased"
1374	// RouteBased ...
1375	RouteBased VpnType = "RouteBased"
1376)
1377
1378// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
1379func PossibleVpnTypeValues() []VpnType {
1380	return []VpnType{PolicyBased, RouteBased}
1381}
1382
1383// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
1384// virtual network.
1385type AddressSpace struct {
1386	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
1387	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
1388}
1389
1390// ApplicationGateway application gateway resource
1391type ApplicationGateway struct {
1392	autorest.Response                   `json:"-"`
1393	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
1394	// Etag - A unique read-only string that changes whenever the resource is updated.
1395	Etag *string `json:"etag,omitempty"`
1396	// ID - Resource ID.
1397	ID *string `json:"id,omitempty"`
1398	// Name - READ-ONLY; Resource name.
1399	Name *string `json:"name,omitempty"`
1400	// Type - READ-ONLY; Resource type.
1401	Type *string `json:"type,omitempty"`
1402	// Location - Resource location.
1403	Location *string `json:"location,omitempty"`
1404	// Tags - Resource tags.
1405	Tags map[string]*string `json:"tags"`
1406}
1407
1408// MarshalJSON is the custom marshaler for ApplicationGateway.
1409func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
1410	objectMap := make(map[string]interface{})
1411	if ag.ApplicationGatewayPropertiesFormat != nil {
1412		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
1413	}
1414	if ag.Etag != nil {
1415		objectMap["etag"] = ag.Etag
1416	}
1417	if ag.ID != nil {
1418		objectMap["id"] = ag.ID
1419	}
1420	if ag.Location != nil {
1421		objectMap["location"] = ag.Location
1422	}
1423	if ag.Tags != nil {
1424		objectMap["tags"] = ag.Tags
1425	}
1426	return json.Marshal(objectMap)
1427}
1428
1429// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
1430func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
1431	var m map[string]*json.RawMessage
1432	err := json.Unmarshal(body, &m)
1433	if err != nil {
1434		return err
1435	}
1436	for k, v := range m {
1437		switch k {
1438		case "properties":
1439			if v != nil {
1440				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
1441				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
1442				if err != nil {
1443					return err
1444				}
1445				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
1446			}
1447		case "etag":
1448			if v != nil {
1449				var etag string
1450				err = json.Unmarshal(*v, &etag)
1451				if err != nil {
1452					return err
1453				}
1454				ag.Etag = &etag
1455			}
1456		case "id":
1457			if v != nil {
1458				var ID string
1459				err = json.Unmarshal(*v, &ID)
1460				if err != nil {
1461					return err
1462				}
1463				ag.ID = &ID
1464			}
1465		case "name":
1466			if v != nil {
1467				var name string
1468				err = json.Unmarshal(*v, &name)
1469				if err != nil {
1470					return err
1471				}
1472				ag.Name = &name
1473			}
1474		case "type":
1475			if v != nil {
1476				var typeVar string
1477				err = json.Unmarshal(*v, &typeVar)
1478				if err != nil {
1479					return err
1480				}
1481				ag.Type = &typeVar
1482			}
1483		case "location":
1484			if v != nil {
1485				var location string
1486				err = json.Unmarshal(*v, &location)
1487				if err != nil {
1488					return err
1489				}
1490				ag.Location = &location
1491			}
1492		case "tags":
1493			if v != nil {
1494				var tags map[string]*string
1495				err = json.Unmarshal(*v, &tags)
1496				if err != nil {
1497					return err
1498				}
1499				ag.Tags = tags
1500			}
1501		}
1502	}
1503
1504	return nil
1505}
1506
1507// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
1508type ApplicationGatewayAuthenticationCertificate struct {
1509	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
1510	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
1511	Name *string `json:"name,omitempty"`
1512	// Etag - A unique read-only string that changes whenever the resource is updated.
1513	Etag *string `json:"etag,omitempty"`
1514	// Type - Type of the resource.
1515	Type *string `json:"type,omitempty"`
1516	// ID - Resource ID.
1517	ID *string `json:"id,omitempty"`
1518}
1519
1520// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
1521func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
1522	objectMap := make(map[string]interface{})
1523	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
1524		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
1525	}
1526	if agac.Name != nil {
1527		objectMap["name"] = agac.Name
1528	}
1529	if agac.Etag != nil {
1530		objectMap["etag"] = agac.Etag
1531	}
1532	if agac.Type != nil {
1533		objectMap["type"] = agac.Type
1534	}
1535	if agac.ID != nil {
1536		objectMap["id"] = agac.ID
1537	}
1538	return json.Marshal(objectMap)
1539}
1540
1541// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
1542func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
1543	var m map[string]*json.RawMessage
1544	err := json.Unmarshal(body, &m)
1545	if err != nil {
1546		return err
1547	}
1548	for k, v := range m {
1549		switch k {
1550		case "properties":
1551			if v != nil {
1552				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
1553				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
1554				if err != nil {
1555					return err
1556				}
1557				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
1558			}
1559		case "name":
1560			if v != nil {
1561				var name string
1562				err = json.Unmarshal(*v, &name)
1563				if err != nil {
1564					return err
1565				}
1566				agac.Name = &name
1567			}
1568		case "etag":
1569			if v != nil {
1570				var etag string
1571				err = json.Unmarshal(*v, &etag)
1572				if err != nil {
1573					return err
1574				}
1575				agac.Etag = &etag
1576			}
1577		case "type":
1578			if v != nil {
1579				var typeVar string
1580				err = json.Unmarshal(*v, &typeVar)
1581				if err != nil {
1582					return err
1583				}
1584				agac.Type = &typeVar
1585			}
1586		case "id":
1587			if v != nil {
1588				var ID string
1589				err = json.Unmarshal(*v, &ID)
1590				if err != nil {
1591					return err
1592				}
1593				agac.ID = &ID
1594			}
1595		}
1596	}
1597
1598	return nil
1599}
1600
1601// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
1602// application gateway.
1603type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
1604	// Data - Certificate public data.
1605	Data *string `json:"data,omitempty"`
1606	// ProvisioningState - Provisioning state of the authentication certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
1607	ProvisioningState *string `json:"provisioningState,omitempty"`
1608}
1609
1610// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
1611// call.
1612type ApplicationGatewayAvailableSslOptions struct {
1613	autorest.Response                                      `json:"-"`
1614	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
1615	// ID - Resource ID.
1616	ID *string `json:"id,omitempty"`
1617	// Name - READ-ONLY; Resource name.
1618	Name *string `json:"name,omitempty"`
1619	// Type - READ-ONLY; Resource type.
1620	Type *string `json:"type,omitempty"`
1621	// Location - Resource location.
1622	Location *string `json:"location,omitempty"`
1623	// Tags - Resource tags.
1624	Tags map[string]*string `json:"tags"`
1625}
1626
1627// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
1628func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
1629	objectMap := make(map[string]interface{})
1630	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
1631		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
1632	}
1633	if agaso.ID != nil {
1634		objectMap["id"] = agaso.ID
1635	}
1636	if agaso.Location != nil {
1637		objectMap["location"] = agaso.Location
1638	}
1639	if agaso.Tags != nil {
1640		objectMap["tags"] = agaso.Tags
1641	}
1642	return json.Marshal(objectMap)
1643}
1644
1645// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
1646func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
1647	var m map[string]*json.RawMessage
1648	err := json.Unmarshal(body, &m)
1649	if err != nil {
1650		return err
1651	}
1652	for k, v := range m {
1653		switch k {
1654		case "properties":
1655			if v != nil {
1656				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
1657				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
1658				if err != nil {
1659					return err
1660				}
1661				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
1662			}
1663		case "id":
1664			if v != nil {
1665				var ID string
1666				err = json.Unmarshal(*v, &ID)
1667				if err != nil {
1668					return err
1669				}
1670				agaso.ID = &ID
1671			}
1672		case "name":
1673			if v != nil {
1674				var name string
1675				err = json.Unmarshal(*v, &name)
1676				if err != nil {
1677					return err
1678				}
1679				agaso.Name = &name
1680			}
1681		case "type":
1682			if v != nil {
1683				var typeVar string
1684				err = json.Unmarshal(*v, &typeVar)
1685				if err != nil {
1686					return err
1687				}
1688				agaso.Type = &typeVar
1689			}
1690		case "location":
1691			if v != nil {
1692				var location string
1693				err = json.Unmarshal(*v, &location)
1694				if err != nil {
1695					return err
1696				}
1697				agaso.Location = &location
1698			}
1699		case "tags":
1700			if v != nil {
1701				var tags map[string]*string
1702				err = json.Unmarshal(*v, &tags)
1703				if err != nil {
1704					return err
1705				}
1706				agaso.Tags = tags
1707			}
1708		}
1709	}
1710
1711	return nil
1712}
1713
1714// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
1715// ApplicationGatewayAvailableSslOptions
1716type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
1717	// PredefinedPolicies - List of available Ssl predefined policy.
1718	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
1719	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
1720	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
1721	// AvailableCipherSuites - List of available Ssl cipher suites.
1722	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
1723	// AvailableProtocols - List of available Ssl protocols.
1724	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
1725}
1726
1727// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
1728// service call.
1729type ApplicationGatewayAvailableSslPredefinedPolicies struct {
1730	autorest.Response `json:"-"`
1731	// Value - List of available Ssl predefined policy.
1732	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
1733	// NextLink - URL to get the next set of results.
1734	NextLink *string `json:"nextLink,omitempty"`
1735}
1736
1737// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
1738// ApplicationGatewaySslPredefinedPolicy values.
1739type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
1740	i    int
1741	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
1742}
1743
1744// NextWithContext advances to the next value.  If there was an error making
1745// the request the iterator does not advance and the error is returned.
1746func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
1747	if tracing.IsEnabled() {
1748		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
1749		defer func() {
1750			sc := -1
1751			if iter.Response().Response.Response != nil {
1752				sc = iter.Response().Response.Response.StatusCode
1753			}
1754			tracing.EndSpan(ctx, sc, err)
1755		}()
1756	}
1757	iter.i++
1758	if iter.i < len(iter.page.Values()) {
1759		return nil
1760	}
1761	err = iter.page.NextWithContext(ctx)
1762	if err != nil {
1763		iter.i--
1764		return err
1765	}
1766	iter.i = 0
1767	return nil
1768}
1769
1770// Next advances to the next value.  If there was an error making
1771// the request the iterator does not advance and the error is returned.
1772// Deprecated: Use NextWithContext() instead.
1773func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
1774	return iter.NextWithContext(context.Background())
1775}
1776
1777// NotDone returns true if the enumeration should be started or is not yet complete.
1778func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
1779	return iter.page.NotDone() && iter.i < len(iter.page.Values())
1780}
1781
1782// Response returns the raw server response from the last page request.
1783func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
1784	return iter.page.Response()
1785}
1786
1787// Value returns the current value or a zero-initialized value if the
1788// iterator has advanced beyond the end of the collection.
1789func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
1790	if !iter.page.NotDone() {
1791		return ApplicationGatewaySslPredefinedPolicy{}
1792	}
1793	return iter.page.Values()[iter.i]
1794}
1795
1796// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
1797func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
1798	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
1799}
1800
1801// IsEmpty returns true if the ListResult contains no values.
1802func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
1803	return agaspp.Value == nil || len(*agaspp.Value) == 0
1804}
1805
1806// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
1807// It returns nil if no more results exist.
1808func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
1809	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
1810		return nil, nil
1811	}
1812	return autorest.Prepare((&http.Request{}).WithContext(ctx),
1813		autorest.AsJSON(),
1814		autorest.AsGet(),
1815		autorest.WithBaseURL(to.String(agaspp.NextLink)))
1816}
1817
1818// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
1819// ApplicationGatewaySslPredefinedPolicy values.
1820type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
1821	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
1822	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
1823}
1824
1825// NextWithContext advances to the next page of values.  If there was an error making
1826// the request the page does not advance and the error is returned.
1827func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
1828	if tracing.IsEnabled() {
1829		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
1830		defer func() {
1831			sc := -1
1832			if page.Response().Response.Response != nil {
1833				sc = page.Response().Response.Response.StatusCode
1834			}
1835			tracing.EndSpan(ctx, sc, err)
1836		}()
1837	}
1838	next, err := page.fn(ctx, page.agaspp)
1839	if err != nil {
1840		return err
1841	}
1842	page.agaspp = next
1843	return nil
1844}
1845
1846// Next advances to the next page of values.  If there was an error making
1847// the request the page does not advance and the error is returned.
1848// Deprecated: Use NextWithContext() instead.
1849func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
1850	return page.NextWithContext(context.Background())
1851}
1852
1853// NotDone returns true if the page enumeration should be started or is not yet complete.
1854func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
1855	return !page.agaspp.IsEmpty()
1856}
1857
1858// Response returns the raw server response from the last page request.
1859func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
1860	return page.agaspp
1861}
1862
1863// Values returns the slice of values for the current page or nil if there are no values.
1864func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
1865	if page.agaspp.IsEmpty() {
1866		return nil
1867	}
1868	return *page.agaspp.Value
1869}
1870
1871// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
1872func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
1873	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
1874}
1875
1876// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
1877// service call.
1878type ApplicationGatewayAvailableWafRuleSetsResult struct {
1879	autorest.Response `json:"-"`
1880	// Value - The list of application gateway rule sets.
1881	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
1882}
1883
1884// ApplicationGatewayBackendAddress backend address of an application gateway.
1885type ApplicationGatewayBackendAddress struct {
1886	// Fqdn - Fully qualified domain name (FQDN).
1887	Fqdn *string `json:"fqdn,omitempty"`
1888	// IPAddress - IP address
1889	IPAddress *string `json:"ipAddress,omitempty"`
1890}
1891
1892// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
1893type ApplicationGatewayBackendAddressPool struct {
1894	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
1895	// Name - Resource that is unique within a resource group. This name can be used to access the resource.
1896	Name *string `json:"name,omitempty"`
1897	// Etag - A unique read-only string that changes whenever the resource is updated.
1898	Etag *string `json:"etag,omitempty"`
1899	// Type - Type of the resource.
1900	Type *string `json:"type,omitempty"`
1901	// ID - Resource ID.
1902	ID *string `json:"id,omitempty"`
1903}
1904
1905// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
1906func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
1907	objectMap := make(map[string]interface{})
1908	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
1909		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
1910	}
1911	if agbap.Name != nil {
1912		objectMap["name"] = agbap.Name
1913	}
1914	if agbap.Etag != nil {
1915		objectMap["etag"] = agbap.Etag
1916	}
1917	if agbap.Type != nil {
1918		objectMap["type"] = agbap.Type
1919	}
1920	if agbap.ID != nil {
1921		objectMap["id"] = agbap.ID
1922	}
1923	return json.Marshal(objectMap)
1924}
1925
1926// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
1927func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
1928	var m map[string]*json.RawMessage
1929	err := json.Unmarshal(body, &m)
1930	if err != nil {
1931		return err
1932	}
1933	for k, v := range m {
1934		switch k {
1935		case "properties":
1936			if v != nil {
1937				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
1938				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
1939				if err != nil {
1940					return err
1941				}
1942				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
1943			}
1944		case "name":
1945			if v != nil {
1946				var name string
1947				err = json.Unmarshal(*v, &name)
1948				if err != nil {
1949					return err
1950				}
1951				agbap.Name = &name
1952			}
1953		case "etag":
1954			if v != nil {
1955				var etag string
1956				err = json.Unmarshal(*v, &etag)
1957				if err != nil {
1958					return err
1959				}
1960				agbap.Etag = &etag
1961			}
1962		case "type":
1963			if v != nil {
1964				var typeVar string
1965				err = json.Unmarshal(*v, &typeVar)
1966				if err != nil {
1967					return err
1968				}
1969				agbap.Type = &typeVar
1970			}
1971		case "id":
1972			if v != nil {
1973				var ID string
1974				err = json.Unmarshal(*v, &ID)
1975				if err != nil {
1976					return err
1977				}
1978				agbap.ID = &ID
1979			}
1980		}
1981	}
1982
1983	return nil
1984}
1985
1986// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
1987// application gateway.
1988type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
1989	// BackendIPConfigurations - Collection of references to IPs defined in network interfaces.
1990	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
1991	// BackendAddresses - Backend addresses
1992	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
1993	// ProvisioningState - Provisioning state of the backend address pool resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
1994	ProvisioningState *string `json:"provisioningState,omitempty"`
1995}
1996
1997// ApplicationGatewayBackendHealth list of ApplicationGatewayBackendHealthPool resources.
1998type ApplicationGatewayBackendHealth struct {
1999	autorest.Response   `json:"-"`
2000	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
2001}
2002
2003// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
2004type ApplicationGatewayBackendHealthHTTPSettings struct {
2005	// BackendHTTPSettings - Reference of an ApplicationGatewayBackendHttpSettings resource.
2006	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
2007	// Servers - List of ApplicationGatewayBackendHealthServer resources.
2008	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
2009}
2010
2011// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
2012type ApplicationGatewayBackendHealthPool struct {
2013	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2014	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2015	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
2016	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
2017}
2018
2019// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
2020type ApplicationGatewayBackendHealthServer struct {
2021	// Address - IP address or FQDN of backend server.
2022	Address *string `json:"address,omitempty"`
2023	// IPConfiguration - Reference of IP configuration of backend server.
2024	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
2025	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
2026	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
2027}
2028
2029// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
2030type ApplicationGatewayBackendHTTPSettings struct {
2031	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
2032	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2033	Name *string `json:"name,omitempty"`
2034	// Etag - A unique read-only string that changes whenever the resource is updated.
2035	Etag *string `json:"etag,omitempty"`
2036	// Type - Type of the resource.
2037	Type *string `json:"type,omitempty"`
2038	// ID - Resource ID.
2039	ID *string `json:"id,omitempty"`
2040}
2041
2042// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
2043func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
2044	objectMap := make(map[string]interface{})
2045	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
2046		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2047	}
2048	if agbhs.Name != nil {
2049		objectMap["name"] = agbhs.Name
2050	}
2051	if agbhs.Etag != nil {
2052		objectMap["etag"] = agbhs.Etag
2053	}
2054	if agbhs.Type != nil {
2055		objectMap["type"] = agbhs.Type
2056	}
2057	if agbhs.ID != nil {
2058		objectMap["id"] = agbhs.ID
2059	}
2060	return json.Marshal(objectMap)
2061}
2062
2063// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
2064func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
2065	var m map[string]*json.RawMessage
2066	err := json.Unmarshal(body, &m)
2067	if err != nil {
2068		return err
2069	}
2070	for k, v := range m {
2071		switch k {
2072		case "properties":
2073			if v != nil {
2074				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2075				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
2076				if err != nil {
2077					return err
2078				}
2079				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
2080			}
2081		case "name":
2082			if v != nil {
2083				var name string
2084				err = json.Unmarshal(*v, &name)
2085				if err != nil {
2086					return err
2087				}
2088				agbhs.Name = &name
2089			}
2090		case "etag":
2091			if v != nil {
2092				var etag string
2093				err = json.Unmarshal(*v, &etag)
2094				if err != nil {
2095					return err
2096				}
2097				agbhs.Etag = &etag
2098			}
2099		case "type":
2100			if v != nil {
2101				var typeVar string
2102				err = json.Unmarshal(*v, &typeVar)
2103				if err != nil {
2104					return err
2105				}
2106				agbhs.Type = &typeVar
2107			}
2108		case "id":
2109			if v != nil {
2110				var ID string
2111				err = json.Unmarshal(*v, &ID)
2112				if err != nil {
2113					return err
2114				}
2115				agbhs.ID = &ID
2116			}
2117		}
2118	}
2119
2120	return nil
2121}
2122
2123// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
2124// application gateway.
2125type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
2126	// Port - Port
2127	Port *int32 `json:"port,omitempty"`
2128	// Protocol - Protocol. Possible values include: 'HTTP', 'HTTPS'
2129	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2130	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
2131	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
2132	// 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.
2133	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
2134	// Probe - Probe resource of an application gateway.
2135	Probe *SubResource `json:"probe,omitempty"`
2136	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
2137	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
2138	// ConnectionDraining - Connection draining of the backend http settings resource.
2139	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
2140	// HostName - Host header to be sent to the backend servers.
2141	HostName *string `json:"hostName,omitempty"`
2142	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
2143	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
2144	// AffinityCookieName - Cookie name to use for the affinity cookie.
2145	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
2146	// ProbeEnabled - Whether the probe is enabled. Default value is false.
2147	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
2148	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
2149	Path *string `json:"path,omitempty"`
2150	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2151	ProvisioningState *string `json:"provisioningState,omitempty"`
2152}
2153
2154// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
2155// be active for a specified time after the backend server got removed from the configuration.
2156type ApplicationGatewayConnectionDraining struct {
2157	// Enabled - Whether connection draining is enabled or not.
2158	Enabled *bool `json:"enabled,omitempty"`
2159	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
2160	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
2161}
2162
2163// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
2164// rule group.
2165type ApplicationGatewayFirewallDisabledRuleGroup struct {
2166	// RuleGroupName - The name of the rule group that will be disabled.
2167	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2168	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
2169	Rules *[]int32 `json:"rules,omitempty"`
2170}
2171
2172// ApplicationGatewayFirewallRule a web application firewall rule.
2173type ApplicationGatewayFirewallRule struct {
2174	// RuleID - The identifier of the web application firewall rule.
2175	RuleID *int32 `json:"ruleId,omitempty"`
2176	// Description - The description of the web application firewall rule.
2177	Description *string `json:"description,omitempty"`
2178}
2179
2180// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
2181type ApplicationGatewayFirewallRuleGroup struct {
2182	// RuleGroupName - The name of the web application firewall rule group.
2183	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2184	// Description - The description of the web application firewall rule group.
2185	Description *string `json:"description,omitempty"`
2186	// Rules - The rules of the web application firewall rule group.
2187	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
2188}
2189
2190// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
2191type ApplicationGatewayFirewallRuleSet struct {
2192	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
2193	// ID - Resource ID.
2194	ID *string `json:"id,omitempty"`
2195	// Name - READ-ONLY; Resource name.
2196	Name *string `json:"name,omitempty"`
2197	// Type - READ-ONLY; Resource type.
2198	Type *string `json:"type,omitempty"`
2199	// Location - Resource location.
2200	Location *string `json:"location,omitempty"`
2201	// Tags - Resource tags.
2202	Tags map[string]*string `json:"tags"`
2203}
2204
2205// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
2206func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
2207	objectMap := make(map[string]interface{})
2208	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
2209		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
2210	}
2211	if agfrs.ID != nil {
2212		objectMap["id"] = agfrs.ID
2213	}
2214	if agfrs.Location != nil {
2215		objectMap["location"] = agfrs.Location
2216	}
2217	if agfrs.Tags != nil {
2218		objectMap["tags"] = agfrs.Tags
2219	}
2220	return json.Marshal(objectMap)
2221}
2222
2223// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
2224func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
2225	var m map[string]*json.RawMessage
2226	err := json.Unmarshal(body, &m)
2227	if err != nil {
2228		return err
2229	}
2230	for k, v := range m {
2231		switch k {
2232		case "properties":
2233			if v != nil {
2234				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
2235				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
2236				if err != nil {
2237					return err
2238				}
2239				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
2240			}
2241		case "id":
2242			if v != nil {
2243				var ID string
2244				err = json.Unmarshal(*v, &ID)
2245				if err != nil {
2246					return err
2247				}
2248				agfrs.ID = &ID
2249			}
2250		case "name":
2251			if v != nil {
2252				var name string
2253				err = json.Unmarshal(*v, &name)
2254				if err != nil {
2255					return err
2256				}
2257				agfrs.Name = &name
2258			}
2259		case "type":
2260			if v != nil {
2261				var typeVar string
2262				err = json.Unmarshal(*v, &typeVar)
2263				if err != nil {
2264					return err
2265				}
2266				agfrs.Type = &typeVar
2267			}
2268		case "location":
2269			if v != nil {
2270				var location string
2271				err = json.Unmarshal(*v, &location)
2272				if err != nil {
2273					return err
2274				}
2275				agfrs.Location = &location
2276			}
2277		case "tags":
2278			if v != nil {
2279				var tags map[string]*string
2280				err = json.Unmarshal(*v, &tags)
2281				if err != nil {
2282					return err
2283				}
2284				agfrs.Tags = tags
2285			}
2286		}
2287	}
2288
2289	return nil
2290}
2291
2292// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
2293type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
2294	// ProvisioningState - The provisioning state of the web application firewall rule set.
2295	ProvisioningState *string `json:"provisioningState,omitempty"`
2296	// RuleSetType - The type of the web application firewall rule set.
2297	RuleSetType *string `json:"ruleSetType,omitempty"`
2298	// RuleSetVersion - The version of the web application firewall rule set type.
2299	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
2300	// RuleGroups - The rule groups of the web application firewall rule set.
2301	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
2302}
2303
2304// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
2305type ApplicationGatewayFrontendIPConfiguration struct {
2306	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
2307	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2308	Name *string `json:"name,omitempty"`
2309	// Etag - A unique read-only string that changes whenever the resource is updated.
2310	Etag *string `json:"etag,omitempty"`
2311	// Type - Type of the resource.
2312	Type *string `json:"type,omitempty"`
2313	// ID - Resource ID.
2314	ID *string `json:"id,omitempty"`
2315}
2316
2317// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
2318func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
2319	objectMap := make(map[string]interface{})
2320	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
2321		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
2322	}
2323	if agfic.Name != nil {
2324		objectMap["name"] = agfic.Name
2325	}
2326	if agfic.Etag != nil {
2327		objectMap["etag"] = agfic.Etag
2328	}
2329	if agfic.Type != nil {
2330		objectMap["type"] = agfic.Type
2331	}
2332	if agfic.ID != nil {
2333		objectMap["id"] = agfic.ID
2334	}
2335	return json.Marshal(objectMap)
2336}
2337
2338// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
2339func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
2340	var m map[string]*json.RawMessage
2341	err := json.Unmarshal(body, &m)
2342	if err != nil {
2343		return err
2344	}
2345	for k, v := range m {
2346		switch k {
2347		case "properties":
2348			if v != nil {
2349				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
2350				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
2351				if err != nil {
2352					return err
2353				}
2354				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
2355			}
2356		case "name":
2357			if v != nil {
2358				var name string
2359				err = json.Unmarshal(*v, &name)
2360				if err != nil {
2361					return err
2362				}
2363				agfic.Name = &name
2364			}
2365		case "etag":
2366			if v != nil {
2367				var etag string
2368				err = json.Unmarshal(*v, &etag)
2369				if err != nil {
2370					return err
2371				}
2372				agfic.Etag = &etag
2373			}
2374		case "type":
2375			if v != nil {
2376				var typeVar string
2377				err = json.Unmarshal(*v, &typeVar)
2378				if err != nil {
2379					return err
2380				}
2381				agfic.Type = &typeVar
2382			}
2383		case "id":
2384			if v != nil {
2385				var ID string
2386				err = json.Unmarshal(*v, &ID)
2387				if err != nil {
2388					return err
2389				}
2390				agfic.ID = &ID
2391			}
2392		}
2393	}
2394
2395	return nil
2396}
2397
2398// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
2399// application gateway.
2400type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
2401	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
2402	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
2403	// PrivateIPAllocationMethod - PrivateIP allocation method. Possible values include: 'Static', 'Dynamic'
2404	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
2405	// Subnet - Reference of the subnet resource.
2406	Subnet *SubResource `json:"subnet,omitempty"`
2407	// PublicIPAddress - Reference of the PublicIP resource.
2408	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
2409	// ProvisioningState - Provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2410	ProvisioningState *string `json:"provisioningState,omitempty"`
2411}
2412
2413// ApplicationGatewayFrontendPort frontend port of an application gateway.
2414type ApplicationGatewayFrontendPort struct {
2415	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
2416	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2417	Name *string `json:"name,omitempty"`
2418	// Etag - A unique read-only string that changes whenever the resource is updated.
2419	Etag *string `json:"etag,omitempty"`
2420	// Type - Type of the resource.
2421	Type *string `json:"type,omitempty"`
2422	// ID - Resource ID.
2423	ID *string `json:"id,omitempty"`
2424}
2425
2426// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
2427func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
2428	objectMap := make(map[string]interface{})
2429	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
2430		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
2431	}
2432	if agfp.Name != nil {
2433		objectMap["name"] = agfp.Name
2434	}
2435	if agfp.Etag != nil {
2436		objectMap["etag"] = agfp.Etag
2437	}
2438	if agfp.Type != nil {
2439		objectMap["type"] = agfp.Type
2440	}
2441	if agfp.ID != nil {
2442		objectMap["id"] = agfp.ID
2443	}
2444	return json.Marshal(objectMap)
2445}
2446
2447// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
2448func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
2449	var m map[string]*json.RawMessage
2450	err := json.Unmarshal(body, &m)
2451	if err != nil {
2452		return err
2453	}
2454	for k, v := range m {
2455		switch k {
2456		case "properties":
2457			if v != nil {
2458				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
2459				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
2460				if err != nil {
2461					return err
2462				}
2463				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
2464			}
2465		case "name":
2466			if v != nil {
2467				var name string
2468				err = json.Unmarshal(*v, &name)
2469				if err != nil {
2470					return err
2471				}
2472				agfp.Name = &name
2473			}
2474		case "etag":
2475			if v != nil {
2476				var etag string
2477				err = json.Unmarshal(*v, &etag)
2478				if err != nil {
2479					return err
2480				}
2481				agfp.Etag = &etag
2482			}
2483		case "type":
2484			if v != nil {
2485				var typeVar string
2486				err = json.Unmarshal(*v, &typeVar)
2487				if err != nil {
2488					return err
2489				}
2490				agfp.Type = &typeVar
2491			}
2492		case "id":
2493			if v != nil {
2494				var ID string
2495				err = json.Unmarshal(*v, &ID)
2496				if err != nil {
2497					return err
2498				}
2499				agfp.ID = &ID
2500			}
2501		}
2502	}
2503
2504	return nil
2505}
2506
2507// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
2508type ApplicationGatewayFrontendPortPropertiesFormat struct {
2509	// Port - Frontend port
2510	Port *int32 `json:"port,omitempty"`
2511	// ProvisioningState - Provisioning state of the frontend port resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2512	ProvisioningState *string `json:"provisioningState,omitempty"`
2513}
2514
2515// ApplicationGatewayHTTPListener http listener of an application gateway.
2516type ApplicationGatewayHTTPListener struct {
2517	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
2518	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2519	Name *string `json:"name,omitempty"`
2520	// Etag - A unique read-only string that changes whenever the resource is updated.
2521	Etag *string `json:"etag,omitempty"`
2522	// Type - Type of the resource.
2523	Type *string `json:"type,omitempty"`
2524	// ID - Resource ID.
2525	ID *string `json:"id,omitempty"`
2526}
2527
2528// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
2529func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
2530	objectMap := make(map[string]interface{})
2531	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
2532		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
2533	}
2534	if aghl.Name != nil {
2535		objectMap["name"] = aghl.Name
2536	}
2537	if aghl.Etag != nil {
2538		objectMap["etag"] = aghl.Etag
2539	}
2540	if aghl.Type != nil {
2541		objectMap["type"] = aghl.Type
2542	}
2543	if aghl.ID != nil {
2544		objectMap["id"] = aghl.ID
2545	}
2546	return json.Marshal(objectMap)
2547}
2548
2549// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
2550func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
2551	var m map[string]*json.RawMessage
2552	err := json.Unmarshal(body, &m)
2553	if err != nil {
2554		return err
2555	}
2556	for k, v := range m {
2557		switch k {
2558		case "properties":
2559			if v != nil {
2560				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
2561				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
2562				if err != nil {
2563					return err
2564				}
2565				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
2566			}
2567		case "name":
2568			if v != nil {
2569				var name string
2570				err = json.Unmarshal(*v, &name)
2571				if err != nil {
2572					return err
2573				}
2574				aghl.Name = &name
2575			}
2576		case "etag":
2577			if v != nil {
2578				var etag string
2579				err = json.Unmarshal(*v, &etag)
2580				if err != nil {
2581					return err
2582				}
2583				aghl.Etag = &etag
2584			}
2585		case "type":
2586			if v != nil {
2587				var typeVar string
2588				err = json.Unmarshal(*v, &typeVar)
2589				if err != nil {
2590					return err
2591				}
2592				aghl.Type = &typeVar
2593			}
2594		case "id":
2595			if v != nil {
2596				var ID string
2597				err = json.Unmarshal(*v, &ID)
2598				if err != nil {
2599					return err
2600				}
2601				aghl.ID = &ID
2602			}
2603		}
2604	}
2605
2606	return nil
2607}
2608
2609// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
2610type ApplicationGatewayHTTPListenerPropertiesFormat struct {
2611	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
2612	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
2613	// FrontendPort - Frontend port resource of an application gateway.
2614	FrontendPort *SubResource `json:"frontendPort,omitempty"`
2615	// Protocol - Protocol. Possible values include: 'HTTP', 'HTTPS'
2616	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2617	// HostName - Host name of HTTP listener.
2618	HostName *string `json:"hostName,omitempty"`
2619	// SslCertificate - SSL certificate resource of an application gateway.
2620	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
2621	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
2622	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
2623	// ProvisioningState - Provisioning state of the HTTP listener resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2624	ProvisioningState *string `json:"provisioningState,omitempty"`
2625}
2626
2627// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
2628// private IP configuration is allowed.
2629type ApplicationGatewayIPConfiguration struct {
2630	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
2631	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2632	Name *string `json:"name,omitempty"`
2633	// Etag - A unique read-only string that changes whenever the resource is updated.
2634	Etag *string `json:"etag,omitempty"`
2635	// Type - Type of the resource.
2636	Type *string `json:"type,omitempty"`
2637	// ID - Resource ID.
2638	ID *string `json:"id,omitempty"`
2639}
2640
2641// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
2642func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
2643	objectMap := make(map[string]interface{})
2644	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
2645		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
2646	}
2647	if agic.Name != nil {
2648		objectMap["name"] = agic.Name
2649	}
2650	if agic.Etag != nil {
2651		objectMap["etag"] = agic.Etag
2652	}
2653	if agic.Type != nil {
2654		objectMap["type"] = agic.Type
2655	}
2656	if agic.ID != nil {
2657		objectMap["id"] = agic.ID
2658	}
2659	return json.Marshal(objectMap)
2660}
2661
2662// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
2663func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
2664	var m map[string]*json.RawMessage
2665	err := json.Unmarshal(body, &m)
2666	if err != nil {
2667		return err
2668	}
2669	for k, v := range m {
2670		switch k {
2671		case "properties":
2672			if v != nil {
2673				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
2674				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
2675				if err != nil {
2676					return err
2677				}
2678				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
2679			}
2680		case "name":
2681			if v != nil {
2682				var name string
2683				err = json.Unmarshal(*v, &name)
2684				if err != nil {
2685					return err
2686				}
2687				agic.Name = &name
2688			}
2689		case "etag":
2690			if v != nil {
2691				var etag string
2692				err = json.Unmarshal(*v, &etag)
2693				if err != nil {
2694					return err
2695				}
2696				agic.Etag = &etag
2697			}
2698		case "type":
2699			if v != nil {
2700				var typeVar string
2701				err = json.Unmarshal(*v, &typeVar)
2702				if err != nil {
2703					return err
2704				}
2705				agic.Type = &typeVar
2706			}
2707		case "id":
2708			if v != nil {
2709				var ID string
2710				err = json.Unmarshal(*v, &ID)
2711				if err != nil {
2712					return err
2713				}
2714				agic.ID = &ID
2715			}
2716		}
2717	}
2718
2719	return nil
2720}
2721
2722// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
2723// gateway.
2724type ApplicationGatewayIPConfigurationPropertiesFormat struct {
2725	// Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address.
2726	Subnet *SubResource `json:"subnet,omitempty"`
2727	// ProvisioningState - Provisioning state of the application gateway subnet resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2728	ProvisioningState *string `json:"provisioningState,omitempty"`
2729}
2730
2731// ApplicationGatewayListResult response for ListApplicationGateways API service call.
2732type ApplicationGatewayListResult struct {
2733	autorest.Response `json:"-"`
2734	// Value - List of an application gateways in a resource group.
2735	Value *[]ApplicationGateway `json:"value,omitempty"`
2736	// NextLink - URL to get the next set of results.
2737	NextLink *string `json:"nextLink,omitempty"`
2738}
2739
2740// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
2741type ApplicationGatewayListResultIterator struct {
2742	i    int
2743	page ApplicationGatewayListResultPage
2744}
2745
2746// NextWithContext advances to the next value.  If there was an error making
2747// the request the iterator does not advance and the error is returned.
2748func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
2749	if tracing.IsEnabled() {
2750		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
2751		defer func() {
2752			sc := -1
2753			if iter.Response().Response.Response != nil {
2754				sc = iter.Response().Response.Response.StatusCode
2755			}
2756			tracing.EndSpan(ctx, sc, err)
2757		}()
2758	}
2759	iter.i++
2760	if iter.i < len(iter.page.Values()) {
2761		return nil
2762	}
2763	err = iter.page.NextWithContext(ctx)
2764	if err != nil {
2765		iter.i--
2766		return err
2767	}
2768	iter.i = 0
2769	return nil
2770}
2771
2772// Next advances to the next value.  If there was an error making
2773// the request the iterator does not advance and the error is returned.
2774// Deprecated: Use NextWithContext() instead.
2775func (iter *ApplicationGatewayListResultIterator) Next() error {
2776	return iter.NextWithContext(context.Background())
2777}
2778
2779// NotDone returns true if the enumeration should be started or is not yet complete.
2780func (iter ApplicationGatewayListResultIterator) NotDone() bool {
2781	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2782}
2783
2784// Response returns the raw server response from the last page request.
2785func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
2786	return iter.page.Response()
2787}
2788
2789// Value returns the current value or a zero-initialized value if the
2790// iterator has advanced beyond the end of the collection.
2791func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
2792	if !iter.page.NotDone() {
2793		return ApplicationGateway{}
2794	}
2795	return iter.page.Values()[iter.i]
2796}
2797
2798// Creates a new instance of the ApplicationGatewayListResultIterator type.
2799func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
2800	return ApplicationGatewayListResultIterator{page: page}
2801}
2802
2803// IsEmpty returns true if the ListResult contains no values.
2804func (aglr ApplicationGatewayListResult) IsEmpty() bool {
2805	return aglr.Value == nil || len(*aglr.Value) == 0
2806}
2807
2808// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
2809// It returns nil if no more results exist.
2810func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
2811	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
2812		return nil, nil
2813	}
2814	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2815		autorest.AsJSON(),
2816		autorest.AsGet(),
2817		autorest.WithBaseURL(to.String(aglr.NextLink)))
2818}
2819
2820// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
2821type ApplicationGatewayListResultPage struct {
2822	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
2823	aglr ApplicationGatewayListResult
2824}
2825
2826// NextWithContext advances to the next page of values.  If there was an error making
2827// the request the page does not advance and the error is returned.
2828func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
2829	if tracing.IsEnabled() {
2830		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
2831		defer func() {
2832			sc := -1
2833			if page.Response().Response.Response != nil {
2834				sc = page.Response().Response.Response.StatusCode
2835			}
2836			tracing.EndSpan(ctx, sc, err)
2837		}()
2838	}
2839	next, err := page.fn(ctx, page.aglr)
2840	if err != nil {
2841		return err
2842	}
2843	page.aglr = next
2844	return nil
2845}
2846
2847// Next advances to the next page of values.  If there was an error making
2848// the request the page does not advance and the error is returned.
2849// Deprecated: Use NextWithContext() instead.
2850func (page *ApplicationGatewayListResultPage) Next() error {
2851	return page.NextWithContext(context.Background())
2852}
2853
2854// NotDone returns true if the page enumeration should be started or is not yet complete.
2855func (page ApplicationGatewayListResultPage) NotDone() bool {
2856	return !page.aglr.IsEmpty()
2857}
2858
2859// Response returns the raw server response from the last page request.
2860func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
2861	return page.aglr
2862}
2863
2864// Values returns the slice of values for the current page or nil if there are no values.
2865func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
2866	if page.aglr.IsEmpty() {
2867		return nil
2868	}
2869	return *page.aglr.Value
2870}
2871
2872// Creates a new instance of the ApplicationGatewayListResultPage type.
2873func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
2874	return ApplicationGatewayListResultPage{fn: getNextPage}
2875}
2876
2877// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
2878type ApplicationGatewayPathRule struct {
2879	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
2880	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2881	Name *string `json:"name,omitempty"`
2882	// Etag - A unique read-only string that changes whenever the resource is updated.
2883	Etag *string `json:"etag,omitempty"`
2884	// Type - Type of the resource.
2885	Type *string `json:"type,omitempty"`
2886	// ID - Resource ID.
2887	ID *string `json:"id,omitempty"`
2888}
2889
2890// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
2891func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
2892	objectMap := make(map[string]interface{})
2893	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
2894		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
2895	}
2896	if agpr.Name != nil {
2897		objectMap["name"] = agpr.Name
2898	}
2899	if agpr.Etag != nil {
2900		objectMap["etag"] = agpr.Etag
2901	}
2902	if agpr.Type != nil {
2903		objectMap["type"] = agpr.Type
2904	}
2905	if agpr.ID != nil {
2906		objectMap["id"] = agpr.ID
2907	}
2908	return json.Marshal(objectMap)
2909}
2910
2911// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
2912func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
2913	var m map[string]*json.RawMessage
2914	err := json.Unmarshal(body, &m)
2915	if err != nil {
2916		return err
2917	}
2918	for k, v := range m {
2919		switch k {
2920		case "properties":
2921			if v != nil {
2922				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
2923				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
2924				if err != nil {
2925					return err
2926				}
2927				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
2928			}
2929		case "name":
2930			if v != nil {
2931				var name string
2932				err = json.Unmarshal(*v, &name)
2933				if err != nil {
2934					return err
2935				}
2936				agpr.Name = &name
2937			}
2938		case "etag":
2939			if v != nil {
2940				var etag string
2941				err = json.Unmarshal(*v, &etag)
2942				if err != nil {
2943					return err
2944				}
2945				agpr.Etag = &etag
2946			}
2947		case "type":
2948			if v != nil {
2949				var typeVar string
2950				err = json.Unmarshal(*v, &typeVar)
2951				if err != nil {
2952					return err
2953				}
2954				agpr.Type = &typeVar
2955			}
2956		case "id":
2957			if v != nil {
2958				var ID string
2959				err = json.Unmarshal(*v, &ID)
2960				if err != nil {
2961					return err
2962				}
2963				agpr.ID = &ID
2964			}
2965		}
2966	}
2967
2968	return nil
2969}
2970
2971// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
2972type ApplicationGatewayPathRulePropertiesFormat struct {
2973	// Paths - Path rules of URL path map.
2974	Paths *[]string `json:"paths,omitempty"`
2975	// BackendAddressPool - Backend address pool resource of URL path map path rule.
2976	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
2977	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
2978	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
2979	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
2980	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
2981	// ProvisioningState - Path rule of URL path map resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2982	ProvisioningState *string `json:"provisioningState,omitempty"`
2983}
2984
2985// ApplicationGatewayProbe probe of the application gateway.
2986type ApplicationGatewayProbe struct {
2987	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
2988	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2989	Name *string `json:"name,omitempty"`
2990	// Etag - A unique read-only string that changes whenever the resource is updated.
2991	Etag *string `json:"etag,omitempty"`
2992	// Type - Type of the resource.
2993	Type *string `json:"type,omitempty"`
2994	// ID - Resource ID.
2995	ID *string `json:"id,omitempty"`
2996}
2997
2998// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
2999func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
3000	objectMap := make(map[string]interface{})
3001	if agp.ApplicationGatewayProbePropertiesFormat != nil {
3002		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
3003	}
3004	if agp.Name != nil {
3005		objectMap["name"] = agp.Name
3006	}
3007	if agp.Etag != nil {
3008		objectMap["etag"] = agp.Etag
3009	}
3010	if agp.Type != nil {
3011		objectMap["type"] = agp.Type
3012	}
3013	if agp.ID != nil {
3014		objectMap["id"] = agp.ID
3015	}
3016	return json.Marshal(objectMap)
3017}
3018
3019// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
3020func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
3021	var m map[string]*json.RawMessage
3022	err := json.Unmarshal(body, &m)
3023	if err != nil {
3024		return err
3025	}
3026	for k, v := range m {
3027		switch k {
3028		case "properties":
3029			if v != nil {
3030				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
3031				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
3032				if err != nil {
3033					return err
3034				}
3035				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
3036			}
3037		case "name":
3038			if v != nil {
3039				var name string
3040				err = json.Unmarshal(*v, &name)
3041				if err != nil {
3042					return err
3043				}
3044				agp.Name = &name
3045			}
3046		case "etag":
3047			if v != nil {
3048				var etag string
3049				err = json.Unmarshal(*v, &etag)
3050				if err != nil {
3051					return err
3052				}
3053				agp.Etag = &etag
3054			}
3055		case "type":
3056			if v != nil {
3057				var typeVar string
3058				err = json.Unmarshal(*v, &typeVar)
3059				if err != nil {
3060					return err
3061				}
3062				agp.Type = &typeVar
3063			}
3064		case "id":
3065			if v != nil {
3066				var ID string
3067				err = json.Unmarshal(*v, &ID)
3068				if err != nil {
3069					return err
3070				}
3071				agp.ID = &ID
3072			}
3073		}
3074	}
3075
3076	return nil
3077}
3078
3079// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match
3080type ApplicationGatewayProbeHealthResponseMatch struct {
3081	// Body - Body that must be contained in the health response. Default value is empty.
3082	Body *string `json:"body,omitempty"`
3083	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
3084	StatusCodes *[]string `json:"statusCodes,omitempty"`
3085}
3086
3087// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
3088type ApplicationGatewayProbePropertiesFormat struct {
3089	// Protocol - Protocol. Possible values include: 'HTTP', 'HTTPS'
3090	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3091	// Host - Host name to send the probe to.
3092	Host *string `json:"host,omitempty"`
3093	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>
3094	Path *string `json:"path,omitempty"`
3095	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
3096	Interval *int32 `json:"interval,omitempty"`
3097	// 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.
3098	Timeout *int32 `json:"timeout,omitempty"`
3099	// 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.
3100	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
3101	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3102	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3103	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
3104	MinServers *int32 `json:"minServers,omitempty"`
3105	// Match - Criterion for classifying a healthy probe response.
3106	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3107	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3108	ProvisioningState *string `json:"provisioningState,omitempty"`
3109}
3110
3111// ApplicationGatewayPropertiesFormat properties of the application gateway.
3112type ApplicationGatewayPropertiesFormat struct {
3113	// Sku - SKU of the application gateway resource.
3114	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
3115	// SslPolicy - SSL policy of the application gateway resource.
3116	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
3117	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
3118	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
3119	// GatewayIPConfigurations - Subnets of application the gateway resource.
3120	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
3121	// AuthenticationCertificates - Authentication certificates of the application gateway resource.
3122	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
3123	// SslCertificates - SSL certificates of the application gateway resource.
3124	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
3125	// FrontendIPConfigurations - Frontend IP addresses of the application gateway resource.
3126	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
3127	// FrontendPorts - Frontend ports of the application gateway resource.
3128	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
3129	// Probes - Probes of the application gateway resource.
3130	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
3131	// BackendAddressPools - Backend address pool of the application gateway resource.
3132	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
3133	// BackendHTTPSettingsCollection - Backend http settings of the application gateway resource.
3134	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
3135	// HTTPListeners - Http listeners of the application gateway resource.
3136	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
3137	// URLPathMaps - URL path map of the application gateway resource.
3138	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
3139	// RequestRoutingRules - Request routing rules of the application gateway resource.
3140	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
3141	// RedirectConfigurations - Redirect configurations of the application gateway resource.
3142	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
3143	// WebApplicationFirewallConfiguration - Web application firewall configuration.
3144	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
3145	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
3146	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
3147	// ResourceGUID - Resource GUID property of the application gateway resource.
3148	ResourceGUID *string `json:"resourceGuid,omitempty"`
3149	// ProvisioningState - Provisioning state of the application gateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3150	ProvisioningState *string `json:"provisioningState,omitempty"`
3151}
3152
3153// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
3154type ApplicationGatewayRedirectConfiguration struct {
3155	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
3156	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
3157	Name *string `json:"name,omitempty"`
3158	// Etag - A unique read-only string that changes whenever the resource is updated.
3159	Etag *string `json:"etag,omitempty"`
3160	// Type - Type of the resource.
3161	Type *string `json:"type,omitempty"`
3162	// ID - Resource ID.
3163	ID *string `json:"id,omitempty"`
3164}
3165
3166// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
3167func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
3168	objectMap := make(map[string]interface{})
3169	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
3170		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
3171	}
3172	if agrc.Name != nil {
3173		objectMap["name"] = agrc.Name
3174	}
3175	if agrc.Etag != nil {
3176		objectMap["etag"] = agrc.Etag
3177	}
3178	if agrc.Type != nil {
3179		objectMap["type"] = agrc.Type
3180	}
3181	if agrc.ID != nil {
3182		objectMap["id"] = agrc.ID
3183	}
3184	return json.Marshal(objectMap)
3185}
3186
3187// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
3188func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
3189	var m map[string]*json.RawMessage
3190	err := json.Unmarshal(body, &m)
3191	if err != nil {
3192		return err
3193	}
3194	for k, v := range m {
3195		switch k {
3196		case "properties":
3197			if v != nil {
3198				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
3199				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
3200				if err != nil {
3201					return err
3202				}
3203				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
3204			}
3205		case "name":
3206			if v != nil {
3207				var name string
3208				err = json.Unmarshal(*v, &name)
3209				if err != nil {
3210					return err
3211				}
3212				agrc.Name = &name
3213			}
3214		case "etag":
3215			if v != nil {
3216				var etag string
3217				err = json.Unmarshal(*v, &etag)
3218				if err != nil {
3219					return err
3220				}
3221				agrc.Etag = &etag
3222			}
3223		case "type":
3224			if v != nil {
3225				var typeVar string
3226				err = json.Unmarshal(*v, &typeVar)
3227				if err != nil {
3228					return err
3229				}
3230				agrc.Type = &typeVar
3231			}
3232		case "id":
3233			if v != nil {
3234				var ID string
3235				err = json.Unmarshal(*v, &ID)
3236				if err != nil {
3237					return err
3238				}
3239				agrc.ID = &ID
3240			}
3241		}
3242	}
3243
3244	return nil
3245}
3246
3247// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
3248// application gateway.
3249type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
3250	// RedirectType - Supported http redirection types - Permanent, Temporary, Found, SeeOther. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
3251	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
3252	// TargetListener - Reference to a listener to redirect the request to.
3253	TargetListener *SubResource `json:"targetListener,omitempty"`
3254	// TargetURL - Url to redirect the request to.
3255	TargetURL *string `json:"targetUrl,omitempty"`
3256	// IncludePath - Include path in the redirected url.
3257	IncludePath *bool `json:"includePath,omitempty"`
3258	// IncludeQueryString - Include query string in the redirected url.
3259	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
3260	// RequestRoutingRules - Request routing specifying redirect configuration.
3261	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
3262	// URLPathMaps - Url path maps specifying default redirect configuration.
3263	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
3264	// PathRules - Path rules specifying redirect configuration.
3265	PathRules *[]SubResource `json:"pathRules,omitempty"`
3266}
3267
3268// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
3269type ApplicationGatewayRequestRoutingRule struct {
3270	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
3271	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
3272	Name *string `json:"name,omitempty"`
3273	// Etag - A unique read-only string that changes whenever the resource is updated.
3274	Etag *string `json:"etag,omitempty"`
3275	// Type - Type of the resource.
3276	Type *string `json:"type,omitempty"`
3277	// ID - Resource ID.
3278	ID *string `json:"id,omitempty"`
3279}
3280
3281// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
3282func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
3283	objectMap := make(map[string]interface{})
3284	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
3285		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
3286	}
3287	if agrrr.Name != nil {
3288		objectMap["name"] = agrrr.Name
3289	}
3290	if agrrr.Etag != nil {
3291		objectMap["etag"] = agrrr.Etag
3292	}
3293	if agrrr.Type != nil {
3294		objectMap["type"] = agrrr.Type
3295	}
3296	if agrrr.ID != nil {
3297		objectMap["id"] = agrrr.ID
3298	}
3299	return json.Marshal(objectMap)
3300}
3301
3302// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
3303func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
3304	var m map[string]*json.RawMessage
3305	err := json.Unmarshal(body, &m)
3306	if err != nil {
3307		return err
3308	}
3309	for k, v := range m {
3310		switch k {
3311		case "properties":
3312			if v != nil {
3313				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
3314				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
3315				if err != nil {
3316					return err
3317				}
3318				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
3319			}
3320		case "name":
3321			if v != nil {
3322				var name string
3323				err = json.Unmarshal(*v, &name)
3324				if err != nil {
3325					return err
3326				}
3327				agrrr.Name = &name
3328			}
3329		case "etag":
3330			if v != nil {
3331				var etag string
3332				err = json.Unmarshal(*v, &etag)
3333				if err != nil {
3334					return err
3335				}
3336				agrrr.Etag = &etag
3337			}
3338		case "type":
3339			if v != nil {
3340				var typeVar string
3341				err = json.Unmarshal(*v, &typeVar)
3342				if err != nil {
3343					return err
3344				}
3345				agrrr.Type = &typeVar
3346			}
3347		case "id":
3348			if v != nil {
3349				var ID string
3350				err = json.Unmarshal(*v, &ID)
3351				if err != nil {
3352					return err
3353				}
3354				agrrr.ID = &ID
3355			}
3356		}
3357	}
3358
3359	return nil
3360}
3361
3362// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
3363// application gateway.
3364type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
3365	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
3366	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
3367	// BackendAddressPool - Backend address pool resource of the application gateway.
3368	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3369	// BackendHTTPSettings - Frontend port resource of the application gateway.
3370	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3371	// HTTPListener - Http listener resource of the application gateway.
3372	HTTPListener *SubResource `json:"httpListener,omitempty"`
3373	// URLPathMap - URL path map resource of the application gateway.
3374	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
3375	// RedirectConfiguration - Redirect configuration resource of the application gateway.
3376	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3377	// ProvisioningState - Provisioning state of the request routing rule resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3378	ProvisioningState *string `json:"provisioningState,omitempty"`
3379}
3380
3381// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
3382// long-running operation.
3383type ApplicationGatewaysBackendHealthFuture struct {
3384	azure.Future
3385}
3386
3387// Result returns the result of the asynchronous operation.
3388// If the operation has not completed it will return an error.
3389func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
3390	var done bool
3391	done, err = future.DoneWithContext(context.Background(), client)
3392	if err != nil {
3393		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
3394		return
3395	}
3396	if !done {
3397		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
3398		return
3399	}
3400	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3401	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
3402		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
3403		if err != nil {
3404			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
3405		}
3406	}
3407	return
3408}
3409
3410// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
3411// long-running operation.
3412type ApplicationGatewaysCreateOrUpdateFuture struct {
3413	azure.Future
3414}
3415
3416// Result returns the result of the asynchronous operation.
3417// If the operation has not completed it will return an error.
3418func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
3419	var done bool
3420	done, err = future.DoneWithContext(context.Background(), client)
3421	if err != nil {
3422		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
3423		return
3424	}
3425	if !done {
3426		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
3427		return
3428	}
3429	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3430	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
3431		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
3432		if err != nil {
3433			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
3434		}
3435	}
3436	return
3437}
3438
3439// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
3440// long-running operation.
3441type ApplicationGatewaysDeleteFuture struct {
3442	azure.Future
3443}
3444
3445// Result returns the result of the asynchronous operation.
3446// If the operation has not completed it will return an error.
3447func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
3448	var done bool
3449	done, err = future.DoneWithContext(context.Background(), client)
3450	if err != nil {
3451		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
3452		return
3453	}
3454	if !done {
3455		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
3456		return
3457	}
3458	ar.Response = future.Response()
3459	return
3460}
3461
3462// ApplicationGatewaySku SKU of an application gateway
3463type ApplicationGatewaySku struct {
3464	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge'
3465	Name ApplicationGatewaySkuName `json:"name,omitempty"`
3466	// Tier - Tier of an application gateway. Possible values include: 'Standard', 'WAF'
3467	Tier ApplicationGatewayTier `json:"tier,omitempty"`
3468	// Capacity - Capacity (instance count) of an application gateway.
3469	Capacity *int32 `json:"capacity,omitempty"`
3470}
3471
3472// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
3473type ApplicationGatewaySslCertificate struct {
3474	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
3475	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
3476	Name *string `json:"name,omitempty"`
3477	// Etag - A unique read-only string that changes whenever the resource is updated.
3478	Etag *string `json:"etag,omitempty"`
3479	// Type - Type of the resource.
3480	Type *string `json:"type,omitempty"`
3481	// ID - Resource ID.
3482	ID *string `json:"id,omitempty"`
3483}
3484
3485// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
3486func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
3487	objectMap := make(map[string]interface{})
3488	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
3489		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
3490	}
3491	if agsc.Name != nil {
3492		objectMap["name"] = agsc.Name
3493	}
3494	if agsc.Etag != nil {
3495		objectMap["etag"] = agsc.Etag
3496	}
3497	if agsc.Type != nil {
3498		objectMap["type"] = agsc.Type
3499	}
3500	if agsc.ID != nil {
3501		objectMap["id"] = agsc.ID
3502	}
3503	return json.Marshal(objectMap)
3504}
3505
3506// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
3507func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
3508	var m map[string]*json.RawMessage
3509	err := json.Unmarshal(body, &m)
3510	if err != nil {
3511		return err
3512	}
3513	for k, v := range m {
3514		switch k {
3515		case "properties":
3516			if v != nil {
3517				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
3518				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
3519				if err != nil {
3520					return err
3521				}
3522				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
3523			}
3524		case "name":
3525			if v != nil {
3526				var name string
3527				err = json.Unmarshal(*v, &name)
3528				if err != nil {
3529					return err
3530				}
3531				agsc.Name = &name
3532			}
3533		case "etag":
3534			if v != nil {
3535				var etag string
3536				err = json.Unmarshal(*v, &etag)
3537				if err != nil {
3538					return err
3539				}
3540				agsc.Etag = &etag
3541			}
3542		case "type":
3543			if v != nil {
3544				var typeVar string
3545				err = json.Unmarshal(*v, &typeVar)
3546				if err != nil {
3547					return err
3548				}
3549				agsc.Type = &typeVar
3550			}
3551		case "id":
3552			if v != nil {
3553				var ID string
3554				err = json.Unmarshal(*v, &ID)
3555				if err != nil {
3556					return err
3557				}
3558				agsc.ID = &ID
3559			}
3560		}
3561	}
3562
3563	return nil
3564}
3565
3566// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
3567// gateway.
3568type ApplicationGatewaySslCertificatePropertiesFormat struct {
3569	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
3570	Data *string `json:"data,omitempty"`
3571	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
3572	Password *string `json:"password,omitempty"`
3573	// PublicCertData - Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
3574	PublicCertData *string `json:"publicCertData,omitempty"`
3575	// ProvisioningState - Provisioning state of the SSL certificate resource Possible values are: 'Updating', 'Deleting', and 'Failed'.
3576	ProvisioningState *string `json:"provisioningState,omitempty"`
3577}
3578
3579// ApplicationGatewaySslPolicy application Gateway Ssl policy.
3580type ApplicationGatewaySslPolicy struct {
3581	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
3582	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
3583	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
3584	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
3585	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
3586	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
3587	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
3588	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
3589	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
3590	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
3591}
3592
3593// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy
3594type ApplicationGatewaySslPredefinedPolicy struct {
3595	autorest.Response `json:"-"`
3596	// Name - Name of Ssl predefined policy.
3597	Name                                                   *string `json:"name,omitempty"`
3598	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
3599	// ID - Resource ID.
3600	ID *string `json:"id,omitempty"`
3601}
3602
3603// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
3604func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
3605	objectMap := make(map[string]interface{})
3606	if agspp.Name != nil {
3607		objectMap["name"] = agspp.Name
3608	}
3609	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
3610		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
3611	}
3612	if agspp.ID != nil {
3613		objectMap["id"] = agspp.ID
3614	}
3615	return json.Marshal(objectMap)
3616}
3617
3618// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
3619func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
3620	var m map[string]*json.RawMessage
3621	err := json.Unmarshal(body, &m)
3622	if err != nil {
3623		return err
3624	}
3625	for k, v := range m {
3626		switch k {
3627		case "name":
3628			if v != nil {
3629				var name string
3630				err = json.Unmarshal(*v, &name)
3631				if err != nil {
3632					return err
3633				}
3634				agspp.Name = &name
3635			}
3636		case "properties":
3637			if v != nil {
3638				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
3639				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
3640				if err != nil {
3641					return err
3642				}
3643				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
3644			}
3645		case "id":
3646			if v != nil {
3647				var ID string
3648				err = json.Unmarshal(*v, &ID)
3649				if err != nil {
3650					return err
3651				}
3652				agspp.ID = &ID
3653			}
3654		}
3655	}
3656
3657	return nil
3658}
3659
3660// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
3661// ApplicationGatewaySslPredefinedPolicy
3662type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
3663	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
3664	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
3665	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
3666	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
3667}
3668
3669// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
3670// long-running operation.
3671type ApplicationGatewaysStartFuture struct {
3672	azure.Future
3673}
3674
3675// Result returns the result of the asynchronous operation.
3676// If the operation has not completed it will return an error.
3677func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
3678	var done bool
3679	done, err = future.DoneWithContext(context.Background(), client)
3680	if err != nil {
3681		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
3682		return
3683	}
3684	if !done {
3685		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
3686		return
3687	}
3688	ar.Response = future.Response()
3689	return
3690}
3691
3692// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
3693// operation.
3694type ApplicationGatewaysStopFuture struct {
3695	azure.Future
3696}
3697
3698// Result returns the result of the asynchronous operation.
3699// If the operation has not completed it will return an error.
3700func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
3701	var done bool
3702	done, err = future.DoneWithContext(context.Background(), client)
3703	if err != nil {
3704		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
3705		return
3706	}
3707	if !done {
3708		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
3709		return
3710	}
3711	ar.Response = future.Response()
3712	return
3713}
3714
3715// ApplicationGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
3716// long-running operation.
3717type ApplicationGatewaysUpdateTagsFuture struct {
3718	azure.Future
3719}
3720
3721// Result returns the result of the asynchronous operation.
3722// If the operation has not completed it will return an error.
3723func (future *ApplicationGatewaysUpdateTagsFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
3724	var done bool
3725	done, err = future.DoneWithContext(context.Background(), client)
3726	if err != nil {
3727		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
3728		return
3729	}
3730	if !done {
3731		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysUpdateTagsFuture")
3732		return
3733	}
3734	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3735	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
3736		ag, err = client.UpdateTagsResponder(ag.Response.Response)
3737		if err != nil {
3738			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", ag.Response.Response, "Failure responding to request")
3739		}
3740	}
3741	return
3742}
3743
3744// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
3745// PathBasedRouting.
3746type ApplicationGatewayURLPathMap struct {
3747	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
3748	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
3749	Name *string `json:"name,omitempty"`
3750	// Etag - A unique read-only string that changes whenever the resource is updated.
3751	Etag *string `json:"etag,omitempty"`
3752	// Type - Type of the resource.
3753	Type *string `json:"type,omitempty"`
3754	// ID - Resource ID.
3755	ID *string `json:"id,omitempty"`
3756}
3757
3758// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
3759func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
3760	objectMap := make(map[string]interface{})
3761	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
3762		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
3763	}
3764	if agupm.Name != nil {
3765		objectMap["name"] = agupm.Name
3766	}
3767	if agupm.Etag != nil {
3768		objectMap["etag"] = agupm.Etag
3769	}
3770	if agupm.Type != nil {
3771		objectMap["type"] = agupm.Type
3772	}
3773	if agupm.ID != nil {
3774		objectMap["id"] = agupm.ID
3775	}
3776	return json.Marshal(objectMap)
3777}
3778
3779// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
3780func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
3781	var m map[string]*json.RawMessage
3782	err := json.Unmarshal(body, &m)
3783	if err != nil {
3784		return err
3785	}
3786	for k, v := range m {
3787		switch k {
3788		case "properties":
3789			if v != nil {
3790				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
3791				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
3792				if err != nil {
3793					return err
3794				}
3795				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
3796			}
3797		case "name":
3798			if v != nil {
3799				var name string
3800				err = json.Unmarshal(*v, &name)
3801				if err != nil {
3802					return err
3803				}
3804				agupm.Name = &name
3805			}
3806		case "etag":
3807			if v != nil {
3808				var etag string
3809				err = json.Unmarshal(*v, &etag)
3810				if err != nil {
3811					return err
3812				}
3813				agupm.Etag = &etag
3814			}
3815		case "type":
3816			if v != nil {
3817				var typeVar string
3818				err = json.Unmarshal(*v, &typeVar)
3819				if err != nil {
3820					return err
3821				}
3822				agupm.Type = &typeVar
3823			}
3824		case "id":
3825			if v != nil {
3826				var ID string
3827				err = json.Unmarshal(*v, &ID)
3828				if err != nil {
3829					return err
3830				}
3831				agupm.ID = &ID
3832			}
3833		}
3834	}
3835
3836	return nil
3837}
3838
3839// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
3840type ApplicationGatewayURLPathMapPropertiesFormat struct {
3841	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
3842	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
3843	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
3844	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
3845	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
3846	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
3847	// PathRules - Path rule of URL path map resource.
3848	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
3849	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3850	ProvisioningState *string `json:"provisioningState,omitempty"`
3851}
3852
3853// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
3854// configuration.
3855type ApplicationGatewayWebApplicationFirewallConfiguration struct {
3856	// Enabled - Whether the web application firewall is enabled or not.
3857	Enabled *bool `json:"enabled,omitempty"`
3858	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
3859	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
3860	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
3861	RuleSetType *string `json:"ruleSetType,omitempty"`
3862	// RuleSetVersion - The version of the rule set type.
3863	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
3864	// DisabledRuleGroups - The disabled rule groups.
3865	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
3866	// RequestBodyCheck - Whether allow WAF to check request Body.
3867	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
3868	// MaxRequestBodySize - Maximum request body size for WAF.
3869	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
3870}
3871
3872// ApplicationSecurityGroup an application security group in a resource group.
3873type ApplicationSecurityGroup struct {
3874	autorest.Response `json:"-"`
3875	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
3876	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
3877	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3878	Etag *string `json:"etag,omitempty"`
3879	// ID - Resource ID.
3880	ID *string `json:"id,omitempty"`
3881	// Name - READ-ONLY; Resource name.
3882	Name *string `json:"name,omitempty"`
3883	// Type - READ-ONLY; Resource type.
3884	Type *string `json:"type,omitempty"`
3885	// Location - Resource location.
3886	Location *string `json:"location,omitempty"`
3887	// Tags - Resource tags.
3888	Tags map[string]*string `json:"tags"`
3889}
3890
3891// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
3892func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
3893	objectMap := make(map[string]interface{})
3894	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
3895		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
3896	}
3897	if asg.ID != nil {
3898		objectMap["id"] = asg.ID
3899	}
3900	if asg.Location != nil {
3901		objectMap["location"] = asg.Location
3902	}
3903	if asg.Tags != nil {
3904		objectMap["tags"] = asg.Tags
3905	}
3906	return json.Marshal(objectMap)
3907}
3908
3909// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
3910func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
3911	var m map[string]*json.RawMessage
3912	err := json.Unmarshal(body, &m)
3913	if err != nil {
3914		return err
3915	}
3916	for k, v := range m {
3917		switch k {
3918		case "properties":
3919			if v != nil {
3920				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
3921				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
3922				if err != nil {
3923					return err
3924				}
3925				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
3926			}
3927		case "etag":
3928			if v != nil {
3929				var etag string
3930				err = json.Unmarshal(*v, &etag)
3931				if err != nil {
3932					return err
3933				}
3934				asg.Etag = &etag
3935			}
3936		case "id":
3937			if v != nil {
3938				var ID string
3939				err = json.Unmarshal(*v, &ID)
3940				if err != nil {
3941					return err
3942				}
3943				asg.ID = &ID
3944			}
3945		case "name":
3946			if v != nil {
3947				var name string
3948				err = json.Unmarshal(*v, &name)
3949				if err != nil {
3950					return err
3951				}
3952				asg.Name = &name
3953			}
3954		case "type":
3955			if v != nil {
3956				var typeVar string
3957				err = json.Unmarshal(*v, &typeVar)
3958				if err != nil {
3959					return err
3960				}
3961				asg.Type = &typeVar
3962			}
3963		case "location":
3964			if v != nil {
3965				var location string
3966				err = json.Unmarshal(*v, &location)
3967				if err != nil {
3968					return err
3969				}
3970				asg.Location = &location
3971			}
3972		case "tags":
3973			if v != nil {
3974				var tags map[string]*string
3975				err = json.Unmarshal(*v, &tags)
3976				if err != nil {
3977					return err
3978				}
3979				asg.Tags = tags
3980			}
3981		}
3982	}
3983
3984	return nil
3985}
3986
3987// ApplicationSecurityGroupListResult a list of application security groups.
3988type ApplicationSecurityGroupListResult struct {
3989	autorest.Response `json:"-"`
3990	// Value - A list of application security groups.
3991	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
3992	// NextLink - READ-ONLY; The URL to get the next set of results.
3993	NextLink *string `json:"nextLink,omitempty"`
3994}
3995
3996// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
3997// ApplicationSecurityGroup values.
3998type ApplicationSecurityGroupListResultIterator struct {
3999	i    int
4000	page ApplicationSecurityGroupListResultPage
4001}
4002
4003// NextWithContext advances to the next value.  If there was an error making
4004// the request the iterator does not advance and the error is returned.
4005func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
4006	if tracing.IsEnabled() {
4007		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
4008		defer func() {
4009			sc := -1
4010			if iter.Response().Response.Response != nil {
4011				sc = iter.Response().Response.Response.StatusCode
4012			}
4013			tracing.EndSpan(ctx, sc, err)
4014		}()
4015	}
4016	iter.i++
4017	if iter.i < len(iter.page.Values()) {
4018		return nil
4019	}
4020	err = iter.page.NextWithContext(ctx)
4021	if err != nil {
4022		iter.i--
4023		return err
4024	}
4025	iter.i = 0
4026	return nil
4027}
4028
4029// Next advances to the next value.  If there was an error making
4030// the request the iterator does not advance and the error is returned.
4031// Deprecated: Use NextWithContext() instead.
4032func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
4033	return iter.NextWithContext(context.Background())
4034}
4035
4036// NotDone returns true if the enumeration should be started or is not yet complete.
4037func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
4038	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4039}
4040
4041// Response returns the raw server response from the last page request.
4042func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
4043	return iter.page.Response()
4044}
4045
4046// Value returns the current value or a zero-initialized value if the
4047// iterator has advanced beyond the end of the collection.
4048func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
4049	if !iter.page.NotDone() {
4050		return ApplicationSecurityGroup{}
4051	}
4052	return iter.page.Values()[iter.i]
4053}
4054
4055// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
4056func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
4057	return ApplicationSecurityGroupListResultIterator{page: page}
4058}
4059
4060// IsEmpty returns true if the ListResult contains no values.
4061func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
4062	return asglr.Value == nil || len(*asglr.Value) == 0
4063}
4064
4065// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
4066// It returns nil if no more results exist.
4067func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
4068	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
4069		return nil, nil
4070	}
4071	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4072		autorest.AsJSON(),
4073		autorest.AsGet(),
4074		autorest.WithBaseURL(to.String(asglr.NextLink)))
4075}
4076
4077// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
4078type ApplicationSecurityGroupListResultPage struct {
4079	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
4080	asglr ApplicationSecurityGroupListResult
4081}
4082
4083// NextWithContext advances to the next page of values.  If there was an error making
4084// the request the page does not advance and the error is returned.
4085func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
4086	if tracing.IsEnabled() {
4087		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
4088		defer func() {
4089			sc := -1
4090			if page.Response().Response.Response != nil {
4091				sc = page.Response().Response.Response.StatusCode
4092			}
4093			tracing.EndSpan(ctx, sc, err)
4094		}()
4095	}
4096	next, err := page.fn(ctx, page.asglr)
4097	if err != nil {
4098		return err
4099	}
4100	page.asglr = next
4101	return nil
4102}
4103
4104// Next advances to the next page of values.  If there was an error making
4105// the request the page does not advance and the error is returned.
4106// Deprecated: Use NextWithContext() instead.
4107func (page *ApplicationSecurityGroupListResultPage) Next() error {
4108	return page.NextWithContext(context.Background())
4109}
4110
4111// NotDone returns true if the page enumeration should be started or is not yet complete.
4112func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
4113	return !page.asglr.IsEmpty()
4114}
4115
4116// Response returns the raw server response from the last page request.
4117func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
4118	return page.asglr
4119}
4120
4121// Values returns the slice of values for the current page or nil if there are no values.
4122func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
4123	if page.asglr.IsEmpty() {
4124		return nil
4125	}
4126	return *page.asglr.Value
4127}
4128
4129// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
4130func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
4131	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
4132}
4133
4134// ApplicationSecurityGroupPropertiesFormat application security group properties.
4135type ApplicationSecurityGroupPropertiesFormat struct {
4136	// 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.
4137	ResourceGUID *string `json:"resourceGuid,omitempty"`
4138	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
4139	ProvisioningState *string `json:"provisioningState,omitempty"`
4140}
4141
4142// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
4143// of a long-running operation.
4144type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
4145	azure.Future
4146}
4147
4148// Result returns the result of the asynchronous operation.
4149// If the operation has not completed it will return an error.
4150func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
4151	var done bool
4152	done, err = future.DoneWithContext(context.Background(), client)
4153	if err != nil {
4154		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4155		return
4156	}
4157	if !done {
4158		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
4159		return
4160	}
4161	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4162	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
4163		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
4164		if err != nil {
4165			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
4166		}
4167	}
4168	return
4169}
4170
4171// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
4172// long-running operation.
4173type ApplicationSecurityGroupsDeleteFuture struct {
4174	azure.Future
4175}
4176
4177// Result returns the result of the asynchronous operation.
4178// If the operation has not completed it will return an error.
4179func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
4180	var done bool
4181	done, err = future.DoneWithContext(context.Background(), client)
4182	if err != nil {
4183		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
4184		return
4185	}
4186	if !done {
4187		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
4188		return
4189	}
4190	ar.Response = future.Response()
4191	return
4192}
4193
4194// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
4195// that belongs to an ExpressRouteCircuit.
4196type AuthorizationListResult struct {
4197	autorest.Response `json:"-"`
4198	// Value - The authorizations in an ExpressRoute Circuit.
4199	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
4200	// NextLink - The URL to get the next set of results.
4201	NextLink *string `json:"nextLink,omitempty"`
4202}
4203
4204// AuthorizationListResultIterator provides access to a complete listing of
4205// ExpressRouteCircuitAuthorization values.
4206type AuthorizationListResultIterator struct {
4207	i    int
4208	page AuthorizationListResultPage
4209}
4210
4211// NextWithContext advances to the next value.  If there was an error making
4212// the request the iterator does not advance and the error is returned.
4213func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
4214	if tracing.IsEnabled() {
4215		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
4216		defer func() {
4217			sc := -1
4218			if iter.Response().Response.Response != nil {
4219				sc = iter.Response().Response.Response.StatusCode
4220			}
4221			tracing.EndSpan(ctx, sc, err)
4222		}()
4223	}
4224	iter.i++
4225	if iter.i < len(iter.page.Values()) {
4226		return nil
4227	}
4228	err = iter.page.NextWithContext(ctx)
4229	if err != nil {
4230		iter.i--
4231		return err
4232	}
4233	iter.i = 0
4234	return nil
4235}
4236
4237// Next advances to the next value.  If there was an error making
4238// the request the iterator does not advance and the error is returned.
4239// Deprecated: Use NextWithContext() instead.
4240func (iter *AuthorizationListResultIterator) Next() error {
4241	return iter.NextWithContext(context.Background())
4242}
4243
4244// NotDone returns true if the enumeration should be started or is not yet complete.
4245func (iter AuthorizationListResultIterator) NotDone() bool {
4246	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4247}
4248
4249// Response returns the raw server response from the last page request.
4250func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
4251	return iter.page.Response()
4252}
4253
4254// Value returns the current value or a zero-initialized value if the
4255// iterator has advanced beyond the end of the collection.
4256func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
4257	if !iter.page.NotDone() {
4258		return ExpressRouteCircuitAuthorization{}
4259	}
4260	return iter.page.Values()[iter.i]
4261}
4262
4263// Creates a new instance of the AuthorizationListResultIterator type.
4264func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
4265	return AuthorizationListResultIterator{page: page}
4266}
4267
4268// IsEmpty returns true if the ListResult contains no values.
4269func (alr AuthorizationListResult) IsEmpty() bool {
4270	return alr.Value == nil || len(*alr.Value) == 0
4271}
4272
4273// authorizationListResultPreparer prepares a request to retrieve the next set of results.
4274// It returns nil if no more results exist.
4275func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
4276	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
4277		return nil, nil
4278	}
4279	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4280		autorest.AsJSON(),
4281		autorest.AsGet(),
4282		autorest.WithBaseURL(to.String(alr.NextLink)))
4283}
4284
4285// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
4286type AuthorizationListResultPage struct {
4287	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
4288	alr AuthorizationListResult
4289}
4290
4291// NextWithContext advances to the next page of values.  If there was an error making
4292// the request the page does not advance and the error is returned.
4293func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
4294	if tracing.IsEnabled() {
4295		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
4296		defer func() {
4297			sc := -1
4298			if page.Response().Response.Response != nil {
4299				sc = page.Response().Response.Response.StatusCode
4300			}
4301			tracing.EndSpan(ctx, sc, err)
4302		}()
4303	}
4304	next, err := page.fn(ctx, page.alr)
4305	if err != nil {
4306		return err
4307	}
4308	page.alr = next
4309	return nil
4310}
4311
4312// Next advances to the next page of values.  If there was an error making
4313// the request the page does not advance and the error is returned.
4314// Deprecated: Use NextWithContext() instead.
4315func (page *AuthorizationListResultPage) Next() error {
4316	return page.NextWithContext(context.Background())
4317}
4318
4319// NotDone returns true if the page enumeration should be started or is not yet complete.
4320func (page AuthorizationListResultPage) NotDone() bool {
4321	return !page.alr.IsEmpty()
4322}
4323
4324// Response returns the raw server response from the last page request.
4325func (page AuthorizationListResultPage) Response() AuthorizationListResult {
4326	return page.alr
4327}
4328
4329// Values returns the slice of values for the current page or nil if there are no values.
4330func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
4331	if page.alr.IsEmpty() {
4332		return nil
4333	}
4334	return *page.alr.Value
4335}
4336
4337// Creates a new instance of the AuthorizationListResultPage type.
4338func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
4339	return AuthorizationListResultPage{fn: getNextPage}
4340}
4341
4342// AuthorizationPropertiesFormat ...
4343type AuthorizationPropertiesFormat struct {
4344	// AuthorizationKey - The authorization key.
4345	AuthorizationKey *string `json:"authorizationKey,omitempty"`
4346	// AuthorizationUseStatus - AuthorizationUseStatus. Possible values are: 'Available' and 'InUse'. Possible values include: 'Available', 'InUse'
4347	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
4348	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4349	ProvisioningState *string `json:"provisioningState,omitempty"`
4350}
4351
4352// Availability availability of the metric.
4353type Availability struct {
4354	// TimeGrain - The time grain of the availability.
4355	TimeGrain *string `json:"timeGrain,omitempty"`
4356	// Retention - The retention of the availability.
4357	Retention *string `json:"retention,omitempty"`
4358	// BlobDuration - Duration of the availability blob.
4359	BlobDuration *string `json:"blobDuration,omitempty"`
4360}
4361
4362// AvailableProvidersList list of available countries with details.
4363type AvailableProvidersList struct {
4364	autorest.Response `json:"-"`
4365	// Countries - List of available countries.
4366	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
4367}
4368
4369// AvailableProvidersListCity city or town details.
4370type AvailableProvidersListCity struct {
4371	// CityName - The city or town name.
4372	CityName *string `json:"cityName,omitempty"`
4373	// Providers - A list of Internet service providers.
4374	Providers *[]string `json:"providers,omitempty"`
4375}
4376
4377// AvailableProvidersListCountry country details.
4378type AvailableProvidersListCountry struct {
4379	// CountryName - The country name.
4380	CountryName *string `json:"countryName,omitempty"`
4381	// Providers - A list of Internet service providers.
4382	Providers *[]string `json:"providers,omitempty"`
4383	// States - List of available states in the country.
4384	States *[]AvailableProvidersListState `json:"states,omitempty"`
4385}
4386
4387// AvailableProvidersListParameters constraints that determine the list of available Internet service
4388// providers.
4389type AvailableProvidersListParameters struct {
4390	// AzureLocations - A list of Azure regions.
4391	AzureLocations *[]string `json:"azureLocations,omitempty"`
4392	// Country - The country for available providers list.
4393	Country *string `json:"country,omitempty"`
4394	// State - The state for available providers list.
4395	State *string `json:"state,omitempty"`
4396	// City - The city or town for available providers list.
4397	City *string `json:"city,omitempty"`
4398}
4399
4400// AvailableProvidersListState state details.
4401type AvailableProvidersListState struct {
4402	// StateName - The state name.
4403	StateName *string `json:"stateName,omitempty"`
4404	// Providers - A list of Internet service providers.
4405	Providers *[]string `json:"providers,omitempty"`
4406	// Cities - List of available cities or towns in the state.
4407	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
4408}
4409
4410// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
4411// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
4412// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
4413// operation succeeded, the response body includes the HTTP status code for the successful request. If the
4414// asynchronous operation failed, the response body includes the HTTP status code for the failed request
4415// and error information regarding the failure.
4416type AzureAsyncOperationResult struct {
4417	// Status - Status of the Azure async operation. Possible values are: 'InProgress', 'Succeeded', and 'Failed'. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
4418	Status OperationStatus `json:"status,omitempty"`
4419	Error  *Error          `json:"error,omitempty"`
4420}
4421
4422// AzureReachabilityReport azure reachability report details.
4423type AzureReachabilityReport struct {
4424	autorest.Response `json:"-"`
4425	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
4426	AggregationLevel *string                          `json:"aggregationLevel,omitempty"`
4427	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
4428	// ReachabilityReport - List of Azure reachability report items.
4429	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
4430}
4431
4432// AzureReachabilityReportItem azure reachability report details for a given provider location.
4433type AzureReachabilityReportItem struct {
4434	// Provider - The Internet service provider.
4435	Provider *string `json:"provider,omitempty"`
4436	// AzureLocation - The Azure region.
4437	AzureLocation *string `json:"azureLocation,omitempty"`
4438	// Latencies - List of latency details for each of the time series.
4439	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
4440}
4441
4442// AzureReachabilityReportLatencyInfo details on latency for a time series.
4443type AzureReachabilityReportLatencyInfo struct {
4444	// TimeStamp - The time stamp.
4445	TimeStamp *date.Time `json:"timeStamp,omitempty"`
4446	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
4447	Score *int32 `json:"score,omitempty"`
4448}
4449
4450// AzureReachabilityReportLocation parameters that define a geographic location.
4451type AzureReachabilityReportLocation struct {
4452	// Country - The name of the country.
4453	Country *string `json:"country,omitempty"`
4454	// State - The name of the state.
4455	State *string `json:"state,omitempty"`
4456	// City - The name of the city or town.
4457	City *string `json:"city,omitempty"`
4458}
4459
4460// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
4461type AzureReachabilityReportParameters struct {
4462	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
4463	// Providers - List of Internet service providers.
4464	Providers *[]string `json:"providers,omitempty"`
4465	// AzureLocations - Optional Azure regions to scope the query to.
4466	AzureLocations *[]string `json:"azureLocations,omitempty"`
4467	// StartTime - The start time for the Azure reachability report.
4468	StartTime *date.Time `json:"startTime,omitempty"`
4469	// EndTime - The end time for the Azure reachability report.
4470	EndTime *date.Time `json:"endTime,omitempty"`
4471}
4472
4473// BackendAddressPool pool of backend IP addresses.
4474type BackendAddressPool struct {
4475	autorest.Response `json:"-"`
4476	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
4477	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
4478	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
4479	Name *string `json:"name,omitempty"`
4480	// Etag - A unique read-only string that changes whenever the resource is updated.
4481	Etag *string `json:"etag,omitempty"`
4482	// ID - Resource ID.
4483	ID *string `json:"id,omitempty"`
4484}
4485
4486// MarshalJSON is the custom marshaler for BackendAddressPool.
4487func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
4488	objectMap := make(map[string]interface{})
4489	if bap.BackendAddressPoolPropertiesFormat != nil {
4490		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
4491	}
4492	if bap.Name != nil {
4493		objectMap["name"] = bap.Name
4494	}
4495	if bap.Etag != nil {
4496		objectMap["etag"] = bap.Etag
4497	}
4498	if bap.ID != nil {
4499		objectMap["id"] = bap.ID
4500	}
4501	return json.Marshal(objectMap)
4502}
4503
4504// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
4505func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
4506	var m map[string]*json.RawMessage
4507	err := json.Unmarshal(body, &m)
4508	if err != nil {
4509		return err
4510	}
4511	for k, v := range m {
4512		switch k {
4513		case "properties":
4514			if v != nil {
4515				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
4516				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
4517				if err != nil {
4518					return err
4519				}
4520				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
4521			}
4522		case "name":
4523			if v != nil {
4524				var name string
4525				err = json.Unmarshal(*v, &name)
4526				if err != nil {
4527					return err
4528				}
4529				bap.Name = &name
4530			}
4531		case "etag":
4532			if v != nil {
4533				var etag string
4534				err = json.Unmarshal(*v, &etag)
4535				if err != nil {
4536					return err
4537				}
4538				bap.Etag = &etag
4539			}
4540		case "id":
4541			if v != nil {
4542				var ID string
4543				err = json.Unmarshal(*v, &ID)
4544				if err != nil {
4545					return err
4546				}
4547				bap.ID = &ID
4548			}
4549		}
4550	}
4551
4552	return nil
4553}
4554
4555// BackendAddressPoolPropertiesFormat properties of the backend address pool.
4556type BackendAddressPoolPropertiesFormat struct {
4557	// BackendIPConfigurations - READ-ONLY; Gets collection of references to IP addresses defined in network interfaces.
4558	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
4559	// LoadBalancingRules - READ-ONLY; Gets load balancing rules that use this backend address pool.
4560	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
4561	// OutboundNatRule - READ-ONLY; Gets outbound rules that use this backend address pool.
4562	OutboundNatRule *SubResource `json:"outboundNatRule,omitempty"`
4563	// ProvisioningState - Get provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4564	ProvisioningState *string `json:"provisioningState,omitempty"`
4565}
4566
4567// BGPCommunity contains bgp community information offered in Service Community resources.
4568type BGPCommunity struct {
4569	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
4570	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
4571	// CommunityName - The name of the bgp community. e.g. Skype.
4572	CommunityName *string `json:"communityName,omitempty"`
4573	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
4574	CommunityValue *string `json:"communityValue,omitempty"`
4575	// CommunityPrefixes - The prefixes that the bgp community contains.
4576	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
4577	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
4578	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
4579	// ServiceGroup - The service group of the bgp community contains.
4580	ServiceGroup *string `json:"serviceGroup,omitempty"`
4581}
4582
4583// BgpPeerStatus BGP peer status details
4584type BgpPeerStatus struct {
4585	// LocalAddress - READ-ONLY; The virtual network gateway's local address
4586	LocalAddress *string `json:"localAddress,omitempty"`
4587	// Neighbor - READ-ONLY; The remote BGP peer
4588	Neighbor *string `json:"neighbor,omitempty"`
4589	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer
4590	Asn *int32 `json:"asn,omitempty"`
4591	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
4592	State BgpPeerState `json:"state,omitempty"`
4593	// ConnectedDuration - READ-ONLY; For how long the peering has been up
4594	ConnectedDuration *string `json:"connectedDuration,omitempty"`
4595	// RoutesReceived - READ-ONLY; The number of routes learned from this peer
4596	RoutesReceived *int64 `json:"routesReceived,omitempty"`
4597	// MessagesSent - READ-ONLY; The number of BGP messages sent
4598	MessagesSent *int64 `json:"messagesSent,omitempty"`
4599	// MessagesReceived - READ-ONLY; The number of BGP messages received
4600	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
4601}
4602
4603// BgpPeerStatusListResult response for list BGP peer status API service call
4604type BgpPeerStatusListResult struct {
4605	autorest.Response `json:"-"`
4606	// Value - List of BGP peers
4607	Value *[]BgpPeerStatus `json:"value,omitempty"`
4608}
4609
4610// BgpServiceCommunity service Community Properties.
4611type BgpServiceCommunity struct {
4612	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
4613	// ID - Resource ID.
4614	ID *string `json:"id,omitempty"`
4615	// Name - READ-ONLY; Resource name.
4616	Name *string `json:"name,omitempty"`
4617	// Type - READ-ONLY; Resource type.
4618	Type *string `json:"type,omitempty"`
4619	// Location - Resource location.
4620	Location *string `json:"location,omitempty"`
4621	// Tags - Resource tags.
4622	Tags map[string]*string `json:"tags"`
4623}
4624
4625// MarshalJSON is the custom marshaler for BgpServiceCommunity.
4626func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
4627	objectMap := make(map[string]interface{})
4628	if bsc.BgpServiceCommunityPropertiesFormat != nil {
4629		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
4630	}
4631	if bsc.ID != nil {
4632		objectMap["id"] = bsc.ID
4633	}
4634	if bsc.Location != nil {
4635		objectMap["location"] = bsc.Location
4636	}
4637	if bsc.Tags != nil {
4638		objectMap["tags"] = bsc.Tags
4639	}
4640	return json.Marshal(objectMap)
4641}
4642
4643// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
4644func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
4645	var m map[string]*json.RawMessage
4646	err := json.Unmarshal(body, &m)
4647	if err != nil {
4648		return err
4649	}
4650	for k, v := range m {
4651		switch k {
4652		case "properties":
4653			if v != nil {
4654				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
4655				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
4656				if err != nil {
4657					return err
4658				}
4659				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
4660			}
4661		case "id":
4662			if v != nil {
4663				var ID string
4664				err = json.Unmarshal(*v, &ID)
4665				if err != nil {
4666					return err
4667				}
4668				bsc.ID = &ID
4669			}
4670		case "name":
4671			if v != nil {
4672				var name string
4673				err = json.Unmarshal(*v, &name)
4674				if err != nil {
4675					return err
4676				}
4677				bsc.Name = &name
4678			}
4679		case "type":
4680			if v != nil {
4681				var typeVar string
4682				err = json.Unmarshal(*v, &typeVar)
4683				if err != nil {
4684					return err
4685				}
4686				bsc.Type = &typeVar
4687			}
4688		case "location":
4689			if v != nil {
4690				var location string
4691				err = json.Unmarshal(*v, &location)
4692				if err != nil {
4693					return err
4694				}
4695				bsc.Location = &location
4696			}
4697		case "tags":
4698			if v != nil {
4699				var tags map[string]*string
4700				err = json.Unmarshal(*v, &tags)
4701				if err != nil {
4702					return err
4703				}
4704				bsc.Tags = tags
4705			}
4706		}
4707	}
4708
4709	return nil
4710}
4711
4712// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
4713type BgpServiceCommunityListResult struct {
4714	autorest.Response `json:"-"`
4715	// Value - A list of service community resources.
4716	Value *[]BgpServiceCommunity `json:"value,omitempty"`
4717	// NextLink - The URL to get the next set of results.
4718	NextLink *string `json:"nextLink,omitempty"`
4719}
4720
4721// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
4722// values.
4723type BgpServiceCommunityListResultIterator struct {
4724	i    int
4725	page BgpServiceCommunityListResultPage
4726}
4727
4728// NextWithContext advances to the next value.  If there was an error making
4729// the request the iterator does not advance and the error is returned.
4730func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
4731	if tracing.IsEnabled() {
4732		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
4733		defer func() {
4734			sc := -1
4735			if iter.Response().Response.Response != nil {
4736				sc = iter.Response().Response.Response.StatusCode
4737			}
4738			tracing.EndSpan(ctx, sc, err)
4739		}()
4740	}
4741	iter.i++
4742	if iter.i < len(iter.page.Values()) {
4743		return nil
4744	}
4745	err = iter.page.NextWithContext(ctx)
4746	if err != nil {
4747		iter.i--
4748		return err
4749	}
4750	iter.i = 0
4751	return nil
4752}
4753
4754// Next advances to the next value.  If there was an error making
4755// the request the iterator does not advance and the error is returned.
4756// Deprecated: Use NextWithContext() instead.
4757func (iter *BgpServiceCommunityListResultIterator) Next() error {
4758	return iter.NextWithContext(context.Background())
4759}
4760
4761// NotDone returns true if the enumeration should be started or is not yet complete.
4762func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
4763	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4764}
4765
4766// Response returns the raw server response from the last page request.
4767func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
4768	return iter.page.Response()
4769}
4770
4771// Value returns the current value or a zero-initialized value if the
4772// iterator has advanced beyond the end of the collection.
4773func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
4774	if !iter.page.NotDone() {
4775		return BgpServiceCommunity{}
4776	}
4777	return iter.page.Values()[iter.i]
4778}
4779
4780// Creates a new instance of the BgpServiceCommunityListResultIterator type.
4781func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
4782	return BgpServiceCommunityListResultIterator{page: page}
4783}
4784
4785// IsEmpty returns true if the ListResult contains no values.
4786func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
4787	return bsclr.Value == nil || len(*bsclr.Value) == 0
4788}
4789
4790// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
4791// It returns nil if no more results exist.
4792func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
4793	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
4794		return nil, nil
4795	}
4796	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4797		autorest.AsJSON(),
4798		autorest.AsGet(),
4799		autorest.WithBaseURL(to.String(bsclr.NextLink)))
4800}
4801
4802// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
4803type BgpServiceCommunityListResultPage struct {
4804	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
4805	bsclr BgpServiceCommunityListResult
4806}
4807
4808// NextWithContext advances to the next page of values.  If there was an error making
4809// the request the page does not advance and the error is returned.
4810func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
4811	if tracing.IsEnabled() {
4812		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
4813		defer func() {
4814			sc := -1
4815			if page.Response().Response.Response != nil {
4816				sc = page.Response().Response.Response.StatusCode
4817			}
4818			tracing.EndSpan(ctx, sc, err)
4819		}()
4820	}
4821	next, err := page.fn(ctx, page.bsclr)
4822	if err != nil {
4823		return err
4824	}
4825	page.bsclr = next
4826	return nil
4827}
4828
4829// Next advances to the next page of values.  If there was an error making
4830// the request the page does not advance and the error is returned.
4831// Deprecated: Use NextWithContext() instead.
4832func (page *BgpServiceCommunityListResultPage) Next() error {
4833	return page.NextWithContext(context.Background())
4834}
4835
4836// NotDone returns true if the page enumeration should be started or is not yet complete.
4837func (page BgpServiceCommunityListResultPage) NotDone() bool {
4838	return !page.bsclr.IsEmpty()
4839}
4840
4841// Response returns the raw server response from the last page request.
4842func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
4843	return page.bsclr
4844}
4845
4846// Values returns the slice of values for the current page or nil if there are no values.
4847func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
4848	if page.bsclr.IsEmpty() {
4849		return nil
4850	}
4851	return *page.bsclr.Value
4852}
4853
4854// Creates a new instance of the BgpServiceCommunityListResultPage type.
4855func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
4856	return BgpServiceCommunityListResultPage{fn: getNextPage}
4857}
4858
4859// BgpServiceCommunityPropertiesFormat properties of Service Community.
4860type BgpServiceCommunityPropertiesFormat struct {
4861	// ServiceName - The name of the bgp community. e.g. Skype.
4862	ServiceName *string `json:"serviceName,omitempty"`
4863	// BgpCommunities - Get a list of bgp communities.
4864	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
4865}
4866
4867// BgpSettings BGP settings details
4868type BgpSettings struct {
4869	// Asn - The BGP speaker's ASN.
4870	Asn *int64 `json:"asn,omitempty"`
4871	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
4872	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
4873	// PeerWeight - The weight added to routes learned from this BGP speaker.
4874	PeerWeight *int32 `json:"peerWeight,omitempty"`
4875}
4876
4877// ConnectionMonitor parameters that define the operation to create a connection monitor.
4878type ConnectionMonitor struct {
4879	// Location - Connection monitor location.
4880	Location *string `json:"location,omitempty"`
4881	// Tags - Connection monitor tags.
4882	Tags                         map[string]*string `json:"tags"`
4883	*ConnectionMonitorParameters `json:"properties,omitempty"`
4884}
4885
4886// MarshalJSON is the custom marshaler for ConnectionMonitor.
4887func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
4888	objectMap := make(map[string]interface{})
4889	if cm.Location != nil {
4890		objectMap["location"] = cm.Location
4891	}
4892	if cm.Tags != nil {
4893		objectMap["tags"] = cm.Tags
4894	}
4895	if cm.ConnectionMonitorParameters != nil {
4896		objectMap["properties"] = cm.ConnectionMonitorParameters
4897	}
4898	return json.Marshal(objectMap)
4899}
4900
4901// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
4902func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
4903	var m map[string]*json.RawMessage
4904	err := json.Unmarshal(body, &m)
4905	if err != nil {
4906		return err
4907	}
4908	for k, v := range m {
4909		switch k {
4910		case "location":
4911			if v != nil {
4912				var location string
4913				err = json.Unmarshal(*v, &location)
4914				if err != nil {
4915					return err
4916				}
4917				cm.Location = &location
4918			}
4919		case "tags":
4920			if v != nil {
4921				var tags map[string]*string
4922				err = json.Unmarshal(*v, &tags)
4923				if err != nil {
4924					return err
4925				}
4926				cm.Tags = tags
4927			}
4928		case "properties":
4929			if v != nil {
4930				var connectionMonitorParameters ConnectionMonitorParameters
4931				err = json.Unmarshal(*v, &connectionMonitorParameters)
4932				if err != nil {
4933					return err
4934				}
4935				cm.ConnectionMonitorParameters = &connectionMonitorParameters
4936			}
4937		}
4938	}
4939
4940	return nil
4941}
4942
4943// ConnectionMonitorDestination describes the destination of connection monitor.
4944type ConnectionMonitorDestination struct {
4945	// ResourceID - The ID of the resource used as the destination by connection monitor.
4946	ResourceID *string `json:"resourceId,omitempty"`
4947	// Address - Address of the connection monitor destination (IP or domain name).
4948	Address *string `json:"address,omitempty"`
4949	// Port - The destination port used by connection monitor.
4950	Port *int32 `json:"port,omitempty"`
4951}
4952
4953// ConnectionMonitorListResult list of connection monitors.
4954type ConnectionMonitorListResult struct {
4955	autorest.Response `json:"-"`
4956	// Value - Information about connection monitors.
4957	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
4958}
4959
4960// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
4961type ConnectionMonitorParameters struct {
4962	Source      *ConnectionMonitorSource      `json:"source,omitempty"`
4963	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
4964	// AutoStart - Determines if the connection monitor will start automatically once created.
4965	AutoStart *bool `json:"autoStart,omitempty"`
4966	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
4967	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
4968}
4969
4970// ConnectionMonitorQueryResult list of connection states snapshots.
4971type ConnectionMonitorQueryResult struct {
4972	autorest.Response `json:"-"`
4973	// SourceStatus - Status of connection monitor source. Possible values include: 'Uknown', 'Active', 'Inactive'
4974	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
4975	// States - Information about connection states.
4976	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
4977}
4978
4979// ConnectionMonitorResult information about the connection monitor.
4980type ConnectionMonitorResult struct {
4981	autorest.Response `json:"-"`
4982	// Name - READ-ONLY; Name of the connection monitor.
4983	Name *string `json:"name,omitempty"`
4984	// ID - READ-ONLY; ID of the connection monitor.
4985	ID   *string `json:"id,omitempty"`
4986	Etag *string `json:"etag,omitempty"`
4987	// Type - READ-ONLY; Connection monitor type.
4988	Type *string `json:"type,omitempty"`
4989	// Location - Connection monitor location.
4990	Location *string `json:"location,omitempty"`
4991	// Tags - Connection monitor tags.
4992	Tags                               map[string]*string `json:"tags"`
4993	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
4994}
4995
4996// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
4997func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
4998	objectMap := make(map[string]interface{})
4999	if cmr.Etag != nil {
5000		objectMap["etag"] = cmr.Etag
5001	}
5002	if cmr.Location != nil {
5003		objectMap["location"] = cmr.Location
5004	}
5005	if cmr.Tags != nil {
5006		objectMap["tags"] = cmr.Tags
5007	}
5008	if cmr.ConnectionMonitorResultProperties != nil {
5009		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
5010	}
5011	return json.Marshal(objectMap)
5012}
5013
5014// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
5015func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
5016	var m map[string]*json.RawMessage
5017	err := json.Unmarshal(body, &m)
5018	if err != nil {
5019		return err
5020	}
5021	for k, v := range m {
5022		switch k {
5023		case "name":
5024			if v != nil {
5025				var name string
5026				err = json.Unmarshal(*v, &name)
5027				if err != nil {
5028					return err
5029				}
5030				cmr.Name = &name
5031			}
5032		case "id":
5033			if v != nil {
5034				var ID string
5035				err = json.Unmarshal(*v, &ID)
5036				if err != nil {
5037					return err
5038				}
5039				cmr.ID = &ID
5040			}
5041		case "etag":
5042			if v != nil {
5043				var etag string
5044				err = json.Unmarshal(*v, &etag)
5045				if err != nil {
5046					return err
5047				}
5048				cmr.Etag = &etag
5049			}
5050		case "type":
5051			if v != nil {
5052				var typeVar string
5053				err = json.Unmarshal(*v, &typeVar)
5054				if err != nil {
5055					return err
5056				}
5057				cmr.Type = &typeVar
5058			}
5059		case "location":
5060			if v != nil {
5061				var location string
5062				err = json.Unmarshal(*v, &location)
5063				if err != nil {
5064					return err
5065				}
5066				cmr.Location = &location
5067			}
5068		case "tags":
5069			if v != nil {
5070				var tags map[string]*string
5071				err = json.Unmarshal(*v, &tags)
5072				if err != nil {
5073					return err
5074				}
5075				cmr.Tags = tags
5076			}
5077		case "properties":
5078			if v != nil {
5079				var connectionMonitorResultProperties ConnectionMonitorResultProperties
5080				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
5081				if err != nil {
5082					return err
5083				}
5084				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
5085			}
5086		}
5087	}
5088
5089	return nil
5090}
5091
5092// ConnectionMonitorResultProperties describes the properties of a connection monitor.
5093type ConnectionMonitorResultProperties struct {
5094	// ProvisioningState - The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5095	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5096	// StartTime - The date and time when the connection monitor was started.
5097	StartTime *date.Time `json:"startTime,omitempty"`
5098	// MonitoringStatus - The monitoring status of the connection monitor.
5099	MonitoringStatus *string                       `json:"monitoringStatus,omitempty"`
5100	Source           *ConnectionMonitorSource      `json:"source,omitempty"`
5101	Destination      *ConnectionMonitorDestination `json:"destination,omitempty"`
5102	// AutoStart - Determines if the connection monitor will start automatically once created.
5103	AutoStart *bool `json:"autoStart,omitempty"`
5104	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
5105	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
5106}
5107
5108// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
5109// long-running operation.
5110type ConnectionMonitorsCreateOrUpdateFuture struct {
5111	azure.Future
5112}
5113
5114// Result returns the result of the asynchronous operation.
5115// If the operation has not completed it will return an error.
5116func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
5117	var done bool
5118	done, err = future.DoneWithContext(context.Background(), client)
5119	if err != nil {
5120		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5121		return
5122	}
5123	if !done {
5124		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
5125		return
5126	}
5127	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5128	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
5129		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
5130		if err != nil {
5131			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
5132		}
5133	}
5134	return
5135}
5136
5137// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
5138// long-running operation.
5139type ConnectionMonitorsDeleteFuture struct {
5140	azure.Future
5141}
5142
5143// Result returns the result of the asynchronous operation.
5144// If the operation has not completed it will return an error.
5145func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
5146	var done bool
5147	done, err = future.DoneWithContext(context.Background(), client)
5148	if err != nil {
5149		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
5150		return
5151	}
5152	if !done {
5153		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
5154		return
5155	}
5156	ar.Response = future.Response()
5157	return
5158}
5159
5160// ConnectionMonitorSource describes the source of connection monitor.
5161type ConnectionMonitorSource struct {
5162	// ResourceID - The ID of the resource used as the source by connection monitor.
5163	ResourceID *string `json:"resourceId,omitempty"`
5164	// Port - The source port used by connection monitor.
5165	Port *int32 `json:"port,omitempty"`
5166}
5167
5168// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
5169// operation.
5170type ConnectionMonitorsQueryFuture struct {
5171	azure.Future
5172}
5173
5174// Result returns the result of the asynchronous operation.
5175// If the operation has not completed it will return an error.
5176func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
5177	var done bool
5178	done, err = future.DoneWithContext(context.Background(), client)
5179	if err != nil {
5180		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
5181		return
5182	}
5183	if !done {
5184		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
5185		return
5186	}
5187	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5188	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
5189		cmqr, err = client.QueryResponder(cmqr.Response.Response)
5190		if err != nil {
5191			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
5192		}
5193	}
5194	return
5195}
5196
5197// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
5198// operation.
5199type ConnectionMonitorsStartFuture struct {
5200	azure.Future
5201}
5202
5203// Result returns the result of the asynchronous operation.
5204// If the operation has not completed it will return an error.
5205func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
5206	var done bool
5207	done, err = future.DoneWithContext(context.Background(), client)
5208	if err != nil {
5209		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
5210		return
5211	}
5212	if !done {
5213		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
5214		return
5215	}
5216	ar.Response = future.Response()
5217	return
5218}
5219
5220// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
5221// operation.
5222type ConnectionMonitorsStopFuture struct {
5223	azure.Future
5224}
5225
5226// Result returns the result of the asynchronous operation.
5227// If the operation has not completed it will return an error.
5228func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
5229	var done bool
5230	done, err = future.DoneWithContext(context.Background(), client)
5231	if err != nil {
5232		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
5233		return
5234	}
5235	if !done {
5236		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
5237		return
5238	}
5239	ar.Response = future.Response()
5240	return
5241}
5242
5243// ConnectionResetSharedKey the virtual network connection reset shared key
5244type ConnectionResetSharedKey struct {
5245	autorest.Response `json:"-"`
5246	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
5247	KeyLength *int32 `json:"keyLength,omitempty"`
5248}
5249
5250// ConnectionSharedKey response for GetConnectionSharedKey API service call
5251type ConnectionSharedKey struct {
5252	autorest.Response `json:"-"`
5253	// Value - The virtual network connection shared key value.
5254	Value *string `json:"value,omitempty"`
5255}
5256
5257// ConnectionStateSnapshot connection state snapshot.
5258type ConnectionStateSnapshot struct {
5259	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
5260	ConnectionState ConnectionState `json:"connectionState,omitempty"`
5261	// StartTime - The start time of the connection snapshot.
5262	StartTime *date.Time `json:"startTime,omitempty"`
5263	// EndTime - The end time of the connection snapshot.
5264	EndTime *date.Time `json:"endTime,omitempty"`
5265	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
5266	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
5267	// Hops - READ-ONLY; List of hops between the source and the destination.
5268	Hops *[]ConnectivityHop `json:"hops,omitempty"`
5269}
5270
5271// ConnectivityDestination parameters that define destination of connection.
5272type ConnectivityDestination struct {
5273	// ResourceID - The ID of the resource to which a connection attempt will be made.
5274	ResourceID *string `json:"resourceId,omitempty"`
5275	// Address - The IP address or URI the resource to which a connection attempt will be made.
5276	Address *string `json:"address,omitempty"`
5277	// Port - Port on which check connectivity will be performed.
5278	Port *int32 `json:"port,omitempty"`
5279}
5280
5281// ConnectivityHop information about a hop between the source and the destination.
5282type ConnectivityHop struct {
5283	// Type - READ-ONLY; The type of the hop.
5284	Type *string `json:"type,omitempty"`
5285	// ID - READ-ONLY; The ID of the hop.
5286	ID *string `json:"id,omitempty"`
5287	// Address - READ-ONLY; The IP address of the hop.
5288	Address *string `json:"address,omitempty"`
5289	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
5290	ResourceID *string `json:"resourceId,omitempty"`
5291	// NextHopIds - READ-ONLY; List of next hop identifiers.
5292	NextHopIds *[]string `json:"nextHopIds,omitempty"`
5293	// Issues - READ-ONLY; List of issues.
5294	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
5295}
5296
5297// ConnectivityInformation information on the connectivity status.
5298type ConnectivityInformation struct {
5299	autorest.Response `json:"-"`
5300	// Hops - READ-ONLY; List of hops between the source and the destination.
5301	Hops *[]ConnectivityHop `json:"hops,omitempty"`
5302	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
5303	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
5304	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
5305	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
5306	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
5307	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
5308	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
5309	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
5310	// ProbesSent - READ-ONLY; Total number of probes sent.
5311	ProbesSent *int32 `json:"probesSent,omitempty"`
5312	// ProbesFailed - READ-ONLY; Number of failed probes.
5313	ProbesFailed *int32 `json:"probesFailed,omitempty"`
5314}
5315
5316// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
5317type ConnectivityIssue struct {
5318	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
5319	Origin Origin `json:"origin,omitempty"`
5320	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
5321	Severity Severity `json:"severity,omitempty"`
5322	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
5323	Type IssueType `json:"type,omitempty"`
5324	// Context - READ-ONLY; Provides additional context on the issue.
5325	Context *[]map[string]*string `json:"context,omitempty"`
5326}
5327
5328// ConnectivityParameters parameters that determine how the connectivity check will be performed.
5329type ConnectivityParameters struct {
5330	Source      *ConnectivitySource      `json:"source,omitempty"`
5331	Destination *ConnectivityDestination `json:"destination,omitempty"`
5332	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
5333	Protocol              Protocol               `json:"protocol,omitempty"`
5334	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
5335}
5336
5337// ConnectivitySource parameters that define the source of the connection.
5338type ConnectivitySource struct {
5339	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
5340	ResourceID *string `json:"resourceId,omitempty"`
5341	// Port - The source port from which a connectivity check will be performed.
5342	Port *int32 `json:"port,omitempty"`
5343}
5344
5345// DdosProtectionPlan a DDoS protection plan in a resource group.
5346type DdosProtectionPlan struct {
5347	autorest.Response `json:"-"`
5348	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
5349	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
5350	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5351	Etag *string `json:"etag,omitempty"`
5352	// ID - Resource ID.
5353	ID *string `json:"id,omitempty"`
5354	// Name - READ-ONLY; Resource name.
5355	Name *string `json:"name,omitempty"`
5356	// Type - READ-ONLY; Resource type.
5357	Type *string `json:"type,omitempty"`
5358	// Location - Resource location.
5359	Location *string `json:"location,omitempty"`
5360	// Tags - Resource tags.
5361	Tags map[string]*string `json:"tags"`
5362}
5363
5364// MarshalJSON is the custom marshaler for DdosProtectionPlan.
5365func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
5366	objectMap := make(map[string]interface{})
5367	if dpp.DdosProtectionPlanPropertiesFormat != nil {
5368		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
5369	}
5370	if dpp.ID != nil {
5371		objectMap["id"] = dpp.ID
5372	}
5373	if dpp.Location != nil {
5374		objectMap["location"] = dpp.Location
5375	}
5376	if dpp.Tags != nil {
5377		objectMap["tags"] = dpp.Tags
5378	}
5379	return json.Marshal(objectMap)
5380}
5381
5382// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
5383func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
5384	var m map[string]*json.RawMessage
5385	err := json.Unmarshal(body, &m)
5386	if err != nil {
5387		return err
5388	}
5389	for k, v := range m {
5390		switch k {
5391		case "properties":
5392			if v != nil {
5393				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
5394				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
5395				if err != nil {
5396					return err
5397				}
5398				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
5399			}
5400		case "etag":
5401			if v != nil {
5402				var etag string
5403				err = json.Unmarshal(*v, &etag)
5404				if err != nil {
5405					return err
5406				}
5407				dpp.Etag = &etag
5408			}
5409		case "id":
5410			if v != nil {
5411				var ID string
5412				err = json.Unmarshal(*v, &ID)
5413				if err != nil {
5414					return err
5415				}
5416				dpp.ID = &ID
5417			}
5418		case "name":
5419			if v != nil {
5420				var name string
5421				err = json.Unmarshal(*v, &name)
5422				if err != nil {
5423					return err
5424				}
5425				dpp.Name = &name
5426			}
5427		case "type":
5428			if v != nil {
5429				var typeVar string
5430				err = json.Unmarshal(*v, &typeVar)
5431				if err != nil {
5432					return err
5433				}
5434				dpp.Type = &typeVar
5435			}
5436		case "location":
5437			if v != nil {
5438				var location string
5439				err = json.Unmarshal(*v, &location)
5440				if err != nil {
5441					return err
5442				}
5443				dpp.Location = &location
5444			}
5445		case "tags":
5446			if v != nil {
5447				var tags map[string]*string
5448				err = json.Unmarshal(*v, &tags)
5449				if err != nil {
5450					return err
5451				}
5452				dpp.Tags = tags
5453			}
5454		}
5455	}
5456
5457	return nil
5458}
5459
5460// DdosProtectionPlanListResult a list of DDoS protection plans.
5461type DdosProtectionPlanListResult struct {
5462	autorest.Response `json:"-"`
5463	// Value - A list of DDoS protection plans.
5464	Value *[]DdosProtectionPlan `json:"value,omitempty"`
5465	// NextLink - READ-ONLY; The URL to get the next set of results.
5466	NextLink *string `json:"nextLink,omitempty"`
5467}
5468
5469// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
5470type DdosProtectionPlanListResultIterator struct {
5471	i    int
5472	page DdosProtectionPlanListResultPage
5473}
5474
5475// NextWithContext advances to the next value.  If there was an error making
5476// the request the iterator does not advance and the error is returned.
5477func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
5478	if tracing.IsEnabled() {
5479		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
5480		defer func() {
5481			sc := -1
5482			if iter.Response().Response.Response != nil {
5483				sc = iter.Response().Response.Response.StatusCode
5484			}
5485			tracing.EndSpan(ctx, sc, err)
5486		}()
5487	}
5488	iter.i++
5489	if iter.i < len(iter.page.Values()) {
5490		return nil
5491	}
5492	err = iter.page.NextWithContext(ctx)
5493	if err != nil {
5494		iter.i--
5495		return err
5496	}
5497	iter.i = 0
5498	return nil
5499}
5500
5501// Next advances to the next value.  If there was an error making
5502// the request the iterator does not advance and the error is returned.
5503// Deprecated: Use NextWithContext() instead.
5504func (iter *DdosProtectionPlanListResultIterator) Next() error {
5505	return iter.NextWithContext(context.Background())
5506}
5507
5508// NotDone returns true if the enumeration should be started or is not yet complete.
5509func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
5510	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5511}
5512
5513// Response returns the raw server response from the last page request.
5514func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
5515	return iter.page.Response()
5516}
5517
5518// Value returns the current value or a zero-initialized value if the
5519// iterator has advanced beyond the end of the collection.
5520func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
5521	if !iter.page.NotDone() {
5522		return DdosProtectionPlan{}
5523	}
5524	return iter.page.Values()[iter.i]
5525}
5526
5527// Creates a new instance of the DdosProtectionPlanListResultIterator type.
5528func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
5529	return DdosProtectionPlanListResultIterator{page: page}
5530}
5531
5532// IsEmpty returns true if the ListResult contains no values.
5533func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
5534	return dpplr.Value == nil || len(*dpplr.Value) == 0
5535}
5536
5537// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
5538// It returns nil if no more results exist.
5539func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
5540	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
5541		return nil, nil
5542	}
5543	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5544		autorest.AsJSON(),
5545		autorest.AsGet(),
5546		autorest.WithBaseURL(to.String(dpplr.NextLink)))
5547}
5548
5549// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
5550type DdosProtectionPlanListResultPage struct {
5551	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
5552	dpplr DdosProtectionPlanListResult
5553}
5554
5555// NextWithContext advances to the next page of values.  If there was an error making
5556// the request the page does not advance and the error is returned.
5557func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
5558	if tracing.IsEnabled() {
5559		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
5560		defer func() {
5561			sc := -1
5562			if page.Response().Response.Response != nil {
5563				sc = page.Response().Response.Response.StatusCode
5564			}
5565			tracing.EndSpan(ctx, sc, err)
5566		}()
5567	}
5568	next, err := page.fn(ctx, page.dpplr)
5569	if err != nil {
5570		return err
5571	}
5572	page.dpplr = next
5573	return nil
5574}
5575
5576// Next advances to the next page of values.  If there was an error making
5577// the request the page does not advance and the error is returned.
5578// Deprecated: Use NextWithContext() instead.
5579func (page *DdosProtectionPlanListResultPage) Next() error {
5580	return page.NextWithContext(context.Background())
5581}
5582
5583// NotDone returns true if the page enumeration should be started or is not yet complete.
5584func (page DdosProtectionPlanListResultPage) NotDone() bool {
5585	return !page.dpplr.IsEmpty()
5586}
5587
5588// Response returns the raw server response from the last page request.
5589func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
5590	return page.dpplr
5591}
5592
5593// Values returns the slice of values for the current page or nil if there are no values.
5594func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
5595	if page.dpplr.IsEmpty() {
5596		return nil
5597	}
5598	return *page.dpplr.Value
5599}
5600
5601// Creates a new instance of the DdosProtectionPlanListResultPage type.
5602func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
5603	return DdosProtectionPlanListResultPage{fn: getNextPage}
5604}
5605
5606// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
5607type DdosProtectionPlanPropertiesFormat struct {
5608	// 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.
5609	ResourceGUID *string `json:"resourceGuid,omitempty"`
5610	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
5611	ProvisioningState *string `json:"provisioningState,omitempty"`
5612	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
5613	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
5614}
5615
5616// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
5617// long-running operation.
5618type DdosProtectionPlansCreateOrUpdateFuture struct {
5619	azure.Future
5620}
5621
5622// Result returns the result of the asynchronous operation.
5623// If the operation has not completed it will return an error.
5624func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
5625	var done bool
5626	done, err = future.DoneWithContext(context.Background(), client)
5627	if err != nil {
5628		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5629		return
5630	}
5631	if !done {
5632		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
5633		return
5634	}
5635	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5636	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
5637		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
5638		if err != nil {
5639			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
5640		}
5641	}
5642	return
5643}
5644
5645// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
5646// long-running operation.
5647type DdosProtectionPlansDeleteFuture struct {
5648	azure.Future
5649}
5650
5651// Result returns the result of the asynchronous operation.
5652// If the operation has not completed it will return an error.
5653func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
5654	var done bool
5655	done, err = future.DoneWithContext(context.Background(), client)
5656	if err != nil {
5657		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
5658		return
5659	}
5660	if !done {
5661		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
5662		return
5663	}
5664	ar.Response = future.Response()
5665	return
5666}
5667
5668// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
5669// network. Standard DHCP option for a subnet overrides VNET DHCP options.
5670type DhcpOptions struct {
5671	// DNSServers - The list of DNS servers IP addresses.
5672	DNSServers *[]string `json:"dnsServers,omitempty"`
5673}
5674
5675// Dimension dimension of the metric.
5676type Dimension struct {
5677	// Name - The name of the dimension.
5678	Name *string `json:"name,omitempty"`
5679	// DisplayName - The display name of the dimension.
5680	DisplayName *string `json:"displayName,omitempty"`
5681	// InternalName - The internal name of the dimension.
5682	InternalName *string `json:"internalName,omitempty"`
5683}
5684
5685// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
5686type DNSNameAvailabilityResult struct {
5687	autorest.Response `json:"-"`
5688	// Available - Domain availability (True/False).
5689	Available *bool `json:"available,omitempty"`
5690}
5691
5692// EffectiveNetworkSecurityGroup effective network security group.
5693type EffectiveNetworkSecurityGroup struct {
5694	// NetworkSecurityGroup - The ID of network security group that is applied.
5695	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
5696	// Association - Associated resources.
5697	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
5698	// EffectiveSecurityRules - A collection of effective security rules.
5699	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
5700	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
5701	TagMap map[string][]string `json:"tagMap"`
5702}
5703
5704// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
5705func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
5706	objectMap := make(map[string]interface{})
5707	if ensg.NetworkSecurityGroup != nil {
5708		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
5709	}
5710	if ensg.Association != nil {
5711		objectMap["association"] = ensg.Association
5712	}
5713	if ensg.EffectiveSecurityRules != nil {
5714		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
5715	}
5716	if ensg.TagMap != nil {
5717		objectMap["tagMap"] = ensg.TagMap
5718	}
5719	return json.Marshal(objectMap)
5720}
5721
5722// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
5723type EffectiveNetworkSecurityGroupAssociation struct {
5724	// Subnet - The ID of the subnet if assigned.
5725	Subnet *SubResource `json:"subnet,omitempty"`
5726	// NetworkInterface - The ID of the network interface if assigned.
5727	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
5728}
5729
5730// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
5731// call.
5732type EffectiveNetworkSecurityGroupListResult struct {
5733	autorest.Response `json:"-"`
5734	// Value - A list of effective network security groups.
5735	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
5736	// NextLink - READ-ONLY; The URL to get the next set of results.
5737	NextLink *string `json:"nextLink,omitempty"`
5738}
5739
5740// EffectiveNetworkSecurityRule effective network security rules.
5741type EffectiveNetworkSecurityRule struct {
5742	// Name - The name of the security rule specified by the user (if created by the user).
5743	Name *string `json:"name,omitempty"`
5744	// Protocol - The network protocol this rule applies to. Possible values are: 'Tcp', 'Udp', and 'All'. Possible values include: 'TCP', 'UDP', 'All'
5745	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
5746	// SourcePortRange - The source port or range.
5747	SourcePortRange *string `json:"sourcePortRange,omitempty"`
5748	// DestinationPortRange - The destination port or range.
5749	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
5750	// 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 (*)
5751	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
5752	// 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 (*)
5753	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
5754	// SourceAddressPrefix - The source address prefix.
5755	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
5756	// DestinationAddressPrefix - The destination address prefix.
5757	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
5758	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
5759	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
5760	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
5761	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
5762	// ExpandedSourceAddressPrefix - The expanded source address prefix.
5763	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
5764	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
5765	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
5766	// Access - Whether network traffic is allowed or denied. Possible values are: 'Allow' and 'Deny'. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
5767	Access SecurityRuleAccess `json:"access,omitempty"`
5768	// Priority - The priority of the rule.
5769	Priority *int32 `json:"priority,omitempty"`
5770	// Direction - The direction of the rule. Possible values are: 'Inbound and Outbound'. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
5771	Direction SecurityRuleDirection `json:"direction,omitempty"`
5772}
5773
5774// EffectiveRoute effective Route
5775type EffectiveRoute struct {
5776	// Name - The name of the user defined route. This is optional.
5777	Name *string `json:"name,omitempty"`
5778	// Source - Who created the route. Possible values are: 'Unknown', 'User', 'VirtualNetworkGateway', and 'Default'. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
5779	Source EffectiveRouteSource `json:"source,omitempty"`
5780	// State - The value of effective route. Possible values are: 'Active' and 'Invalid'. Possible values include: 'EffectiveRouteStateActive', 'EffectiveRouteStateInvalid'
5781	State EffectiveRouteState `json:"state,omitempty"`
5782	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
5783	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
5784	// NextHopIPAddress - The IP address of the next hop of the effective route.
5785	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
5786	// 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'
5787	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
5788}
5789
5790// EffectiveRouteListResult response for list effective route API service call.
5791type EffectiveRouteListResult struct {
5792	autorest.Response `json:"-"`
5793	// Value - A list of effective routes.
5794	Value *[]EffectiveRoute `json:"value,omitempty"`
5795	// NextLink - READ-ONLY; The URL to get the next set of results.
5796	NextLink *string `json:"nextLink,omitempty"`
5797}
5798
5799// EndpointServiceResult endpoint service.
5800type EndpointServiceResult struct {
5801	// Name - READ-ONLY; Name of the endpoint service.
5802	Name *string `json:"name,omitempty"`
5803	// Type - READ-ONLY; Type of the endpoint service.
5804	Type *string `json:"type,omitempty"`
5805	// ID - Resource ID.
5806	ID *string `json:"id,omitempty"`
5807}
5808
5809// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
5810type EndpointServicesListResult struct {
5811	autorest.Response `json:"-"`
5812	// Value - List of available endpoint services in a region.
5813	Value *[]EndpointServiceResult `json:"value,omitempty"`
5814	// NextLink - The URL to get the next set of results.
5815	NextLink *string `json:"nextLink,omitempty"`
5816}
5817
5818// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
5819// values.
5820type EndpointServicesListResultIterator struct {
5821	i    int
5822	page EndpointServicesListResultPage
5823}
5824
5825// NextWithContext advances to the next value.  If there was an error making
5826// the request the iterator does not advance and the error is returned.
5827func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
5828	if tracing.IsEnabled() {
5829		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
5830		defer func() {
5831			sc := -1
5832			if iter.Response().Response.Response != nil {
5833				sc = iter.Response().Response.Response.StatusCode
5834			}
5835			tracing.EndSpan(ctx, sc, err)
5836		}()
5837	}
5838	iter.i++
5839	if iter.i < len(iter.page.Values()) {
5840		return nil
5841	}
5842	err = iter.page.NextWithContext(ctx)
5843	if err != nil {
5844		iter.i--
5845		return err
5846	}
5847	iter.i = 0
5848	return nil
5849}
5850
5851// Next advances to the next value.  If there was an error making
5852// the request the iterator does not advance and the error is returned.
5853// Deprecated: Use NextWithContext() instead.
5854func (iter *EndpointServicesListResultIterator) Next() error {
5855	return iter.NextWithContext(context.Background())
5856}
5857
5858// NotDone returns true if the enumeration should be started or is not yet complete.
5859func (iter EndpointServicesListResultIterator) NotDone() bool {
5860	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5861}
5862
5863// Response returns the raw server response from the last page request.
5864func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
5865	return iter.page.Response()
5866}
5867
5868// Value returns the current value or a zero-initialized value if the
5869// iterator has advanced beyond the end of the collection.
5870func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
5871	if !iter.page.NotDone() {
5872		return EndpointServiceResult{}
5873	}
5874	return iter.page.Values()[iter.i]
5875}
5876
5877// Creates a new instance of the EndpointServicesListResultIterator type.
5878func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
5879	return EndpointServicesListResultIterator{page: page}
5880}
5881
5882// IsEmpty returns true if the ListResult contains no values.
5883func (eslr EndpointServicesListResult) IsEmpty() bool {
5884	return eslr.Value == nil || len(*eslr.Value) == 0
5885}
5886
5887// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
5888// It returns nil if no more results exist.
5889func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
5890	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
5891		return nil, nil
5892	}
5893	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5894		autorest.AsJSON(),
5895		autorest.AsGet(),
5896		autorest.WithBaseURL(to.String(eslr.NextLink)))
5897}
5898
5899// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
5900type EndpointServicesListResultPage struct {
5901	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
5902	eslr EndpointServicesListResult
5903}
5904
5905// NextWithContext advances to the next page of values.  If there was an error making
5906// the request the page does not advance and the error is returned.
5907func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
5908	if tracing.IsEnabled() {
5909		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
5910		defer func() {
5911			sc := -1
5912			if page.Response().Response.Response != nil {
5913				sc = page.Response().Response.Response.StatusCode
5914			}
5915			tracing.EndSpan(ctx, sc, err)
5916		}()
5917	}
5918	next, err := page.fn(ctx, page.eslr)
5919	if err != nil {
5920		return err
5921	}
5922	page.eslr = next
5923	return nil
5924}
5925
5926// Next advances to the next page of values.  If there was an error making
5927// the request the page does not advance and the error is returned.
5928// Deprecated: Use NextWithContext() instead.
5929func (page *EndpointServicesListResultPage) Next() error {
5930	return page.NextWithContext(context.Background())
5931}
5932
5933// NotDone returns true if the page enumeration should be started or is not yet complete.
5934func (page EndpointServicesListResultPage) NotDone() bool {
5935	return !page.eslr.IsEmpty()
5936}
5937
5938// Response returns the raw server response from the last page request.
5939func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
5940	return page.eslr
5941}
5942
5943// Values returns the slice of values for the current page or nil if there are no values.
5944func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
5945	if page.eslr.IsEmpty() {
5946		return nil
5947	}
5948	return *page.eslr.Value
5949}
5950
5951// Creates a new instance of the EndpointServicesListResultPage type.
5952func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
5953	return EndpointServicesListResultPage{fn: getNextPage}
5954}
5955
5956// Error ...
5957type Error struct {
5958	Code       *string         `json:"code,omitempty"`
5959	Message    *string         `json:"message,omitempty"`
5960	Target     *string         `json:"target,omitempty"`
5961	Details    *[]ErrorDetails `json:"details,omitempty"`
5962	InnerError *string         `json:"innerError,omitempty"`
5963}
5964
5965// ErrorDetails ...
5966type ErrorDetails struct {
5967	Code    *string `json:"code,omitempty"`
5968	Target  *string `json:"target,omitempty"`
5969	Message *string `json:"message,omitempty"`
5970}
5971
5972// ExpressRouteCircuit expressRouteCircuit resource
5973type ExpressRouteCircuit struct {
5974	autorest.Response `json:"-"`
5975	// Sku - The SKU.
5976	Sku                                  *ExpressRouteCircuitSku `json:"sku,omitempty"`
5977	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
5978	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
5979	Etag *string `json:"etag,omitempty"`
5980	// ID - Resource ID.
5981	ID *string `json:"id,omitempty"`
5982	// Name - READ-ONLY; Resource name.
5983	Name *string `json:"name,omitempty"`
5984	// Type - READ-ONLY; Resource type.
5985	Type *string `json:"type,omitempty"`
5986	// Location - Resource location.
5987	Location *string `json:"location,omitempty"`
5988	// Tags - Resource tags.
5989	Tags map[string]*string `json:"tags"`
5990}
5991
5992// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
5993func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
5994	objectMap := make(map[string]interface{})
5995	if erc.Sku != nil {
5996		objectMap["sku"] = erc.Sku
5997	}
5998	if erc.ExpressRouteCircuitPropertiesFormat != nil {
5999		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
6000	}
6001	if erc.ID != nil {
6002		objectMap["id"] = erc.ID
6003	}
6004	if erc.Location != nil {
6005		objectMap["location"] = erc.Location
6006	}
6007	if erc.Tags != nil {
6008		objectMap["tags"] = erc.Tags
6009	}
6010	return json.Marshal(objectMap)
6011}
6012
6013// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
6014func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
6015	var m map[string]*json.RawMessage
6016	err := json.Unmarshal(body, &m)
6017	if err != nil {
6018		return err
6019	}
6020	for k, v := range m {
6021		switch k {
6022		case "sku":
6023			if v != nil {
6024				var sku ExpressRouteCircuitSku
6025				err = json.Unmarshal(*v, &sku)
6026				if err != nil {
6027					return err
6028				}
6029				erc.Sku = &sku
6030			}
6031		case "properties":
6032			if v != nil {
6033				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
6034				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
6035				if err != nil {
6036					return err
6037				}
6038				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
6039			}
6040		case "etag":
6041			if v != nil {
6042				var etag string
6043				err = json.Unmarshal(*v, &etag)
6044				if err != nil {
6045					return err
6046				}
6047				erc.Etag = &etag
6048			}
6049		case "id":
6050			if v != nil {
6051				var ID string
6052				err = json.Unmarshal(*v, &ID)
6053				if err != nil {
6054					return err
6055				}
6056				erc.ID = &ID
6057			}
6058		case "name":
6059			if v != nil {
6060				var name string
6061				err = json.Unmarshal(*v, &name)
6062				if err != nil {
6063					return err
6064				}
6065				erc.Name = &name
6066			}
6067		case "type":
6068			if v != nil {
6069				var typeVar string
6070				err = json.Unmarshal(*v, &typeVar)
6071				if err != nil {
6072					return err
6073				}
6074				erc.Type = &typeVar
6075			}
6076		case "location":
6077			if v != nil {
6078				var location string
6079				err = json.Unmarshal(*v, &location)
6080				if err != nil {
6081					return err
6082				}
6083				erc.Location = &location
6084			}
6085		case "tags":
6086			if v != nil {
6087				var tags map[string]*string
6088				err = json.Unmarshal(*v, &tags)
6089				if err != nil {
6090					return err
6091				}
6092				erc.Tags = tags
6093			}
6094		}
6095	}
6096
6097	return nil
6098}
6099
6100// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
6101type ExpressRouteCircuitArpTable struct {
6102	// Age - Age
6103	Age *int32 `json:"age,omitempty"`
6104	// Interface - Interface
6105	Interface *string `json:"interface,omitempty"`
6106	// IPAddress - The IP address.
6107	IPAddress *string `json:"ipAddress,omitempty"`
6108	// MacAddress - The MAC address.
6109	MacAddress *string `json:"macAddress,omitempty"`
6110}
6111
6112// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
6113type ExpressRouteCircuitAuthorization struct {
6114	autorest.Response              `json:"-"`
6115	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
6116	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6117	Name *string `json:"name,omitempty"`
6118	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6119	Etag *string `json:"etag,omitempty"`
6120	// ID - Resource ID.
6121	ID *string `json:"id,omitempty"`
6122}
6123
6124// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
6125func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
6126	objectMap := make(map[string]interface{})
6127	if erca.AuthorizationPropertiesFormat != nil {
6128		objectMap["properties"] = erca.AuthorizationPropertiesFormat
6129	}
6130	if erca.Name != nil {
6131		objectMap["name"] = erca.Name
6132	}
6133	if erca.ID != nil {
6134		objectMap["id"] = erca.ID
6135	}
6136	return json.Marshal(objectMap)
6137}
6138
6139// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
6140func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
6141	var m map[string]*json.RawMessage
6142	err := json.Unmarshal(body, &m)
6143	if err != nil {
6144		return err
6145	}
6146	for k, v := range m {
6147		switch k {
6148		case "properties":
6149			if v != nil {
6150				var authorizationPropertiesFormat AuthorizationPropertiesFormat
6151				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
6152				if err != nil {
6153					return err
6154				}
6155				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
6156			}
6157		case "name":
6158			if v != nil {
6159				var name string
6160				err = json.Unmarshal(*v, &name)
6161				if err != nil {
6162					return err
6163				}
6164				erca.Name = &name
6165			}
6166		case "etag":
6167			if v != nil {
6168				var etag string
6169				err = json.Unmarshal(*v, &etag)
6170				if err != nil {
6171					return err
6172				}
6173				erca.Etag = &etag
6174			}
6175		case "id":
6176			if v != nil {
6177				var ID string
6178				err = json.Unmarshal(*v, &ID)
6179				if err != nil {
6180					return err
6181				}
6182				erca.ID = &ID
6183			}
6184		}
6185	}
6186
6187	return nil
6188}
6189
6190// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
6191// results of a long-running operation.
6192type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
6193	azure.Future
6194}
6195
6196// Result returns the result of the asynchronous operation.
6197// If the operation has not completed it will return an error.
6198func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
6199	var done bool
6200	done, err = future.DoneWithContext(context.Background(), client)
6201	if err != nil {
6202		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6203		return
6204	}
6205	if !done {
6206		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
6207		return
6208	}
6209	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6210	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
6211		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
6212		if err != nil {
6213			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
6214		}
6215	}
6216	return
6217}
6218
6219// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
6220// of a long-running operation.
6221type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
6222	azure.Future
6223}
6224
6225// Result returns the result of the asynchronous operation.
6226// If the operation has not completed it will return an error.
6227func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
6228	var done bool
6229	done, err = future.DoneWithContext(context.Background(), client)
6230	if err != nil {
6231		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
6232		return
6233	}
6234	if !done {
6235		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
6236		return
6237	}
6238	ar.Response = future.Response()
6239	return
6240}
6241
6242// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
6243// resource.
6244type ExpressRouteCircuitConnection struct {
6245	autorest.Response                              `json:"-"`
6246	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
6247	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6248	Name *string `json:"name,omitempty"`
6249	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6250	Etag *string `json:"etag,omitempty"`
6251	// ID - Resource ID.
6252	ID *string `json:"id,omitempty"`
6253}
6254
6255// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
6256func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
6257	objectMap := make(map[string]interface{})
6258	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
6259		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
6260	}
6261	if ercc.Name != nil {
6262		objectMap["name"] = ercc.Name
6263	}
6264	if ercc.ID != nil {
6265		objectMap["id"] = ercc.ID
6266	}
6267	return json.Marshal(objectMap)
6268}
6269
6270// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
6271func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
6272	var m map[string]*json.RawMessage
6273	err := json.Unmarshal(body, &m)
6274	if err != nil {
6275		return err
6276	}
6277	for k, v := range m {
6278		switch k {
6279		case "properties":
6280			if v != nil {
6281				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
6282				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
6283				if err != nil {
6284					return err
6285				}
6286				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
6287			}
6288		case "name":
6289			if v != nil {
6290				var name string
6291				err = json.Unmarshal(*v, &name)
6292				if err != nil {
6293					return err
6294				}
6295				ercc.Name = &name
6296			}
6297		case "etag":
6298			if v != nil {
6299				var etag string
6300				err = json.Unmarshal(*v, &etag)
6301				if err != nil {
6302					return err
6303				}
6304				ercc.Etag = &etag
6305			}
6306		case "id":
6307			if v != nil {
6308				var ID string
6309				err = json.Unmarshal(*v, &ID)
6310				if err != nil {
6311					return err
6312				}
6313				ercc.ID = &ID
6314			}
6315		}
6316	}
6317
6318	return nil
6319}
6320
6321// ExpressRouteCircuitConnectionPropertiesFormat ...
6322type ExpressRouteCircuitConnectionPropertiesFormat struct {
6323	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
6324	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
6325	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
6326	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
6327	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
6328	AddressPrefix *string `json:"addressPrefix,omitempty"`
6329	// AuthorizationKey - The authorization key.
6330	AuthorizationKey *string `json:"authorizationKey,omitempty"`
6331	// CircuitConnectionStatus - READ-ONLY; Express Route Circuit Connection State. Possible values are: 'Connected' and 'Disconnected'. Possible values include: 'Connected', 'Connecting', 'Disconnected'
6332	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
6333	// ProvisioningState - READ-ONLY; Provisioning state of the circuit connection resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
6334	ProvisioningState *string `json:"provisioningState,omitempty"`
6335}
6336
6337// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
6338// results of a long-running operation.
6339type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
6340	azure.Future
6341}
6342
6343// Result returns the result of the asynchronous operation.
6344// If the operation has not completed it will return an error.
6345func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
6346	var done bool
6347	done, err = future.DoneWithContext(context.Background(), client)
6348	if err != nil {
6349		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6350		return
6351	}
6352	if !done {
6353		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
6354		return
6355	}
6356	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6357	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
6358		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
6359		if err != nil {
6360			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
6361		}
6362	}
6363	return
6364}
6365
6366// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
6367// long-running operation.
6368type ExpressRouteCircuitConnectionsDeleteFuture struct {
6369	azure.Future
6370}
6371
6372// Result returns the result of the asynchronous operation.
6373// If the operation has not completed it will return an error.
6374func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
6375	var done bool
6376	done, err = future.DoneWithContext(context.Background(), client)
6377	if err != nil {
6378		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
6379		return
6380	}
6381	if !done {
6382		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
6383		return
6384	}
6385	ar.Response = future.Response()
6386	return
6387}
6388
6389// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
6390type ExpressRouteCircuitListResult struct {
6391	autorest.Response `json:"-"`
6392	// Value - A list of ExpressRouteCircuits in a resource group.
6393	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
6394	// NextLink - The URL to get the next set of results.
6395	NextLink *string `json:"nextLink,omitempty"`
6396}
6397
6398// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
6399// values.
6400type ExpressRouteCircuitListResultIterator struct {
6401	i    int
6402	page ExpressRouteCircuitListResultPage
6403}
6404
6405// NextWithContext advances to the next value.  If there was an error making
6406// the request the iterator does not advance and the error is returned.
6407func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
6408	if tracing.IsEnabled() {
6409		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
6410		defer func() {
6411			sc := -1
6412			if iter.Response().Response.Response != nil {
6413				sc = iter.Response().Response.Response.StatusCode
6414			}
6415			tracing.EndSpan(ctx, sc, err)
6416		}()
6417	}
6418	iter.i++
6419	if iter.i < len(iter.page.Values()) {
6420		return nil
6421	}
6422	err = iter.page.NextWithContext(ctx)
6423	if err != nil {
6424		iter.i--
6425		return err
6426	}
6427	iter.i = 0
6428	return nil
6429}
6430
6431// Next advances to the next value.  If there was an error making
6432// the request the iterator does not advance and the error is returned.
6433// Deprecated: Use NextWithContext() instead.
6434func (iter *ExpressRouteCircuitListResultIterator) Next() error {
6435	return iter.NextWithContext(context.Background())
6436}
6437
6438// NotDone returns true if the enumeration should be started or is not yet complete.
6439func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
6440	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6441}
6442
6443// Response returns the raw server response from the last page request.
6444func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
6445	return iter.page.Response()
6446}
6447
6448// Value returns the current value or a zero-initialized value if the
6449// iterator has advanced beyond the end of the collection.
6450func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
6451	if !iter.page.NotDone() {
6452		return ExpressRouteCircuit{}
6453	}
6454	return iter.page.Values()[iter.i]
6455}
6456
6457// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
6458func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
6459	return ExpressRouteCircuitListResultIterator{page: page}
6460}
6461
6462// IsEmpty returns true if the ListResult contains no values.
6463func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
6464	return erclr.Value == nil || len(*erclr.Value) == 0
6465}
6466
6467// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
6468// It returns nil if no more results exist.
6469func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
6470	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
6471		return nil, nil
6472	}
6473	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6474		autorest.AsJSON(),
6475		autorest.AsGet(),
6476		autorest.WithBaseURL(to.String(erclr.NextLink)))
6477}
6478
6479// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
6480type ExpressRouteCircuitListResultPage struct {
6481	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
6482	erclr ExpressRouteCircuitListResult
6483}
6484
6485// NextWithContext advances to the next page of values.  If there was an error making
6486// the request the page does not advance and the error is returned.
6487func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
6488	if tracing.IsEnabled() {
6489		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
6490		defer func() {
6491			sc := -1
6492			if page.Response().Response.Response != nil {
6493				sc = page.Response().Response.Response.StatusCode
6494			}
6495			tracing.EndSpan(ctx, sc, err)
6496		}()
6497	}
6498	next, err := page.fn(ctx, page.erclr)
6499	if err != nil {
6500		return err
6501	}
6502	page.erclr = next
6503	return nil
6504}
6505
6506// Next advances to the next page of values.  If there was an error making
6507// the request the page does not advance and the error is returned.
6508// Deprecated: Use NextWithContext() instead.
6509func (page *ExpressRouteCircuitListResultPage) Next() error {
6510	return page.NextWithContext(context.Background())
6511}
6512
6513// NotDone returns true if the page enumeration should be started or is not yet complete.
6514func (page ExpressRouteCircuitListResultPage) NotDone() bool {
6515	return !page.erclr.IsEmpty()
6516}
6517
6518// Response returns the raw server response from the last page request.
6519func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
6520	return page.erclr
6521}
6522
6523// Values returns the slice of values for the current page or nil if there are no values.
6524func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
6525	if page.erclr.IsEmpty() {
6526		return nil
6527	}
6528	return *page.erclr.Value
6529}
6530
6531// Creates a new instance of the ExpressRouteCircuitListResultPage type.
6532func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
6533	return ExpressRouteCircuitListResultPage{fn: getNextPage}
6534}
6535
6536// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
6537type ExpressRouteCircuitPeering struct {
6538	autorest.Response                           `json:"-"`
6539	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
6540	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6541	Name *string `json:"name,omitempty"`
6542	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6543	Etag *string `json:"etag,omitempty"`
6544	// ID - Resource ID.
6545	ID *string `json:"id,omitempty"`
6546}
6547
6548// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
6549func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
6550	objectMap := make(map[string]interface{})
6551	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
6552		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
6553	}
6554	if ercp.Name != nil {
6555		objectMap["name"] = ercp.Name
6556	}
6557	if ercp.ID != nil {
6558		objectMap["id"] = ercp.ID
6559	}
6560	return json.Marshal(objectMap)
6561}
6562
6563// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
6564func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
6565	var m map[string]*json.RawMessage
6566	err := json.Unmarshal(body, &m)
6567	if err != nil {
6568		return err
6569	}
6570	for k, v := range m {
6571		switch k {
6572		case "properties":
6573			if v != nil {
6574				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
6575				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
6576				if err != nil {
6577					return err
6578				}
6579				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
6580			}
6581		case "name":
6582			if v != nil {
6583				var name string
6584				err = json.Unmarshal(*v, &name)
6585				if err != nil {
6586					return err
6587				}
6588				ercp.Name = &name
6589			}
6590		case "etag":
6591			if v != nil {
6592				var etag string
6593				err = json.Unmarshal(*v, &etag)
6594				if err != nil {
6595					return err
6596				}
6597				ercp.Etag = &etag
6598			}
6599		case "id":
6600			if v != nil {
6601				var ID string
6602				err = json.Unmarshal(*v, &ID)
6603				if err != nil {
6604					return err
6605				}
6606				ercp.ID = &ID
6607			}
6608		}
6609	}
6610
6611	return nil
6612}
6613
6614// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
6615type ExpressRouteCircuitPeeringConfig struct {
6616	// AdvertisedPublicPrefixes - The reference of AdvertisedPublicPrefixes.
6617	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
6618	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering
6619	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
6620	// AdvertisedPublicPrefixesState - AdvertisedPublicPrefixState of the Peering resource. Possible values are 'NotConfigured', 'Configuring', 'Configured', and 'ValidationNeeded'. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
6621	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
6622	// LegacyMode - The legacy mode of the peering.
6623	LegacyMode *int32 `json:"legacyMode,omitempty"`
6624	// CustomerASN - The CustomerASN of the peering.
6625	CustomerASN *int32 `json:"customerASN,omitempty"`
6626	// RoutingRegistryName - The RoutingRegistryName of the configuration.
6627	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
6628}
6629
6630// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
6631// that belong to an ExpressRouteCircuit.
6632type ExpressRouteCircuitPeeringListResult struct {
6633	autorest.Response `json:"-"`
6634	// Value - The peerings in an express route circuit.
6635	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
6636	// NextLink - The URL to get the next set of results.
6637	NextLink *string `json:"nextLink,omitempty"`
6638}
6639
6640// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
6641// ExpressRouteCircuitPeering values.
6642type ExpressRouteCircuitPeeringListResultIterator struct {
6643	i    int
6644	page ExpressRouteCircuitPeeringListResultPage
6645}
6646
6647// NextWithContext advances to the next value.  If there was an error making
6648// the request the iterator does not advance and the error is returned.
6649func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
6650	if tracing.IsEnabled() {
6651		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
6652		defer func() {
6653			sc := -1
6654			if iter.Response().Response.Response != nil {
6655				sc = iter.Response().Response.Response.StatusCode
6656			}
6657			tracing.EndSpan(ctx, sc, err)
6658		}()
6659	}
6660	iter.i++
6661	if iter.i < len(iter.page.Values()) {
6662		return nil
6663	}
6664	err = iter.page.NextWithContext(ctx)
6665	if err != nil {
6666		iter.i--
6667		return err
6668	}
6669	iter.i = 0
6670	return nil
6671}
6672
6673// Next advances to the next value.  If there was an error making
6674// the request the iterator does not advance and the error is returned.
6675// Deprecated: Use NextWithContext() instead.
6676func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
6677	return iter.NextWithContext(context.Background())
6678}
6679
6680// NotDone returns true if the enumeration should be started or is not yet complete.
6681func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
6682	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6683}
6684
6685// Response returns the raw server response from the last page request.
6686func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
6687	return iter.page.Response()
6688}
6689
6690// Value returns the current value or a zero-initialized value if the
6691// iterator has advanced beyond the end of the collection.
6692func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
6693	if !iter.page.NotDone() {
6694		return ExpressRouteCircuitPeering{}
6695	}
6696	return iter.page.Values()[iter.i]
6697}
6698
6699// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
6700func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
6701	return ExpressRouteCircuitPeeringListResultIterator{page: page}
6702}
6703
6704// IsEmpty returns true if the ListResult contains no values.
6705func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
6706	return ercplr.Value == nil || len(*ercplr.Value) == 0
6707}
6708
6709// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
6710// It returns nil if no more results exist.
6711func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
6712	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
6713		return nil, nil
6714	}
6715	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6716		autorest.AsJSON(),
6717		autorest.AsGet(),
6718		autorest.WithBaseURL(to.String(ercplr.NextLink)))
6719}
6720
6721// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
6722type ExpressRouteCircuitPeeringListResultPage struct {
6723	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
6724	ercplr ExpressRouteCircuitPeeringListResult
6725}
6726
6727// NextWithContext advances to the next page of values.  If there was an error making
6728// the request the page does not advance and the error is returned.
6729func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
6730	if tracing.IsEnabled() {
6731		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
6732		defer func() {
6733			sc := -1
6734			if page.Response().Response.Response != nil {
6735				sc = page.Response().Response.Response.StatusCode
6736			}
6737			tracing.EndSpan(ctx, sc, err)
6738		}()
6739	}
6740	next, err := page.fn(ctx, page.ercplr)
6741	if err != nil {
6742		return err
6743	}
6744	page.ercplr = next
6745	return nil
6746}
6747
6748// Next advances to the next page of values.  If there was an error making
6749// the request the page does not advance and the error is returned.
6750// Deprecated: Use NextWithContext() instead.
6751func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
6752	return page.NextWithContext(context.Background())
6753}
6754
6755// NotDone returns true if the page enumeration should be started or is not yet complete.
6756func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
6757	return !page.ercplr.IsEmpty()
6758}
6759
6760// Response returns the raw server response from the last page request.
6761func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
6762	return page.ercplr
6763}
6764
6765// Values returns the slice of values for the current page or nil if there are no values.
6766func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
6767	if page.ercplr.IsEmpty() {
6768		return nil
6769	}
6770	return *page.ercplr.Value
6771}
6772
6773// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
6774func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
6775	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
6776}
6777
6778// ExpressRouteCircuitPeeringPropertiesFormat ...
6779type ExpressRouteCircuitPeeringPropertiesFormat struct {
6780	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
6781	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
6782	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
6783	State ExpressRoutePeeringState `json:"state,omitempty"`
6784	// AzureASN - The Azure ASN.
6785	AzureASN *int32 `json:"azureASN,omitempty"`
6786	// PeerASN - The peer ASN.
6787	PeerASN *int64 `json:"peerASN,omitempty"`
6788	// PrimaryPeerAddressPrefix - The primary address prefix.
6789	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
6790	// SecondaryPeerAddressPrefix - The secondary address prefix.
6791	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
6792	// PrimaryAzurePort - The primary port.
6793	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
6794	// SecondaryAzurePort - The secondary port.
6795	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
6796	// SharedKey - The shared key.
6797	SharedKey *string `json:"sharedKey,omitempty"`
6798	// VlanID - The VLAN ID.
6799	VlanID *int32 `json:"vlanId,omitempty"`
6800	// MicrosoftPeeringConfig - The Microsoft peering configuration.
6801	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
6802	// Stats - Gets peering stats.
6803	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
6804	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6805	ProvisioningState *string `json:"provisioningState,omitempty"`
6806	// GatewayManagerEtag - The GatewayManager Etag.
6807	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
6808	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
6809	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
6810	// RouteFilter - The reference of the RouteFilter resource.
6811	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
6812	// Ipv6PeeringConfig - The IPv6 peering configuration.
6813	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
6814	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
6815	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
6816}
6817
6818// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
6819// of a long-running operation.
6820type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
6821	azure.Future
6822}
6823
6824// Result returns the result of the asynchronous operation.
6825// If the operation has not completed it will return an error.
6826func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
6827	var done bool
6828	done, err = future.DoneWithContext(context.Background(), client)
6829	if err != nil {
6830		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6831		return
6832	}
6833	if !done {
6834		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
6835		return
6836	}
6837	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6838	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
6839		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
6840		if err != nil {
6841			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
6842		}
6843	}
6844	return
6845}
6846
6847// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
6848// long-running operation.
6849type ExpressRouteCircuitPeeringsDeleteFuture struct {
6850	azure.Future
6851}
6852
6853// Result returns the result of the asynchronous operation.
6854// If the operation has not completed it will return an error.
6855func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
6856	var done bool
6857	done, err = future.DoneWithContext(context.Background(), client)
6858	if err != nil {
6859		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
6860		return
6861	}
6862	if !done {
6863		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
6864		return
6865	}
6866	ar.Response = future.Response()
6867	return
6868}
6869
6870// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
6871type ExpressRouteCircuitPropertiesFormat struct {
6872	// AllowClassicOperations - Allow classic operations
6873	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
6874	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
6875	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
6876	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values are 'NotProvisioned', 'Provisioning', 'Provisioned', and 'Deprovisioning'. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
6877	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
6878	// Authorizations - The list of authorizations.
6879	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
6880	// Peerings - The list of peerings.
6881	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
6882	// ServiceKey - The ServiceKey.
6883	ServiceKey *string `json:"serviceKey,omitempty"`
6884	// ServiceProviderNotes - The ServiceProviderNotes.
6885	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
6886	// ServiceProviderProperties - The ServiceProviderProperties.
6887	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
6888	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6889	ProvisioningState *string `json:"provisioningState,omitempty"`
6890	// GatewayManagerEtag - The GatewayManager Etag.
6891	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
6892}
6893
6894// ExpressRouteCircuitReference ...
6895type ExpressRouteCircuitReference struct {
6896	// ID - Corresponding Express Route Circuit Id.
6897	ID *string `json:"id,omitempty"`
6898}
6899
6900// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit
6901type ExpressRouteCircuitRoutesTable struct {
6902	// NetworkProperty - network
6903	NetworkProperty *string `json:"network,omitempty"`
6904	// NextHop - nextHop
6905	NextHop *string `json:"nextHop,omitempty"`
6906	// LocPrf - locPrf
6907	LocPrf *string `json:"locPrf,omitempty"`
6908	// Weight - weight.
6909	Weight *int32 `json:"weight,omitempty"`
6910	// Path - path
6911	Path *string `json:"path,omitempty"`
6912}
6913
6914// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
6915type ExpressRouteCircuitRoutesTableSummary struct {
6916	// Neighbor - Neighbor
6917	Neighbor *string `json:"neighbor,omitempty"`
6918	// V - BGP version number spoken to the neighbor.
6919	V *int32 `json:"v,omitempty"`
6920	// As - Autonomous system number.
6921	As *int32 `json:"as,omitempty"`
6922	// 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.
6923	UpDown *string `json:"upDown,omitempty"`
6924	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
6925	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
6926}
6927
6928// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
6929// Circuits API.
6930type ExpressRouteCircuitsArpTableListResult struct {
6931	autorest.Response `json:"-"`
6932	// Value - Gets list of the ARP table.
6933	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
6934	// NextLink - The URL to get the next set of results.
6935	NextLink *string `json:"nextLink,omitempty"`
6936}
6937
6938// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
6939// long-running operation.
6940type ExpressRouteCircuitsCreateOrUpdateFuture struct {
6941	azure.Future
6942}
6943
6944// Result returns the result of the asynchronous operation.
6945// If the operation has not completed it will return an error.
6946func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
6947	var done bool
6948	done, err = future.DoneWithContext(context.Background(), client)
6949	if err != nil {
6950		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6951		return
6952	}
6953	if !done {
6954		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
6955		return
6956	}
6957	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6958	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
6959		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
6960		if err != nil {
6961			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
6962		}
6963	}
6964	return
6965}
6966
6967// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
6968// long-running operation.
6969type ExpressRouteCircuitsDeleteFuture struct {
6970	azure.Future
6971}
6972
6973// Result returns the result of the asynchronous operation.
6974// If the operation has not completed it will return an error.
6975func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
6976	var done bool
6977	done, err = future.DoneWithContext(context.Background(), client)
6978	if err != nil {
6979		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
6980		return
6981	}
6982	if !done {
6983		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
6984		return
6985	}
6986	ar.Response = future.Response()
6987	return
6988}
6989
6990// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
6991// ExpressRouteCircuit.
6992type ExpressRouteCircuitServiceProviderProperties struct {
6993	// ServiceProviderName - The serviceProviderName.
6994	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
6995	// PeeringLocation - The peering location.
6996	PeeringLocation *string `json:"peeringLocation,omitempty"`
6997	// BandwidthInMbps - The BandwidthInMbps.
6998	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
6999}
7000
7001// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
7002type ExpressRouteCircuitSku struct {
7003	// Name - The name of the SKU.
7004	Name *string `json:"name,omitempty"`
7005	// Tier - The tier of the SKU. Possible values are 'Standard' and 'Premium'. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium'
7006	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
7007	// Family - The family of the SKU. Possible values are: 'UnlimitedData' and 'MeteredData'. Possible values include: 'UnlimitedData', 'MeteredData'
7008	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
7009}
7010
7011// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
7012// long-running operation.
7013type ExpressRouteCircuitsListArpTableFuture struct {
7014	azure.Future
7015}
7016
7017// Result returns the result of the asynchronous operation.
7018// If the operation has not completed it will return an error.
7019func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
7020	var done bool
7021	done, err = future.DoneWithContext(context.Background(), client)
7022	if err != nil {
7023		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
7024		return
7025	}
7026	if !done {
7027		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
7028		return
7029	}
7030	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7031	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
7032		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
7033		if err != nil {
7034			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
7035		}
7036	}
7037	return
7038}
7039
7040// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
7041// long-running operation.
7042type ExpressRouteCircuitsListRoutesTableFuture struct {
7043	azure.Future
7044}
7045
7046// Result returns the result of the asynchronous operation.
7047// If the operation has not completed it will return an error.
7048func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
7049	var done bool
7050	done, err = future.DoneWithContext(context.Background(), client)
7051	if err != nil {
7052		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
7053		return
7054	}
7055	if !done {
7056		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
7057		return
7058	}
7059	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7060	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
7061		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
7062		if err != nil {
7063			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
7064		}
7065	}
7066	return
7067}
7068
7069// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
7070// results of a long-running operation.
7071type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
7072	azure.Future
7073}
7074
7075// Result returns the result of the asynchronous operation.
7076// If the operation has not completed it will return an error.
7077func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
7078	var done bool
7079	done, err = future.DoneWithContext(context.Background(), client)
7080	if err != nil {
7081		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
7082		return
7083	}
7084	if !done {
7085		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
7086		return
7087	}
7088	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7089	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
7090		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
7091		if err != nil {
7092			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
7093		}
7094	}
7095	return
7096}
7097
7098// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
7099// Circuits API.
7100type ExpressRouteCircuitsRoutesTableListResult struct {
7101	autorest.Response `json:"-"`
7102	// Value - The list of routes table.
7103	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
7104	// NextLink - The URL to get the next set of results.
7105	NextLink *string `json:"nextLink,omitempty"`
7106}
7107
7108// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
7109// Express Route Circuits API.
7110type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
7111	autorest.Response `json:"-"`
7112	// Value - A list of the routes table.
7113	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
7114	// NextLink - The URL to get the next set of results.
7115	NextLink *string `json:"nextLink,omitempty"`
7116}
7117
7118// ExpressRouteCircuitStats contains stats associated with the peering.
7119type ExpressRouteCircuitStats struct {
7120	autorest.Response `json:"-"`
7121	// PrimarybytesIn - Gets BytesIn of the peering.
7122	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
7123	// PrimarybytesOut - Gets BytesOut of the peering.
7124	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
7125	// SecondarybytesIn - Gets BytesIn of the peering.
7126	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
7127	// SecondarybytesOut - Gets BytesOut of the peering.
7128	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
7129}
7130
7131// ExpressRouteCircuitsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
7132// long-running operation.
7133type ExpressRouteCircuitsUpdateTagsFuture struct {
7134	azure.Future
7135}
7136
7137// Result returns the result of the asynchronous operation.
7138// If the operation has not completed it will return an error.
7139func (future *ExpressRouteCircuitsUpdateTagsFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
7140	var done bool
7141	done, err = future.DoneWithContext(context.Background(), client)
7142	if err != nil {
7143		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
7144		return
7145	}
7146	if !done {
7147		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsUpdateTagsFuture")
7148		return
7149	}
7150	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7151	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
7152		erc, err = client.UpdateTagsResponder(erc.Response.Response)
7153		if err != nil {
7154			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", erc.Response.Response, "Failure responding to request")
7155		}
7156	}
7157	return
7158}
7159
7160// ExpressRouteCrossConnection expressRouteCrossConnection resource
7161type ExpressRouteCrossConnection struct {
7162	autorest.Response                      `json:"-"`
7163	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
7164	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
7165	Etag *string `json:"etag,omitempty"`
7166	// ID - Resource ID.
7167	ID *string `json:"id,omitempty"`
7168	// Name - READ-ONLY; Resource name.
7169	Name *string `json:"name,omitempty"`
7170	// Type - READ-ONLY; Resource type.
7171	Type *string `json:"type,omitempty"`
7172	// Location - Resource location.
7173	Location *string `json:"location,omitempty"`
7174	// Tags - Resource tags.
7175	Tags map[string]*string `json:"tags"`
7176}
7177
7178// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
7179func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
7180	objectMap := make(map[string]interface{})
7181	if ercc.ExpressRouteCrossConnectionProperties != nil {
7182		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
7183	}
7184	if ercc.ID != nil {
7185		objectMap["id"] = ercc.ID
7186	}
7187	if ercc.Location != nil {
7188		objectMap["location"] = ercc.Location
7189	}
7190	if ercc.Tags != nil {
7191		objectMap["tags"] = ercc.Tags
7192	}
7193	return json.Marshal(objectMap)
7194}
7195
7196// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
7197func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
7198	var m map[string]*json.RawMessage
7199	err := json.Unmarshal(body, &m)
7200	if err != nil {
7201		return err
7202	}
7203	for k, v := range m {
7204		switch k {
7205		case "properties":
7206			if v != nil {
7207				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
7208				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
7209				if err != nil {
7210					return err
7211				}
7212				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
7213			}
7214		case "etag":
7215			if v != nil {
7216				var etag string
7217				err = json.Unmarshal(*v, &etag)
7218				if err != nil {
7219					return err
7220				}
7221				ercc.Etag = &etag
7222			}
7223		case "id":
7224			if v != nil {
7225				var ID string
7226				err = json.Unmarshal(*v, &ID)
7227				if err != nil {
7228					return err
7229				}
7230				ercc.ID = &ID
7231			}
7232		case "name":
7233			if v != nil {
7234				var name string
7235				err = json.Unmarshal(*v, &name)
7236				if err != nil {
7237					return err
7238				}
7239				ercc.Name = &name
7240			}
7241		case "type":
7242			if v != nil {
7243				var typeVar string
7244				err = json.Unmarshal(*v, &typeVar)
7245				if err != nil {
7246					return err
7247				}
7248				ercc.Type = &typeVar
7249			}
7250		case "location":
7251			if v != nil {
7252				var location string
7253				err = json.Unmarshal(*v, &location)
7254				if err != nil {
7255					return err
7256				}
7257				ercc.Location = &location
7258			}
7259		case "tags":
7260			if v != nil {
7261				var tags map[string]*string
7262				err = json.Unmarshal(*v, &tags)
7263				if err != nil {
7264					return err
7265				}
7266				ercc.Tags = tags
7267			}
7268		}
7269	}
7270
7271	return nil
7272}
7273
7274// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
7275type ExpressRouteCrossConnectionListResult struct {
7276	autorest.Response `json:"-"`
7277	// Value - A list of ExpressRouteCrossConnection resources.
7278	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
7279	// NextLink - READ-ONLY; The URL to get the next set of results.
7280	NextLink *string `json:"nextLink,omitempty"`
7281}
7282
7283// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
7284// ExpressRouteCrossConnection values.
7285type ExpressRouteCrossConnectionListResultIterator struct {
7286	i    int
7287	page ExpressRouteCrossConnectionListResultPage
7288}
7289
7290// NextWithContext advances to the next value.  If there was an error making
7291// the request the iterator does not advance and the error is returned.
7292func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
7293	if tracing.IsEnabled() {
7294		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
7295		defer func() {
7296			sc := -1
7297			if iter.Response().Response.Response != nil {
7298				sc = iter.Response().Response.Response.StatusCode
7299			}
7300			tracing.EndSpan(ctx, sc, err)
7301		}()
7302	}
7303	iter.i++
7304	if iter.i < len(iter.page.Values()) {
7305		return nil
7306	}
7307	err = iter.page.NextWithContext(ctx)
7308	if err != nil {
7309		iter.i--
7310		return err
7311	}
7312	iter.i = 0
7313	return nil
7314}
7315
7316// Next advances to the next value.  If there was an error making
7317// the request the iterator does not advance and the error is returned.
7318// Deprecated: Use NextWithContext() instead.
7319func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
7320	return iter.NextWithContext(context.Background())
7321}
7322
7323// NotDone returns true if the enumeration should be started or is not yet complete.
7324func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
7325	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7326}
7327
7328// Response returns the raw server response from the last page request.
7329func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
7330	return iter.page.Response()
7331}
7332
7333// Value returns the current value or a zero-initialized value if the
7334// iterator has advanced beyond the end of the collection.
7335func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
7336	if !iter.page.NotDone() {
7337		return ExpressRouteCrossConnection{}
7338	}
7339	return iter.page.Values()[iter.i]
7340}
7341
7342// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
7343func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
7344	return ExpressRouteCrossConnectionListResultIterator{page: page}
7345}
7346
7347// IsEmpty returns true if the ListResult contains no values.
7348func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
7349	return ercclr.Value == nil || len(*ercclr.Value) == 0
7350}
7351
7352// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
7353// It returns nil if no more results exist.
7354func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
7355	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
7356		return nil, nil
7357	}
7358	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7359		autorest.AsJSON(),
7360		autorest.AsGet(),
7361		autorest.WithBaseURL(to.String(ercclr.NextLink)))
7362}
7363
7364// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
7365type ExpressRouteCrossConnectionListResultPage struct {
7366	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
7367	ercclr ExpressRouteCrossConnectionListResult
7368}
7369
7370// NextWithContext advances to the next page of values.  If there was an error making
7371// the request the page does not advance and the error is returned.
7372func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
7373	if tracing.IsEnabled() {
7374		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
7375		defer func() {
7376			sc := -1
7377			if page.Response().Response.Response != nil {
7378				sc = page.Response().Response.Response.StatusCode
7379			}
7380			tracing.EndSpan(ctx, sc, err)
7381		}()
7382	}
7383	next, err := page.fn(ctx, page.ercclr)
7384	if err != nil {
7385		return err
7386	}
7387	page.ercclr = next
7388	return nil
7389}
7390
7391// Next advances to the next page of values.  If there was an error making
7392// the request the page does not advance and the error is returned.
7393// Deprecated: Use NextWithContext() instead.
7394func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
7395	return page.NextWithContext(context.Background())
7396}
7397
7398// NotDone returns true if the page enumeration should be started or is not yet complete.
7399func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
7400	return !page.ercclr.IsEmpty()
7401}
7402
7403// Response returns the raw server response from the last page request.
7404func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
7405	return page.ercclr
7406}
7407
7408// Values returns the slice of values for the current page or nil if there are no values.
7409func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
7410	if page.ercclr.IsEmpty() {
7411		return nil
7412	}
7413	return *page.ercclr.Value
7414}
7415
7416// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
7417func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
7418	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
7419}
7420
7421// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
7422type ExpressRouteCrossConnectionPeering struct {
7423	autorest.Response                             `json:"-"`
7424	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
7425	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
7426	Name *string `json:"name,omitempty"`
7427	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7428	Etag *string `json:"etag,omitempty"`
7429	// ID - Resource ID.
7430	ID *string `json:"id,omitempty"`
7431}
7432
7433// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
7434func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
7435	objectMap := make(map[string]interface{})
7436	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
7437		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
7438	}
7439	if erccp.Name != nil {
7440		objectMap["name"] = erccp.Name
7441	}
7442	if erccp.ID != nil {
7443		objectMap["id"] = erccp.ID
7444	}
7445	return json.Marshal(objectMap)
7446}
7447
7448// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
7449func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
7450	var m map[string]*json.RawMessage
7451	err := json.Unmarshal(body, &m)
7452	if err != nil {
7453		return err
7454	}
7455	for k, v := range m {
7456		switch k {
7457		case "properties":
7458			if v != nil {
7459				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
7460				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
7461				if err != nil {
7462					return err
7463				}
7464				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
7465			}
7466		case "name":
7467			if v != nil {
7468				var name string
7469				err = json.Unmarshal(*v, &name)
7470				if err != nil {
7471					return err
7472				}
7473				erccp.Name = &name
7474			}
7475		case "etag":
7476			if v != nil {
7477				var etag string
7478				err = json.Unmarshal(*v, &etag)
7479				if err != nil {
7480					return err
7481				}
7482				erccp.Etag = &etag
7483			}
7484		case "id":
7485			if v != nil {
7486				var ID string
7487				err = json.Unmarshal(*v, &ID)
7488				if err != nil {
7489					return err
7490				}
7491				erccp.ID = &ID
7492			}
7493		}
7494	}
7495
7496	return nil
7497}
7498
7499// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
7500// that belong to an ExpressRouteCrossConnection.
7501type ExpressRouteCrossConnectionPeeringList struct {
7502	autorest.Response `json:"-"`
7503	// Value - The peerings in an express route cross connection.
7504	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
7505	// NextLink - READ-ONLY; The URL to get the next set of results.
7506	NextLink *string `json:"nextLink,omitempty"`
7507}
7508
7509// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
7510// ExpressRouteCrossConnectionPeering values.
7511type ExpressRouteCrossConnectionPeeringListIterator struct {
7512	i    int
7513	page ExpressRouteCrossConnectionPeeringListPage
7514}
7515
7516// NextWithContext advances to the next value.  If there was an error making
7517// the request the iterator does not advance and the error is returned.
7518func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
7519	if tracing.IsEnabled() {
7520		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
7521		defer func() {
7522			sc := -1
7523			if iter.Response().Response.Response != nil {
7524				sc = iter.Response().Response.Response.StatusCode
7525			}
7526			tracing.EndSpan(ctx, sc, err)
7527		}()
7528	}
7529	iter.i++
7530	if iter.i < len(iter.page.Values()) {
7531		return nil
7532	}
7533	err = iter.page.NextWithContext(ctx)
7534	if err != nil {
7535		iter.i--
7536		return err
7537	}
7538	iter.i = 0
7539	return nil
7540}
7541
7542// Next advances to the next value.  If there was an error making
7543// the request the iterator does not advance and the error is returned.
7544// Deprecated: Use NextWithContext() instead.
7545func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
7546	return iter.NextWithContext(context.Background())
7547}
7548
7549// NotDone returns true if the enumeration should be started or is not yet complete.
7550func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
7551	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7552}
7553
7554// Response returns the raw server response from the last page request.
7555func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
7556	return iter.page.Response()
7557}
7558
7559// Value returns the current value or a zero-initialized value if the
7560// iterator has advanced beyond the end of the collection.
7561func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
7562	if !iter.page.NotDone() {
7563		return ExpressRouteCrossConnectionPeering{}
7564	}
7565	return iter.page.Values()[iter.i]
7566}
7567
7568// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
7569func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
7570	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
7571}
7572
7573// IsEmpty returns true if the ListResult contains no values.
7574func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
7575	return erccpl.Value == nil || len(*erccpl.Value) == 0
7576}
7577
7578// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
7579// It returns nil if no more results exist.
7580func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
7581	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
7582		return nil, nil
7583	}
7584	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7585		autorest.AsJSON(),
7586		autorest.AsGet(),
7587		autorest.WithBaseURL(to.String(erccpl.NextLink)))
7588}
7589
7590// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
7591type ExpressRouteCrossConnectionPeeringListPage struct {
7592	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
7593	erccpl ExpressRouteCrossConnectionPeeringList
7594}
7595
7596// NextWithContext advances to the next page of values.  If there was an error making
7597// the request the page does not advance and the error is returned.
7598func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
7599	if tracing.IsEnabled() {
7600		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
7601		defer func() {
7602			sc := -1
7603			if page.Response().Response.Response != nil {
7604				sc = page.Response().Response.Response.StatusCode
7605			}
7606			tracing.EndSpan(ctx, sc, err)
7607		}()
7608	}
7609	next, err := page.fn(ctx, page.erccpl)
7610	if err != nil {
7611		return err
7612	}
7613	page.erccpl = next
7614	return nil
7615}
7616
7617// Next advances to the next page of values.  If there was an error making
7618// the request the page does not advance and the error is returned.
7619// Deprecated: Use NextWithContext() instead.
7620func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
7621	return page.NextWithContext(context.Background())
7622}
7623
7624// NotDone returns true if the page enumeration should be started or is not yet complete.
7625func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
7626	return !page.erccpl.IsEmpty()
7627}
7628
7629// Response returns the raw server response from the last page request.
7630func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
7631	return page.erccpl
7632}
7633
7634// Values returns the slice of values for the current page or nil if there are no values.
7635func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
7636	if page.erccpl.IsEmpty() {
7637		return nil
7638	}
7639	return *page.erccpl.Value
7640}
7641
7642// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
7643func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
7644	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
7645}
7646
7647// ExpressRouteCrossConnectionPeeringProperties ...
7648type ExpressRouteCrossConnectionPeeringProperties struct {
7649	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
7650	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
7651	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
7652	State ExpressRoutePeeringState `json:"state,omitempty"`
7653	// AzureASN - READ-ONLY; The Azure ASN.
7654	AzureASN *int32 `json:"azureASN,omitempty"`
7655	// PeerASN - The peer ASN.
7656	PeerASN *int64 `json:"peerASN,omitempty"`
7657	// PrimaryPeerAddressPrefix - The primary address prefix.
7658	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
7659	// SecondaryPeerAddressPrefix - The secondary address prefix.
7660	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
7661	// PrimaryAzurePort - READ-ONLY; The primary port.
7662	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
7663	// SecondaryAzurePort - READ-ONLY; The secondary port.
7664	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
7665	// SharedKey - The shared key.
7666	SharedKey *string `json:"sharedKey,omitempty"`
7667	// VlanID - The VLAN ID.
7668	VlanID *int32 `json:"vlanId,omitempty"`
7669	// MicrosoftPeeringConfig - The Microsoft peering configuration.
7670	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
7671	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
7672	ProvisioningState *string `json:"provisioningState,omitempty"`
7673	// GatewayManagerEtag - The GatewayManager Etag.
7674	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
7675	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
7676	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
7677	// Ipv6PeeringConfig - The IPv6 peering configuration.
7678	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
7679}
7680
7681// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
7682// results of a long-running operation.
7683type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
7684	azure.Future
7685}
7686
7687// Result returns the result of the asynchronous operation.
7688// If the operation has not completed it will return an error.
7689func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
7690	var done bool
7691	done, err = future.DoneWithContext(context.Background(), client)
7692	if err != nil {
7693		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7694		return
7695	}
7696	if !done {
7697		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
7698		return
7699	}
7700	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7701	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
7702		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
7703		if err != nil {
7704			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
7705		}
7706	}
7707	return
7708}
7709
7710// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
7711// of a long-running operation.
7712type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
7713	azure.Future
7714}
7715
7716// Result returns the result of the asynchronous operation.
7717// If the operation has not completed it will return an error.
7718func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
7719	var done bool
7720	done, err = future.DoneWithContext(context.Background(), client)
7721	if err != nil {
7722		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
7723		return
7724	}
7725	if !done {
7726		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
7727		return
7728	}
7729	ar.Response = future.Response()
7730	return
7731}
7732
7733// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
7734type ExpressRouteCrossConnectionProperties struct {
7735	// PrimaryAzurePort - READ-ONLY; The name of the primary  port.
7736	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
7737	// SecondaryAzurePort - READ-ONLY; The name of the secondary  port.
7738	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
7739	// STag - READ-ONLY; The identifier of the circuit traffic.
7740	STag *int32 `json:"sTag,omitempty"`
7741	// PeeringLocation - The peering location of the ExpressRoute circuit.
7742	PeeringLocation *string `json:"peeringLocation,omitempty"`
7743	// BandwidthInMbps - The circuit bandwidth In Mbps.
7744	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
7745	// ExpressRouteCircuit - The ExpressRouteCircuit
7746	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
7747	// 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'
7748	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
7749	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
7750	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
7751	// ProvisioningState - READ-ONLY; Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
7752	ProvisioningState *string `json:"provisioningState,omitempty"`
7753	// Peerings - The list of peerings.
7754	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
7755}
7756
7757// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
7758type ExpressRouteCrossConnectionRoutesTableSummary struct {
7759	// Neighbor - IP address of Neighbor router
7760	Neighbor *string `json:"neighbor,omitempty"`
7761	// Asn - Autonomous system number.
7762	Asn *int32 `json:"asn,omitempty"`
7763	// 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.
7764	UpDown *string `json:"upDown,omitempty"`
7765	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
7766	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
7767}
7768
7769// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
7770// results of a long-running operation.
7771type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
7772	azure.Future
7773}
7774
7775// Result returns the result of the asynchronous operation.
7776// If the operation has not completed it will return an error.
7777func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
7778	var done bool
7779	done, err = future.DoneWithContext(context.Background(), client)
7780	if err != nil {
7781		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7782		return
7783	}
7784	if !done {
7785		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
7786		return
7787	}
7788	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7789	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
7790		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
7791		if err != nil {
7792			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
7793		}
7794	}
7795	return
7796}
7797
7798// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
7799// of a long-running operation.
7800type ExpressRouteCrossConnectionsListArpTableFuture struct {
7801	azure.Future
7802}
7803
7804// Result returns the result of the asynchronous operation.
7805// If the operation has not completed it will return an error.
7806func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
7807	var done bool
7808	done, err = future.DoneWithContext(context.Background(), client)
7809	if err != nil {
7810		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
7811		return
7812	}
7813	if !done {
7814		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
7815		return
7816	}
7817	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7818	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
7819		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
7820		if err != nil {
7821			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
7822		}
7823	}
7824	return
7825}
7826
7827// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
7828// results of a long-running operation.
7829type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
7830	azure.Future
7831}
7832
7833// Result returns the result of the asynchronous operation.
7834// If the operation has not completed it will return an error.
7835func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
7836	var done bool
7837	done, err = future.DoneWithContext(context.Background(), client)
7838	if err != nil {
7839		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
7840		return
7841	}
7842	if !done {
7843		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
7844		return
7845	}
7846	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7847	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
7848		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
7849		if err != nil {
7850			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
7851		}
7852	}
7853	return
7854}
7855
7856// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
7857// the results of a long-running operation.
7858type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
7859	azure.Future
7860}
7861
7862// Result returns the result of the asynchronous operation.
7863// If the operation has not completed it will return an error.
7864func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
7865	var done bool
7866	done, err = future.DoneWithContext(context.Background(), client)
7867	if err != nil {
7868		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
7869		return
7870	}
7871	if !done {
7872		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
7873		return
7874	}
7875	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7876	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
7877		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
7878		if err != nil {
7879			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
7880		}
7881	}
7882	return
7883}
7884
7885// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
7886// the Express Route Cross Connections.
7887type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
7888	autorest.Response `json:"-"`
7889	// Value - A list of the routes table.
7890	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
7891	// NextLink - READ-ONLY; The URL to get the next set of results.
7892	NextLink *string `json:"nextLink,omitempty"`
7893}
7894
7895// ExpressRouteCrossConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the results of
7896// a long-running operation.
7897type ExpressRouteCrossConnectionsUpdateTagsFuture struct {
7898	azure.Future
7899}
7900
7901// Result returns the result of the asynchronous operation.
7902// If the operation has not completed it will return an error.
7903func (future *ExpressRouteCrossConnectionsUpdateTagsFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
7904	var done bool
7905	done, err = future.DoneWithContext(context.Background(), client)
7906	if err != nil {
7907		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
7908		return
7909	}
7910	if !done {
7911		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsUpdateTagsFuture")
7912		return
7913	}
7914	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7915	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
7916		ercc, err = client.UpdateTagsResponder(ercc.Response.Response)
7917		if err != nil {
7918			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", ercc.Response.Response, "Failure responding to request")
7919		}
7920	}
7921	return
7922}
7923
7924// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
7925type ExpressRouteServiceProvider struct {
7926	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
7927	// ID - Resource ID.
7928	ID *string `json:"id,omitempty"`
7929	// Name - READ-ONLY; Resource name.
7930	Name *string `json:"name,omitempty"`
7931	// Type - READ-ONLY; Resource type.
7932	Type *string `json:"type,omitempty"`
7933	// Location - Resource location.
7934	Location *string `json:"location,omitempty"`
7935	// Tags - Resource tags.
7936	Tags map[string]*string `json:"tags"`
7937}
7938
7939// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
7940func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
7941	objectMap := make(map[string]interface{})
7942	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
7943		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
7944	}
7945	if ersp.ID != nil {
7946		objectMap["id"] = ersp.ID
7947	}
7948	if ersp.Location != nil {
7949		objectMap["location"] = ersp.Location
7950	}
7951	if ersp.Tags != nil {
7952		objectMap["tags"] = ersp.Tags
7953	}
7954	return json.Marshal(objectMap)
7955}
7956
7957// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
7958func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
7959	var m map[string]*json.RawMessage
7960	err := json.Unmarshal(body, &m)
7961	if err != nil {
7962		return err
7963	}
7964	for k, v := range m {
7965		switch k {
7966		case "properties":
7967			if v != nil {
7968				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
7969				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
7970				if err != nil {
7971					return err
7972				}
7973				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
7974			}
7975		case "id":
7976			if v != nil {
7977				var ID string
7978				err = json.Unmarshal(*v, &ID)
7979				if err != nil {
7980					return err
7981				}
7982				ersp.ID = &ID
7983			}
7984		case "name":
7985			if v != nil {
7986				var name string
7987				err = json.Unmarshal(*v, &name)
7988				if err != nil {
7989					return err
7990				}
7991				ersp.Name = &name
7992			}
7993		case "type":
7994			if v != nil {
7995				var typeVar string
7996				err = json.Unmarshal(*v, &typeVar)
7997				if err != nil {
7998					return err
7999				}
8000				ersp.Type = &typeVar
8001			}
8002		case "location":
8003			if v != nil {
8004				var location string
8005				err = json.Unmarshal(*v, &location)
8006				if err != nil {
8007					return err
8008				}
8009				ersp.Location = &location
8010			}
8011		case "tags":
8012			if v != nil {
8013				var tags map[string]*string
8014				err = json.Unmarshal(*v, &tags)
8015				if err != nil {
8016					return err
8017				}
8018				ersp.Tags = tags
8019			}
8020		}
8021	}
8022
8023	return nil
8024}
8025
8026// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
8027// resources.
8028type ExpressRouteServiceProviderBandwidthsOffered struct {
8029	// OfferName - The OfferName.
8030	OfferName *string `json:"offerName,omitempty"`
8031	// ValueInMbps - The ValueInMbps.
8032	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
8033}
8034
8035// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
8036type ExpressRouteServiceProviderListResult struct {
8037	autorest.Response `json:"-"`
8038	// Value - A list of ExpressRouteResourceProvider resources.
8039	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
8040	// NextLink - The URL to get the next set of results.
8041	NextLink *string `json:"nextLink,omitempty"`
8042}
8043
8044// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
8045// ExpressRouteServiceProvider values.
8046type ExpressRouteServiceProviderListResultIterator struct {
8047	i    int
8048	page ExpressRouteServiceProviderListResultPage
8049}
8050
8051// NextWithContext advances to the next value.  If there was an error making
8052// the request the iterator does not advance and the error is returned.
8053func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
8054	if tracing.IsEnabled() {
8055		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
8056		defer func() {
8057			sc := -1
8058			if iter.Response().Response.Response != nil {
8059				sc = iter.Response().Response.Response.StatusCode
8060			}
8061			tracing.EndSpan(ctx, sc, err)
8062		}()
8063	}
8064	iter.i++
8065	if iter.i < len(iter.page.Values()) {
8066		return nil
8067	}
8068	err = iter.page.NextWithContext(ctx)
8069	if err != nil {
8070		iter.i--
8071		return err
8072	}
8073	iter.i = 0
8074	return nil
8075}
8076
8077// Next advances to the next value.  If there was an error making
8078// the request the iterator does not advance and the error is returned.
8079// Deprecated: Use NextWithContext() instead.
8080func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
8081	return iter.NextWithContext(context.Background())
8082}
8083
8084// NotDone returns true if the enumeration should be started or is not yet complete.
8085func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
8086	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8087}
8088
8089// Response returns the raw server response from the last page request.
8090func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
8091	return iter.page.Response()
8092}
8093
8094// Value returns the current value or a zero-initialized value if the
8095// iterator has advanced beyond the end of the collection.
8096func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
8097	if !iter.page.NotDone() {
8098		return ExpressRouteServiceProvider{}
8099	}
8100	return iter.page.Values()[iter.i]
8101}
8102
8103// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
8104func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
8105	return ExpressRouteServiceProviderListResultIterator{page: page}
8106}
8107
8108// IsEmpty returns true if the ListResult contains no values.
8109func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
8110	return ersplr.Value == nil || len(*ersplr.Value) == 0
8111}
8112
8113// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
8114// It returns nil if no more results exist.
8115func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
8116	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
8117		return nil, nil
8118	}
8119	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8120		autorest.AsJSON(),
8121		autorest.AsGet(),
8122		autorest.WithBaseURL(to.String(ersplr.NextLink)))
8123}
8124
8125// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
8126type ExpressRouteServiceProviderListResultPage struct {
8127	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
8128	ersplr ExpressRouteServiceProviderListResult
8129}
8130
8131// NextWithContext advances to the next page of values.  If there was an error making
8132// the request the page does not advance and the error is returned.
8133func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
8134	if tracing.IsEnabled() {
8135		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
8136		defer func() {
8137			sc := -1
8138			if page.Response().Response.Response != nil {
8139				sc = page.Response().Response.Response.StatusCode
8140			}
8141			tracing.EndSpan(ctx, sc, err)
8142		}()
8143	}
8144	next, err := page.fn(ctx, page.ersplr)
8145	if err != nil {
8146		return err
8147	}
8148	page.ersplr = next
8149	return nil
8150}
8151
8152// Next advances to the next page of values.  If there was an error making
8153// the request the page does not advance and the error is returned.
8154// Deprecated: Use NextWithContext() instead.
8155func (page *ExpressRouteServiceProviderListResultPage) Next() error {
8156	return page.NextWithContext(context.Background())
8157}
8158
8159// NotDone returns true if the page enumeration should be started or is not yet complete.
8160func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
8161	return !page.ersplr.IsEmpty()
8162}
8163
8164// Response returns the raw server response from the last page request.
8165func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
8166	return page.ersplr
8167}
8168
8169// Values returns the slice of values for the current page or nil if there are no values.
8170func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
8171	if page.ersplr.IsEmpty() {
8172		return nil
8173	}
8174	return *page.ersplr.Value
8175}
8176
8177// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
8178func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
8179	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
8180}
8181
8182// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
8183type ExpressRouteServiceProviderPropertiesFormat struct {
8184	// PeeringLocations - Get a list of peering locations.
8185	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
8186	// BandwidthsOffered - Gets bandwidths offered.
8187	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
8188	// ProvisioningState - Gets the provisioning state of the resource.
8189	ProvisioningState *string `json:"provisioningState,omitempty"`
8190}
8191
8192// FlowLogInformation information on the configuration of flow log.
8193type FlowLogInformation struct {
8194	autorest.Response `json:"-"`
8195	// TargetResourceID - The ID of the resource to configure for flow logging.
8196	TargetResourceID   *string `json:"targetResourceId,omitempty"`
8197	*FlowLogProperties `json:"properties,omitempty"`
8198}
8199
8200// MarshalJSON is the custom marshaler for FlowLogInformation.
8201func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
8202	objectMap := make(map[string]interface{})
8203	if fli.TargetResourceID != nil {
8204		objectMap["targetResourceId"] = fli.TargetResourceID
8205	}
8206	if fli.FlowLogProperties != nil {
8207		objectMap["properties"] = fli.FlowLogProperties
8208	}
8209	return json.Marshal(objectMap)
8210}
8211
8212// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
8213func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
8214	var m map[string]*json.RawMessage
8215	err := json.Unmarshal(body, &m)
8216	if err != nil {
8217		return err
8218	}
8219	for k, v := range m {
8220		switch k {
8221		case "targetResourceId":
8222			if v != nil {
8223				var targetResourceID string
8224				err = json.Unmarshal(*v, &targetResourceID)
8225				if err != nil {
8226					return err
8227				}
8228				fli.TargetResourceID = &targetResourceID
8229			}
8230		case "properties":
8231			if v != nil {
8232				var flowLogProperties FlowLogProperties
8233				err = json.Unmarshal(*v, &flowLogProperties)
8234				if err != nil {
8235					return err
8236				}
8237				fli.FlowLogProperties = &flowLogProperties
8238			}
8239		}
8240	}
8241
8242	return nil
8243}
8244
8245// FlowLogProperties parameters that define the configuration of flow log.
8246type FlowLogProperties struct {
8247	// StorageID - ID of the storage account which is used to store the flow log.
8248	StorageID *string `json:"storageId,omitempty"`
8249	// Enabled - Flag to enable/disable flow logging.
8250	Enabled         *bool                      `json:"enabled,omitempty"`
8251	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
8252}
8253
8254// FlowLogStatusParameters parameters that define a resource to query flow log status.
8255type FlowLogStatusParameters struct {
8256	// TargetResourceID - The target resource where getting the flow logging status.
8257	TargetResourceID *string `json:"targetResourceId,omitempty"`
8258}
8259
8260// FrontendIPConfiguration frontend IP address of the load balancer.
8261type FrontendIPConfiguration struct {
8262	autorest.Response `json:"-"`
8263	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
8264	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
8265	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
8266	Name *string `json:"name,omitempty"`
8267	// Etag - A unique read-only string that changes whenever the resource is updated.
8268	Etag *string `json:"etag,omitempty"`
8269	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
8270	Zones *[]string `json:"zones,omitempty"`
8271	// ID - Resource ID.
8272	ID *string `json:"id,omitempty"`
8273}
8274
8275// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
8276func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
8277	objectMap := make(map[string]interface{})
8278	if fic.FrontendIPConfigurationPropertiesFormat != nil {
8279		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
8280	}
8281	if fic.Name != nil {
8282		objectMap["name"] = fic.Name
8283	}
8284	if fic.Etag != nil {
8285		objectMap["etag"] = fic.Etag
8286	}
8287	if fic.Zones != nil {
8288		objectMap["zones"] = fic.Zones
8289	}
8290	if fic.ID != nil {
8291		objectMap["id"] = fic.ID
8292	}
8293	return json.Marshal(objectMap)
8294}
8295
8296// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
8297func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
8298	var m map[string]*json.RawMessage
8299	err := json.Unmarshal(body, &m)
8300	if err != nil {
8301		return err
8302	}
8303	for k, v := range m {
8304		switch k {
8305		case "properties":
8306			if v != nil {
8307				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
8308				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
8309				if err != nil {
8310					return err
8311				}
8312				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
8313			}
8314		case "name":
8315			if v != nil {
8316				var name string
8317				err = json.Unmarshal(*v, &name)
8318				if err != nil {
8319					return err
8320				}
8321				fic.Name = &name
8322			}
8323		case "etag":
8324			if v != nil {
8325				var etag string
8326				err = json.Unmarshal(*v, &etag)
8327				if err != nil {
8328					return err
8329				}
8330				fic.Etag = &etag
8331			}
8332		case "zones":
8333			if v != nil {
8334				var zones []string
8335				err = json.Unmarshal(*v, &zones)
8336				if err != nil {
8337					return err
8338				}
8339				fic.Zones = &zones
8340			}
8341		case "id":
8342			if v != nil {
8343				var ID string
8344				err = json.Unmarshal(*v, &ID)
8345				if err != nil {
8346					return err
8347				}
8348				fic.ID = &ID
8349			}
8350		}
8351	}
8352
8353	return nil
8354}
8355
8356// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
8357type FrontendIPConfigurationPropertiesFormat struct {
8358	// InboundNatRules - READ-ONLY; Read only. Inbound rules URIs that use this frontend IP.
8359	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
8360	// InboundNatPools - READ-ONLY; Read only. Inbound pools URIs that use this frontend IP.
8361	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
8362	// OutboundNatRules - READ-ONLY; Read only. Outbound rules URIs that use this frontend IP.
8363	OutboundNatRules *[]SubResource `json:"outboundNatRules,omitempty"`
8364	// LoadBalancingRules - READ-ONLY; Gets load balancing rules URIs that use this frontend IP.
8365	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
8366	// PrivateIPAddress - The private IP address of the IP configuration.
8367	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
8368	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
8369	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
8370	// Subnet - The reference of the subnet resource.
8371	Subnet *Subnet `json:"subnet,omitempty"`
8372	// PublicIPAddress - The reference of the Public IP resource.
8373	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
8374	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
8375	ProvisioningState *string `json:"provisioningState,omitempty"`
8376}
8377
8378// GatewayRoute gateway routing details
8379type GatewayRoute struct {
8380	// LocalAddress - READ-ONLY; The gateway's local address
8381	LocalAddress *string `json:"localAddress,omitempty"`
8382	// NetworkProperty - READ-ONLY; The route's network prefix
8383	NetworkProperty *string `json:"network,omitempty"`
8384	// NextHop - READ-ONLY; The route's next hop
8385	NextHop *string `json:"nextHop,omitempty"`
8386	// SourcePeer - READ-ONLY; The peer this route was learned from
8387	SourcePeer *string `json:"sourcePeer,omitempty"`
8388	// Origin - READ-ONLY; The source this route was learned from
8389	Origin *string `json:"origin,omitempty"`
8390	// AsPath - READ-ONLY; The route's AS path sequence
8391	AsPath *string `json:"asPath,omitempty"`
8392	// Weight - READ-ONLY; The route's weight
8393	Weight *int32 `json:"weight,omitempty"`
8394}
8395
8396// GatewayRouteListResult list of virtual network gateway routes
8397type GatewayRouteListResult struct {
8398	autorest.Response `json:"-"`
8399	// Value - List of gateway routes
8400	Value *[]GatewayRoute `json:"value,omitempty"`
8401}
8402
8403// HTTPConfiguration HTTP configuration of the connectivity check.
8404type HTTPConfiguration struct {
8405	// Method - HTTP method. Possible values include: 'Get'
8406	Method HTTPMethod `json:"method,omitempty"`
8407	// Headers - List of HTTP headers.
8408	Headers *[]HTTPHeader `json:"headers,omitempty"`
8409	// ValidStatusCodes - Valid status codes.
8410	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
8411}
8412
8413// HTTPHeader describes the HTTP header.
8414type HTTPHeader struct {
8415	// Name - The name in HTTP header.
8416	Name *string `json:"name,omitempty"`
8417	// Value - The value in HTTP header.
8418	Value *string `json:"value,omitempty"`
8419}
8420
8421// InboundNatPool inbound NAT pool of the load balancer.
8422type InboundNatPool struct {
8423	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
8424	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
8425	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
8426	Name *string `json:"name,omitempty"`
8427	// Etag - A unique read-only string that changes whenever the resource is updated.
8428	Etag *string `json:"etag,omitempty"`
8429	// ID - Resource ID.
8430	ID *string `json:"id,omitempty"`
8431}
8432
8433// MarshalJSON is the custom marshaler for InboundNatPool.
8434func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
8435	objectMap := make(map[string]interface{})
8436	if inp.InboundNatPoolPropertiesFormat != nil {
8437		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
8438	}
8439	if inp.Name != nil {
8440		objectMap["name"] = inp.Name
8441	}
8442	if inp.Etag != nil {
8443		objectMap["etag"] = inp.Etag
8444	}
8445	if inp.ID != nil {
8446		objectMap["id"] = inp.ID
8447	}
8448	return json.Marshal(objectMap)
8449}
8450
8451// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
8452func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
8453	var m map[string]*json.RawMessage
8454	err := json.Unmarshal(body, &m)
8455	if err != nil {
8456		return err
8457	}
8458	for k, v := range m {
8459		switch k {
8460		case "properties":
8461			if v != nil {
8462				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
8463				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
8464				if err != nil {
8465					return err
8466				}
8467				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
8468			}
8469		case "name":
8470			if v != nil {
8471				var name string
8472				err = json.Unmarshal(*v, &name)
8473				if err != nil {
8474					return err
8475				}
8476				inp.Name = &name
8477			}
8478		case "etag":
8479			if v != nil {
8480				var etag string
8481				err = json.Unmarshal(*v, &etag)
8482				if err != nil {
8483					return err
8484				}
8485				inp.Etag = &etag
8486			}
8487		case "id":
8488			if v != nil {
8489				var ID string
8490				err = json.Unmarshal(*v, &ID)
8491				if err != nil {
8492					return err
8493				}
8494				inp.ID = &ID
8495			}
8496		}
8497	}
8498
8499	return nil
8500}
8501
8502// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
8503type InboundNatPoolPropertiesFormat struct {
8504	// FrontendIPConfiguration - A reference to frontend IP addresses.
8505	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
8506	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
8507	Protocol TransportProtocol `json:"protocol,omitempty"`
8508	// 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.
8509	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
8510	// 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.
8511	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
8512	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
8513	BackendPort *int32 `json:"backendPort,omitempty"`
8514	// 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.
8515	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
8516	// 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.
8517	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
8518	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
8519	ProvisioningState *string `json:"provisioningState,omitempty"`
8520}
8521
8522// InboundNatRule inbound NAT rule of the load balancer.
8523type InboundNatRule struct {
8524	autorest.Response `json:"-"`
8525	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
8526	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
8527	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
8528	Name *string `json:"name,omitempty"`
8529	// Etag - A unique read-only string that changes whenever the resource is updated.
8530	Etag *string `json:"etag,omitempty"`
8531	// ID - Resource ID.
8532	ID *string `json:"id,omitempty"`
8533}
8534
8535// MarshalJSON is the custom marshaler for InboundNatRule.
8536func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
8537	objectMap := make(map[string]interface{})
8538	if inr.InboundNatRulePropertiesFormat != nil {
8539		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
8540	}
8541	if inr.Name != nil {
8542		objectMap["name"] = inr.Name
8543	}
8544	if inr.Etag != nil {
8545		objectMap["etag"] = inr.Etag
8546	}
8547	if inr.ID != nil {
8548		objectMap["id"] = inr.ID
8549	}
8550	return json.Marshal(objectMap)
8551}
8552
8553// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
8554func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
8555	var m map[string]*json.RawMessage
8556	err := json.Unmarshal(body, &m)
8557	if err != nil {
8558		return err
8559	}
8560	for k, v := range m {
8561		switch k {
8562		case "properties":
8563			if v != nil {
8564				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
8565				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
8566				if err != nil {
8567					return err
8568				}
8569				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
8570			}
8571		case "name":
8572			if v != nil {
8573				var name string
8574				err = json.Unmarshal(*v, &name)
8575				if err != nil {
8576					return err
8577				}
8578				inr.Name = &name
8579			}
8580		case "etag":
8581			if v != nil {
8582				var etag string
8583				err = json.Unmarshal(*v, &etag)
8584				if err != nil {
8585					return err
8586				}
8587				inr.Etag = &etag
8588			}
8589		case "id":
8590			if v != nil {
8591				var ID string
8592				err = json.Unmarshal(*v, &ID)
8593				if err != nil {
8594					return err
8595				}
8596				inr.ID = &ID
8597			}
8598		}
8599	}
8600
8601	return nil
8602}
8603
8604// InboundNatRuleListResult response for ListInboundNatRule API service call.
8605type InboundNatRuleListResult struct {
8606	autorest.Response `json:"-"`
8607	// Value - A list of inbound nat rules in a load balancer.
8608	Value *[]InboundNatRule `json:"value,omitempty"`
8609	// NextLink - READ-ONLY; The URL to get the next set of results.
8610	NextLink *string `json:"nextLink,omitempty"`
8611}
8612
8613// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
8614type InboundNatRuleListResultIterator struct {
8615	i    int
8616	page InboundNatRuleListResultPage
8617}
8618
8619// NextWithContext advances to the next value.  If there was an error making
8620// the request the iterator does not advance and the error is returned.
8621func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
8622	if tracing.IsEnabled() {
8623		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
8624		defer func() {
8625			sc := -1
8626			if iter.Response().Response.Response != nil {
8627				sc = iter.Response().Response.Response.StatusCode
8628			}
8629			tracing.EndSpan(ctx, sc, err)
8630		}()
8631	}
8632	iter.i++
8633	if iter.i < len(iter.page.Values()) {
8634		return nil
8635	}
8636	err = iter.page.NextWithContext(ctx)
8637	if err != nil {
8638		iter.i--
8639		return err
8640	}
8641	iter.i = 0
8642	return nil
8643}
8644
8645// Next advances to the next value.  If there was an error making
8646// the request the iterator does not advance and the error is returned.
8647// Deprecated: Use NextWithContext() instead.
8648func (iter *InboundNatRuleListResultIterator) Next() error {
8649	return iter.NextWithContext(context.Background())
8650}
8651
8652// NotDone returns true if the enumeration should be started or is not yet complete.
8653func (iter InboundNatRuleListResultIterator) NotDone() bool {
8654	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8655}
8656
8657// Response returns the raw server response from the last page request.
8658func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
8659	return iter.page.Response()
8660}
8661
8662// Value returns the current value or a zero-initialized value if the
8663// iterator has advanced beyond the end of the collection.
8664func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
8665	if !iter.page.NotDone() {
8666		return InboundNatRule{}
8667	}
8668	return iter.page.Values()[iter.i]
8669}
8670
8671// Creates a new instance of the InboundNatRuleListResultIterator type.
8672func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
8673	return InboundNatRuleListResultIterator{page: page}
8674}
8675
8676// IsEmpty returns true if the ListResult contains no values.
8677func (inrlr InboundNatRuleListResult) IsEmpty() bool {
8678	return inrlr.Value == nil || len(*inrlr.Value) == 0
8679}
8680
8681// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
8682// It returns nil if no more results exist.
8683func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
8684	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
8685		return nil, nil
8686	}
8687	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8688		autorest.AsJSON(),
8689		autorest.AsGet(),
8690		autorest.WithBaseURL(to.String(inrlr.NextLink)))
8691}
8692
8693// InboundNatRuleListResultPage contains a page of InboundNatRule values.
8694type InboundNatRuleListResultPage struct {
8695	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
8696	inrlr InboundNatRuleListResult
8697}
8698
8699// NextWithContext advances to the next page of values.  If there was an error making
8700// the request the page does not advance and the error is returned.
8701func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
8702	if tracing.IsEnabled() {
8703		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
8704		defer func() {
8705			sc := -1
8706			if page.Response().Response.Response != nil {
8707				sc = page.Response().Response.Response.StatusCode
8708			}
8709			tracing.EndSpan(ctx, sc, err)
8710		}()
8711	}
8712	next, err := page.fn(ctx, page.inrlr)
8713	if err != nil {
8714		return err
8715	}
8716	page.inrlr = next
8717	return nil
8718}
8719
8720// Next 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.
8722// Deprecated: Use NextWithContext() instead.
8723func (page *InboundNatRuleListResultPage) Next() error {
8724	return page.NextWithContext(context.Background())
8725}
8726
8727// NotDone returns true if the page enumeration should be started or is not yet complete.
8728func (page InboundNatRuleListResultPage) NotDone() bool {
8729	return !page.inrlr.IsEmpty()
8730}
8731
8732// Response returns the raw server response from the last page request.
8733func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
8734	return page.inrlr
8735}
8736
8737// Values returns the slice of values for the current page or nil if there are no values.
8738func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
8739	if page.inrlr.IsEmpty() {
8740		return nil
8741	}
8742	return *page.inrlr.Value
8743}
8744
8745// Creates a new instance of the InboundNatRuleListResultPage type.
8746func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
8747	return InboundNatRuleListResultPage{fn: getNextPage}
8748}
8749
8750// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
8751type InboundNatRulePropertiesFormat struct {
8752	// FrontendIPConfiguration - A reference to frontend IP addresses.
8753	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
8754	// 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.
8755	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
8756	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
8757	Protocol TransportProtocol `json:"protocol,omitempty"`
8758	// 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.
8759	FrontendPort *int32 `json:"frontendPort,omitempty"`
8760	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
8761	BackendPort *int32 `json:"backendPort,omitempty"`
8762	// 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.
8763	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
8764	// 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.
8765	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
8766	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
8767	ProvisioningState *string `json:"provisioningState,omitempty"`
8768}
8769
8770// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8771// long-running operation.
8772type InboundNatRulesCreateOrUpdateFuture struct {
8773	azure.Future
8774}
8775
8776// Result returns the result of the asynchronous operation.
8777// If the operation has not completed it will return an error.
8778func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
8779	var done bool
8780	done, err = future.DoneWithContext(context.Background(), client)
8781	if err != nil {
8782		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8783		return
8784	}
8785	if !done {
8786		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
8787		return
8788	}
8789	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8790	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
8791		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
8792		if err != nil {
8793			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
8794		}
8795	}
8796	return
8797}
8798
8799// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
8800// operation.
8801type InboundNatRulesDeleteFuture struct {
8802	azure.Future
8803}
8804
8805// Result returns the result of the asynchronous operation.
8806// If the operation has not completed it will return an error.
8807func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
8808	var done bool
8809	done, err = future.DoneWithContext(context.Background(), client)
8810	if err != nil {
8811		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
8812		return
8813	}
8814	if !done {
8815		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
8816		return
8817	}
8818	ar.Response = future.Response()
8819	return
8820}
8821
8822// Interface a network interface in a resource group.
8823type Interface struct {
8824	autorest.Response `json:"-"`
8825	// InterfacePropertiesFormat - Properties of the network interface.
8826	*InterfacePropertiesFormat `json:"properties,omitempty"`
8827	// Etag - A unique read-only string that changes whenever the resource is updated.
8828	Etag *string `json:"etag,omitempty"`
8829	// ID - Resource ID.
8830	ID *string `json:"id,omitempty"`
8831	// Name - READ-ONLY; Resource name.
8832	Name *string `json:"name,omitempty"`
8833	// Type - READ-ONLY; Resource type.
8834	Type *string `json:"type,omitempty"`
8835	// Location - Resource location.
8836	Location *string `json:"location,omitempty"`
8837	// Tags - Resource tags.
8838	Tags map[string]*string `json:"tags"`
8839}
8840
8841// MarshalJSON is the custom marshaler for Interface.
8842func (i Interface) MarshalJSON() ([]byte, error) {
8843	objectMap := make(map[string]interface{})
8844	if i.InterfacePropertiesFormat != nil {
8845		objectMap["properties"] = i.InterfacePropertiesFormat
8846	}
8847	if i.Etag != nil {
8848		objectMap["etag"] = i.Etag
8849	}
8850	if i.ID != nil {
8851		objectMap["id"] = i.ID
8852	}
8853	if i.Location != nil {
8854		objectMap["location"] = i.Location
8855	}
8856	if i.Tags != nil {
8857		objectMap["tags"] = i.Tags
8858	}
8859	return json.Marshal(objectMap)
8860}
8861
8862// UnmarshalJSON is the custom unmarshaler for Interface struct.
8863func (i *Interface) UnmarshalJSON(body []byte) error {
8864	var m map[string]*json.RawMessage
8865	err := json.Unmarshal(body, &m)
8866	if err != nil {
8867		return err
8868	}
8869	for k, v := range m {
8870		switch k {
8871		case "properties":
8872			if v != nil {
8873				var interfacePropertiesFormat InterfacePropertiesFormat
8874				err = json.Unmarshal(*v, &interfacePropertiesFormat)
8875				if err != nil {
8876					return err
8877				}
8878				i.InterfacePropertiesFormat = &interfacePropertiesFormat
8879			}
8880		case "etag":
8881			if v != nil {
8882				var etag string
8883				err = json.Unmarshal(*v, &etag)
8884				if err != nil {
8885					return err
8886				}
8887				i.Etag = &etag
8888			}
8889		case "id":
8890			if v != nil {
8891				var ID string
8892				err = json.Unmarshal(*v, &ID)
8893				if err != nil {
8894					return err
8895				}
8896				i.ID = &ID
8897			}
8898		case "name":
8899			if v != nil {
8900				var name string
8901				err = json.Unmarshal(*v, &name)
8902				if err != nil {
8903					return err
8904				}
8905				i.Name = &name
8906			}
8907		case "type":
8908			if v != nil {
8909				var typeVar string
8910				err = json.Unmarshal(*v, &typeVar)
8911				if err != nil {
8912					return err
8913				}
8914				i.Type = &typeVar
8915			}
8916		case "location":
8917			if v != nil {
8918				var location string
8919				err = json.Unmarshal(*v, &location)
8920				if err != nil {
8921					return err
8922				}
8923				i.Location = &location
8924			}
8925		case "tags":
8926			if v != nil {
8927				var tags map[string]*string
8928				err = json.Unmarshal(*v, &tags)
8929				if err != nil {
8930					return err
8931				}
8932				i.Tags = tags
8933			}
8934		}
8935	}
8936
8937	return nil
8938}
8939
8940// InterfaceAssociation network interface and its custom security rules.
8941type InterfaceAssociation struct {
8942	// ID - READ-ONLY; Network interface ID.
8943	ID *string `json:"id,omitempty"`
8944	// SecurityRules - Collection of custom security rules.
8945	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
8946}
8947
8948// InterfaceDNSSettings DNS settings of a network interface.
8949type InterfaceDNSSettings struct {
8950	// 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.
8951	DNSServers *[]string `json:"dnsServers,omitempty"`
8952	// 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.
8953	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
8954	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
8955	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
8956	// InternalFqdn - Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
8957	InternalFqdn *string `json:"internalFqdn,omitempty"`
8958	// 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.
8959	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
8960}
8961
8962// InterfaceIPConfiguration iPConfiguration in a network interface.
8963type InterfaceIPConfiguration struct {
8964	autorest.Response `json:"-"`
8965	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
8966	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
8967	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
8968	Name *string `json:"name,omitempty"`
8969	// Etag - A unique read-only string that changes whenever the resource is updated.
8970	Etag *string `json:"etag,omitempty"`
8971	// ID - Resource ID.
8972	ID *string `json:"id,omitempty"`
8973}
8974
8975// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
8976func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
8977	objectMap := make(map[string]interface{})
8978	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
8979		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
8980	}
8981	if iic.Name != nil {
8982		objectMap["name"] = iic.Name
8983	}
8984	if iic.Etag != nil {
8985		objectMap["etag"] = iic.Etag
8986	}
8987	if iic.ID != nil {
8988		objectMap["id"] = iic.ID
8989	}
8990	return json.Marshal(objectMap)
8991}
8992
8993// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
8994func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
8995	var m map[string]*json.RawMessage
8996	err := json.Unmarshal(body, &m)
8997	if err != nil {
8998		return err
8999	}
9000	for k, v := range m {
9001		switch k {
9002		case "properties":
9003			if v != nil {
9004				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
9005				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
9006				if err != nil {
9007					return err
9008				}
9009				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
9010			}
9011		case "name":
9012			if v != nil {
9013				var name string
9014				err = json.Unmarshal(*v, &name)
9015				if err != nil {
9016					return err
9017				}
9018				iic.Name = &name
9019			}
9020		case "etag":
9021			if v != nil {
9022				var etag string
9023				err = json.Unmarshal(*v, &etag)
9024				if err != nil {
9025					return err
9026				}
9027				iic.Etag = &etag
9028			}
9029		case "id":
9030			if v != nil {
9031				var ID string
9032				err = json.Unmarshal(*v, &ID)
9033				if err != nil {
9034					return err
9035				}
9036				iic.ID = &ID
9037			}
9038		}
9039	}
9040
9041	return nil
9042}
9043
9044// InterfaceIPConfigurationListResult response for list ip configurations API service call.
9045type InterfaceIPConfigurationListResult struct {
9046	autorest.Response `json:"-"`
9047	// Value - A list of ip configurations.
9048	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
9049	// NextLink - READ-ONLY; The URL to get the next set of results.
9050	NextLink *string `json:"nextLink,omitempty"`
9051}
9052
9053// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
9054// InterfaceIPConfiguration values.
9055type InterfaceIPConfigurationListResultIterator struct {
9056	i    int
9057	page InterfaceIPConfigurationListResultPage
9058}
9059
9060// NextWithContext advances to the next value.  If there was an error making
9061// the request the iterator does not advance and the error is returned.
9062func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
9063	if tracing.IsEnabled() {
9064		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
9065		defer func() {
9066			sc := -1
9067			if iter.Response().Response.Response != nil {
9068				sc = iter.Response().Response.Response.StatusCode
9069			}
9070			tracing.EndSpan(ctx, sc, err)
9071		}()
9072	}
9073	iter.i++
9074	if iter.i < len(iter.page.Values()) {
9075		return nil
9076	}
9077	err = iter.page.NextWithContext(ctx)
9078	if err != nil {
9079		iter.i--
9080		return err
9081	}
9082	iter.i = 0
9083	return nil
9084}
9085
9086// Next advances to the next value.  If there was an error making
9087// the request the iterator does not advance and the error is returned.
9088// Deprecated: Use NextWithContext() instead.
9089func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
9090	return iter.NextWithContext(context.Background())
9091}
9092
9093// NotDone returns true if the enumeration should be started or is not yet complete.
9094func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
9095	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9096}
9097
9098// Response returns the raw server response from the last page request.
9099func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
9100	return iter.page.Response()
9101}
9102
9103// Value returns the current value or a zero-initialized value if the
9104// iterator has advanced beyond the end of the collection.
9105func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
9106	if !iter.page.NotDone() {
9107		return InterfaceIPConfiguration{}
9108	}
9109	return iter.page.Values()[iter.i]
9110}
9111
9112// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
9113func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
9114	return InterfaceIPConfigurationListResultIterator{page: page}
9115}
9116
9117// IsEmpty returns true if the ListResult contains no values.
9118func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
9119	return iiclr.Value == nil || len(*iiclr.Value) == 0
9120}
9121
9122// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
9123// It returns nil if no more results exist.
9124func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
9125	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
9126		return nil, nil
9127	}
9128	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9129		autorest.AsJSON(),
9130		autorest.AsGet(),
9131		autorest.WithBaseURL(to.String(iiclr.NextLink)))
9132}
9133
9134// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
9135type InterfaceIPConfigurationListResultPage struct {
9136	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
9137	iiclr InterfaceIPConfigurationListResult
9138}
9139
9140// NextWithContext advances to the next page of values.  If there was an error making
9141// the request the page does not advance and the error is returned.
9142func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
9143	if tracing.IsEnabled() {
9144		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
9145		defer func() {
9146			sc := -1
9147			if page.Response().Response.Response != nil {
9148				sc = page.Response().Response.Response.StatusCode
9149			}
9150			tracing.EndSpan(ctx, sc, err)
9151		}()
9152	}
9153	next, err := page.fn(ctx, page.iiclr)
9154	if err != nil {
9155		return err
9156	}
9157	page.iiclr = next
9158	return nil
9159}
9160
9161// Next advances to the next page of values.  If there was an error making
9162// the request the page does not advance and the error is returned.
9163// Deprecated: Use NextWithContext() instead.
9164func (page *InterfaceIPConfigurationListResultPage) Next() error {
9165	return page.NextWithContext(context.Background())
9166}
9167
9168// NotDone returns true if the page enumeration should be started or is not yet complete.
9169func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
9170	return !page.iiclr.IsEmpty()
9171}
9172
9173// Response returns the raw server response from the last page request.
9174func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
9175	return page.iiclr
9176}
9177
9178// Values returns the slice of values for the current page or nil if there are no values.
9179func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
9180	if page.iiclr.IsEmpty() {
9181		return nil
9182	}
9183	return *page.iiclr.Value
9184}
9185
9186// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
9187func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
9188	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
9189}
9190
9191// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
9192type InterfaceIPConfigurationPropertiesFormat struct {
9193	// ApplicationGatewayBackendAddressPools - The reference of ApplicationGatewayBackendAddressPool resource.
9194	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
9195	// LoadBalancerBackendAddressPools - The reference of LoadBalancerBackendAddressPool resource.
9196	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
9197	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
9198	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
9199	// PrivateIPAddress - Private IP address of the IP configuration.
9200	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
9201	// PrivateIPAllocationMethod - Defines how a private IP address is assigned. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
9202	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
9203	// 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'
9204	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
9205	// Subnet - Subnet bound to the IP configuration.
9206	Subnet *Subnet `json:"subnet,omitempty"`
9207	// Primary - Gets whether this is a primary customer address on the network interface.
9208	Primary *bool `json:"primary,omitempty"`
9209	// PublicIPAddress - Public IP address bound to the IP configuration.
9210	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
9211	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
9212	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
9213	// ProvisioningState - The provisioning state of the network interface IP configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9214	ProvisioningState *string `json:"provisioningState,omitempty"`
9215}
9216
9217// InterfaceListResult response for the ListNetworkInterface API service call.
9218type InterfaceListResult struct {
9219	autorest.Response `json:"-"`
9220	// Value - A list of network interfaces in a resource group.
9221	Value *[]Interface `json:"value,omitempty"`
9222	// NextLink - READ-ONLY; The URL to get the next set of results.
9223	NextLink *string `json:"nextLink,omitempty"`
9224}
9225
9226// InterfaceListResultIterator provides access to a complete listing of Interface values.
9227type InterfaceListResultIterator struct {
9228	i    int
9229	page InterfaceListResultPage
9230}
9231
9232// NextWithContext advances to the next value.  If there was an error making
9233// the request the iterator does not advance and the error is returned.
9234func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
9235	if tracing.IsEnabled() {
9236		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
9237		defer func() {
9238			sc := -1
9239			if iter.Response().Response.Response != nil {
9240				sc = iter.Response().Response.Response.StatusCode
9241			}
9242			tracing.EndSpan(ctx, sc, err)
9243		}()
9244	}
9245	iter.i++
9246	if iter.i < len(iter.page.Values()) {
9247		return nil
9248	}
9249	err = iter.page.NextWithContext(ctx)
9250	if err != nil {
9251		iter.i--
9252		return err
9253	}
9254	iter.i = 0
9255	return nil
9256}
9257
9258// Next advances to the next value.  If there was an error making
9259// the request the iterator does not advance and the error is returned.
9260// Deprecated: Use NextWithContext() instead.
9261func (iter *InterfaceListResultIterator) Next() error {
9262	return iter.NextWithContext(context.Background())
9263}
9264
9265// NotDone returns true if the enumeration should be started or is not yet complete.
9266func (iter InterfaceListResultIterator) NotDone() bool {
9267	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9268}
9269
9270// Response returns the raw server response from the last page request.
9271func (iter InterfaceListResultIterator) Response() InterfaceListResult {
9272	return iter.page.Response()
9273}
9274
9275// Value returns the current value or a zero-initialized value if the
9276// iterator has advanced beyond the end of the collection.
9277func (iter InterfaceListResultIterator) Value() Interface {
9278	if !iter.page.NotDone() {
9279		return Interface{}
9280	}
9281	return iter.page.Values()[iter.i]
9282}
9283
9284// Creates a new instance of the InterfaceListResultIterator type.
9285func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
9286	return InterfaceListResultIterator{page: page}
9287}
9288
9289// IsEmpty returns true if the ListResult contains no values.
9290func (ilr InterfaceListResult) IsEmpty() bool {
9291	return ilr.Value == nil || len(*ilr.Value) == 0
9292}
9293
9294// interfaceListResultPreparer prepares a request to retrieve the next set of results.
9295// It returns nil if no more results exist.
9296func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
9297	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
9298		return nil, nil
9299	}
9300	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9301		autorest.AsJSON(),
9302		autorest.AsGet(),
9303		autorest.WithBaseURL(to.String(ilr.NextLink)))
9304}
9305
9306// InterfaceListResultPage contains a page of Interface values.
9307type InterfaceListResultPage struct {
9308	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
9309	ilr InterfaceListResult
9310}
9311
9312// NextWithContext advances to the next page of values.  If there was an error making
9313// the request the page does not advance and the error is returned.
9314func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
9315	if tracing.IsEnabled() {
9316		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
9317		defer func() {
9318			sc := -1
9319			if page.Response().Response.Response != nil {
9320				sc = page.Response().Response.Response.StatusCode
9321			}
9322			tracing.EndSpan(ctx, sc, err)
9323		}()
9324	}
9325	next, err := page.fn(ctx, page.ilr)
9326	if err != nil {
9327		return err
9328	}
9329	page.ilr = next
9330	return nil
9331}
9332
9333// Next advances to the next page of values.  If there was an error making
9334// the request the page does not advance and the error is returned.
9335// Deprecated: Use NextWithContext() instead.
9336func (page *InterfaceListResultPage) Next() error {
9337	return page.NextWithContext(context.Background())
9338}
9339
9340// NotDone returns true if the page enumeration should be started or is not yet complete.
9341func (page InterfaceListResultPage) NotDone() bool {
9342	return !page.ilr.IsEmpty()
9343}
9344
9345// Response returns the raw server response from the last page request.
9346func (page InterfaceListResultPage) Response() InterfaceListResult {
9347	return page.ilr
9348}
9349
9350// Values returns the slice of values for the current page or nil if there are no values.
9351func (page InterfaceListResultPage) Values() []Interface {
9352	if page.ilr.IsEmpty() {
9353		return nil
9354	}
9355	return *page.ilr.Value
9356}
9357
9358// Creates a new instance of the InterfaceListResultPage type.
9359func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
9360	return InterfaceListResultPage{fn: getNextPage}
9361}
9362
9363// InterfaceLoadBalancerListResult response for list ip configurations API service call.
9364type InterfaceLoadBalancerListResult struct {
9365	autorest.Response `json:"-"`
9366	// Value - A list of load balancers.
9367	Value *[]LoadBalancer `json:"value,omitempty"`
9368	// NextLink - READ-ONLY; The URL to get the next set of results.
9369	NextLink *string `json:"nextLink,omitempty"`
9370}
9371
9372// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
9373type InterfaceLoadBalancerListResultIterator struct {
9374	i    int
9375	page InterfaceLoadBalancerListResultPage
9376}
9377
9378// NextWithContext advances to the next value.  If there was an error making
9379// the request the iterator does not advance and the error is returned.
9380func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
9381	if tracing.IsEnabled() {
9382		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
9383		defer func() {
9384			sc := -1
9385			if iter.Response().Response.Response != nil {
9386				sc = iter.Response().Response.Response.StatusCode
9387			}
9388			tracing.EndSpan(ctx, sc, err)
9389		}()
9390	}
9391	iter.i++
9392	if iter.i < len(iter.page.Values()) {
9393		return nil
9394	}
9395	err = iter.page.NextWithContext(ctx)
9396	if err != nil {
9397		iter.i--
9398		return err
9399	}
9400	iter.i = 0
9401	return nil
9402}
9403
9404// Next advances to the next value.  If there was an error making
9405// the request the iterator does not advance and the error is returned.
9406// Deprecated: Use NextWithContext() instead.
9407func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
9408	return iter.NextWithContext(context.Background())
9409}
9410
9411// NotDone returns true if the enumeration should be started or is not yet complete.
9412func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
9413	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9414}
9415
9416// Response returns the raw server response from the last page request.
9417func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
9418	return iter.page.Response()
9419}
9420
9421// Value returns the current value or a zero-initialized value if the
9422// iterator has advanced beyond the end of the collection.
9423func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
9424	if !iter.page.NotDone() {
9425		return LoadBalancer{}
9426	}
9427	return iter.page.Values()[iter.i]
9428}
9429
9430// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
9431func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
9432	return InterfaceLoadBalancerListResultIterator{page: page}
9433}
9434
9435// IsEmpty returns true if the ListResult contains no values.
9436func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
9437	return ilblr.Value == nil || len(*ilblr.Value) == 0
9438}
9439
9440// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
9441// It returns nil if no more results exist.
9442func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
9443	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
9444		return nil, nil
9445	}
9446	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9447		autorest.AsJSON(),
9448		autorest.AsGet(),
9449		autorest.WithBaseURL(to.String(ilblr.NextLink)))
9450}
9451
9452// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
9453type InterfaceLoadBalancerListResultPage struct {
9454	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
9455	ilblr InterfaceLoadBalancerListResult
9456}
9457
9458// NextWithContext advances to the next page of values.  If there was an error making
9459// the request the page does not advance and the error is returned.
9460func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
9461	if tracing.IsEnabled() {
9462		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
9463		defer func() {
9464			sc := -1
9465			if page.Response().Response.Response != nil {
9466				sc = page.Response().Response.Response.StatusCode
9467			}
9468			tracing.EndSpan(ctx, sc, err)
9469		}()
9470	}
9471	next, err := page.fn(ctx, page.ilblr)
9472	if err != nil {
9473		return err
9474	}
9475	page.ilblr = next
9476	return nil
9477}
9478
9479// Next advances to the next page of values.  If there was an error making
9480// the request the page does not advance and the error is returned.
9481// Deprecated: Use NextWithContext() instead.
9482func (page *InterfaceLoadBalancerListResultPage) Next() error {
9483	return page.NextWithContext(context.Background())
9484}
9485
9486// NotDone returns true if the page enumeration should be started or is not yet complete.
9487func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
9488	return !page.ilblr.IsEmpty()
9489}
9490
9491// Response returns the raw server response from the last page request.
9492func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
9493	return page.ilblr
9494}
9495
9496// Values returns the slice of values for the current page or nil if there are no values.
9497func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
9498	if page.ilblr.IsEmpty() {
9499		return nil
9500	}
9501	return *page.ilblr.Value
9502}
9503
9504// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
9505func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
9506	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
9507}
9508
9509// InterfacePropertiesFormat networkInterface properties.
9510type InterfacePropertiesFormat struct {
9511	// VirtualMachine - The reference of a virtual machine.
9512	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
9513	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
9514	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
9515	// IPConfigurations - A list of IPConfigurations of the network interface.
9516	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
9517	// DNSSettings - The DNS settings in network interface.
9518	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
9519	// MacAddress - The MAC address of the network interface.
9520	MacAddress *string `json:"macAddress,omitempty"`
9521	// Primary - Gets whether this is a primary network interface on a virtual machine.
9522	Primary *bool `json:"primary,omitempty"`
9523	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
9524	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
9525	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
9526	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
9527	// ResourceGUID - The resource GUID property of the network interface resource.
9528	ResourceGUID *string `json:"resourceGuid,omitempty"`
9529	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9530	ProvisioningState *string `json:"provisioningState,omitempty"`
9531}
9532
9533// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9534// long-running operation.
9535type InterfacesCreateOrUpdateFuture struct {
9536	azure.Future
9537}
9538
9539// Result returns the result of the asynchronous operation.
9540// If the operation has not completed it will return an error.
9541func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
9542	var done bool
9543	done, err = future.DoneWithContext(context.Background(), client)
9544	if err != nil {
9545		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9546		return
9547	}
9548	if !done {
9549		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
9550		return
9551	}
9552	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9553	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
9554		i, err = client.CreateOrUpdateResponder(i.Response.Response)
9555		if err != nil {
9556			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
9557		}
9558	}
9559	return
9560}
9561
9562// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
9563// operation.
9564type InterfacesDeleteFuture struct {
9565	azure.Future
9566}
9567
9568// Result returns the result of the asynchronous operation.
9569// If the operation has not completed it will return an error.
9570func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
9571	var done bool
9572	done, err = future.DoneWithContext(context.Background(), client)
9573	if err != nil {
9574		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
9575		return
9576	}
9577	if !done {
9578		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
9579		return
9580	}
9581	ar.Response = future.Response()
9582	return
9583}
9584
9585// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
9586// long-running operation.
9587type InterfacesGetEffectiveRouteTableFuture struct {
9588	azure.Future
9589}
9590
9591// Result returns the result of the asynchronous operation.
9592// If the operation has not completed it will return an error.
9593func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
9594	var done bool
9595	done, err = future.DoneWithContext(context.Background(), client)
9596	if err != nil {
9597		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
9598		return
9599	}
9600	if !done {
9601		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
9602		return
9603	}
9604	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9605	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
9606		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
9607		if err != nil {
9608			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
9609		}
9610	}
9611	return
9612}
9613
9614// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
9615// results of a long-running operation.
9616type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
9617	azure.Future
9618}
9619
9620// Result returns the result of the asynchronous operation.
9621// If the operation has not completed it will return an error.
9622func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
9623	var done bool
9624	done, err = future.DoneWithContext(context.Background(), client)
9625	if err != nil {
9626		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
9627		return
9628	}
9629	if !done {
9630		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
9631		return
9632	}
9633	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9634	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
9635		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
9636		if err != nil {
9637			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
9638		}
9639	}
9640	return
9641}
9642
9643// InterfacesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
9644// operation.
9645type InterfacesUpdateTagsFuture struct {
9646	azure.Future
9647}
9648
9649// Result returns the result of the asynchronous operation.
9650// If the operation has not completed it will return an error.
9651func (future *InterfacesUpdateTagsFuture) Result(client InterfacesClient) (i Interface, err error) {
9652	var done bool
9653	done, err = future.DoneWithContext(context.Background(), client)
9654	if err != nil {
9655		err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9656		return
9657	}
9658	if !done {
9659		err = azure.NewAsyncOpIncompleteError("network.InterfacesUpdateTagsFuture")
9660		return
9661	}
9662	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9663	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
9664		i, err = client.UpdateTagsResponder(i.Response.Response)
9665		if err != nil {
9666			err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", i.Response.Response, "Failure responding to request")
9667		}
9668	}
9669	return
9670}
9671
9672// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call
9673type IPAddressAvailabilityResult struct {
9674	autorest.Response `json:"-"`
9675	// Available - Private IP address availability.
9676	Available *bool `json:"available,omitempty"`
9677	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
9678	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
9679}
9680
9681// IPConfiguration IP configuration
9682type IPConfiguration struct {
9683	// IPConfigurationPropertiesFormat - Properties of the IP configuration
9684	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
9685	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
9686	Name *string `json:"name,omitempty"`
9687	// Etag - A unique read-only string that changes whenever the resource is updated.
9688	Etag *string `json:"etag,omitempty"`
9689	// ID - Resource ID.
9690	ID *string `json:"id,omitempty"`
9691}
9692
9693// MarshalJSON is the custom marshaler for IPConfiguration.
9694func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
9695	objectMap := make(map[string]interface{})
9696	if ic.IPConfigurationPropertiesFormat != nil {
9697		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
9698	}
9699	if ic.Name != nil {
9700		objectMap["name"] = ic.Name
9701	}
9702	if ic.Etag != nil {
9703		objectMap["etag"] = ic.Etag
9704	}
9705	if ic.ID != nil {
9706		objectMap["id"] = ic.ID
9707	}
9708	return json.Marshal(objectMap)
9709}
9710
9711// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
9712func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
9713	var m map[string]*json.RawMessage
9714	err := json.Unmarshal(body, &m)
9715	if err != nil {
9716		return err
9717	}
9718	for k, v := range m {
9719		switch k {
9720		case "properties":
9721			if v != nil {
9722				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
9723				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
9724				if err != nil {
9725					return err
9726				}
9727				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
9728			}
9729		case "name":
9730			if v != nil {
9731				var name string
9732				err = json.Unmarshal(*v, &name)
9733				if err != nil {
9734					return err
9735				}
9736				ic.Name = &name
9737			}
9738		case "etag":
9739			if v != nil {
9740				var etag string
9741				err = json.Unmarshal(*v, &etag)
9742				if err != nil {
9743					return err
9744				}
9745				ic.Etag = &etag
9746			}
9747		case "id":
9748			if v != nil {
9749				var ID string
9750				err = json.Unmarshal(*v, &ID)
9751				if err != nil {
9752					return err
9753				}
9754				ic.ID = &ID
9755			}
9756		}
9757	}
9758
9759	return nil
9760}
9761
9762// IPConfigurationPropertiesFormat properties of IP configuration.
9763type IPConfigurationPropertiesFormat struct {
9764	// PrivateIPAddress - The private IP address of the IP configuration.
9765	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
9766	// PrivateIPAllocationMethod - The private IP allocation method. Possible values are 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
9767	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
9768	// Subnet - The reference of the subnet resource.
9769	Subnet *Subnet `json:"subnet,omitempty"`
9770	// PublicIPAddress - The reference of the public IP resource.
9771	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
9772	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9773	ProvisioningState *string `json:"provisioningState,omitempty"`
9774}
9775
9776// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection
9777type IpsecPolicy struct {
9778	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
9779	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
9780	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
9781	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
9782	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
9783	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
9784	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
9785	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
9786	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
9787	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
9788	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
9789	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
9790	// DhGroup - The DH Groups used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
9791	DhGroup DhGroup `json:"dhGroup,omitempty"`
9792	// 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'
9793	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
9794}
9795
9796// IPTag contains the IpTag associated with the public IP address
9797type IPTag struct {
9798	// IPTagType - Gets or sets the ipTag type: Example FirstPartyUsage.
9799	IPTagType *string `json:"ipTagType,omitempty"`
9800	// Tag - Gets or sets value of the IpTag associated with the public IP. Example SQL, Storage etc
9801	Tag *string `json:"tag,omitempty"`
9802}
9803
9804// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
9805type Ipv6ExpressRouteCircuitPeeringConfig struct {
9806	// PrimaryPeerAddressPrefix - The primary address prefix.
9807	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
9808	// SecondaryPeerAddressPrefix - The secondary address prefix.
9809	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
9810	// MicrosoftPeeringConfig - The Microsoft peering configuration.
9811	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
9812	// RouteFilter - The reference of the RouteFilter resource.
9813	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
9814	// State - The state of peering. Possible values are: 'Disabled' and 'Enabled'. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
9815	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
9816}
9817
9818// LoadBalancer loadBalancer resource
9819type LoadBalancer struct {
9820	autorest.Response `json:"-"`
9821	// Sku - The load balancer SKU.
9822	Sku *LoadBalancerSku `json:"sku,omitempty"`
9823	// LoadBalancerPropertiesFormat - Properties of load balancer.
9824	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
9825	// Etag - A unique read-only string that changes whenever the resource is updated.
9826	Etag *string `json:"etag,omitempty"`
9827	// ID - Resource ID.
9828	ID *string `json:"id,omitempty"`
9829	// Name - READ-ONLY; Resource name.
9830	Name *string `json:"name,omitempty"`
9831	// Type - READ-ONLY; Resource type.
9832	Type *string `json:"type,omitempty"`
9833	// Location - Resource location.
9834	Location *string `json:"location,omitempty"`
9835	// Tags - Resource tags.
9836	Tags map[string]*string `json:"tags"`
9837}
9838
9839// MarshalJSON is the custom marshaler for LoadBalancer.
9840func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
9841	objectMap := make(map[string]interface{})
9842	if lb.Sku != nil {
9843		objectMap["sku"] = lb.Sku
9844	}
9845	if lb.LoadBalancerPropertiesFormat != nil {
9846		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
9847	}
9848	if lb.Etag != nil {
9849		objectMap["etag"] = lb.Etag
9850	}
9851	if lb.ID != nil {
9852		objectMap["id"] = lb.ID
9853	}
9854	if lb.Location != nil {
9855		objectMap["location"] = lb.Location
9856	}
9857	if lb.Tags != nil {
9858		objectMap["tags"] = lb.Tags
9859	}
9860	return json.Marshal(objectMap)
9861}
9862
9863// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
9864func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
9865	var m map[string]*json.RawMessage
9866	err := json.Unmarshal(body, &m)
9867	if err != nil {
9868		return err
9869	}
9870	for k, v := range m {
9871		switch k {
9872		case "sku":
9873			if v != nil {
9874				var sku LoadBalancerSku
9875				err = json.Unmarshal(*v, &sku)
9876				if err != nil {
9877					return err
9878				}
9879				lb.Sku = &sku
9880			}
9881		case "properties":
9882			if v != nil {
9883				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
9884				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
9885				if err != nil {
9886					return err
9887				}
9888				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
9889			}
9890		case "etag":
9891			if v != nil {
9892				var etag string
9893				err = json.Unmarshal(*v, &etag)
9894				if err != nil {
9895					return err
9896				}
9897				lb.Etag = &etag
9898			}
9899		case "id":
9900			if v != nil {
9901				var ID string
9902				err = json.Unmarshal(*v, &ID)
9903				if err != nil {
9904					return err
9905				}
9906				lb.ID = &ID
9907			}
9908		case "name":
9909			if v != nil {
9910				var name string
9911				err = json.Unmarshal(*v, &name)
9912				if err != nil {
9913					return err
9914				}
9915				lb.Name = &name
9916			}
9917		case "type":
9918			if v != nil {
9919				var typeVar string
9920				err = json.Unmarshal(*v, &typeVar)
9921				if err != nil {
9922					return err
9923				}
9924				lb.Type = &typeVar
9925			}
9926		case "location":
9927			if v != nil {
9928				var location string
9929				err = json.Unmarshal(*v, &location)
9930				if err != nil {
9931					return err
9932				}
9933				lb.Location = &location
9934			}
9935		case "tags":
9936			if v != nil {
9937				var tags map[string]*string
9938				err = json.Unmarshal(*v, &tags)
9939				if err != nil {
9940					return err
9941				}
9942				lb.Tags = tags
9943			}
9944		}
9945	}
9946
9947	return nil
9948}
9949
9950// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
9951type LoadBalancerBackendAddressPoolListResult struct {
9952	autorest.Response `json:"-"`
9953	// Value - A list of backend address pools in a load balancer.
9954	Value *[]BackendAddressPool `json:"value,omitempty"`
9955	// NextLink - READ-ONLY; The URL to get the next set of results.
9956	NextLink *string `json:"nextLink,omitempty"`
9957}
9958
9959// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
9960// BackendAddressPool values.
9961type LoadBalancerBackendAddressPoolListResultIterator struct {
9962	i    int
9963	page LoadBalancerBackendAddressPoolListResultPage
9964}
9965
9966// NextWithContext advances to the next value.  If there was an error making
9967// the request the iterator does not advance and the error is returned.
9968func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
9969	if tracing.IsEnabled() {
9970		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
9971		defer func() {
9972			sc := -1
9973			if iter.Response().Response.Response != nil {
9974				sc = iter.Response().Response.Response.StatusCode
9975			}
9976			tracing.EndSpan(ctx, sc, err)
9977		}()
9978	}
9979	iter.i++
9980	if iter.i < len(iter.page.Values()) {
9981		return nil
9982	}
9983	err = iter.page.NextWithContext(ctx)
9984	if err != nil {
9985		iter.i--
9986		return err
9987	}
9988	iter.i = 0
9989	return nil
9990}
9991
9992// Next advances to the next value.  If there was an error making
9993// the request the iterator does not advance and the error is returned.
9994// Deprecated: Use NextWithContext() instead.
9995func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
9996	return iter.NextWithContext(context.Background())
9997}
9998
9999// NotDone returns true if the enumeration should be started or is not yet complete.
10000func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
10001	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10002}
10003
10004// Response returns the raw server response from the last page request.
10005func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
10006	return iter.page.Response()
10007}
10008
10009// Value returns the current value or a zero-initialized value if the
10010// iterator has advanced beyond the end of the collection.
10011func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
10012	if !iter.page.NotDone() {
10013		return BackendAddressPool{}
10014	}
10015	return iter.page.Values()[iter.i]
10016}
10017
10018// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
10019func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
10020	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
10021}
10022
10023// IsEmpty returns true if the ListResult contains no values.
10024func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
10025	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
10026}
10027
10028// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
10029// It returns nil if no more results exist.
10030func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
10031	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
10032		return nil, nil
10033	}
10034	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10035		autorest.AsJSON(),
10036		autorest.AsGet(),
10037		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
10038}
10039
10040// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
10041type LoadBalancerBackendAddressPoolListResultPage struct {
10042	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
10043	lbbaplr LoadBalancerBackendAddressPoolListResult
10044}
10045
10046// NextWithContext advances to the next page of values.  If there was an error making
10047// the request the page does not advance and the error is returned.
10048func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
10049	if tracing.IsEnabled() {
10050		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
10051		defer func() {
10052			sc := -1
10053			if page.Response().Response.Response != nil {
10054				sc = page.Response().Response.Response.StatusCode
10055			}
10056			tracing.EndSpan(ctx, sc, err)
10057		}()
10058	}
10059	next, err := page.fn(ctx, page.lbbaplr)
10060	if err != nil {
10061		return err
10062	}
10063	page.lbbaplr = next
10064	return nil
10065}
10066
10067// Next advances to the next page of values.  If there was an error making
10068// the request the page does not advance and the error is returned.
10069// Deprecated: Use NextWithContext() instead.
10070func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
10071	return page.NextWithContext(context.Background())
10072}
10073
10074// NotDone returns true if the page enumeration should be started or is not yet complete.
10075func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
10076	return !page.lbbaplr.IsEmpty()
10077}
10078
10079// Response returns the raw server response from the last page request.
10080func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
10081	return page.lbbaplr
10082}
10083
10084// Values returns the slice of values for the current page or nil if there are no values.
10085func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
10086	if page.lbbaplr.IsEmpty() {
10087		return nil
10088	}
10089	return *page.lbbaplr.Value
10090}
10091
10092// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
10093func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
10094	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
10095}
10096
10097// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
10098type LoadBalancerFrontendIPConfigurationListResult struct {
10099	autorest.Response `json:"-"`
10100	// Value - A list of frontend IP configurations in a load balancer.
10101	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
10102	// NextLink - READ-ONLY; The URL to get the next set of results.
10103	NextLink *string `json:"nextLink,omitempty"`
10104}
10105
10106// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
10107// FrontendIPConfiguration values.
10108type LoadBalancerFrontendIPConfigurationListResultIterator struct {
10109	i    int
10110	page LoadBalancerFrontendIPConfigurationListResultPage
10111}
10112
10113// NextWithContext advances to the next value.  If there was an error making
10114// the request the iterator does not advance and the error is returned.
10115func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
10116	if tracing.IsEnabled() {
10117		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
10118		defer func() {
10119			sc := -1
10120			if iter.Response().Response.Response != nil {
10121				sc = iter.Response().Response.Response.StatusCode
10122			}
10123			tracing.EndSpan(ctx, sc, err)
10124		}()
10125	}
10126	iter.i++
10127	if iter.i < len(iter.page.Values()) {
10128		return nil
10129	}
10130	err = iter.page.NextWithContext(ctx)
10131	if err != nil {
10132		iter.i--
10133		return err
10134	}
10135	iter.i = 0
10136	return nil
10137}
10138
10139// Next advances to the next value.  If there was an error making
10140// the request the iterator does not advance and the error is returned.
10141// Deprecated: Use NextWithContext() instead.
10142func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
10143	return iter.NextWithContext(context.Background())
10144}
10145
10146// NotDone returns true if the enumeration should be started or is not yet complete.
10147func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
10148	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10149}
10150
10151// Response returns the raw server response from the last page request.
10152func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
10153	return iter.page.Response()
10154}
10155
10156// Value returns the current value or a zero-initialized value if the
10157// iterator has advanced beyond the end of the collection.
10158func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
10159	if !iter.page.NotDone() {
10160		return FrontendIPConfiguration{}
10161	}
10162	return iter.page.Values()[iter.i]
10163}
10164
10165// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
10166func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
10167	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
10168}
10169
10170// IsEmpty returns true if the ListResult contains no values.
10171func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
10172	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
10173}
10174
10175// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
10176// It returns nil if no more results exist.
10177func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
10178	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
10179		return nil, nil
10180	}
10181	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10182		autorest.AsJSON(),
10183		autorest.AsGet(),
10184		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
10185}
10186
10187// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
10188type LoadBalancerFrontendIPConfigurationListResultPage struct {
10189	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
10190	lbficlr LoadBalancerFrontendIPConfigurationListResult
10191}
10192
10193// NextWithContext advances to the next page of values.  If there was an error making
10194// the request the page does not advance and the error is returned.
10195func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
10196	if tracing.IsEnabled() {
10197		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
10198		defer func() {
10199			sc := -1
10200			if page.Response().Response.Response != nil {
10201				sc = page.Response().Response.Response.StatusCode
10202			}
10203			tracing.EndSpan(ctx, sc, err)
10204		}()
10205	}
10206	next, err := page.fn(ctx, page.lbficlr)
10207	if err != nil {
10208		return err
10209	}
10210	page.lbficlr = next
10211	return nil
10212}
10213
10214// Next advances to the next page of values.  If there was an error making
10215// the request the page does not advance and the error is returned.
10216// Deprecated: Use NextWithContext() instead.
10217func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
10218	return page.NextWithContext(context.Background())
10219}
10220
10221// NotDone returns true if the page enumeration should be started or is not yet complete.
10222func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
10223	return !page.lbficlr.IsEmpty()
10224}
10225
10226// Response returns the raw server response from the last page request.
10227func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
10228	return page.lbficlr
10229}
10230
10231// Values returns the slice of values for the current page or nil if there are no values.
10232func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
10233	if page.lbficlr.IsEmpty() {
10234		return nil
10235	}
10236	return *page.lbficlr.Value
10237}
10238
10239// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
10240func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
10241	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
10242}
10243
10244// LoadBalancerListResult response for ListLoadBalancers API service call.
10245type LoadBalancerListResult struct {
10246	autorest.Response `json:"-"`
10247	// Value - A list of load balancers in a resource group.
10248	Value *[]LoadBalancer `json:"value,omitempty"`
10249	// NextLink - READ-ONLY; The URL to get the next set of results.
10250	NextLink *string `json:"nextLink,omitempty"`
10251}
10252
10253// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
10254type LoadBalancerListResultIterator struct {
10255	i    int
10256	page LoadBalancerListResultPage
10257}
10258
10259// NextWithContext advances to the next value.  If there was an error making
10260// the request the iterator does not advance and the error is returned.
10261func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
10262	if tracing.IsEnabled() {
10263		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
10264		defer func() {
10265			sc := -1
10266			if iter.Response().Response.Response != nil {
10267				sc = iter.Response().Response.Response.StatusCode
10268			}
10269			tracing.EndSpan(ctx, sc, err)
10270		}()
10271	}
10272	iter.i++
10273	if iter.i < len(iter.page.Values()) {
10274		return nil
10275	}
10276	err = iter.page.NextWithContext(ctx)
10277	if err != nil {
10278		iter.i--
10279		return err
10280	}
10281	iter.i = 0
10282	return nil
10283}
10284
10285// Next advances to the next value.  If there was an error making
10286// the request the iterator does not advance and the error is returned.
10287// Deprecated: Use NextWithContext() instead.
10288func (iter *LoadBalancerListResultIterator) Next() error {
10289	return iter.NextWithContext(context.Background())
10290}
10291
10292// NotDone returns true if the enumeration should be started or is not yet complete.
10293func (iter LoadBalancerListResultIterator) NotDone() bool {
10294	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10295}
10296
10297// Response returns the raw server response from the last page request.
10298func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
10299	return iter.page.Response()
10300}
10301
10302// Value returns the current value or a zero-initialized value if the
10303// iterator has advanced beyond the end of the collection.
10304func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
10305	if !iter.page.NotDone() {
10306		return LoadBalancer{}
10307	}
10308	return iter.page.Values()[iter.i]
10309}
10310
10311// Creates a new instance of the LoadBalancerListResultIterator type.
10312func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
10313	return LoadBalancerListResultIterator{page: page}
10314}
10315
10316// IsEmpty returns true if the ListResult contains no values.
10317func (lblr LoadBalancerListResult) IsEmpty() bool {
10318	return lblr.Value == nil || len(*lblr.Value) == 0
10319}
10320
10321// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
10322// It returns nil if no more results exist.
10323func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
10324	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
10325		return nil, nil
10326	}
10327	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10328		autorest.AsJSON(),
10329		autorest.AsGet(),
10330		autorest.WithBaseURL(to.String(lblr.NextLink)))
10331}
10332
10333// LoadBalancerListResultPage contains a page of LoadBalancer values.
10334type LoadBalancerListResultPage struct {
10335	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
10336	lblr LoadBalancerListResult
10337}
10338
10339// NextWithContext advances to the next page of values.  If there was an error making
10340// the request the page does not advance and the error is returned.
10341func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
10342	if tracing.IsEnabled() {
10343		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
10344		defer func() {
10345			sc := -1
10346			if page.Response().Response.Response != nil {
10347				sc = page.Response().Response.Response.StatusCode
10348			}
10349			tracing.EndSpan(ctx, sc, err)
10350		}()
10351	}
10352	next, err := page.fn(ctx, page.lblr)
10353	if err != nil {
10354		return err
10355	}
10356	page.lblr = next
10357	return nil
10358}
10359
10360// Next advances to the next page of values.  If there was an error making
10361// the request the page does not advance and the error is returned.
10362// Deprecated: Use NextWithContext() instead.
10363func (page *LoadBalancerListResultPage) Next() error {
10364	return page.NextWithContext(context.Background())
10365}
10366
10367// NotDone returns true if the page enumeration should be started or is not yet complete.
10368func (page LoadBalancerListResultPage) NotDone() bool {
10369	return !page.lblr.IsEmpty()
10370}
10371
10372// Response returns the raw server response from the last page request.
10373func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
10374	return page.lblr
10375}
10376
10377// Values returns the slice of values for the current page or nil if there are no values.
10378func (page LoadBalancerListResultPage) Values() []LoadBalancer {
10379	if page.lblr.IsEmpty() {
10380		return nil
10381	}
10382	return *page.lblr.Value
10383}
10384
10385// Creates a new instance of the LoadBalancerListResultPage type.
10386func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
10387	return LoadBalancerListResultPage{fn: getNextPage}
10388}
10389
10390// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
10391type LoadBalancerLoadBalancingRuleListResult struct {
10392	autorest.Response `json:"-"`
10393	// Value - A list of load balancing rules in a load balancer.
10394	Value *[]LoadBalancingRule `json:"value,omitempty"`
10395	// NextLink - READ-ONLY; The URL to get the next set of results.
10396	NextLink *string `json:"nextLink,omitempty"`
10397}
10398
10399// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
10400// LoadBalancingRule values.
10401type LoadBalancerLoadBalancingRuleListResultIterator struct {
10402	i    int
10403	page LoadBalancerLoadBalancingRuleListResultPage
10404}
10405
10406// NextWithContext advances to the next value.  If there was an error making
10407// the request the iterator does not advance and the error is returned.
10408func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
10409	if tracing.IsEnabled() {
10410		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
10411		defer func() {
10412			sc := -1
10413			if iter.Response().Response.Response != nil {
10414				sc = iter.Response().Response.Response.StatusCode
10415			}
10416			tracing.EndSpan(ctx, sc, err)
10417		}()
10418	}
10419	iter.i++
10420	if iter.i < len(iter.page.Values()) {
10421		return nil
10422	}
10423	err = iter.page.NextWithContext(ctx)
10424	if err != nil {
10425		iter.i--
10426		return err
10427	}
10428	iter.i = 0
10429	return nil
10430}
10431
10432// Next advances to the next value.  If there was an error making
10433// the request the iterator does not advance and the error is returned.
10434// Deprecated: Use NextWithContext() instead.
10435func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
10436	return iter.NextWithContext(context.Background())
10437}
10438
10439// NotDone returns true if the enumeration should be started or is not yet complete.
10440func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
10441	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10442}
10443
10444// Response returns the raw server response from the last page request.
10445func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
10446	return iter.page.Response()
10447}
10448
10449// Value returns the current value or a zero-initialized value if the
10450// iterator has advanced beyond the end of the collection.
10451func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
10452	if !iter.page.NotDone() {
10453		return LoadBalancingRule{}
10454	}
10455	return iter.page.Values()[iter.i]
10456}
10457
10458// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
10459func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
10460	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
10461}
10462
10463// IsEmpty returns true if the ListResult contains no values.
10464func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
10465	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
10466}
10467
10468// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
10469// It returns nil if no more results exist.
10470func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
10471	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
10472		return nil, nil
10473	}
10474	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10475		autorest.AsJSON(),
10476		autorest.AsGet(),
10477		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
10478}
10479
10480// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
10481type LoadBalancerLoadBalancingRuleListResultPage struct {
10482	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
10483	lblbrlr LoadBalancerLoadBalancingRuleListResult
10484}
10485
10486// NextWithContext advances to the next page of values.  If there was an error making
10487// the request the page does not advance and the error is returned.
10488func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
10489	if tracing.IsEnabled() {
10490		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
10491		defer func() {
10492			sc := -1
10493			if page.Response().Response.Response != nil {
10494				sc = page.Response().Response.Response.StatusCode
10495			}
10496			tracing.EndSpan(ctx, sc, err)
10497		}()
10498	}
10499	next, err := page.fn(ctx, page.lblbrlr)
10500	if err != nil {
10501		return err
10502	}
10503	page.lblbrlr = next
10504	return nil
10505}
10506
10507// Next advances to the next page of values.  If there was an error making
10508// the request the page does not advance and the error is returned.
10509// Deprecated: Use NextWithContext() instead.
10510func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
10511	return page.NextWithContext(context.Background())
10512}
10513
10514// NotDone returns true if the page enumeration should be started or is not yet complete.
10515func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
10516	return !page.lblbrlr.IsEmpty()
10517}
10518
10519// Response returns the raw server response from the last page request.
10520func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
10521	return page.lblbrlr
10522}
10523
10524// Values returns the slice of values for the current page or nil if there are no values.
10525func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
10526	if page.lblbrlr.IsEmpty() {
10527		return nil
10528	}
10529	return *page.lblbrlr.Value
10530}
10531
10532// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
10533func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
10534	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
10535}
10536
10537// LoadBalancerProbeListResult response for ListProbe API service call.
10538type LoadBalancerProbeListResult struct {
10539	autorest.Response `json:"-"`
10540	// Value - A list of probes in a load balancer.
10541	Value *[]Probe `json:"value,omitempty"`
10542	// NextLink - READ-ONLY; The URL to get the next set of results.
10543	NextLink *string `json:"nextLink,omitempty"`
10544}
10545
10546// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
10547type LoadBalancerProbeListResultIterator struct {
10548	i    int
10549	page LoadBalancerProbeListResultPage
10550}
10551
10552// NextWithContext advances to the next value.  If there was an error making
10553// the request the iterator does not advance and the error is returned.
10554func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
10555	if tracing.IsEnabled() {
10556		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
10557		defer func() {
10558			sc := -1
10559			if iter.Response().Response.Response != nil {
10560				sc = iter.Response().Response.Response.StatusCode
10561			}
10562			tracing.EndSpan(ctx, sc, err)
10563		}()
10564	}
10565	iter.i++
10566	if iter.i < len(iter.page.Values()) {
10567		return nil
10568	}
10569	err = iter.page.NextWithContext(ctx)
10570	if err != nil {
10571		iter.i--
10572		return err
10573	}
10574	iter.i = 0
10575	return nil
10576}
10577
10578// Next advances to the next value.  If there was an error making
10579// the request the iterator does not advance and the error is returned.
10580// Deprecated: Use NextWithContext() instead.
10581func (iter *LoadBalancerProbeListResultIterator) Next() error {
10582	return iter.NextWithContext(context.Background())
10583}
10584
10585// NotDone returns true if the enumeration should be started or is not yet complete.
10586func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
10587	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10588}
10589
10590// Response returns the raw server response from the last page request.
10591func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
10592	return iter.page.Response()
10593}
10594
10595// Value returns the current value or a zero-initialized value if the
10596// iterator has advanced beyond the end of the collection.
10597func (iter LoadBalancerProbeListResultIterator) Value() Probe {
10598	if !iter.page.NotDone() {
10599		return Probe{}
10600	}
10601	return iter.page.Values()[iter.i]
10602}
10603
10604// Creates a new instance of the LoadBalancerProbeListResultIterator type.
10605func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
10606	return LoadBalancerProbeListResultIterator{page: page}
10607}
10608
10609// IsEmpty returns true if the ListResult contains no values.
10610func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
10611	return lbplr.Value == nil || len(*lbplr.Value) == 0
10612}
10613
10614// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
10615// It returns nil if no more results exist.
10616func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
10617	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
10618		return nil, nil
10619	}
10620	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10621		autorest.AsJSON(),
10622		autorest.AsGet(),
10623		autorest.WithBaseURL(to.String(lbplr.NextLink)))
10624}
10625
10626// LoadBalancerProbeListResultPage contains a page of Probe values.
10627type LoadBalancerProbeListResultPage struct {
10628	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
10629	lbplr LoadBalancerProbeListResult
10630}
10631
10632// NextWithContext advances to the next page of values.  If there was an error making
10633// the request the page does not advance and the error is returned.
10634func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
10635	if tracing.IsEnabled() {
10636		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
10637		defer func() {
10638			sc := -1
10639			if page.Response().Response.Response != nil {
10640				sc = page.Response().Response.Response.StatusCode
10641			}
10642			tracing.EndSpan(ctx, sc, err)
10643		}()
10644	}
10645	next, err := page.fn(ctx, page.lbplr)
10646	if err != nil {
10647		return err
10648	}
10649	page.lbplr = next
10650	return nil
10651}
10652
10653// Next advances to the next page of values.  If there was an error making
10654// the request the page does not advance and the error is returned.
10655// Deprecated: Use NextWithContext() instead.
10656func (page *LoadBalancerProbeListResultPage) Next() error {
10657	return page.NextWithContext(context.Background())
10658}
10659
10660// NotDone returns true if the page enumeration should be started or is not yet complete.
10661func (page LoadBalancerProbeListResultPage) NotDone() bool {
10662	return !page.lbplr.IsEmpty()
10663}
10664
10665// Response returns the raw server response from the last page request.
10666func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
10667	return page.lbplr
10668}
10669
10670// Values returns the slice of values for the current page or nil if there are no values.
10671func (page LoadBalancerProbeListResultPage) Values() []Probe {
10672	if page.lbplr.IsEmpty() {
10673		return nil
10674	}
10675	return *page.lbplr.Value
10676}
10677
10678// Creates a new instance of the LoadBalancerProbeListResultPage type.
10679func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
10680	return LoadBalancerProbeListResultPage{fn: getNextPage}
10681}
10682
10683// LoadBalancerPropertiesFormat properties of the load balancer.
10684type LoadBalancerPropertiesFormat struct {
10685	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer
10686	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
10687	// BackendAddressPools - Collection of backend address pools used by a load balancer
10688	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
10689	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning
10690	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
10691	// Probes - Collection of probe objects used in the load balancer
10692	Probes *[]Probe `json:"probes,omitempty"`
10693	// 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.
10694	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
10695	// 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.
10696	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
10697	// OutboundNatRules - The outbound NAT rules.
10698	OutboundNatRules *[]OutboundNatRule `json:"outboundNatRules,omitempty"`
10699	// ResourceGUID - The resource GUID property of the load balancer resource.
10700	ResourceGUID *string `json:"resourceGuid,omitempty"`
10701	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10702	ProvisioningState *string `json:"provisioningState,omitempty"`
10703}
10704
10705// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
10706// long-running operation.
10707type LoadBalancersCreateOrUpdateFuture struct {
10708	azure.Future
10709}
10710
10711// Result returns the result of the asynchronous operation.
10712// If the operation has not completed it will return an error.
10713func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
10714	var done bool
10715	done, err = future.DoneWithContext(context.Background(), client)
10716	if err != nil {
10717		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10718		return
10719	}
10720	if !done {
10721		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
10722		return
10723	}
10724	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10725	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
10726		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
10727		if err != nil {
10728			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
10729		}
10730	}
10731	return
10732}
10733
10734// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
10735// operation.
10736type LoadBalancersDeleteFuture struct {
10737	azure.Future
10738}
10739
10740// Result returns the result of the asynchronous operation.
10741// If the operation has not completed it will return an error.
10742func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
10743	var done bool
10744	done, err = future.DoneWithContext(context.Background(), client)
10745	if err != nil {
10746		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
10747		return
10748	}
10749	if !done {
10750		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
10751		return
10752	}
10753	ar.Response = future.Response()
10754	return
10755}
10756
10757// LoadBalancerSku SKU of a load balancer
10758type LoadBalancerSku struct {
10759	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
10760	Name LoadBalancerSkuName `json:"name,omitempty"`
10761}
10762
10763// LoadBalancersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
10764// operation.
10765type LoadBalancersUpdateTagsFuture struct {
10766	azure.Future
10767}
10768
10769// Result returns the result of the asynchronous operation.
10770// If the operation has not completed it will return an error.
10771func (future *LoadBalancersUpdateTagsFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
10772	var done bool
10773	done, err = future.DoneWithContext(context.Background(), client)
10774	if err != nil {
10775		err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
10776		return
10777	}
10778	if !done {
10779		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersUpdateTagsFuture")
10780		return
10781	}
10782	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10783	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
10784		lb, err = client.UpdateTagsResponder(lb.Response.Response)
10785		if err != nil {
10786			err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", lb.Response.Response, "Failure responding to request")
10787		}
10788	}
10789	return
10790}
10791
10792// LoadBalancingRule a load balancing rule for a load balancer.
10793type LoadBalancingRule struct {
10794	autorest.Response `json:"-"`
10795	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
10796	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
10797	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10798	Name *string `json:"name,omitempty"`
10799	// Etag - A unique read-only string that changes whenever the resource is updated.
10800	Etag *string `json:"etag,omitempty"`
10801	// ID - Resource ID.
10802	ID *string `json:"id,omitempty"`
10803}
10804
10805// MarshalJSON is the custom marshaler for LoadBalancingRule.
10806func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
10807	objectMap := make(map[string]interface{})
10808	if lbr.LoadBalancingRulePropertiesFormat != nil {
10809		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
10810	}
10811	if lbr.Name != nil {
10812		objectMap["name"] = lbr.Name
10813	}
10814	if lbr.Etag != nil {
10815		objectMap["etag"] = lbr.Etag
10816	}
10817	if lbr.ID != nil {
10818		objectMap["id"] = lbr.ID
10819	}
10820	return json.Marshal(objectMap)
10821}
10822
10823// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
10824func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
10825	var m map[string]*json.RawMessage
10826	err := json.Unmarshal(body, &m)
10827	if err != nil {
10828		return err
10829	}
10830	for k, v := range m {
10831		switch k {
10832		case "properties":
10833			if v != nil {
10834				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
10835				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
10836				if err != nil {
10837					return err
10838				}
10839				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
10840			}
10841		case "name":
10842			if v != nil {
10843				var name string
10844				err = json.Unmarshal(*v, &name)
10845				if err != nil {
10846					return err
10847				}
10848				lbr.Name = &name
10849			}
10850		case "etag":
10851			if v != nil {
10852				var etag string
10853				err = json.Unmarshal(*v, &etag)
10854				if err != nil {
10855					return err
10856				}
10857				lbr.Etag = &etag
10858			}
10859		case "id":
10860			if v != nil {
10861				var ID string
10862				err = json.Unmarshal(*v, &ID)
10863				if err != nil {
10864					return err
10865				}
10866				lbr.ID = &ID
10867			}
10868		}
10869	}
10870
10871	return nil
10872}
10873
10874// LoadBalancingRulePropertiesFormat properties of the load balancer.
10875type LoadBalancingRulePropertiesFormat struct {
10876	// FrontendIPConfiguration - A reference to frontend IP addresses.
10877	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
10878	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
10879	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
10880	// Probe - The reference of the load balancer probe used by the load balancing rule.
10881	Probe *SubResource `json:"probe,omitempty"`
10882	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
10883	Protocol TransportProtocol `json:"protocol,omitempty"`
10884	// LoadDistribution - The load distribution policy for this rule. Possible values are 'Default', 'SourceIP', and 'SourceIPProtocol'. Possible values include: 'Default', 'SourceIP', 'SourceIPProtocol'
10885	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
10886	// 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"
10887	FrontendPort *int32 `json:"frontendPort,omitempty"`
10888	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port"
10889	BackendPort *int32 `json:"backendPort,omitempty"`
10890	// 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.
10891	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
10892	// 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.
10893	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
10894	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
10895	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
10896	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10897	ProvisioningState *string `json:"provisioningState,omitempty"`
10898}
10899
10900// LocalNetworkGateway a common class for general resource information
10901type LocalNetworkGateway struct {
10902	autorest.Response `json:"-"`
10903	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
10904	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
10905	// Etag - A unique read-only string that changes whenever the resource is updated.
10906	Etag *string `json:"etag,omitempty"`
10907	// ID - Resource ID.
10908	ID *string `json:"id,omitempty"`
10909	// Name - READ-ONLY; Resource name.
10910	Name *string `json:"name,omitempty"`
10911	// Type - READ-ONLY; Resource type.
10912	Type *string `json:"type,omitempty"`
10913	// Location - Resource location.
10914	Location *string `json:"location,omitempty"`
10915	// Tags - Resource tags.
10916	Tags map[string]*string `json:"tags"`
10917}
10918
10919// MarshalJSON is the custom marshaler for LocalNetworkGateway.
10920func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
10921	objectMap := make(map[string]interface{})
10922	if lng.LocalNetworkGatewayPropertiesFormat != nil {
10923		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
10924	}
10925	if lng.Etag != nil {
10926		objectMap["etag"] = lng.Etag
10927	}
10928	if lng.ID != nil {
10929		objectMap["id"] = lng.ID
10930	}
10931	if lng.Location != nil {
10932		objectMap["location"] = lng.Location
10933	}
10934	if lng.Tags != nil {
10935		objectMap["tags"] = lng.Tags
10936	}
10937	return json.Marshal(objectMap)
10938}
10939
10940// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
10941func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
10942	var m map[string]*json.RawMessage
10943	err := json.Unmarshal(body, &m)
10944	if err != nil {
10945		return err
10946	}
10947	for k, v := range m {
10948		switch k {
10949		case "properties":
10950			if v != nil {
10951				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
10952				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
10953				if err != nil {
10954					return err
10955				}
10956				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
10957			}
10958		case "etag":
10959			if v != nil {
10960				var etag string
10961				err = json.Unmarshal(*v, &etag)
10962				if err != nil {
10963					return err
10964				}
10965				lng.Etag = &etag
10966			}
10967		case "id":
10968			if v != nil {
10969				var ID string
10970				err = json.Unmarshal(*v, &ID)
10971				if err != nil {
10972					return err
10973				}
10974				lng.ID = &ID
10975			}
10976		case "name":
10977			if v != nil {
10978				var name string
10979				err = json.Unmarshal(*v, &name)
10980				if err != nil {
10981					return err
10982				}
10983				lng.Name = &name
10984			}
10985		case "type":
10986			if v != nil {
10987				var typeVar string
10988				err = json.Unmarshal(*v, &typeVar)
10989				if err != nil {
10990					return err
10991				}
10992				lng.Type = &typeVar
10993			}
10994		case "location":
10995			if v != nil {
10996				var location string
10997				err = json.Unmarshal(*v, &location)
10998				if err != nil {
10999					return err
11000				}
11001				lng.Location = &location
11002			}
11003		case "tags":
11004			if v != nil {
11005				var tags map[string]*string
11006				err = json.Unmarshal(*v, &tags)
11007				if err != nil {
11008					return err
11009				}
11010				lng.Tags = tags
11011			}
11012		}
11013	}
11014
11015	return nil
11016}
11017
11018// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
11019type LocalNetworkGatewayListResult struct {
11020	autorest.Response `json:"-"`
11021	// Value - A list of local network gateways that exists in a resource group.
11022	Value *[]LocalNetworkGateway `json:"value,omitempty"`
11023	// NextLink - READ-ONLY; The URL to get the next set of results.
11024	NextLink *string `json:"nextLink,omitempty"`
11025}
11026
11027// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
11028// values.
11029type LocalNetworkGatewayListResultIterator struct {
11030	i    int
11031	page LocalNetworkGatewayListResultPage
11032}
11033
11034// NextWithContext advances to the next value.  If there was an error making
11035// the request the iterator does not advance and the error is returned.
11036func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
11037	if tracing.IsEnabled() {
11038		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
11039		defer func() {
11040			sc := -1
11041			if iter.Response().Response.Response != nil {
11042				sc = iter.Response().Response.Response.StatusCode
11043			}
11044			tracing.EndSpan(ctx, sc, err)
11045		}()
11046	}
11047	iter.i++
11048	if iter.i < len(iter.page.Values()) {
11049		return nil
11050	}
11051	err = iter.page.NextWithContext(ctx)
11052	if err != nil {
11053		iter.i--
11054		return err
11055	}
11056	iter.i = 0
11057	return nil
11058}
11059
11060// Next advances to the next value.  If there was an error making
11061// the request the iterator does not advance and the error is returned.
11062// Deprecated: Use NextWithContext() instead.
11063func (iter *LocalNetworkGatewayListResultIterator) Next() error {
11064	return iter.NextWithContext(context.Background())
11065}
11066
11067// NotDone returns true if the enumeration should be started or is not yet complete.
11068func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
11069	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11070}
11071
11072// Response returns the raw server response from the last page request.
11073func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
11074	return iter.page.Response()
11075}
11076
11077// Value returns the current value or a zero-initialized value if the
11078// iterator has advanced beyond the end of the collection.
11079func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
11080	if !iter.page.NotDone() {
11081		return LocalNetworkGateway{}
11082	}
11083	return iter.page.Values()[iter.i]
11084}
11085
11086// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
11087func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
11088	return LocalNetworkGatewayListResultIterator{page: page}
11089}
11090
11091// IsEmpty returns true if the ListResult contains no values.
11092func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
11093	return lnglr.Value == nil || len(*lnglr.Value) == 0
11094}
11095
11096// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
11097// It returns nil if no more results exist.
11098func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
11099	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
11100		return nil, nil
11101	}
11102	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11103		autorest.AsJSON(),
11104		autorest.AsGet(),
11105		autorest.WithBaseURL(to.String(lnglr.NextLink)))
11106}
11107
11108// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
11109type LocalNetworkGatewayListResultPage struct {
11110	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
11111	lnglr LocalNetworkGatewayListResult
11112}
11113
11114// NextWithContext advances to the next page of values.  If there was an error making
11115// the request the page does not advance and the error is returned.
11116func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
11117	if tracing.IsEnabled() {
11118		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
11119		defer func() {
11120			sc := -1
11121			if page.Response().Response.Response != nil {
11122				sc = page.Response().Response.Response.StatusCode
11123			}
11124			tracing.EndSpan(ctx, sc, err)
11125		}()
11126	}
11127	next, err := page.fn(ctx, page.lnglr)
11128	if err != nil {
11129		return err
11130	}
11131	page.lnglr = next
11132	return nil
11133}
11134
11135// Next advances to the next page of values.  If there was an error making
11136// the request the page does not advance and the error is returned.
11137// Deprecated: Use NextWithContext() instead.
11138func (page *LocalNetworkGatewayListResultPage) Next() error {
11139	return page.NextWithContext(context.Background())
11140}
11141
11142// NotDone returns true if the page enumeration should be started or is not yet complete.
11143func (page LocalNetworkGatewayListResultPage) NotDone() bool {
11144	return !page.lnglr.IsEmpty()
11145}
11146
11147// Response returns the raw server response from the last page request.
11148func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
11149	return page.lnglr
11150}
11151
11152// Values returns the slice of values for the current page or nil if there are no values.
11153func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
11154	if page.lnglr.IsEmpty() {
11155		return nil
11156	}
11157	return *page.lnglr.Value
11158}
11159
11160// Creates a new instance of the LocalNetworkGatewayListResultPage type.
11161func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
11162	return LocalNetworkGatewayListResultPage{fn: getNextPage}
11163}
11164
11165// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties
11166type LocalNetworkGatewayPropertiesFormat struct {
11167	// LocalNetworkAddressSpace - Local network site address space.
11168	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
11169	// GatewayIPAddress - IP address of local network gateway.
11170	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
11171	// BgpSettings - Local network gateway's BGP speaker settings.
11172	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
11173	// ResourceGUID - The resource GUID property of the LocalNetworkGateway resource.
11174	ResourceGUID *string `json:"resourceGuid,omitempty"`
11175	// ProvisioningState - READ-ONLY; The provisioning state of the LocalNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
11176	ProvisioningState *string `json:"provisioningState,omitempty"`
11177}
11178
11179// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
11180// long-running operation.
11181type LocalNetworkGatewaysCreateOrUpdateFuture struct {
11182	azure.Future
11183}
11184
11185// Result returns the result of the asynchronous operation.
11186// If the operation has not completed it will return an error.
11187func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
11188	var done bool
11189	done, err = future.DoneWithContext(context.Background(), client)
11190	if err != nil {
11191		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11192		return
11193	}
11194	if !done {
11195		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
11196		return
11197	}
11198	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11199	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
11200		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
11201		if err != nil {
11202			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
11203		}
11204	}
11205	return
11206}
11207
11208// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
11209// long-running operation.
11210type LocalNetworkGatewaysDeleteFuture struct {
11211	azure.Future
11212}
11213
11214// Result returns the result of the asynchronous operation.
11215// If the operation has not completed it will return an error.
11216func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
11217	var done bool
11218	done, err = future.DoneWithContext(context.Background(), client)
11219	if err != nil {
11220		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
11221		return
11222	}
11223	if !done {
11224		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
11225		return
11226	}
11227	ar.Response = future.Response()
11228	return
11229}
11230
11231// LocalNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
11232// long-running operation.
11233type LocalNetworkGatewaysUpdateTagsFuture struct {
11234	azure.Future
11235}
11236
11237// Result returns the result of the asynchronous operation.
11238// If the operation has not completed it will return an error.
11239func (future *LocalNetworkGatewaysUpdateTagsFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
11240	var done bool
11241	done, err = future.DoneWithContext(context.Background(), client)
11242	if err != nil {
11243		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11244		return
11245	}
11246	if !done {
11247		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysUpdateTagsFuture")
11248		return
11249	}
11250	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11251	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
11252		lng, err = client.UpdateTagsResponder(lng.Response.Response)
11253		if err != nil {
11254			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", lng.Response.Response, "Failure responding to request")
11255		}
11256	}
11257	return
11258}
11259
11260// LogSpecification description of logging specification.
11261type LogSpecification struct {
11262	// Name - The name of the specification.
11263	Name *string `json:"name,omitempty"`
11264	// DisplayName - The display name of the specification.
11265	DisplayName *string `json:"displayName,omitempty"`
11266	// BlobDuration - Duration of the blob.
11267	BlobDuration *string `json:"blobDuration,omitempty"`
11268}
11269
11270// MetricSpecification description of metrics specification.
11271type MetricSpecification struct {
11272	// Name - The name of the metric.
11273	Name *string `json:"name,omitempty"`
11274	// DisplayName - The display name of the metric.
11275	DisplayName *string `json:"displayName,omitempty"`
11276	// DisplayDescription - The description of the metric.
11277	DisplayDescription *string `json:"displayDescription,omitempty"`
11278	// Unit - Units the metric to be displayed in.
11279	Unit *string `json:"unit,omitempty"`
11280	// AggregationType - The aggregation type.
11281	AggregationType *string `json:"aggregationType,omitempty"`
11282	// Availabilities - List of availability.
11283	Availabilities *[]Availability `json:"availabilities,omitempty"`
11284	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
11285	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
11286	// FillGapWithZero - Whether gaps would be filled with zeros.
11287	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
11288	// MetricFilterPattern - Pattern for the filter of the metric.
11289	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
11290	// Dimensions - List of dimensions.
11291	Dimensions *[]Dimension `json:"dimensions,omitempty"`
11292	// IsInternal - Whether the metric is internal.
11293	IsInternal *bool `json:"isInternal,omitempty"`
11294	// SourceMdmAccount - The source MDM account.
11295	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
11296	// SourceMdmNamespace - The source MDM namespace.
11297	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
11298	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
11299	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
11300}
11301
11302// NextHopParameters parameters that define the source and destination endpoint.
11303type NextHopParameters struct {
11304	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
11305	TargetResourceID *string `json:"targetResourceId,omitempty"`
11306	// SourceIPAddress - The source IP address.
11307	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
11308	// DestinationIPAddress - The destination IP address.
11309	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
11310	// 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).
11311	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
11312}
11313
11314// NextHopResult the information about next hop from the specified VM.
11315type NextHopResult struct {
11316	autorest.Response `json:"-"`
11317	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
11318	NextHopType NextHopType `json:"nextHopType,omitempty"`
11319	// NextHopIPAddress - Next hop IP Address
11320	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
11321	// 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'.
11322	RouteTableID *string `json:"routeTableId,omitempty"`
11323}
11324
11325// Operation network REST API operation definition.
11326type Operation struct {
11327	// Name - Operation name: {provider}/{resource}/{operation}
11328	Name *string `json:"name,omitempty"`
11329	// Display - Display metadata associated with the operation.
11330	Display *OperationDisplay `json:"display,omitempty"`
11331	// Origin - Origin of the operation.
11332	Origin *string `json:"origin,omitempty"`
11333	// OperationPropertiesFormat - Operation properties format.
11334	*OperationPropertiesFormat `json:"properties,omitempty"`
11335}
11336
11337// MarshalJSON is the custom marshaler for Operation.
11338func (o Operation) MarshalJSON() ([]byte, error) {
11339	objectMap := make(map[string]interface{})
11340	if o.Name != nil {
11341		objectMap["name"] = o.Name
11342	}
11343	if o.Display != nil {
11344		objectMap["display"] = o.Display
11345	}
11346	if o.Origin != nil {
11347		objectMap["origin"] = o.Origin
11348	}
11349	if o.OperationPropertiesFormat != nil {
11350		objectMap["properties"] = o.OperationPropertiesFormat
11351	}
11352	return json.Marshal(objectMap)
11353}
11354
11355// UnmarshalJSON is the custom unmarshaler for Operation struct.
11356func (o *Operation) UnmarshalJSON(body []byte) error {
11357	var m map[string]*json.RawMessage
11358	err := json.Unmarshal(body, &m)
11359	if err != nil {
11360		return err
11361	}
11362	for k, v := range m {
11363		switch k {
11364		case "name":
11365			if v != nil {
11366				var name string
11367				err = json.Unmarshal(*v, &name)
11368				if err != nil {
11369					return err
11370				}
11371				o.Name = &name
11372			}
11373		case "display":
11374			if v != nil {
11375				var display OperationDisplay
11376				err = json.Unmarshal(*v, &display)
11377				if err != nil {
11378					return err
11379				}
11380				o.Display = &display
11381			}
11382		case "origin":
11383			if v != nil {
11384				var origin string
11385				err = json.Unmarshal(*v, &origin)
11386				if err != nil {
11387					return err
11388				}
11389				o.Origin = &origin
11390			}
11391		case "properties":
11392			if v != nil {
11393				var operationPropertiesFormat OperationPropertiesFormat
11394				err = json.Unmarshal(*v, &operationPropertiesFormat)
11395				if err != nil {
11396					return err
11397				}
11398				o.OperationPropertiesFormat = &operationPropertiesFormat
11399			}
11400		}
11401	}
11402
11403	return nil
11404}
11405
11406// OperationDisplay display metadata associated with the operation.
11407type OperationDisplay struct {
11408	// Provider - Service provider: Microsoft Network.
11409	Provider *string `json:"provider,omitempty"`
11410	// Resource - Resource on which the operation is performed.
11411	Resource *string `json:"resource,omitempty"`
11412	// Operation - Type of the operation: get, read, delete, etc.
11413	Operation *string `json:"operation,omitempty"`
11414	// Description - Description of the operation.
11415	Description *string `json:"description,omitempty"`
11416}
11417
11418// OperationListResult result of the request to list Network operations. It contains a list of operations
11419// and a URL link to get the next set of results.
11420type OperationListResult struct {
11421	autorest.Response `json:"-"`
11422	// Value - List of Network operations supported by the Network resource provider.
11423	Value *[]Operation `json:"value,omitempty"`
11424	// NextLink - URL to get the next set of operation list results if there are any.
11425	NextLink *string `json:"nextLink,omitempty"`
11426}
11427
11428// OperationListResultIterator provides access to a complete listing of Operation values.
11429type OperationListResultIterator struct {
11430	i    int
11431	page OperationListResultPage
11432}
11433
11434// NextWithContext advances to the next value.  If there was an error making
11435// the request the iterator does not advance and the error is returned.
11436func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
11437	if tracing.IsEnabled() {
11438		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
11439		defer func() {
11440			sc := -1
11441			if iter.Response().Response.Response != nil {
11442				sc = iter.Response().Response.Response.StatusCode
11443			}
11444			tracing.EndSpan(ctx, sc, err)
11445		}()
11446	}
11447	iter.i++
11448	if iter.i < len(iter.page.Values()) {
11449		return nil
11450	}
11451	err = iter.page.NextWithContext(ctx)
11452	if err != nil {
11453		iter.i--
11454		return err
11455	}
11456	iter.i = 0
11457	return nil
11458}
11459
11460// Next advances to the next value.  If there was an error making
11461// the request the iterator does not advance and the error is returned.
11462// Deprecated: Use NextWithContext() instead.
11463func (iter *OperationListResultIterator) Next() error {
11464	return iter.NextWithContext(context.Background())
11465}
11466
11467// NotDone returns true if the enumeration should be started or is not yet complete.
11468func (iter OperationListResultIterator) NotDone() bool {
11469	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11470}
11471
11472// Response returns the raw server response from the last page request.
11473func (iter OperationListResultIterator) Response() OperationListResult {
11474	return iter.page.Response()
11475}
11476
11477// Value returns the current value or a zero-initialized value if the
11478// iterator has advanced beyond the end of the collection.
11479func (iter OperationListResultIterator) Value() Operation {
11480	if !iter.page.NotDone() {
11481		return Operation{}
11482	}
11483	return iter.page.Values()[iter.i]
11484}
11485
11486// Creates a new instance of the OperationListResultIterator type.
11487func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
11488	return OperationListResultIterator{page: page}
11489}
11490
11491// IsEmpty returns true if the ListResult contains no values.
11492func (olr OperationListResult) IsEmpty() bool {
11493	return olr.Value == nil || len(*olr.Value) == 0
11494}
11495
11496// operationListResultPreparer prepares a request to retrieve the next set of results.
11497// It returns nil if no more results exist.
11498func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
11499	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
11500		return nil, nil
11501	}
11502	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11503		autorest.AsJSON(),
11504		autorest.AsGet(),
11505		autorest.WithBaseURL(to.String(olr.NextLink)))
11506}
11507
11508// OperationListResultPage contains a page of Operation values.
11509type OperationListResultPage struct {
11510	fn  func(context.Context, OperationListResult) (OperationListResult, error)
11511	olr OperationListResult
11512}
11513
11514// NextWithContext advances to the next page of values.  If there was an error making
11515// the request the page does not advance and the error is returned.
11516func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
11517	if tracing.IsEnabled() {
11518		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
11519		defer func() {
11520			sc := -1
11521			if page.Response().Response.Response != nil {
11522				sc = page.Response().Response.Response.StatusCode
11523			}
11524			tracing.EndSpan(ctx, sc, err)
11525		}()
11526	}
11527	next, err := page.fn(ctx, page.olr)
11528	if err != nil {
11529		return err
11530	}
11531	page.olr = next
11532	return nil
11533}
11534
11535// Next advances to the next page of values.  If there was an error making
11536// the request the page does not advance and the error is returned.
11537// Deprecated: Use NextWithContext() instead.
11538func (page *OperationListResultPage) Next() error {
11539	return page.NextWithContext(context.Background())
11540}
11541
11542// NotDone returns true if the page enumeration should be started or is not yet complete.
11543func (page OperationListResultPage) NotDone() bool {
11544	return !page.olr.IsEmpty()
11545}
11546
11547// Response returns the raw server response from the last page request.
11548func (page OperationListResultPage) Response() OperationListResult {
11549	return page.olr
11550}
11551
11552// Values returns the slice of values for the current page or nil if there are no values.
11553func (page OperationListResultPage) Values() []Operation {
11554	if page.olr.IsEmpty() {
11555		return nil
11556	}
11557	return *page.olr.Value
11558}
11559
11560// Creates a new instance of the OperationListResultPage type.
11561func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
11562	return OperationListResultPage{fn: getNextPage}
11563}
11564
11565// OperationPropertiesFormat description of operation properties format.
11566type OperationPropertiesFormat struct {
11567	// ServiceSpecification - Specification of the service.
11568	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
11569}
11570
11571// OperationPropertiesFormatServiceSpecification specification of the service.
11572type OperationPropertiesFormatServiceSpecification struct {
11573	// MetricSpecifications - Operation service specification.
11574	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
11575	// LogSpecifications - Operation log specification.
11576	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
11577}
11578
11579// OutboundNatRule outbound NAT pool of the load balancer.
11580type OutboundNatRule struct {
11581	// OutboundNatRulePropertiesFormat - Properties of load balancer outbound nat rule.
11582	*OutboundNatRulePropertiesFormat `json:"properties,omitempty"`
11583	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
11584	Name *string `json:"name,omitempty"`
11585	// Etag - A unique read-only string that changes whenever the resource is updated.
11586	Etag *string `json:"etag,omitempty"`
11587	// ID - Resource ID.
11588	ID *string `json:"id,omitempty"`
11589}
11590
11591// MarshalJSON is the custom marshaler for OutboundNatRule.
11592func (onr OutboundNatRule) MarshalJSON() ([]byte, error) {
11593	objectMap := make(map[string]interface{})
11594	if onr.OutboundNatRulePropertiesFormat != nil {
11595		objectMap["properties"] = onr.OutboundNatRulePropertiesFormat
11596	}
11597	if onr.Name != nil {
11598		objectMap["name"] = onr.Name
11599	}
11600	if onr.Etag != nil {
11601		objectMap["etag"] = onr.Etag
11602	}
11603	if onr.ID != nil {
11604		objectMap["id"] = onr.ID
11605	}
11606	return json.Marshal(objectMap)
11607}
11608
11609// UnmarshalJSON is the custom unmarshaler for OutboundNatRule struct.
11610func (onr *OutboundNatRule) UnmarshalJSON(body []byte) error {
11611	var m map[string]*json.RawMessage
11612	err := json.Unmarshal(body, &m)
11613	if err != nil {
11614		return err
11615	}
11616	for k, v := range m {
11617		switch k {
11618		case "properties":
11619			if v != nil {
11620				var outboundNatRulePropertiesFormat OutboundNatRulePropertiesFormat
11621				err = json.Unmarshal(*v, &outboundNatRulePropertiesFormat)
11622				if err != nil {
11623					return err
11624				}
11625				onr.OutboundNatRulePropertiesFormat = &outboundNatRulePropertiesFormat
11626			}
11627		case "name":
11628			if v != nil {
11629				var name string
11630				err = json.Unmarshal(*v, &name)
11631				if err != nil {
11632					return err
11633				}
11634				onr.Name = &name
11635			}
11636		case "etag":
11637			if v != nil {
11638				var etag string
11639				err = json.Unmarshal(*v, &etag)
11640				if err != nil {
11641					return err
11642				}
11643				onr.Etag = &etag
11644			}
11645		case "id":
11646			if v != nil {
11647				var ID string
11648				err = json.Unmarshal(*v, &ID)
11649				if err != nil {
11650					return err
11651				}
11652				onr.ID = &ID
11653			}
11654		}
11655	}
11656
11657	return nil
11658}
11659
11660// OutboundNatRulePropertiesFormat outbound NAT pool of the load balancer.
11661type OutboundNatRulePropertiesFormat struct {
11662	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
11663	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
11664	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
11665	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
11666	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
11667	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
11668	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
11669	ProvisioningState *string `json:"provisioningState,omitempty"`
11670}
11671
11672// PacketCapture parameters that define the create packet capture operation.
11673type PacketCapture struct {
11674	*PacketCaptureParameters `json:"properties,omitempty"`
11675}
11676
11677// MarshalJSON is the custom marshaler for PacketCapture.
11678func (pc PacketCapture) MarshalJSON() ([]byte, error) {
11679	objectMap := make(map[string]interface{})
11680	if pc.PacketCaptureParameters != nil {
11681		objectMap["properties"] = pc.PacketCaptureParameters
11682	}
11683	return json.Marshal(objectMap)
11684}
11685
11686// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
11687func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
11688	var m map[string]*json.RawMessage
11689	err := json.Unmarshal(body, &m)
11690	if err != nil {
11691		return err
11692	}
11693	for k, v := range m {
11694		switch k {
11695		case "properties":
11696			if v != nil {
11697				var packetCaptureParameters PacketCaptureParameters
11698				err = json.Unmarshal(*v, &packetCaptureParameters)
11699				if err != nil {
11700					return err
11701				}
11702				pc.PacketCaptureParameters = &packetCaptureParameters
11703			}
11704		}
11705	}
11706
11707	return nil
11708}
11709
11710// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
11711type PacketCaptureFilter struct {
11712	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
11713	Protocol PcProtocol `json:"protocol,omitempty"`
11714	// 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.
11715	LocalIPAddress *string `json:"localIPAddress,omitempty"`
11716	// 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.
11717	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
11718	// 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.
11719	LocalPort *string `json:"localPort,omitempty"`
11720	// 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.
11721	RemotePort *string `json:"remotePort,omitempty"`
11722}
11723
11724// PacketCaptureListResult list of packet capture sessions.
11725type PacketCaptureListResult struct {
11726	autorest.Response `json:"-"`
11727	// Value - Information about packet capture sessions.
11728	Value *[]PacketCaptureResult `json:"value,omitempty"`
11729}
11730
11731// PacketCaptureParameters parameters that define the create packet capture operation.
11732type PacketCaptureParameters struct {
11733	// Target - The ID of the targeted resource, only VM is currently supported.
11734	Target *string `json:"target,omitempty"`
11735	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
11736	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
11737	// TotalBytesPerSession - Maximum size of the capture output.
11738	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
11739	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
11740	TimeLimitInSeconds *int32                        `json:"timeLimitInSeconds,omitempty"`
11741	StorageLocation    *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
11742	Filters            *[]PacketCaptureFilter        `json:"filters,omitempty"`
11743}
11744
11745// PacketCaptureQueryStatusResult status of packet capture session.
11746type PacketCaptureQueryStatusResult struct {
11747	autorest.Response `json:"-"`
11748	// Name - The name of the packet capture resource.
11749	Name *string `json:"name,omitempty"`
11750	// ID - The ID of the packet capture resource.
11751	ID *string `json:"id,omitempty"`
11752	// CaptureStartTime - The start time of the packet capture session.
11753	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
11754	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
11755	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
11756	// StopReason - The reason the current packet capture session was stopped.
11757	StopReason *string `json:"stopReason,omitempty"`
11758	// PacketCaptureError - List of errors of packet capture session.
11759	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
11760}
11761
11762// PacketCaptureResult information about packet capture session.
11763type PacketCaptureResult struct {
11764	autorest.Response `json:"-"`
11765	// Name - READ-ONLY; Name of the packet capture session.
11766	Name *string `json:"name,omitempty"`
11767	// ID - READ-ONLY; ID of the packet capture operation.
11768	ID                             *string `json:"id,omitempty"`
11769	Etag                           *string `json:"etag,omitempty"`
11770	*PacketCaptureResultProperties `json:"properties,omitempty"`
11771}
11772
11773// MarshalJSON is the custom marshaler for PacketCaptureResult.
11774func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
11775	objectMap := make(map[string]interface{})
11776	if pcr.Etag != nil {
11777		objectMap["etag"] = pcr.Etag
11778	}
11779	if pcr.PacketCaptureResultProperties != nil {
11780		objectMap["properties"] = pcr.PacketCaptureResultProperties
11781	}
11782	return json.Marshal(objectMap)
11783}
11784
11785// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
11786func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
11787	var m map[string]*json.RawMessage
11788	err := json.Unmarshal(body, &m)
11789	if err != nil {
11790		return err
11791	}
11792	for k, v := range m {
11793		switch k {
11794		case "name":
11795			if v != nil {
11796				var name string
11797				err = json.Unmarshal(*v, &name)
11798				if err != nil {
11799					return err
11800				}
11801				pcr.Name = &name
11802			}
11803		case "id":
11804			if v != nil {
11805				var ID string
11806				err = json.Unmarshal(*v, &ID)
11807				if err != nil {
11808					return err
11809				}
11810				pcr.ID = &ID
11811			}
11812		case "etag":
11813			if v != nil {
11814				var etag string
11815				err = json.Unmarshal(*v, &etag)
11816				if err != nil {
11817					return err
11818				}
11819				pcr.Etag = &etag
11820			}
11821		case "properties":
11822			if v != nil {
11823				var packetCaptureResultProperties PacketCaptureResultProperties
11824				err = json.Unmarshal(*v, &packetCaptureResultProperties)
11825				if err != nil {
11826					return err
11827				}
11828				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
11829			}
11830		}
11831	}
11832
11833	return nil
11834}
11835
11836// PacketCaptureResultProperties describes the properties of a packet capture session.
11837type PacketCaptureResultProperties struct {
11838	// ProvisioningState - The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11839	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11840	// Target - The ID of the targeted resource, only VM is currently supported.
11841	Target *string `json:"target,omitempty"`
11842	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
11843	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
11844	// TotalBytesPerSession - Maximum size of the capture output.
11845	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
11846	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
11847	TimeLimitInSeconds *int32                        `json:"timeLimitInSeconds,omitempty"`
11848	StorageLocation    *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
11849	Filters            *[]PacketCaptureFilter        `json:"filters,omitempty"`
11850}
11851
11852// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
11853// operation.
11854type PacketCapturesCreateFuture struct {
11855	azure.Future
11856}
11857
11858// Result returns the result of the asynchronous operation.
11859// If the operation has not completed it will return an error.
11860func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
11861	var done bool
11862	done, err = future.DoneWithContext(context.Background(), client)
11863	if err != nil {
11864		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
11865		return
11866	}
11867	if !done {
11868		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
11869		return
11870	}
11871	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11872	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
11873		pcr, err = client.CreateResponder(pcr.Response.Response)
11874		if err != nil {
11875			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
11876		}
11877	}
11878	return
11879}
11880
11881// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
11882// operation.
11883type PacketCapturesDeleteFuture struct {
11884	azure.Future
11885}
11886
11887// Result returns the result of the asynchronous operation.
11888// If the operation has not completed it will return an error.
11889func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
11890	var done bool
11891	done, err = future.DoneWithContext(context.Background(), client)
11892	if err != nil {
11893		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
11894		return
11895	}
11896	if !done {
11897		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
11898		return
11899	}
11900	ar.Response = future.Response()
11901	return
11902}
11903
11904// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
11905// operation.
11906type PacketCapturesGetStatusFuture struct {
11907	azure.Future
11908}
11909
11910// Result returns the result of the asynchronous operation.
11911// If the operation has not completed it will return an error.
11912func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
11913	var done bool
11914	done, err = future.DoneWithContext(context.Background(), client)
11915	if err != nil {
11916		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
11917		return
11918	}
11919	if !done {
11920		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
11921		return
11922	}
11923	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11924	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
11925		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
11926		if err != nil {
11927			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
11928		}
11929	}
11930	return
11931}
11932
11933// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
11934// operation.
11935type PacketCapturesStopFuture struct {
11936	azure.Future
11937}
11938
11939// Result returns the result of the asynchronous operation.
11940// If the operation has not completed it will return an error.
11941func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
11942	var done bool
11943	done, err = future.DoneWithContext(context.Background(), client)
11944	if err != nil {
11945		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
11946		return
11947	}
11948	if !done {
11949		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
11950		return
11951	}
11952	ar.Response = future.Response()
11953	return
11954}
11955
11956// PacketCaptureStorageLocation describes the storage location for a packet capture session.
11957type PacketCaptureStorageLocation struct {
11958	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
11959	StorageID *string `json:"storageId,omitempty"`
11960	// 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.
11961	StoragePath *string `json:"storagePath,omitempty"`
11962	// 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.
11963	FilePath *string `json:"filePath,omitempty"`
11964}
11965
11966// PatchRouteFilter route Filter Resource.
11967type PatchRouteFilter struct {
11968	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
11969	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
11970	Name *string `json:"name,omitempty"`
11971	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11972	Etag *string `json:"etag,omitempty"`
11973	// Type - READ-ONLY; Resource type.
11974	Type *string `json:"type,omitempty"`
11975	// Tags - Resource tags.
11976	Tags map[string]*string `json:"tags"`
11977	// ID - Resource ID.
11978	ID *string `json:"id,omitempty"`
11979}
11980
11981// MarshalJSON is the custom marshaler for PatchRouteFilter.
11982func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
11983	objectMap := make(map[string]interface{})
11984	if prf.RouteFilterPropertiesFormat != nil {
11985		objectMap["properties"] = prf.RouteFilterPropertiesFormat
11986	}
11987	if prf.Tags != nil {
11988		objectMap["tags"] = prf.Tags
11989	}
11990	if prf.ID != nil {
11991		objectMap["id"] = prf.ID
11992	}
11993	return json.Marshal(objectMap)
11994}
11995
11996// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
11997func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
11998	var m map[string]*json.RawMessage
11999	err := json.Unmarshal(body, &m)
12000	if err != nil {
12001		return err
12002	}
12003	for k, v := range m {
12004		switch k {
12005		case "properties":
12006			if v != nil {
12007				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
12008				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
12009				if err != nil {
12010					return err
12011				}
12012				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
12013			}
12014		case "name":
12015			if v != nil {
12016				var name string
12017				err = json.Unmarshal(*v, &name)
12018				if err != nil {
12019					return err
12020				}
12021				prf.Name = &name
12022			}
12023		case "etag":
12024			if v != nil {
12025				var etag string
12026				err = json.Unmarshal(*v, &etag)
12027				if err != nil {
12028					return err
12029				}
12030				prf.Etag = &etag
12031			}
12032		case "type":
12033			if v != nil {
12034				var typeVar string
12035				err = json.Unmarshal(*v, &typeVar)
12036				if err != nil {
12037					return err
12038				}
12039				prf.Type = &typeVar
12040			}
12041		case "tags":
12042			if v != nil {
12043				var tags map[string]*string
12044				err = json.Unmarshal(*v, &tags)
12045				if err != nil {
12046					return err
12047				}
12048				prf.Tags = tags
12049			}
12050		case "id":
12051			if v != nil {
12052				var ID string
12053				err = json.Unmarshal(*v, &ID)
12054				if err != nil {
12055					return err
12056				}
12057				prf.ID = &ID
12058			}
12059		}
12060	}
12061
12062	return nil
12063}
12064
12065// PatchRouteFilterRule route Filter Rule Resource
12066type PatchRouteFilterRule struct {
12067	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
12068	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
12069	Name *string `json:"name,omitempty"`
12070	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12071	Etag *string `json:"etag,omitempty"`
12072	// ID - Resource ID.
12073	ID *string `json:"id,omitempty"`
12074}
12075
12076// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
12077func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
12078	objectMap := make(map[string]interface{})
12079	if prfr.RouteFilterRulePropertiesFormat != nil {
12080		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
12081	}
12082	if prfr.ID != nil {
12083		objectMap["id"] = prfr.ID
12084	}
12085	return json.Marshal(objectMap)
12086}
12087
12088// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
12089func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
12090	var m map[string]*json.RawMessage
12091	err := json.Unmarshal(body, &m)
12092	if err != nil {
12093		return err
12094	}
12095	for k, v := range m {
12096		switch k {
12097		case "properties":
12098			if v != nil {
12099				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
12100				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
12101				if err != nil {
12102					return err
12103				}
12104				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
12105			}
12106		case "name":
12107			if v != nil {
12108				var name string
12109				err = json.Unmarshal(*v, &name)
12110				if err != nil {
12111					return err
12112				}
12113				prfr.Name = &name
12114			}
12115		case "etag":
12116			if v != nil {
12117				var etag string
12118				err = json.Unmarshal(*v, &etag)
12119				if err != nil {
12120					return err
12121				}
12122				prfr.Etag = &etag
12123			}
12124		case "id":
12125			if v != nil {
12126				var ID string
12127				err = json.Unmarshal(*v, &ID)
12128				if err != nil {
12129					return err
12130				}
12131				prfr.ID = &ID
12132			}
12133		}
12134	}
12135
12136	return nil
12137}
12138
12139// Probe a load balancer probe.
12140type Probe struct {
12141	autorest.Response `json:"-"`
12142	// ProbePropertiesFormat - Properties of load balancer probe.
12143	*ProbePropertiesFormat `json:"properties,omitempty"`
12144	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
12145	Name *string `json:"name,omitempty"`
12146	// Etag - A unique read-only string that changes whenever the resource is updated.
12147	Etag *string `json:"etag,omitempty"`
12148	// ID - Resource ID.
12149	ID *string `json:"id,omitempty"`
12150}
12151
12152// MarshalJSON is the custom marshaler for Probe.
12153func (p Probe) MarshalJSON() ([]byte, error) {
12154	objectMap := make(map[string]interface{})
12155	if p.ProbePropertiesFormat != nil {
12156		objectMap["properties"] = p.ProbePropertiesFormat
12157	}
12158	if p.Name != nil {
12159		objectMap["name"] = p.Name
12160	}
12161	if p.Etag != nil {
12162		objectMap["etag"] = p.Etag
12163	}
12164	if p.ID != nil {
12165		objectMap["id"] = p.ID
12166	}
12167	return json.Marshal(objectMap)
12168}
12169
12170// UnmarshalJSON is the custom unmarshaler for Probe struct.
12171func (p *Probe) UnmarshalJSON(body []byte) error {
12172	var m map[string]*json.RawMessage
12173	err := json.Unmarshal(body, &m)
12174	if err != nil {
12175		return err
12176	}
12177	for k, v := range m {
12178		switch k {
12179		case "properties":
12180			if v != nil {
12181				var probePropertiesFormat ProbePropertiesFormat
12182				err = json.Unmarshal(*v, &probePropertiesFormat)
12183				if err != nil {
12184					return err
12185				}
12186				p.ProbePropertiesFormat = &probePropertiesFormat
12187			}
12188		case "name":
12189			if v != nil {
12190				var name string
12191				err = json.Unmarshal(*v, &name)
12192				if err != nil {
12193					return err
12194				}
12195				p.Name = &name
12196			}
12197		case "etag":
12198			if v != nil {
12199				var etag string
12200				err = json.Unmarshal(*v, &etag)
12201				if err != nil {
12202					return err
12203				}
12204				p.Etag = &etag
12205			}
12206		case "id":
12207			if v != nil {
12208				var ID string
12209				err = json.Unmarshal(*v, &ID)
12210				if err != nil {
12211					return err
12212				}
12213				p.ID = &ID
12214			}
12215		}
12216	}
12217
12218	return nil
12219}
12220
12221// ProbePropertiesFormat load balancer probe resource.
12222type ProbePropertiesFormat struct {
12223	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
12224	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
12225	// 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'
12226	Protocol ProbeProtocol `json:"protocol,omitempty"`
12227	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
12228	Port *int32 `json:"port,omitempty"`
12229	// 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.
12230	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
12231	// 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.
12232	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
12233	// 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.
12234	RequestPath *string `json:"requestPath,omitempty"`
12235	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12236	ProvisioningState *string `json:"provisioningState,omitempty"`
12237}
12238
12239// ProtocolConfiguration configuration of the protocol.
12240type ProtocolConfiguration struct {
12241	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
12242}
12243
12244// PublicIPAddress public IP address resource.
12245type PublicIPAddress struct {
12246	autorest.Response `json:"-"`
12247	// Sku - The public IP address SKU.
12248	Sku *PublicIPAddressSku `json:"sku,omitempty"`
12249	// PublicIPAddressPropertiesFormat - Public IP address properties.
12250	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
12251	// Etag - A unique read-only string that changes whenever the resource is updated.
12252	Etag *string `json:"etag,omitempty"`
12253	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
12254	Zones *[]string `json:"zones,omitempty"`
12255	// ID - Resource ID.
12256	ID *string `json:"id,omitempty"`
12257	// Name - READ-ONLY; Resource name.
12258	Name *string `json:"name,omitempty"`
12259	// Type - READ-ONLY; Resource type.
12260	Type *string `json:"type,omitempty"`
12261	// Location - Resource location.
12262	Location *string `json:"location,omitempty"`
12263	// Tags - Resource tags.
12264	Tags map[string]*string `json:"tags"`
12265}
12266
12267// MarshalJSON is the custom marshaler for PublicIPAddress.
12268func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
12269	objectMap := make(map[string]interface{})
12270	if pia.Sku != nil {
12271		objectMap["sku"] = pia.Sku
12272	}
12273	if pia.PublicIPAddressPropertiesFormat != nil {
12274		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
12275	}
12276	if pia.Etag != nil {
12277		objectMap["etag"] = pia.Etag
12278	}
12279	if pia.Zones != nil {
12280		objectMap["zones"] = pia.Zones
12281	}
12282	if pia.ID != nil {
12283		objectMap["id"] = pia.ID
12284	}
12285	if pia.Location != nil {
12286		objectMap["location"] = pia.Location
12287	}
12288	if pia.Tags != nil {
12289		objectMap["tags"] = pia.Tags
12290	}
12291	return json.Marshal(objectMap)
12292}
12293
12294// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
12295func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
12296	var m map[string]*json.RawMessage
12297	err := json.Unmarshal(body, &m)
12298	if err != nil {
12299		return err
12300	}
12301	for k, v := range m {
12302		switch k {
12303		case "sku":
12304			if v != nil {
12305				var sku PublicIPAddressSku
12306				err = json.Unmarshal(*v, &sku)
12307				if err != nil {
12308					return err
12309				}
12310				pia.Sku = &sku
12311			}
12312		case "properties":
12313			if v != nil {
12314				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
12315				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
12316				if err != nil {
12317					return err
12318				}
12319				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
12320			}
12321		case "etag":
12322			if v != nil {
12323				var etag string
12324				err = json.Unmarshal(*v, &etag)
12325				if err != nil {
12326					return err
12327				}
12328				pia.Etag = &etag
12329			}
12330		case "zones":
12331			if v != nil {
12332				var zones []string
12333				err = json.Unmarshal(*v, &zones)
12334				if err != nil {
12335					return err
12336				}
12337				pia.Zones = &zones
12338			}
12339		case "id":
12340			if v != nil {
12341				var ID string
12342				err = json.Unmarshal(*v, &ID)
12343				if err != nil {
12344					return err
12345				}
12346				pia.ID = &ID
12347			}
12348		case "name":
12349			if v != nil {
12350				var name string
12351				err = json.Unmarshal(*v, &name)
12352				if err != nil {
12353					return err
12354				}
12355				pia.Name = &name
12356			}
12357		case "type":
12358			if v != nil {
12359				var typeVar string
12360				err = json.Unmarshal(*v, &typeVar)
12361				if err != nil {
12362					return err
12363				}
12364				pia.Type = &typeVar
12365			}
12366		case "location":
12367			if v != nil {
12368				var location string
12369				err = json.Unmarshal(*v, &location)
12370				if err != nil {
12371					return err
12372				}
12373				pia.Location = &location
12374			}
12375		case "tags":
12376			if v != nil {
12377				var tags map[string]*string
12378				err = json.Unmarshal(*v, &tags)
12379				if err != nil {
12380					return err
12381				}
12382				pia.Tags = tags
12383			}
12384		}
12385	}
12386
12387	return nil
12388}
12389
12390// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address
12391type PublicIPAddressDNSSettings struct {
12392	// 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.
12393	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
12394	// 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.
12395	Fqdn *string `json:"fqdn,omitempty"`
12396	// 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.
12397	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
12398}
12399
12400// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
12401// long-running operation.
12402type PublicIPAddressesCreateOrUpdateFuture struct {
12403	azure.Future
12404}
12405
12406// Result returns the result of the asynchronous operation.
12407// If the operation has not completed it will return an error.
12408func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
12409	var done bool
12410	done, err = future.DoneWithContext(context.Background(), client)
12411	if err != nil {
12412		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12413		return
12414	}
12415	if !done {
12416		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
12417		return
12418	}
12419	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12420	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
12421		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
12422		if err != nil {
12423			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
12424		}
12425	}
12426	return
12427}
12428
12429// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
12430// operation.
12431type PublicIPAddressesDeleteFuture struct {
12432	azure.Future
12433}
12434
12435// Result returns the result of the asynchronous operation.
12436// If the operation has not completed it will return an error.
12437func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
12438	var done bool
12439	done, err = future.DoneWithContext(context.Background(), client)
12440	if err != nil {
12441		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
12442		return
12443	}
12444	if !done {
12445		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
12446		return
12447	}
12448	ar.Response = future.Response()
12449	return
12450}
12451
12452// PublicIPAddressesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
12453// long-running operation.
12454type PublicIPAddressesUpdateTagsFuture struct {
12455	azure.Future
12456}
12457
12458// Result returns the result of the asynchronous operation.
12459// If the operation has not completed it will return an error.
12460func (future *PublicIPAddressesUpdateTagsFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
12461	var done bool
12462	done, err = future.DoneWithContext(context.Background(), client)
12463	if err != nil {
12464		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
12465		return
12466	}
12467	if !done {
12468		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesUpdateTagsFuture")
12469		return
12470	}
12471	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12472	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
12473		pia, err = client.UpdateTagsResponder(pia.Response.Response)
12474		if err != nil {
12475			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", pia.Response.Response, "Failure responding to request")
12476		}
12477	}
12478	return
12479}
12480
12481// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
12482type PublicIPAddressListResult struct {
12483	autorest.Response `json:"-"`
12484	// Value - A list of public IP addresses that exists in a resource group.
12485	Value *[]PublicIPAddress `json:"value,omitempty"`
12486	// NextLink - The URL to get the next set of results.
12487	NextLink *string `json:"nextLink,omitempty"`
12488}
12489
12490// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
12491type PublicIPAddressListResultIterator struct {
12492	i    int
12493	page PublicIPAddressListResultPage
12494}
12495
12496// NextWithContext advances to the next value.  If there was an error making
12497// the request the iterator does not advance and the error is returned.
12498func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
12499	if tracing.IsEnabled() {
12500		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
12501		defer func() {
12502			sc := -1
12503			if iter.Response().Response.Response != nil {
12504				sc = iter.Response().Response.Response.StatusCode
12505			}
12506			tracing.EndSpan(ctx, sc, err)
12507		}()
12508	}
12509	iter.i++
12510	if iter.i < len(iter.page.Values()) {
12511		return nil
12512	}
12513	err = iter.page.NextWithContext(ctx)
12514	if err != nil {
12515		iter.i--
12516		return err
12517	}
12518	iter.i = 0
12519	return nil
12520}
12521
12522// Next advances to the next value.  If there was an error making
12523// the request the iterator does not advance and the error is returned.
12524// Deprecated: Use NextWithContext() instead.
12525func (iter *PublicIPAddressListResultIterator) Next() error {
12526	return iter.NextWithContext(context.Background())
12527}
12528
12529// NotDone returns true if the enumeration should be started or is not yet complete.
12530func (iter PublicIPAddressListResultIterator) NotDone() bool {
12531	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12532}
12533
12534// Response returns the raw server response from the last page request.
12535func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
12536	return iter.page.Response()
12537}
12538
12539// Value returns the current value or a zero-initialized value if the
12540// iterator has advanced beyond the end of the collection.
12541func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
12542	if !iter.page.NotDone() {
12543		return PublicIPAddress{}
12544	}
12545	return iter.page.Values()[iter.i]
12546}
12547
12548// Creates a new instance of the PublicIPAddressListResultIterator type.
12549func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
12550	return PublicIPAddressListResultIterator{page: page}
12551}
12552
12553// IsEmpty returns true if the ListResult contains no values.
12554func (pialr PublicIPAddressListResult) IsEmpty() bool {
12555	return pialr.Value == nil || len(*pialr.Value) == 0
12556}
12557
12558// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
12559// It returns nil if no more results exist.
12560func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
12561	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
12562		return nil, nil
12563	}
12564	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12565		autorest.AsJSON(),
12566		autorest.AsGet(),
12567		autorest.WithBaseURL(to.String(pialr.NextLink)))
12568}
12569
12570// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
12571type PublicIPAddressListResultPage struct {
12572	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
12573	pialr PublicIPAddressListResult
12574}
12575
12576// NextWithContext advances to the next page of values.  If there was an error making
12577// the request the page does not advance and the error is returned.
12578func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
12579	if tracing.IsEnabled() {
12580		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
12581		defer func() {
12582			sc := -1
12583			if page.Response().Response.Response != nil {
12584				sc = page.Response().Response.Response.StatusCode
12585			}
12586			tracing.EndSpan(ctx, sc, err)
12587		}()
12588	}
12589	next, err := page.fn(ctx, page.pialr)
12590	if err != nil {
12591		return err
12592	}
12593	page.pialr = next
12594	return nil
12595}
12596
12597// Next advances to the next page of values.  If there was an error making
12598// the request the page does not advance and the error is returned.
12599// Deprecated: Use NextWithContext() instead.
12600func (page *PublicIPAddressListResultPage) Next() error {
12601	return page.NextWithContext(context.Background())
12602}
12603
12604// NotDone returns true if the page enumeration should be started or is not yet complete.
12605func (page PublicIPAddressListResultPage) NotDone() bool {
12606	return !page.pialr.IsEmpty()
12607}
12608
12609// Response returns the raw server response from the last page request.
12610func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
12611	return page.pialr
12612}
12613
12614// Values returns the slice of values for the current page or nil if there are no values.
12615func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
12616	if page.pialr.IsEmpty() {
12617		return nil
12618	}
12619	return *page.pialr.Value
12620}
12621
12622// Creates a new instance of the PublicIPAddressListResultPage type.
12623func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
12624	return PublicIPAddressListResultPage{fn: getNextPage}
12625}
12626
12627// PublicIPAddressPropertiesFormat public IP address properties.
12628type PublicIPAddressPropertiesFormat struct {
12629	// PublicIPAllocationMethod - The public IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
12630	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
12631	// PublicIPAddressVersion - The public IP address version. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6'
12632	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
12633	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
12634	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
12635	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
12636	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
12637	// IPTags - The list of tags associated with the public IP address.
12638	IPTags *[]IPTag `json:"ipTags,omitempty"`
12639	// IPAddress - The IP address associated with the public IP address resource.
12640	IPAddress *string `json:"ipAddress,omitempty"`
12641	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
12642	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
12643	// ResourceGUID - The resource GUID property of the public IP resource.
12644	ResourceGUID *string `json:"resourceGuid,omitempty"`
12645	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12646	ProvisioningState *string `json:"provisioningState,omitempty"`
12647}
12648
12649// PublicIPAddressSku SKU of a public IP address
12650type PublicIPAddressSku struct {
12651	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
12652	Name PublicIPAddressSkuName `json:"name,omitempty"`
12653}
12654
12655// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
12656type QueryTroubleshootingParameters struct {
12657	// TargetResourceID - The target resource ID to query the troubleshooting result.
12658	TargetResourceID *string `json:"targetResourceId,omitempty"`
12659}
12660
12661// Resource common resource representation.
12662type Resource struct {
12663	// ID - Resource ID.
12664	ID *string `json:"id,omitempty"`
12665	// Name - READ-ONLY; Resource name.
12666	Name *string `json:"name,omitempty"`
12667	// Type - READ-ONLY; Resource type.
12668	Type *string `json:"type,omitempty"`
12669	// Location - Resource location.
12670	Location *string `json:"location,omitempty"`
12671	// Tags - Resource tags.
12672	Tags map[string]*string `json:"tags"`
12673}
12674
12675// MarshalJSON is the custom marshaler for Resource.
12676func (r Resource) MarshalJSON() ([]byte, error) {
12677	objectMap := make(map[string]interface{})
12678	if r.ID != nil {
12679		objectMap["id"] = r.ID
12680	}
12681	if r.Location != nil {
12682		objectMap["location"] = r.Location
12683	}
12684	if r.Tags != nil {
12685		objectMap["tags"] = r.Tags
12686	}
12687	return json.Marshal(objectMap)
12688}
12689
12690// ResourceNavigationLink resourceNavigationLink resource.
12691type ResourceNavigationLink struct {
12692	// ResourceNavigationLinkFormat - Resource navigation link properties format.
12693	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
12694	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
12695	Name *string `json:"name,omitempty"`
12696	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12697	Etag *string `json:"etag,omitempty"`
12698	// ID - Resource ID.
12699	ID *string `json:"id,omitempty"`
12700}
12701
12702// MarshalJSON is the custom marshaler for ResourceNavigationLink.
12703func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
12704	objectMap := make(map[string]interface{})
12705	if rnl.ResourceNavigationLinkFormat != nil {
12706		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
12707	}
12708	if rnl.Name != nil {
12709		objectMap["name"] = rnl.Name
12710	}
12711	if rnl.ID != nil {
12712		objectMap["id"] = rnl.ID
12713	}
12714	return json.Marshal(objectMap)
12715}
12716
12717// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
12718func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
12719	var m map[string]*json.RawMessage
12720	err := json.Unmarshal(body, &m)
12721	if err != nil {
12722		return err
12723	}
12724	for k, v := range m {
12725		switch k {
12726		case "properties":
12727			if v != nil {
12728				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
12729				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
12730				if err != nil {
12731					return err
12732				}
12733				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
12734			}
12735		case "name":
12736			if v != nil {
12737				var name string
12738				err = json.Unmarshal(*v, &name)
12739				if err != nil {
12740					return err
12741				}
12742				rnl.Name = &name
12743			}
12744		case "etag":
12745			if v != nil {
12746				var etag string
12747				err = json.Unmarshal(*v, &etag)
12748				if err != nil {
12749					return err
12750				}
12751				rnl.Etag = &etag
12752			}
12753		case "id":
12754			if v != nil {
12755				var ID string
12756				err = json.Unmarshal(*v, &ID)
12757				if err != nil {
12758					return err
12759				}
12760				rnl.ID = &ID
12761			}
12762		}
12763	}
12764
12765	return nil
12766}
12767
12768// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
12769type ResourceNavigationLinkFormat struct {
12770	// LinkedResourceType - Resource type of the linked resource.
12771	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
12772	// Link - Link to the external resource
12773	Link *string `json:"link,omitempty"`
12774	// ProvisioningState - READ-ONLY; Provisioning state of the ResourceNavigationLink resource.
12775	ProvisioningState *string `json:"provisioningState,omitempty"`
12776}
12777
12778// RetentionPolicyParameters parameters that define the retention policy for flow log.
12779type RetentionPolicyParameters struct {
12780	// Days - Number of days to retain flow log records.
12781	Days *int32 `json:"days,omitempty"`
12782	// Enabled - Flag to enable/disable retention.
12783	Enabled *bool `json:"enabled,omitempty"`
12784}
12785
12786// Route route resource
12787type Route struct {
12788	autorest.Response `json:"-"`
12789	// RoutePropertiesFormat - Properties of the route.
12790	*RoutePropertiesFormat `json:"properties,omitempty"`
12791	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12792	Name *string `json:"name,omitempty"`
12793	// Etag - A unique read-only string that changes whenever the resource is updated.
12794	Etag *string `json:"etag,omitempty"`
12795	// ID - Resource ID.
12796	ID *string `json:"id,omitempty"`
12797}
12798
12799// MarshalJSON is the custom marshaler for Route.
12800func (r Route) MarshalJSON() ([]byte, error) {
12801	objectMap := make(map[string]interface{})
12802	if r.RoutePropertiesFormat != nil {
12803		objectMap["properties"] = r.RoutePropertiesFormat
12804	}
12805	if r.Name != nil {
12806		objectMap["name"] = r.Name
12807	}
12808	if r.Etag != nil {
12809		objectMap["etag"] = r.Etag
12810	}
12811	if r.ID != nil {
12812		objectMap["id"] = r.ID
12813	}
12814	return json.Marshal(objectMap)
12815}
12816
12817// UnmarshalJSON is the custom unmarshaler for Route struct.
12818func (r *Route) UnmarshalJSON(body []byte) error {
12819	var m map[string]*json.RawMessage
12820	err := json.Unmarshal(body, &m)
12821	if err != nil {
12822		return err
12823	}
12824	for k, v := range m {
12825		switch k {
12826		case "properties":
12827			if v != nil {
12828				var routePropertiesFormat RoutePropertiesFormat
12829				err = json.Unmarshal(*v, &routePropertiesFormat)
12830				if err != nil {
12831					return err
12832				}
12833				r.RoutePropertiesFormat = &routePropertiesFormat
12834			}
12835		case "name":
12836			if v != nil {
12837				var name string
12838				err = json.Unmarshal(*v, &name)
12839				if err != nil {
12840					return err
12841				}
12842				r.Name = &name
12843			}
12844		case "etag":
12845			if v != nil {
12846				var etag string
12847				err = json.Unmarshal(*v, &etag)
12848				if err != nil {
12849					return err
12850				}
12851				r.Etag = &etag
12852			}
12853		case "id":
12854			if v != nil {
12855				var ID string
12856				err = json.Unmarshal(*v, &ID)
12857				if err != nil {
12858					return err
12859				}
12860				r.ID = &ID
12861			}
12862		}
12863	}
12864
12865	return nil
12866}
12867
12868// RouteFilter route Filter Resource.
12869type RouteFilter struct {
12870	autorest.Response            `json:"-"`
12871	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
12872	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
12873	Etag *string `json:"etag,omitempty"`
12874	// ID - Resource ID.
12875	ID *string `json:"id,omitempty"`
12876	// Name - READ-ONLY; Resource name.
12877	Name *string `json:"name,omitempty"`
12878	// Type - READ-ONLY; Resource type.
12879	Type *string `json:"type,omitempty"`
12880	// Location - Resource location.
12881	Location *string `json:"location,omitempty"`
12882	// Tags - Resource tags.
12883	Tags map[string]*string `json:"tags"`
12884}
12885
12886// MarshalJSON is the custom marshaler for RouteFilter.
12887func (rf RouteFilter) MarshalJSON() ([]byte, error) {
12888	objectMap := make(map[string]interface{})
12889	if rf.RouteFilterPropertiesFormat != nil {
12890		objectMap["properties"] = rf.RouteFilterPropertiesFormat
12891	}
12892	if rf.ID != nil {
12893		objectMap["id"] = rf.ID
12894	}
12895	if rf.Location != nil {
12896		objectMap["location"] = rf.Location
12897	}
12898	if rf.Tags != nil {
12899		objectMap["tags"] = rf.Tags
12900	}
12901	return json.Marshal(objectMap)
12902}
12903
12904// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
12905func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
12906	var m map[string]*json.RawMessage
12907	err := json.Unmarshal(body, &m)
12908	if err != nil {
12909		return err
12910	}
12911	for k, v := range m {
12912		switch k {
12913		case "properties":
12914			if v != nil {
12915				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
12916				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
12917				if err != nil {
12918					return err
12919				}
12920				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
12921			}
12922		case "etag":
12923			if v != nil {
12924				var etag string
12925				err = json.Unmarshal(*v, &etag)
12926				if err != nil {
12927					return err
12928				}
12929				rf.Etag = &etag
12930			}
12931		case "id":
12932			if v != nil {
12933				var ID string
12934				err = json.Unmarshal(*v, &ID)
12935				if err != nil {
12936					return err
12937				}
12938				rf.ID = &ID
12939			}
12940		case "name":
12941			if v != nil {
12942				var name string
12943				err = json.Unmarshal(*v, &name)
12944				if err != nil {
12945					return err
12946				}
12947				rf.Name = &name
12948			}
12949		case "type":
12950			if v != nil {
12951				var typeVar string
12952				err = json.Unmarshal(*v, &typeVar)
12953				if err != nil {
12954					return err
12955				}
12956				rf.Type = &typeVar
12957			}
12958		case "location":
12959			if v != nil {
12960				var location string
12961				err = json.Unmarshal(*v, &location)
12962				if err != nil {
12963					return err
12964				}
12965				rf.Location = &location
12966			}
12967		case "tags":
12968			if v != nil {
12969				var tags map[string]*string
12970				err = json.Unmarshal(*v, &tags)
12971				if err != nil {
12972					return err
12973				}
12974				rf.Tags = tags
12975			}
12976		}
12977	}
12978
12979	return nil
12980}
12981
12982// RouteFilterListResult response for the ListRouteFilters API service call.
12983type RouteFilterListResult struct {
12984	autorest.Response `json:"-"`
12985	// Value - Gets a list of route filters in a resource group.
12986	Value *[]RouteFilter `json:"value,omitempty"`
12987	// NextLink - The URL to get the next set of results.
12988	NextLink *string `json:"nextLink,omitempty"`
12989}
12990
12991// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
12992type RouteFilterListResultIterator struct {
12993	i    int
12994	page RouteFilterListResultPage
12995}
12996
12997// NextWithContext advances to the next value.  If there was an error making
12998// the request the iterator does not advance and the error is returned.
12999func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
13000	if tracing.IsEnabled() {
13001		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
13002		defer func() {
13003			sc := -1
13004			if iter.Response().Response.Response != nil {
13005				sc = iter.Response().Response.Response.StatusCode
13006			}
13007			tracing.EndSpan(ctx, sc, err)
13008		}()
13009	}
13010	iter.i++
13011	if iter.i < len(iter.page.Values()) {
13012		return nil
13013	}
13014	err = iter.page.NextWithContext(ctx)
13015	if err != nil {
13016		iter.i--
13017		return err
13018	}
13019	iter.i = 0
13020	return nil
13021}
13022
13023// Next advances to the next value.  If there was an error making
13024// the request the iterator does not advance and the error is returned.
13025// Deprecated: Use NextWithContext() instead.
13026func (iter *RouteFilterListResultIterator) Next() error {
13027	return iter.NextWithContext(context.Background())
13028}
13029
13030// NotDone returns true if the enumeration should be started or is not yet complete.
13031func (iter RouteFilterListResultIterator) NotDone() bool {
13032	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13033}
13034
13035// Response returns the raw server response from the last page request.
13036func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
13037	return iter.page.Response()
13038}
13039
13040// Value returns the current value or a zero-initialized value if the
13041// iterator has advanced beyond the end of the collection.
13042func (iter RouteFilterListResultIterator) Value() RouteFilter {
13043	if !iter.page.NotDone() {
13044		return RouteFilter{}
13045	}
13046	return iter.page.Values()[iter.i]
13047}
13048
13049// Creates a new instance of the RouteFilterListResultIterator type.
13050func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
13051	return RouteFilterListResultIterator{page: page}
13052}
13053
13054// IsEmpty returns true if the ListResult contains no values.
13055func (rflr RouteFilterListResult) IsEmpty() bool {
13056	return rflr.Value == nil || len(*rflr.Value) == 0
13057}
13058
13059// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
13060// It returns nil if no more results exist.
13061func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
13062	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
13063		return nil, nil
13064	}
13065	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13066		autorest.AsJSON(),
13067		autorest.AsGet(),
13068		autorest.WithBaseURL(to.String(rflr.NextLink)))
13069}
13070
13071// RouteFilterListResultPage contains a page of RouteFilter values.
13072type RouteFilterListResultPage struct {
13073	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
13074	rflr RouteFilterListResult
13075}
13076
13077// NextWithContext advances to the next page of values.  If there was an error making
13078// the request the page does not advance and the error is returned.
13079func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
13080	if tracing.IsEnabled() {
13081		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
13082		defer func() {
13083			sc := -1
13084			if page.Response().Response.Response != nil {
13085				sc = page.Response().Response.Response.StatusCode
13086			}
13087			tracing.EndSpan(ctx, sc, err)
13088		}()
13089	}
13090	next, err := page.fn(ctx, page.rflr)
13091	if err != nil {
13092		return err
13093	}
13094	page.rflr = next
13095	return nil
13096}
13097
13098// Next advances to the next page of values.  If there was an error making
13099// the request the page does not advance and the error is returned.
13100// Deprecated: Use NextWithContext() instead.
13101func (page *RouteFilterListResultPage) Next() error {
13102	return page.NextWithContext(context.Background())
13103}
13104
13105// NotDone returns true if the page enumeration should be started or is not yet complete.
13106func (page RouteFilterListResultPage) NotDone() bool {
13107	return !page.rflr.IsEmpty()
13108}
13109
13110// Response returns the raw server response from the last page request.
13111func (page RouteFilterListResultPage) Response() RouteFilterListResult {
13112	return page.rflr
13113}
13114
13115// Values returns the slice of values for the current page or nil if there are no values.
13116func (page RouteFilterListResultPage) Values() []RouteFilter {
13117	if page.rflr.IsEmpty() {
13118		return nil
13119	}
13120	return *page.rflr.Value
13121}
13122
13123// Creates a new instance of the RouteFilterListResultPage type.
13124func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
13125	return RouteFilterListResultPage{fn: getNextPage}
13126}
13127
13128// RouteFilterPropertiesFormat route Filter Resource
13129type RouteFilterPropertiesFormat struct {
13130	// Rules - Collection of RouteFilterRules contained within a route filter.
13131	Rules *[]RouteFilterRule `json:"rules,omitempty"`
13132	// Peerings - A collection of references to express route circuit peerings.
13133	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
13134	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
13135	ProvisioningState *string `json:"provisioningState,omitempty"`
13136}
13137
13138// RouteFilterRule route Filter Rule Resource
13139type RouteFilterRule struct {
13140	autorest.Response                `json:"-"`
13141	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
13142	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13143	Name *string `json:"name,omitempty"`
13144	// Location - Resource location.
13145	Location *string `json:"location,omitempty"`
13146	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13147	Etag *string `json:"etag,omitempty"`
13148	// ID - Resource ID.
13149	ID *string `json:"id,omitempty"`
13150}
13151
13152// MarshalJSON is the custom marshaler for RouteFilterRule.
13153func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
13154	objectMap := make(map[string]interface{})
13155	if rfr.RouteFilterRulePropertiesFormat != nil {
13156		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
13157	}
13158	if rfr.Name != nil {
13159		objectMap["name"] = rfr.Name
13160	}
13161	if rfr.Location != nil {
13162		objectMap["location"] = rfr.Location
13163	}
13164	if rfr.ID != nil {
13165		objectMap["id"] = rfr.ID
13166	}
13167	return json.Marshal(objectMap)
13168}
13169
13170// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
13171func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
13172	var m map[string]*json.RawMessage
13173	err := json.Unmarshal(body, &m)
13174	if err != nil {
13175		return err
13176	}
13177	for k, v := range m {
13178		switch k {
13179		case "properties":
13180			if v != nil {
13181				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
13182				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
13183				if err != nil {
13184					return err
13185				}
13186				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
13187			}
13188		case "name":
13189			if v != nil {
13190				var name string
13191				err = json.Unmarshal(*v, &name)
13192				if err != nil {
13193					return err
13194				}
13195				rfr.Name = &name
13196			}
13197		case "location":
13198			if v != nil {
13199				var location string
13200				err = json.Unmarshal(*v, &location)
13201				if err != nil {
13202					return err
13203				}
13204				rfr.Location = &location
13205			}
13206		case "etag":
13207			if v != nil {
13208				var etag string
13209				err = json.Unmarshal(*v, &etag)
13210				if err != nil {
13211					return err
13212				}
13213				rfr.Etag = &etag
13214			}
13215		case "id":
13216			if v != nil {
13217				var ID string
13218				err = json.Unmarshal(*v, &ID)
13219				if err != nil {
13220					return err
13221				}
13222				rfr.ID = &ID
13223			}
13224		}
13225	}
13226
13227	return nil
13228}
13229
13230// RouteFilterRuleListResult response for the ListRouteFilterRules API service call
13231type RouteFilterRuleListResult struct {
13232	autorest.Response `json:"-"`
13233	// Value - Gets a list of RouteFilterRules in a resource group.
13234	Value *[]RouteFilterRule `json:"value,omitempty"`
13235	// NextLink - The URL to get the next set of results.
13236	NextLink *string `json:"nextLink,omitempty"`
13237}
13238
13239// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
13240type RouteFilterRuleListResultIterator struct {
13241	i    int
13242	page RouteFilterRuleListResultPage
13243}
13244
13245// NextWithContext advances to the next value.  If there was an error making
13246// the request the iterator does not advance and the error is returned.
13247func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
13248	if tracing.IsEnabled() {
13249		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
13250		defer func() {
13251			sc := -1
13252			if iter.Response().Response.Response != nil {
13253				sc = iter.Response().Response.Response.StatusCode
13254			}
13255			tracing.EndSpan(ctx, sc, err)
13256		}()
13257	}
13258	iter.i++
13259	if iter.i < len(iter.page.Values()) {
13260		return nil
13261	}
13262	err = iter.page.NextWithContext(ctx)
13263	if err != nil {
13264		iter.i--
13265		return err
13266	}
13267	iter.i = 0
13268	return nil
13269}
13270
13271// Next advances to the next value.  If there was an error making
13272// the request the iterator does not advance and the error is returned.
13273// Deprecated: Use NextWithContext() instead.
13274func (iter *RouteFilterRuleListResultIterator) Next() error {
13275	return iter.NextWithContext(context.Background())
13276}
13277
13278// NotDone returns true if the enumeration should be started or is not yet complete.
13279func (iter RouteFilterRuleListResultIterator) NotDone() bool {
13280	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13281}
13282
13283// Response returns the raw server response from the last page request.
13284func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
13285	return iter.page.Response()
13286}
13287
13288// Value returns the current value or a zero-initialized value if the
13289// iterator has advanced beyond the end of the collection.
13290func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
13291	if !iter.page.NotDone() {
13292		return RouteFilterRule{}
13293	}
13294	return iter.page.Values()[iter.i]
13295}
13296
13297// Creates a new instance of the RouteFilterRuleListResultIterator type.
13298func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
13299	return RouteFilterRuleListResultIterator{page: page}
13300}
13301
13302// IsEmpty returns true if the ListResult contains no values.
13303func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
13304	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
13305}
13306
13307// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
13308// It returns nil if no more results exist.
13309func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
13310	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
13311		return nil, nil
13312	}
13313	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13314		autorest.AsJSON(),
13315		autorest.AsGet(),
13316		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
13317}
13318
13319// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
13320type RouteFilterRuleListResultPage struct {
13321	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
13322	rfrlr RouteFilterRuleListResult
13323}
13324
13325// NextWithContext advances to the next page of values.  If there was an error making
13326// the request the page does not advance and the error is returned.
13327func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
13328	if tracing.IsEnabled() {
13329		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
13330		defer func() {
13331			sc := -1
13332			if page.Response().Response.Response != nil {
13333				sc = page.Response().Response.Response.StatusCode
13334			}
13335			tracing.EndSpan(ctx, sc, err)
13336		}()
13337	}
13338	next, err := page.fn(ctx, page.rfrlr)
13339	if err != nil {
13340		return err
13341	}
13342	page.rfrlr = next
13343	return nil
13344}
13345
13346// Next advances to the next page of values.  If there was an error making
13347// the request the page does not advance and the error is returned.
13348// Deprecated: Use NextWithContext() instead.
13349func (page *RouteFilterRuleListResultPage) Next() error {
13350	return page.NextWithContext(context.Background())
13351}
13352
13353// NotDone returns true if the page enumeration should be started or is not yet complete.
13354func (page RouteFilterRuleListResultPage) NotDone() bool {
13355	return !page.rfrlr.IsEmpty()
13356}
13357
13358// Response returns the raw server response from the last page request.
13359func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
13360	return page.rfrlr
13361}
13362
13363// Values returns the slice of values for the current page or nil if there are no values.
13364func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
13365	if page.rfrlr.IsEmpty() {
13366		return nil
13367	}
13368	return *page.rfrlr.Value
13369}
13370
13371// Creates a new instance of the RouteFilterRuleListResultPage type.
13372func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
13373	return RouteFilterRuleListResultPage{fn: getNextPage}
13374}
13375
13376// RouteFilterRulePropertiesFormat route Filter Rule Resource
13377type RouteFilterRulePropertiesFormat struct {
13378	// Access - The access type of the rule. Valid values are: 'Allow', 'Deny'. Possible values include: 'Allow', 'Deny'
13379	Access Access `json:"access,omitempty"`
13380	// RouteFilterRuleType - The rule type of the rule. Valid value is: 'Community'
13381	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
13382	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020']
13383	Communities *[]string `json:"communities,omitempty"`
13384	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
13385	ProvisioningState *string `json:"provisioningState,omitempty"`
13386}
13387
13388// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13389// long-running operation.
13390type RouteFilterRulesCreateOrUpdateFuture struct {
13391	azure.Future
13392}
13393
13394// Result returns the result of the asynchronous operation.
13395// If the operation has not completed it will return an error.
13396func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
13397	var done bool
13398	done, err = future.DoneWithContext(context.Background(), client)
13399	if err != nil {
13400		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13401		return
13402	}
13403	if !done {
13404		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
13405		return
13406	}
13407	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13408	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
13409		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
13410		if err != nil {
13411			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
13412		}
13413	}
13414	return
13415}
13416
13417// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13418// operation.
13419type RouteFilterRulesDeleteFuture struct {
13420	azure.Future
13421}
13422
13423// Result returns the result of the asynchronous operation.
13424// If the operation has not completed it will return an error.
13425func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
13426	var done bool
13427	done, err = future.DoneWithContext(context.Background(), client)
13428	if err != nil {
13429		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
13430		return
13431	}
13432	if !done {
13433		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
13434		return
13435	}
13436	ar.Response = future.Response()
13437	return
13438}
13439
13440// RouteFilterRulesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
13441// operation.
13442type RouteFilterRulesUpdateFuture struct {
13443	azure.Future
13444}
13445
13446// Result returns the result of the asynchronous operation.
13447// If the operation has not completed it will return an error.
13448func (future *RouteFilterRulesUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
13449	var done bool
13450	done, err = future.DoneWithContext(context.Background(), client)
13451	if err != nil {
13452		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", future.Response(), "Polling failure")
13453		return
13454	}
13455	if !done {
13456		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesUpdateFuture")
13457		return
13458	}
13459	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13460	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
13461		rfr, err = client.UpdateResponder(rfr.Response.Response)
13462		if err != nil {
13463			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
13464		}
13465	}
13466	return
13467}
13468
13469// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13470// long-running operation.
13471type RouteFiltersCreateOrUpdateFuture struct {
13472	azure.Future
13473}
13474
13475// Result returns the result of the asynchronous operation.
13476// If the operation has not completed it will return an error.
13477func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
13478	var done bool
13479	done, err = future.DoneWithContext(context.Background(), client)
13480	if err != nil {
13481		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13482		return
13483	}
13484	if !done {
13485		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
13486		return
13487	}
13488	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13489	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
13490		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
13491		if err != nil {
13492			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
13493		}
13494	}
13495	return
13496}
13497
13498// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13499// operation.
13500type RouteFiltersDeleteFuture struct {
13501	azure.Future
13502}
13503
13504// Result returns the result of the asynchronous operation.
13505// If the operation has not completed it will return an error.
13506func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
13507	var done bool
13508	done, err = future.DoneWithContext(context.Background(), client)
13509	if err != nil {
13510		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
13511		return
13512	}
13513	if !done {
13514		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
13515		return
13516	}
13517	ar.Response = future.Response()
13518	return
13519}
13520
13521// RouteFiltersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
13522// operation.
13523type RouteFiltersUpdateFuture struct {
13524	azure.Future
13525}
13526
13527// Result returns the result of the asynchronous operation.
13528// If the operation has not completed it will return an error.
13529func (future *RouteFiltersUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
13530	var done bool
13531	done, err = future.DoneWithContext(context.Background(), client)
13532	if err != nil {
13533		err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", future.Response(), "Polling failure")
13534		return
13535	}
13536	if !done {
13537		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersUpdateFuture")
13538		return
13539	}
13540	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13541	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
13542		rf, err = client.UpdateResponder(rf.Response.Response)
13543		if err != nil {
13544			err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
13545		}
13546	}
13547	return
13548}
13549
13550// RouteListResult response for the ListRoute API service call
13551type RouteListResult struct {
13552	autorest.Response `json:"-"`
13553	// Value - Gets a list of routes in a resource group.
13554	Value *[]Route `json:"value,omitempty"`
13555	// NextLink - The URL to get the next set of results.
13556	NextLink *string `json:"nextLink,omitempty"`
13557}
13558
13559// RouteListResultIterator provides access to a complete listing of Route values.
13560type RouteListResultIterator struct {
13561	i    int
13562	page RouteListResultPage
13563}
13564
13565// NextWithContext advances to the next value.  If there was an error making
13566// the request the iterator does not advance and the error is returned.
13567func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
13568	if tracing.IsEnabled() {
13569		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
13570		defer func() {
13571			sc := -1
13572			if iter.Response().Response.Response != nil {
13573				sc = iter.Response().Response.Response.StatusCode
13574			}
13575			tracing.EndSpan(ctx, sc, err)
13576		}()
13577	}
13578	iter.i++
13579	if iter.i < len(iter.page.Values()) {
13580		return nil
13581	}
13582	err = iter.page.NextWithContext(ctx)
13583	if err != nil {
13584		iter.i--
13585		return err
13586	}
13587	iter.i = 0
13588	return nil
13589}
13590
13591// Next advances to the next value.  If there was an error making
13592// the request the iterator does not advance and the error is returned.
13593// Deprecated: Use NextWithContext() instead.
13594func (iter *RouteListResultIterator) Next() error {
13595	return iter.NextWithContext(context.Background())
13596}
13597
13598// NotDone returns true if the enumeration should be started or is not yet complete.
13599func (iter RouteListResultIterator) NotDone() bool {
13600	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13601}
13602
13603// Response returns the raw server response from the last page request.
13604func (iter RouteListResultIterator) Response() RouteListResult {
13605	return iter.page.Response()
13606}
13607
13608// Value returns the current value or a zero-initialized value if the
13609// iterator has advanced beyond the end of the collection.
13610func (iter RouteListResultIterator) Value() Route {
13611	if !iter.page.NotDone() {
13612		return Route{}
13613	}
13614	return iter.page.Values()[iter.i]
13615}
13616
13617// Creates a new instance of the RouteListResultIterator type.
13618func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
13619	return RouteListResultIterator{page: page}
13620}
13621
13622// IsEmpty returns true if the ListResult contains no values.
13623func (rlr RouteListResult) IsEmpty() bool {
13624	return rlr.Value == nil || len(*rlr.Value) == 0
13625}
13626
13627// routeListResultPreparer prepares a request to retrieve the next set of results.
13628// It returns nil if no more results exist.
13629func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
13630	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
13631		return nil, nil
13632	}
13633	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13634		autorest.AsJSON(),
13635		autorest.AsGet(),
13636		autorest.WithBaseURL(to.String(rlr.NextLink)))
13637}
13638
13639// RouteListResultPage contains a page of Route values.
13640type RouteListResultPage struct {
13641	fn  func(context.Context, RouteListResult) (RouteListResult, error)
13642	rlr RouteListResult
13643}
13644
13645// NextWithContext advances to the next page of values.  If there was an error making
13646// the request the page does not advance and the error is returned.
13647func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
13648	if tracing.IsEnabled() {
13649		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
13650		defer func() {
13651			sc := -1
13652			if page.Response().Response.Response != nil {
13653				sc = page.Response().Response.Response.StatusCode
13654			}
13655			tracing.EndSpan(ctx, sc, err)
13656		}()
13657	}
13658	next, err := page.fn(ctx, page.rlr)
13659	if err != nil {
13660		return err
13661	}
13662	page.rlr = next
13663	return nil
13664}
13665
13666// Next advances to the next page of values.  If there was an error making
13667// the request the page does not advance and the error is returned.
13668// Deprecated: Use NextWithContext() instead.
13669func (page *RouteListResultPage) Next() error {
13670	return page.NextWithContext(context.Background())
13671}
13672
13673// NotDone returns true if the page enumeration should be started or is not yet complete.
13674func (page RouteListResultPage) NotDone() bool {
13675	return !page.rlr.IsEmpty()
13676}
13677
13678// Response returns the raw server response from the last page request.
13679func (page RouteListResultPage) Response() RouteListResult {
13680	return page.rlr
13681}
13682
13683// Values returns the slice of values for the current page or nil if there are no values.
13684func (page RouteListResultPage) Values() []Route {
13685	if page.rlr.IsEmpty() {
13686		return nil
13687	}
13688	return *page.rlr.Value
13689}
13690
13691// Creates a new instance of the RouteListResultPage type.
13692func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
13693	return RouteListResultPage{fn: getNextPage}
13694}
13695
13696// RoutePropertiesFormat route resource
13697type RoutePropertiesFormat struct {
13698	// AddressPrefix - The destination CIDR to which the route applies.
13699	AddressPrefix *string `json:"addressPrefix,omitempty"`
13700	// 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'
13701	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
13702	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
13703	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
13704	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13705	ProvisioningState *string `json:"provisioningState,omitempty"`
13706}
13707
13708// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
13709// operation.
13710type RoutesCreateOrUpdateFuture struct {
13711	azure.Future
13712}
13713
13714// Result returns the result of the asynchronous operation.
13715// If the operation has not completed it will return an error.
13716func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
13717	var done bool
13718	done, err = future.DoneWithContext(context.Background(), client)
13719	if err != nil {
13720		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13721		return
13722	}
13723	if !done {
13724		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
13725		return
13726	}
13727	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13728	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
13729		r, err = client.CreateOrUpdateResponder(r.Response.Response)
13730		if err != nil {
13731			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
13732		}
13733	}
13734	return
13735}
13736
13737// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
13738type RoutesDeleteFuture struct {
13739	azure.Future
13740}
13741
13742// Result returns the result of the asynchronous operation.
13743// If the operation has not completed it will return an error.
13744func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
13745	var done bool
13746	done, err = future.DoneWithContext(context.Background(), client)
13747	if err != nil {
13748		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
13749		return
13750	}
13751	if !done {
13752		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
13753		return
13754	}
13755	ar.Response = future.Response()
13756	return
13757}
13758
13759// RouteTable route table resource.
13760type RouteTable struct {
13761	autorest.Response `json:"-"`
13762	// RouteTablePropertiesFormat - Properties of the route table.
13763	*RouteTablePropertiesFormat `json:"properties,omitempty"`
13764	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
13765	Etag *string `json:"etag,omitempty"`
13766	// ID - Resource ID.
13767	ID *string `json:"id,omitempty"`
13768	// Name - READ-ONLY; Resource name.
13769	Name *string `json:"name,omitempty"`
13770	// Type - READ-ONLY; Resource type.
13771	Type *string `json:"type,omitempty"`
13772	// Location - Resource location.
13773	Location *string `json:"location,omitempty"`
13774	// Tags - Resource tags.
13775	Tags map[string]*string `json:"tags"`
13776}
13777
13778// MarshalJSON is the custom marshaler for RouteTable.
13779func (rt RouteTable) MarshalJSON() ([]byte, error) {
13780	objectMap := make(map[string]interface{})
13781	if rt.RouteTablePropertiesFormat != nil {
13782		objectMap["properties"] = rt.RouteTablePropertiesFormat
13783	}
13784	if rt.Etag != nil {
13785		objectMap["etag"] = rt.Etag
13786	}
13787	if rt.ID != nil {
13788		objectMap["id"] = rt.ID
13789	}
13790	if rt.Location != nil {
13791		objectMap["location"] = rt.Location
13792	}
13793	if rt.Tags != nil {
13794		objectMap["tags"] = rt.Tags
13795	}
13796	return json.Marshal(objectMap)
13797}
13798
13799// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
13800func (rt *RouteTable) UnmarshalJSON(body []byte) error {
13801	var m map[string]*json.RawMessage
13802	err := json.Unmarshal(body, &m)
13803	if err != nil {
13804		return err
13805	}
13806	for k, v := range m {
13807		switch k {
13808		case "properties":
13809			if v != nil {
13810				var routeTablePropertiesFormat RouteTablePropertiesFormat
13811				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
13812				if err != nil {
13813					return err
13814				}
13815				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
13816			}
13817		case "etag":
13818			if v != nil {
13819				var etag string
13820				err = json.Unmarshal(*v, &etag)
13821				if err != nil {
13822					return err
13823				}
13824				rt.Etag = &etag
13825			}
13826		case "id":
13827			if v != nil {
13828				var ID string
13829				err = json.Unmarshal(*v, &ID)
13830				if err != nil {
13831					return err
13832				}
13833				rt.ID = &ID
13834			}
13835		case "name":
13836			if v != nil {
13837				var name string
13838				err = json.Unmarshal(*v, &name)
13839				if err != nil {
13840					return err
13841				}
13842				rt.Name = &name
13843			}
13844		case "type":
13845			if v != nil {
13846				var typeVar string
13847				err = json.Unmarshal(*v, &typeVar)
13848				if err != nil {
13849					return err
13850				}
13851				rt.Type = &typeVar
13852			}
13853		case "location":
13854			if v != nil {
13855				var location string
13856				err = json.Unmarshal(*v, &location)
13857				if err != nil {
13858					return err
13859				}
13860				rt.Location = &location
13861			}
13862		case "tags":
13863			if v != nil {
13864				var tags map[string]*string
13865				err = json.Unmarshal(*v, &tags)
13866				if err != nil {
13867					return err
13868				}
13869				rt.Tags = tags
13870			}
13871		}
13872	}
13873
13874	return nil
13875}
13876
13877// RouteTableListResult response for the ListRouteTable API service call.
13878type RouteTableListResult struct {
13879	autorest.Response `json:"-"`
13880	// Value - Gets a list of route tables in a resource group.
13881	Value *[]RouteTable `json:"value,omitempty"`
13882	// NextLink - The URL to get the next set of results.
13883	NextLink *string `json:"nextLink,omitempty"`
13884}
13885
13886// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
13887type RouteTableListResultIterator struct {
13888	i    int
13889	page RouteTableListResultPage
13890}
13891
13892// NextWithContext advances to the next value.  If there was an error making
13893// the request the iterator does not advance and the error is returned.
13894func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
13895	if tracing.IsEnabled() {
13896		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
13897		defer func() {
13898			sc := -1
13899			if iter.Response().Response.Response != nil {
13900				sc = iter.Response().Response.Response.StatusCode
13901			}
13902			tracing.EndSpan(ctx, sc, err)
13903		}()
13904	}
13905	iter.i++
13906	if iter.i < len(iter.page.Values()) {
13907		return nil
13908	}
13909	err = iter.page.NextWithContext(ctx)
13910	if err != nil {
13911		iter.i--
13912		return err
13913	}
13914	iter.i = 0
13915	return nil
13916}
13917
13918// Next advances to the next value.  If there was an error making
13919// the request the iterator does not advance and the error is returned.
13920// Deprecated: Use NextWithContext() instead.
13921func (iter *RouteTableListResultIterator) Next() error {
13922	return iter.NextWithContext(context.Background())
13923}
13924
13925// NotDone returns true if the enumeration should be started or is not yet complete.
13926func (iter RouteTableListResultIterator) NotDone() bool {
13927	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13928}
13929
13930// Response returns the raw server response from the last page request.
13931func (iter RouteTableListResultIterator) Response() RouteTableListResult {
13932	return iter.page.Response()
13933}
13934
13935// Value returns the current value or a zero-initialized value if the
13936// iterator has advanced beyond the end of the collection.
13937func (iter RouteTableListResultIterator) Value() RouteTable {
13938	if !iter.page.NotDone() {
13939		return RouteTable{}
13940	}
13941	return iter.page.Values()[iter.i]
13942}
13943
13944// Creates a new instance of the RouteTableListResultIterator type.
13945func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
13946	return RouteTableListResultIterator{page: page}
13947}
13948
13949// IsEmpty returns true if the ListResult contains no values.
13950func (rtlr RouteTableListResult) IsEmpty() bool {
13951	return rtlr.Value == nil || len(*rtlr.Value) == 0
13952}
13953
13954// routeTableListResultPreparer prepares a request to retrieve the next set of results.
13955// It returns nil if no more results exist.
13956func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
13957	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
13958		return nil, nil
13959	}
13960	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13961		autorest.AsJSON(),
13962		autorest.AsGet(),
13963		autorest.WithBaseURL(to.String(rtlr.NextLink)))
13964}
13965
13966// RouteTableListResultPage contains a page of RouteTable values.
13967type RouteTableListResultPage struct {
13968	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
13969	rtlr RouteTableListResult
13970}
13971
13972// NextWithContext advances to the next page of values.  If there was an error making
13973// the request the page does not advance and the error is returned.
13974func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
13975	if tracing.IsEnabled() {
13976		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
13977		defer func() {
13978			sc := -1
13979			if page.Response().Response.Response != nil {
13980				sc = page.Response().Response.Response.StatusCode
13981			}
13982			tracing.EndSpan(ctx, sc, err)
13983		}()
13984	}
13985	next, err := page.fn(ctx, page.rtlr)
13986	if err != nil {
13987		return err
13988	}
13989	page.rtlr = next
13990	return nil
13991}
13992
13993// Next advances to the next page of values.  If there was an error making
13994// the request the page does not advance and the error is returned.
13995// Deprecated: Use NextWithContext() instead.
13996func (page *RouteTableListResultPage) Next() error {
13997	return page.NextWithContext(context.Background())
13998}
13999
14000// NotDone returns true if the page enumeration should be started or is not yet complete.
14001func (page RouteTableListResultPage) NotDone() bool {
14002	return !page.rtlr.IsEmpty()
14003}
14004
14005// Response returns the raw server response from the last page request.
14006func (page RouteTableListResultPage) Response() RouteTableListResult {
14007	return page.rtlr
14008}
14009
14010// Values returns the slice of values for the current page or nil if there are no values.
14011func (page RouteTableListResultPage) Values() []RouteTable {
14012	if page.rtlr.IsEmpty() {
14013		return nil
14014	}
14015	return *page.rtlr.Value
14016}
14017
14018// Creates a new instance of the RouteTableListResultPage type.
14019func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
14020	return RouteTableListResultPage{fn: getNextPage}
14021}
14022
14023// RouteTablePropertiesFormat route Table resource
14024type RouteTablePropertiesFormat struct {
14025	// Routes - Collection of routes contained within a route table.
14026	Routes *[]Route `json:"routes,omitempty"`
14027	// Subnets - READ-ONLY; A collection of references to subnets.
14028	Subnets *[]Subnet `json:"subnets,omitempty"`
14029	// DisableBgpRoutePropagation - Gets or sets whether to disable the routes learned by BGP on that route table. True means disable.
14030	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
14031	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14032	ProvisioningState *string `json:"provisioningState,omitempty"`
14033}
14034
14035// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14036// long-running operation.
14037type RouteTablesCreateOrUpdateFuture struct {
14038	azure.Future
14039}
14040
14041// Result returns the result of the asynchronous operation.
14042// If the operation has not completed it will return an error.
14043func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
14044	var done bool
14045	done, err = future.DoneWithContext(context.Background(), client)
14046	if err != nil {
14047		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14048		return
14049	}
14050	if !done {
14051		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
14052		return
14053	}
14054	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14055	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
14056		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
14057		if err != nil {
14058			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
14059		}
14060	}
14061	return
14062}
14063
14064// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14065// operation.
14066type RouteTablesDeleteFuture struct {
14067	azure.Future
14068}
14069
14070// Result returns the result of the asynchronous operation.
14071// If the operation has not completed it will return an error.
14072func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
14073	var done bool
14074	done, err = future.DoneWithContext(context.Background(), client)
14075	if err != nil {
14076		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
14077		return
14078	}
14079	if !done {
14080		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
14081		return
14082	}
14083	ar.Response = future.Response()
14084	return
14085}
14086
14087// RouteTablesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
14088// operation.
14089type RouteTablesUpdateTagsFuture struct {
14090	azure.Future
14091}
14092
14093// Result returns the result of the asynchronous operation.
14094// If the operation has not completed it will return an error.
14095func (future *RouteTablesUpdateTagsFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
14096	var done bool
14097	done, err = future.DoneWithContext(context.Background(), client)
14098	if err != nil {
14099		err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
14100		return
14101	}
14102	if !done {
14103		err = azure.NewAsyncOpIncompleteError("network.RouteTablesUpdateTagsFuture")
14104		return
14105	}
14106	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14107	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
14108		rt, err = client.UpdateTagsResponder(rt.Response.Response)
14109		if err != nil {
14110			err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", rt.Response.Response, "Failure responding to request")
14111		}
14112	}
14113	return
14114}
14115
14116// SecurityGroup networkSecurityGroup resource.
14117type SecurityGroup struct {
14118	autorest.Response `json:"-"`
14119	// SecurityGroupPropertiesFormat - Properties of the network security group
14120	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
14121	// Etag - A unique read-only string that changes whenever the resource is updated.
14122	Etag *string `json:"etag,omitempty"`
14123	// ID - Resource ID.
14124	ID *string `json:"id,omitempty"`
14125	// Name - READ-ONLY; Resource name.
14126	Name *string `json:"name,omitempty"`
14127	// Type - READ-ONLY; Resource type.
14128	Type *string `json:"type,omitempty"`
14129	// Location - Resource location.
14130	Location *string `json:"location,omitempty"`
14131	// Tags - Resource tags.
14132	Tags map[string]*string `json:"tags"`
14133}
14134
14135// MarshalJSON is the custom marshaler for SecurityGroup.
14136func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
14137	objectMap := make(map[string]interface{})
14138	if sg.SecurityGroupPropertiesFormat != nil {
14139		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
14140	}
14141	if sg.Etag != nil {
14142		objectMap["etag"] = sg.Etag
14143	}
14144	if sg.ID != nil {
14145		objectMap["id"] = sg.ID
14146	}
14147	if sg.Location != nil {
14148		objectMap["location"] = sg.Location
14149	}
14150	if sg.Tags != nil {
14151		objectMap["tags"] = sg.Tags
14152	}
14153	return json.Marshal(objectMap)
14154}
14155
14156// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
14157func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
14158	var m map[string]*json.RawMessage
14159	err := json.Unmarshal(body, &m)
14160	if err != nil {
14161		return err
14162	}
14163	for k, v := range m {
14164		switch k {
14165		case "properties":
14166			if v != nil {
14167				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
14168				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
14169				if err != nil {
14170					return err
14171				}
14172				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
14173			}
14174		case "etag":
14175			if v != nil {
14176				var etag string
14177				err = json.Unmarshal(*v, &etag)
14178				if err != nil {
14179					return err
14180				}
14181				sg.Etag = &etag
14182			}
14183		case "id":
14184			if v != nil {
14185				var ID string
14186				err = json.Unmarshal(*v, &ID)
14187				if err != nil {
14188					return err
14189				}
14190				sg.ID = &ID
14191			}
14192		case "name":
14193			if v != nil {
14194				var name string
14195				err = json.Unmarshal(*v, &name)
14196				if err != nil {
14197					return err
14198				}
14199				sg.Name = &name
14200			}
14201		case "type":
14202			if v != nil {
14203				var typeVar string
14204				err = json.Unmarshal(*v, &typeVar)
14205				if err != nil {
14206					return err
14207				}
14208				sg.Type = &typeVar
14209			}
14210		case "location":
14211			if v != nil {
14212				var location string
14213				err = json.Unmarshal(*v, &location)
14214				if err != nil {
14215					return err
14216				}
14217				sg.Location = &location
14218			}
14219		case "tags":
14220			if v != nil {
14221				var tags map[string]*string
14222				err = json.Unmarshal(*v, &tags)
14223				if err != nil {
14224					return err
14225				}
14226				sg.Tags = tags
14227			}
14228		}
14229	}
14230
14231	return nil
14232}
14233
14234// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
14235type SecurityGroupListResult struct {
14236	autorest.Response `json:"-"`
14237	// Value - A list of NetworkSecurityGroup resources.
14238	Value *[]SecurityGroup `json:"value,omitempty"`
14239	// NextLink - The URL to get the next set of results.
14240	NextLink *string `json:"nextLink,omitempty"`
14241}
14242
14243// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
14244type SecurityGroupListResultIterator struct {
14245	i    int
14246	page SecurityGroupListResultPage
14247}
14248
14249// NextWithContext advances to the next value.  If there was an error making
14250// the request the iterator does not advance and the error is returned.
14251func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
14252	if tracing.IsEnabled() {
14253		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
14254		defer func() {
14255			sc := -1
14256			if iter.Response().Response.Response != nil {
14257				sc = iter.Response().Response.Response.StatusCode
14258			}
14259			tracing.EndSpan(ctx, sc, err)
14260		}()
14261	}
14262	iter.i++
14263	if iter.i < len(iter.page.Values()) {
14264		return nil
14265	}
14266	err = iter.page.NextWithContext(ctx)
14267	if err != nil {
14268		iter.i--
14269		return err
14270	}
14271	iter.i = 0
14272	return nil
14273}
14274
14275// Next advances to the next value.  If there was an error making
14276// the request the iterator does not advance and the error is returned.
14277// Deprecated: Use NextWithContext() instead.
14278func (iter *SecurityGroupListResultIterator) Next() error {
14279	return iter.NextWithContext(context.Background())
14280}
14281
14282// NotDone returns true if the enumeration should be started or is not yet complete.
14283func (iter SecurityGroupListResultIterator) NotDone() bool {
14284	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14285}
14286
14287// Response returns the raw server response from the last page request.
14288func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
14289	return iter.page.Response()
14290}
14291
14292// Value returns the current value or a zero-initialized value if the
14293// iterator has advanced beyond the end of the collection.
14294func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
14295	if !iter.page.NotDone() {
14296		return SecurityGroup{}
14297	}
14298	return iter.page.Values()[iter.i]
14299}
14300
14301// Creates a new instance of the SecurityGroupListResultIterator type.
14302func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
14303	return SecurityGroupListResultIterator{page: page}
14304}
14305
14306// IsEmpty returns true if the ListResult contains no values.
14307func (sglr SecurityGroupListResult) IsEmpty() bool {
14308	return sglr.Value == nil || len(*sglr.Value) == 0
14309}
14310
14311// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
14312// It returns nil if no more results exist.
14313func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
14314	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
14315		return nil, nil
14316	}
14317	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14318		autorest.AsJSON(),
14319		autorest.AsGet(),
14320		autorest.WithBaseURL(to.String(sglr.NextLink)))
14321}
14322
14323// SecurityGroupListResultPage contains a page of SecurityGroup values.
14324type SecurityGroupListResultPage struct {
14325	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
14326	sglr SecurityGroupListResult
14327}
14328
14329// NextWithContext advances to the next page of values.  If there was an error making
14330// the request the page does not advance and the error is returned.
14331func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
14332	if tracing.IsEnabled() {
14333		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
14334		defer func() {
14335			sc := -1
14336			if page.Response().Response.Response != nil {
14337				sc = page.Response().Response.Response.StatusCode
14338			}
14339			tracing.EndSpan(ctx, sc, err)
14340		}()
14341	}
14342	next, err := page.fn(ctx, page.sglr)
14343	if err != nil {
14344		return err
14345	}
14346	page.sglr = next
14347	return nil
14348}
14349
14350// Next advances to the next page of values.  If there was an error making
14351// the request the page does not advance and the error is returned.
14352// Deprecated: Use NextWithContext() instead.
14353func (page *SecurityGroupListResultPage) Next() error {
14354	return page.NextWithContext(context.Background())
14355}
14356
14357// NotDone returns true if the page enumeration should be started or is not yet complete.
14358func (page SecurityGroupListResultPage) NotDone() bool {
14359	return !page.sglr.IsEmpty()
14360}
14361
14362// Response returns the raw server response from the last page request.
14363func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
14364	return page.sglr
14365}
14366
14367// Values returns the slice of values for the current page or nil if there are no values.
14368func (page SecurityGroupListResultPage) Values() []SecurityGroup {
14369	if page.sglr.IsEmpty() {
14370		return nil
14371	}
14372	return *page.sglr.Value
14373}
14374
14375// Creates a new instance of the SecurityGroupListResultPage type.
14376func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
14377	return SecurityGroupListResultPage{fn: getNextPage}
14378}
14379
14380// SecurityGroupNetworkInterface network interface and all its associated security rules.
14381type SecurityGroupNetworkInterface struct {
14382	// ID - ID of the network interface.
14383	ID                       *string                   `json:"id,omitempty"`
14384	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
14385}
14386
14387// SecurityGroupPropertiesFormat network Security Group resource.
14388type SecurityGroupPropertiesFormat struct {
14389	// SecurityRules - A collection of security rules of the network security group.
14390	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
14391	// DefaultSecurityRules - The default security rules of network security group.
14392	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
14393	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
14394	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
14395	// Subnets - READ-ONLY; A collection of references to subnets.
14396	Subnets *[]Subnet `json:"subnets,omitempty"`
14397	// ResourceGUID - The resource GUID property of the network security group resource.
14398	ResourceGUID *string `json:"resourceGuid,omitempty"`
14399	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14400	ProvisioningState *string `json:"provisioningState,omitempty"`
14401}
14402
14403// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14404// long-running operation.
14405type SecurityGroupsCreateOrUpdateFuture struct {
14406	azure.Future
14407}
14408
14409// Result returns the result of the asynchronous operation.
14410// If the operation has not completed it will return an error.
14411func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
14412	var done bool
14413	done, err = future.DoneWithContext(context.Background(), client)
14414	if err != nil {
14415		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14416		return
14417	}
14418	if !done {
14419		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
14420		return
14421	}
14422	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14423	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
14424		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
14425		if err != nil {
14426			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
14427		}
14428	}
14429	return
14430}
14431
14432// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14433// operation.
14434type SecurityGroupsDeleteFuture struct {
14435	azure.Future
14436}
14437
14438// Result returns the result of the asynchronous operation.
14439// If the operation has not completed it will return an error.
14440func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
14441	var done bool
14442	done, err = future.DoneWithContext(context.Background(), client)
14443	if err != nil {
14444		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
14445		return
14446	}
14447	if !done {
14448		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
14449		return
14450	}
14451	ar.Response = future.Response()
14452	return
14453}
14454
14455// SecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
14456// long-running operation.
14457type SecurityGroupsUpdateTagsFuture struct {
14458	azure.Future
14459}
14460
14461// Result returns the result of the asynchronous operation.
14462// If the operation has not completed it will return an error.
14463func (future *SecurityGroupsUpdateTagsFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
14464	var done bool
14465	done, err = future.DoneWithContext(context.Background(), client)
14466	if err != nil {
14467		err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
14468		return
14469	}
14470	if !done {
14471		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsUpdateTagsFuture")
14472		return
14473	}
14474	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14475	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
14476		sg, err = client.UpdateTagsResponder(sg.Response.Response)
14477		if err != nil {
14478			err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", sg.Response.Response, "Failure responding to request")
14479		}
14480	}
14481	return
14482}
14483
14484// SecurityGroupViewParameters parameters that define the VM to check security groups for.
14485type SecurityGroupViewParameters struct {
14486	// TargetResourceID - ID of the target VM.
14487	TargetResourceID *string `json:"targetResourceId,omitempty"`
14488}
14489
14490// SecurityGroupViewResult the information about security rules applied to the specified VM.
14491type SecurityGroupViewResult struct {
14492	autorest.Response `json:"-"`
14493	// NetworkInterfaces - List of network interfaces on the specified VM.
14494	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
14495}
14496
14497// SecurityRule network security rule.
14498type SecurityRule struct {
14499	autorest.Response `json:"-"`
14500	// SecurityRulePropertiesFormat - Properties of the security rule
14501	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
14502	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14503	Name *string `json:"name,omitempty"`
14504	// Etag - A unique read-only string that changes whenever the resource is updated.
14505	Etag *string `json:"etag,omitempty"`
14506	// ID - Resource ID.
14507	ID *string `json:"id,omitempty"`
14508}
14509
14510// MarshalJSON is the custom marshaler for SecurityRule.
14511func (sr SecurityRule) MarshalJSON() ([]byte, error) {
14512	objectMap := make(map[string]interface{})
14513	if sr.SecurityRulePropertiesFormat != nil {
14514		objectMap["properties"] = sr.SecurityRulePropertiesFormat
14515	}
14516	if sr.Name != nil {
14517		objectMap["name"] = sr.Name
14518	}
14519	if sr.Etag != nil {
14520		objectMap["etag"] = sr.Etag
14521	}
14522	if sr.ID != nil {
14523		objectMap["id"] = sr.ID
14524	}
14525	return json.Marshal(objectMap)
14526}
14527
14528// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
14529func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
14530	var m map[string]*json.RawMessage
14531	err := json.Unmarshal(body, &m)
14532	if err != nil {
14533		return err
14534	}
14535	for k, v := range m {
14536		switch k {
14537		case "properties":
14538			if v != nil {
14539				var securityRulePropertiesFormat SecurityRulePropertiesFormat
14540				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
14541				if err != nil {
14542					return err
14543				}
14544				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
14545			}
14546		case "name":
14547			if v != nil {
14548				var name string
14549				err = json.Unmarshal(*v, &name)
14550				if err != nil {
14551					return err
14552				}
14553				sr.Name = &name
14554			}
14555		case "etag":
14556			if v != nil {
14557				var etag string
14558				err = json.Unmarshal(*v, &etag)
14559				if err != nil {
14560					return err
14561				}
14562				sr.Etag = &etag
14563			}
14564		case "id":
14565			if v != nil {
14566				var ID string
14567				err = json.Unmarshal(*v, &ID)
14568				if err != nil {
14569					return err
14570				}
14571				sr.ID = &ID
14572			}
14573		}
14574	}
14575
14576	return nil
14577}
14578
14579// SecurityRuleAssociations all security rules associated with the network interface.
14580type SecurityRuleAssociations struct {
14581	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
14582	SubnetAssociation           *SubnetAssociation    `json:"subnetAssociation,omitempty"`
14583	// DefaultSecurityRules - Collection of default security rules of the network security group.
14584	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
14585	// EffectiveSecurityRules - Collection of effective security rules.
14586	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
14587}
14588
14589// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
14590// belongs to a network security group.
14591type SecurityRuleListResult struct {
14592	autorest.Response `json:"-"`
14593	// Value - The security rules in a network security group.
14594	Value *[]SecurityRule `json:"value,omitempty"`
14595	// NextLink - The URL to get the next set of results.
14596	NextLink *string `json:"nextLink,omitempty"`
14597}
14598
14599// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
14600type SecurityRuleListResultIterator struct {
14601	i    int
14602	page SecurityRuleListResultPage
14603}
14604
14605// NextWithContext advances to the next value.  If there was an error making
14606// the request the iterator does not advance and the error is returned.
14607func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
14608	if tracing.IsEnabled() {
14609		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
14610		defer func() {
14611			sc := -1
14612			if iter.Response().Response.Response != nil {
14613				sc = iter.Response().Response.Response.StatusCode
14614			}
14615			tracing.EndSpan(ctx, sc, err)
14616		}()
14617	}
14618	iter.i++
14619	if iter.i < len(iter.page.Values()) {
14620		return nil
14621	}
14622	err = iter.page.NextWithContext(ctx)
14623	if err != nil {
14624		iter.i--
14625		return err
14626	}
14627	iter.i = 0
14628	return nil
14629}
14630
14631// Next advances to the next value.  If there was an error making
14632// the request the iterator does not advance and the error is returned.
14633// Deprecated: Use NextWithContext() instead.
14634func (iter *SecurityRuleListResultIterator) Next() error {
14635	return iter.NextWithContext(context.Background())
14636}
14637
14638// NotDone returns true if the enumeration should be started or is not yet complete.
14639func (iter SecurityRuleListResultIterator) NotDone() bool {
14640	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14641}
14642
14643// Response returns the raw server response from the last page request.
14644func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
14645	return iter.page.Response()
14646}
14647
14648// Value returns the current value or a zero-initialized value if the
14649// iterator has advanced beyond the end of the collection.
14650func (iter SecurityRuleListResultIterator) Value() SecurityRule {
14651	if !iter.page.NotDone() {
14652		return SecurityRule{}
14653	}
14654	return iter.page.Values()[iter.i]
14655}
14656
14657// Creates a new instance of the SecurityRuleListResultIterator type.
14658func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
14659	return SecurityRuleListResultIterator{page: page}
14660}
14661
14662// IsEmpty returns true if the ListResult contains no values.
14663func (srlr SecurityRuleListResult) IsEmpty() bool {
14664	return srlr.Value == nil || len(*srlr.Value) == 0
14665}
14666
14667// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
14668// It returns nil if no more results exist.
14669func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
14670	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
14671		return nil, nil
14672	}
14673	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14674		autorest.AsJSON(),
14675		autorest.AsGet(),
14676		autorest.WithBaseURL(to.String(srlr.NextLink)))
14677}
14678
14679// SecurityRuleListResultPage contains a page of SecurityRule values.
14680type SecurityRuleListResultPage struct {
14681	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
14682	srlr SecurityRuleListResult
14683}
14684
14685// NextWithContext advances to the next page of values.  If there was an error making
14686// the request the page does not advance and the error is returned.
14687func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
14688	if tracing.IsEnabled() {
14689		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
14690		defer func() {
14691			sc := -1
14692			if page.Response().Response.Response != nil {
14693				sc = page.Response().Response.Response.StatusCode
14694			}
14695			tracing.EndSpan(ctx, sc, err)
14696		}()
14697	}
14698	next, err := page.fn(ctx, page.srlr)
14699	if err != nil {
14700		return err
14701	}
14702	page.srlr = next
14703	return nil
14704}
14705
14706// Next advances to the next page of values.  If there was an error making
14707// the request the page does not advance and the error is returned.
14708// Deprecated: Use NextWithContext() instead.
14709func (page *SecurityRuleListResultPage) Next() error {
14710	return page.NextWithContext(context.Background())
14711}
14712
14713// NotDone returns true if the page enumeration should be started or is not yet complete.
14714func (page SecurityRuleListResultPage) NotDone() bool {
14715	return !page.srlr.IsEmpty()
14716}
14717
14718// Response returns the raw server response from the last page request.
14719func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
14720	return page.srlr
14721}
14722
14723// Values returns the slice of values for the current page or nil if there are no values.
14724func (page SecurityRuleListResultPage) Values() []SecurityRule {
14725	if page.srlr.IsEmpty() {
14726		return nil
14727	}
14728	return *page.srlr.Value
14729}
14730
14731// Creates a new instance of the SecurityRuleListResultPage type.
14732func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
14733	return SecurityRuleListResultPage{fn: getNextPage}
14734}
14735
14736// SecurityRulePropertiesFormat security rule resource.
14737type SecurityRulePropertiesFormat struct {
14738	// Description - A description for this rule. Restricted to 140 chars.
14739	Description *string `json:"description,omitempty"`
14740	// Protocol - Network protocol this rule applies to. Possible values are 'Tcp', 'Udp', and '*'. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolAsterisk'
14741	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
14742	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
14743	SourcePortRange *string `json:"sourcePortRange,omitempty"`
14744	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
14745	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
14746	// 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.
14747	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
14748	// SourceAddressPrefixes - The CIDR or source IP ranges.
14749	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
14750	// SourceApplicationSecurityGroups - The application security group specified as source.
14751	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
14752	// 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.
14753	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
14754	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
14755	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
14756	// DestinationApplicationSecurityGroups - The application security group specified as destination.
14757	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
14758	// SourcePortRanges - The source port ranges.
14759	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
14760	// DestinationPortRanges - The destination port ranges.
14761	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
14762	// Access - The network traffic is allowed or denied. Possible values are: 'Allow' and 'Deny'. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
14763	Access SecurityRuleAccess `json:"access,omitempty"`
14764	// 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.
14765	Priority *int32 `json:"priority,omitempty"`
14766	// 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'
14767	Direction SecurityRuleDirection `json:"direction,omitempty"`
14768	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14769	ProvisioningState *string `json:"provisioningState,omitempty"`
14770}
14771
14772// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14773// long-running operation.
14774type SecurityRulesCreateOrUpdateFuture struct {
14775	azure.Future
14776}
14777
14778// Result returns the result of the asynchronous operation.
14779// If the operation has not completed it will return an error.
14780func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
14781	var done bool
14782	done, err = future.DoneWithContext(context.Background(), client)
14783	if err != nil {
14784		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14785		return
14786	}
14787	if !done {
14788		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
14789		return
14790	}
14791	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14792	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
14793		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
14794		if err != nil {
14795			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
14796		}
14797	}
14798	return
14799}
14800
14801// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14802// operation.
14803type SecurityRulesDeleteFuture struct {
14804	azure.Future
14805}
14806
14807// Result returns the result of the asynchronous operation.
14808// If the operation has not completed it will return an error.
14809func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
14810	var done bool
14811	done, err = future.DoneWithContext(context.Background(), client)
14812	if err != nil {
14813		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
14814		return
14815	}
14816	if !done {
14817		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
14818		return
14819	}
14820	ar.Response = future.Response()
14821	return
14822}
14823
14824// ServiceEndpointPropertiesFormat the service endpoint properties.
14825type ServiceEndpointPropertiesFormat struct {
14826	// Service - The type of the endpoint service.
14827	Service *string `json:"service,omitempty"`
14828	// Locations - A list of locations.
14829	Locations *[]string `json:"locations,omitempty"`
14830	// ProvisioningState - The provisioning state of the resource.
14831	ProvisioningState *string `json:"provisioningState,omitempty"`
14832}
14833
14834// String ...
14835type String struct {
14836	autorest.Response `json:"-"`
14837	Value             *string `json:"value,omitempty"`
14838}
14839
14840// Subnet subnet in a virtual network resource.
14841type Subnet struct {
14842	autorest.Response `json:"-"`
14843	// SubnetPropertiesFormat - Properties of the subnet.
14844	*SubnetPropertiesFormat `json:"properties,omitempty"`
14845	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14846	Name *string `json:"name,omitempty"`
14847	// Etag - A unique read-only string that changes whenever the resource is updated.
14848	Etag *string `json:"etag,omitempty"`
14849	// ID - Resource ID.
14850	ID *string `json:"id,omitempty"`
14851}
14852
14853// MarshalJSON is the custom marshaler for Subnet.
14854func (s Subnet) MarshalJSON() ([]byte, error) {
14855	objectMap := make(map[string]interface{})
14856	if s.SubnetPropertiesFormat != nil {
14857		objectMap["properties"] = s.SubnetPropertiesFormat
14858	}
14859	if s.Name != nil {
14860		objectMap["name"] = s.Name
14861	}
14862	if s.Etag != nil {
14863		objectMap["etag"] = s.Etag
14864	}
14865	if s.ID != nil {
14866		objectMap["id"] = s.ID
14867	}
14868	return json.Marshal(objectMap)
14869}
14870
14871// UnmarshalJSON is the custom unmarshaler for Subnet struct.
14872func (s *Subnet) UnmarshalJSON(body []byte) error {
14873	var m map[string]*json.RawMessage
14874	err := json.Unmarshal(body, &m)
14875	if err != nil {
14876		return err
14877	}
14878	for k, v := range m {
14879		switch k {
14880		case "properties":
14881			if v != nil {
14882				var subnetPropertiesFormat SubnetPropertiesFormat
14883				err = json.Unmarshal(*v, &subnetPropertiesFormat)
14884				if err != nil {
14885					return err
14886				}
14887				s.SubnetPropertiesFormat = &subnetPropertiesFormat
14888			}
14889		case "name":
14890			if v != nil {
14891				var name string
14892				err = json.Unmarshal(*v, &name)
14893				if err != nil {
14894					return err
14895				}
14896				s.Name = &name
14897			}
14898		case "etag":
14899			if v != nil {
14900				var etag string
14901				err = json.Unmarshal(*v, &etag)
14902				if err != nil {
14903					return err
14904				}
14905				s.Etag = &etag
14906			}
14907		case "id":
14908			if v != nil {
14909				var ID string
14910				err = json.Unmarshal(*v, &ID)
14911				if err != nil {
14912					return err
14913				}
14914				s.ID = &ID
14915			}
14916		}
14917	}
14918
14919	return nil
14920}
14921
14922// SubnetAssociation network interface and its custom security rules.
14923type SubnetAssociation struct {
14924	// ID - READ-ONLY; Subnet ID.
14925	ID *string `json:"id,omitempty"`
14926	// SecurityRules - Collection of custom security rules.
14927	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
14928}
14929
14930// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
14931// network
14932type SubnetListResult struct {
14933	autorest.Response `json:"-"`
14934	// Value - The subnets in a virtual network.
14935	Value *[]Subnet `json:"value,omitempty"`
14936	// NextLink - The URL to get the next set of results.
14937	NextLink *string `json:"nextLink,omitempty"`
14938}
14939
14940// SubnetListResultIterator provides access to a complete listing of Subnet values.
14941type SubnetListResultIterator struct {
14942	i    int
14943	page SubnetListResultPage
14944}
14945
14946// NextWithContext advances to the next value.  If there was an error making
14947// the request the iterator does not advance and the error is returned.
14948func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
14949	if tracing.IsEnabled() {
14950		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
14951		defer func() {
14952			sc := -1
14953			if iter.Response().Response.Response != nil {
14954				sc = iter.Response().Response.Response.StatusCode
14955			}
14956			tracing.EndSpan(ctx, sc, err)
14957		}()
14958	}
14959	iter.i++
14960	if iter.i < len(iter.page.Values()) {
14961		return nil
14962	}
14963	err = iter.page.NextWithContext(ctx)
14964	if err != nil {
14965		iter.i--
14966		return err
14967	}
14968	iter.i = 0
14969	return nil
14970}
14971
14972// Next advances to the next value.  If there was an error making
14973// the request the iterator does not advance and the error is returned.
14974// Deprecated: Use NextWithContext() instead.
14975func (iter *SubnetListResultIterator) Next() error {
14976	return iter.NextWithContext(context.Background())
14977}
14978
14979// NotDone returns true if the enumeration should be started or is not yet complete.
14980func (iter SubnetListResultIterator) NotDone() bool {
14981	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14982}
14983
14984// Response returns the raw server response from the last page request.
14985func (iter SubnetListResultIterator) Response() SubnetListResult {
14986	return iter.page.Response()
14987}
14988
14989// Value returns the current value or a zero-initialized value if the
14990// iterator has advanced beyond the end of the collection.
14991func (iter SubnetListResultIterator) Value() Subnet {
14992	if !iter.page.NotDone() {
14993		return Subnet{}
14994	}
14995	return iter.page.Values()[iter.i]
14996}
14997
14998// Creates a new instance of the SubnetListResultIterator type.
14999func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
15000	return SubnetListResultIterator{page: page}
15001}
15002
15003// IsEmpty returns true if the ListResult contains no values.
15004func (slr SubnetListResult) IsEmpty() bool {
15005	return slr.Value == nil || len(*slr.Value) == 0
15006}
15007
15008// subnetListResultPreparer prepares a request to retrieve the next set of results.
15009// It returns nil if no more results exist.
15010func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
15011	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
15012		return nil, nil
15013	}
15014	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15015		autorest.AsJSON(),
15016		autorest.AsGet(),
15017		autorest.WithBaseURL(to.String(slr.NextLink)))
15018}
15019
15020// SubnetListResultPage contains a page of Subnet values.
15021type SubnetListResultPage struct {
15022	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
15023	slr SubnetListResult
15024}
15025
15026// NextWithContext advances to the next page of values.  If there was an error making
15027// the request the page does not advance and the error is returned.
15028func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
15029	if tracing.IsEnabled() {
15030		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
15031		defer func() {
15032			sc := -1
15033			if page.Response().Response.Response != nil {
15034				sc = page.Response().Response.Response.StatusCode
15035			}
15036			tracing.EndSpan(ctx, sc, err)
15037		}()
15038	}
15039	next, err := page.fn(ctx, page.slr)
15040	if err != nil {
15041		return err
15042	}
15043	page.slr = next
15044	return nil
15045}
15046
15047// Next advances to the next page of values.  If there was an error making
15048// the request the page does not advance and the error is returned.
15049// Deprecated: Use NextWithContext() instead.
15050func (page *SubnetListResultPage) Next() error {
15051	return page.NextWithContext(context.Background())
15052}
15053
15054// NotDone returns true if the page enumeration should be started or is not yet complete.
15055func (page SubnetListResultPage) NotDone() bool {
15056	return !page.slr.IsEmpty()
15057}
15058
15059// Response returns the raw server response from the last page request.
15060func (page SubnetListResultPage) Response() SubnetListResult {
15061	return page.slr
15062}
15063
15064// Values returns the slice of values for the current page or nil if there are no values.
15065func (page SubnetListResultPage) Values() []Subnet {
15066	if page.slr.IsEmpty() {
15067		return nil
15068	}
15069	return *page.slr.Value
15070}
15071
15072// Creates a new instance of the SubnetListResultPage type.
15073func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
15074	return SubnetListResultPage{fn: getNextPage}
15075}
15076
15077// SubnetPropertiesFormat properties of the subnet.
15078type SubnetPropertiesFormat struct {
15079	// AddressPrefix - The address prefix for the subnet.
15080	AddressPrefix *string `json:"addressPrefix,omitempty"`
15081	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
15082	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
15083	// RouteTable - The reference of the RouteTable resource.
15084	RouteTable *RouteTable `json:"routeTable,omitempty"`
15085	// ServiceEndpoints - An array of service endpoints.
15086	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
15087	// IPConfigurations - READ-ONLY; Gets an array of references to the network interface IP configurations using subnet.
15088	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
15089	// ResourceNavigationLinks - Gets an array of references to the external resources using subnet.
15090	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
15091	// ProvisioningState - The provisioning state of the resource.
15092	ProvisioningState *string `json:"provisioningState,omitempty"`
15093}
15094
15095// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
15096// operation.
15097type SubnetsCreateOrUpdateFuture struct {
15098	azure.Future
15099}
15100
15101// Result returns the result of the asynchronous operation.
15102// If the operation has not completed it will return an error.
15103func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
15104	var done bool
15105	done, err = future.DoneWithContext(context.Background(), client)
15106	if err != nil {
15107		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15108		return
15109	}
15110	if !done {
15111		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
15112		return
15113	}
15114	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15115	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
15116		s, err = client.CreateOrUpdateResponder(s.Response.Response)
15117		if err != nil {
15118			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
15119		}
15120	}
15121	return
15122}
15123
15124// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
15125// operation.
15126type SubnetsDeleteFuture struct {
15127	azure.Future
15128}
15129
15130// Result returns the result of the asynchronous operation.
15131// If the operation has not completed it will return an error.
15132func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
15133	var done bool
15134	done, err = future.DoneWithContext(context.Background(), client)
15135	if err != nil {
15136		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
15137		return
15138	}
15139	if !done {
15140		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
15141		return
15142	}
15143	ar.Response = future.Response()
15144	return
15145}
15146
15147// SubResource reference to another subresource.
15148type SubResource struct {
15149	// ID - Resource ID.
15150	ID *string `json:"id,omitempty"`
15151}
15152
15153// TagsObject tags object for patch operations.
15154type TagsObject struct {
15155	// Tags - Resource tags.
15156	Tags map[string]*string `json:"tags"`
15157}
15158
15159// MarshalJSON is the custom marshaler for TagsObject.
15160func (toVar TagsObject) MarshalJSON() ([]byte, error) {
15161	objectMap := make(map[string]interface{})
15162	if toVar.Tags != nil {
15163		objectMap["tags"] = toVar.Tags
15164	}
15165	return json.Marshal(objectMap)
15166}
15167
15168// Topology topology of the specified resource group.
15169type Topology struct {
15170	autorest.Response `json:"-"`
15171	// ID - READ-ONLY; GUID representing the operation id.
15172	ID *string `json:"id,omitempty"`
15173	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
15174	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
15175	// LastModified - READ-ONLY; The datetime when the topology was last modified.
15176	LastModified *date.Time          `json:"lastModified,omitempty"`
15177	Resources    *[]TopologyResource `json:"resources,omitempty"`
15178}
15179
15180// TopologyAssociation resources that have an association with the parent resource.
15181type TopologyAssociation struct {
15182	// Name - The name of the resource that is associated with the parent resource.
15183	Name *string `json:"name,omitempty"`
15184	// ResourceID - The ID of the resource that is associated with the parent resource.
15185	ResourceID *string `json:"resourceId,omitempty"`
15186	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
15187	AssociationType AssociationType `json:"associationType,omitempty"`
15188}
15189
15190// TopologyParameters parameters that define the representation of topology.
15191type TopologyParameters struct {
15192	// TargetResourceGroupName - The name of the target resource group to perform topology on.
15193	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
15194	// TargetVirtualNetwork - The reference of the Virtual Network resource.
15195	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
15196	// TargetSubnet - The reference of the Subnet resource.
15197	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
15198}
15199
15200// TopologyResource the network resource topology information for the given resource group.
15201type TopologyResource struct {
15202	// Name - Name of the resource.
15203	Name *string `json:"name,omitempty"`
15204	// ID - ID of the resource.
15205	ID *string `json:"id,omitempty"`
15206	// Location - Resource location.
15207	Location *string `json:"location,omitempty"`
15208	// Associations - Holds the associations the resource has with other resources in the resource group.
15209	Associations *[]TopologyAssociation `json:"associations,omitempty"`
15210}
15211
15212// TroubleshootingDetails information gained from troubleshooting of specified resource.
15213type TroubleshootingDetails struct {
15214	// ID - The id of the get troubleshoot operation.
15215	ID *string `json:"id,omitempty"`
15216	// ReasonType - Reason type of failure.
15217	ReasonType *string `json:"reasonType,omitempty"`
15218	// Summary - A summary of troubleshooting.
15219	Summary *string `json:"summary,omitempty"`
15220	// Detail - Details on troubleshooting results.
15221	Detail *string `json:"detail,omitempty"`
15222	// RecommendedActions - List of recommended actions.
15223	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
15224}
15225
15226// TroubleshootingParameters parameters that define the resource to troubleshoot.
15227type TroubleshootingParameters struct {
15228	// TargetResourceID - The target resource to troubleshoot.
15229	TargetResourceID           *string `json:"targetResourceId,omitempty"`
15230	*TroubleshootingProperties `json:"properties,omitempty"`
15231}
15232
15233// MarshalJSON is the custom marshaler for TroubleshootingParameters.
15234func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
15235	objectMap := make(map[string]interface{})
15236	if tp.TargetResourceID != nil {
15237		objectMap["targetResourceId"] = tp.TargetResourceID
15238	}
15239	if tp.TroubleshootingProperties != nil {
15240		objectMap["properties"] = tp.TroubleshootingProperties
15241	}
15242	return json.Marshal(objectMap)
15243}
15244
15245// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
15246func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
15247	var m map[string]*json.RawMessage
15248	err := json.Unmarshal(body, &m)
15249	if err != nil {
15250		return err
15251	}
15252	for k, v := range m {
15253		switch k {
15254		case "targetResourceId":
15255			if v != nil {
15256				var targetResourceID string
15257				err = json.Unmarshal(*v, &targetResourceID)
15258				if err != nil {
15259					return err
15260				}
15261				tp.TargetResourceID = &targetResourceID
15262			}
15263		case "properties":
15264			if v != nil {
15265				var troubleshootingProperties TroubleshootingProperties
15266				err = json.Unmarshal(*v, &troubleshootingProperties)
15267				if err != nil {
15268					return err
15269				}
15270				tp.TroubleshootingProperties = &troubleshootingProperties
15271			}
15272		}
15273	}
15274
15275	return nil
15276}
15277
15278// TroubleshootingProperties storage location provided for troubleshoot.
15279type TroubleshootingProperties struct {
15280	// StorageID - The ID for the storage account to save the troubleshoot result.
15281	StorageID *string `json:"storageId,omitempty"`
15282	// StoragePath - The path to the blob to save the troubleshoot result in.
15283	StoragePath *string `json:"storagePath,omitempty"`
15284}
15285
15286// TroubleshootingRecommendedActions recommended actions based on discovered issues.
15287type TroubleshootingRecommendedActions struct {
15288	// ActionID - ID of the recommended action.
15289	ActionID *string `json:"actionId,omitempty"`
15290	// ActionText - Description of recommended actions.
15291	ActionText *string `json:"actionText,omitempty"`
15292	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
15293	ActionURI *string `json:"actionUri,omitempty"`
15294	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
15295	ActionURIText *string `json:"actionUriText,omitempty"`
15296}
15297
15298// TroubleshootingResult troubleshooting information gained from specified resource.
15299type TroubleshootingResult struct {
15300	autorest.Response `json:"-"`
15301	// StartTime - The start time of the troubleshooting.
15302	StartTime *date.Time `json:"startTime,omitempty"`
15303	// EndTime - The end time of the troubleshooting.
15304	EndTime *date.Time `json:"endTime,omitempty"`
15305	// Code - The result code of the troubleshooting.
15306	Code *string `json:"code,omitempty"`
15307	// Results - Information from troubleshooting.
15308	Results *[]TroubleshootingDetails `json:"results,omitempty"`
15309}
15310
15311// TunnelConnectionHealth virtualNetworkGatewayConnection properties
15312type TunnelConnectionHealth struct {
15313	// Tunnel - READ-ONLY; Tunnel name.
15314	Tunnel *string `json:"tunnel,omitempty"`
15315	// ConnectionStatus - READ-ONLY; Virtual network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
15316	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
15317	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection
15318	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
15319	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection
15320	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
15321	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
15322	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
15323}
15324
15325// Usage describes network resource usage.
15326type Usage struct {
15327	// ID - READ-ONLY; Resource identifier.
15328	ID *string `json:"id,omitempty"`
15329	// Unit - An enum describing the unit of measurement.
15330	Unit *string `json:"unit,omitempty"`
15331	// CurrentValue - The current value of the usage.
15332	CurrentValue *int64 `json:"currentValue,omitempty"`
15333	// Limit - The limit of usage.
15334	Limit *int64 `json:"limit,omitempty"`
15335	// Name - The name of the type of usage.
15336	Name *UsageName `json:"name,omitempty"`
15337}
15338
15339// UsageName the usage names.
15340type UsageName struct {
15341	// Value - A string describing the resource name.
15342	Value *string `json:"value,omitempty"`
15343	// LocalizedValue - A localized string describing the resource name.
15344	LocalizedValue *string `json:"localizedValue,omitempty"`
15345}
15346
15347// UsagesListResult the list usages operation response.
15348type UsagesListResult struct {
15349	autorest.Response `json:"-"`
15350	// Value - The list network resource usages.
15351	Value *[]Usage `json:"value,omitempty"`
15352	// NextLink - URL to get the next set of results.
15353	NextLink *string `json:"nextLink,omitempty"`
15354}
15355
15356// UsagesListResultIterator provides access to a complete listing of Usage values.
15357type UsagesListResultIterator struct {
15358	i    int
15359	page UsagesListResultPage
15360}
15361
15362// NextWithContext advances to the next value.  If there was an error making
15363// the request the iterator does not advance and the error is returned.
15364func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
15365	if tracing.IsEnabled() {
15366		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
15367		defer func() {
15368			sc := -1
15369			if iter.Response().Response.Response != nil {
15370				sc = iter.Response().Response.Response.StatusCode
15371			}
15372			tracing.EndSpan(ctx, sc, err)
15373		}()
15374	}
15375	iter.i++
15376	if iter.i < len(iter.page.Values()) {
15377		return nil
15378	}
15379	err = iter.page.NextWithContext(ctx)
15380	if err != nil {
15381		iter.i--
15382		return err
15383	}
15384	iter.i = 0
15385	return nil
15386}
15387
15388// Next advances to the next value.  If there was an error making
15389// the request the iterator does not advance and the error is returned.
15390// Deprecated: Use NextWithContext() instead.
15391func (iter *UsagesListResultIterator) Next() error {
15392	return iter.NextWithContext(context.Background())
15393}
15394
15395// NotDone returns true if the enumeration should be started or is not yet complete.
15396func (iter UsagesListResultIterator) NotDone() bool {
15397	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15398}
15399
15400// Response returns the raw server response from the last page request.
15401func (iter UsagesListResultIterator) Response() UsagesListResult {
15402	return iter.page.Response()
15403}
15404
15405// Value returns the current value or a zero-initialized value if the
15406// iterator has advanced beyond the end of the collection.
15407func (iter UsagesListResultIterator) Value() Usage {
15408	if !iter.page.NotDone() {
15409		return Usage{}
15410	}
15411	return iter.page.Values()[iter.i]
15412}
15413
15414// Creates a new instance of the UsagesListResultIterator type.
15415func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
15416	return UsagesListResultIterator{page: page}
15417}
15418
15419// IsEmpty returns true if the ListResult contains no values.
15420func (ulr UsagesListResult) IsEmpty() bool {
15421	return ulr.Value == nil || len(*ulr.Value) == 0
15422}
15423
15424// usagesListResultPreparer prepares a request to retrieve the next set of results.
15425// It returns nil if no more results exist.
15426func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
15427	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
15428		return nil, nil
15429	}
15430	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15431		autorest.AsJSON(),
15432		autorest.AsGet(),
15433		autorest.WithBaseURL(to.String(ulr.NextLink)))
15434}
15435
15436// UsagesListResultPage contains a page of Usage values.
15437type UsagesListResultPage struct {
15438	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
15439	ulr UsagesListResult
15440}
15441
15442// NextWithContext advances to the next page of values.  If there was an error making
15443// the request the page does not advance and the error is returned.
15444func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
15445	if tracing.IsEnabled() {
15446		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
15447		defer func() {
15448			sc := -1
15449			if page.Response().Response.Response != nil {
15450				sc = page.Response().Response.Response.StatusCode
15451			}
15452			tracing.EndSpan(ctx, sc, err)
15453		}()
15454	}
15455	next, err := page.fn(ctx, page.ulr)
15456	if err != nil {
15457		return err
15458	}
15459	page.ulr = next
15460	return nil
15461}
15462
15463// Next advances to the next page of values.  If there was an error making
15464// the request the page does not advance and the error is returned.
15465// Deprecated: Use NextWithContext() instead.
15466func (page *UsagesListResultPage) Next() error {
15467	return page.NextWithContext(context.Background())
15468}
15469
15470// NotDone returns true if the page enumeration should be started or is not yet complete.
15471func (page UsagesListResultPage) NotDone() bool {
15472	return !page.ulr.IsEmpty()
15473}
15474
15475// Response returns the raw server response from the last page request.
15476func (page UsagesListResultPage) Response() UsagesListResult {
15477	return page.ulr
15478}
15479
15480// Values returns the slice of values for the current page or nil if there are no values.
15481func (page UsagesListResultPage) Values() []Usage {
15482	if page.ulr.IsEmpty() {
15483		return nil
15484	}
15485	return *page.ulr.Value
15486}
15487
15488// Creates a new instance of the UsagesListResultPage type.
15489func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
15490	return UsagesListResultPage{fn: getNextPage}
15491}
15492
15493// VerificationIPFlowParameters parameters that define the IP flow to be verified.
15494type VerificationIPFlowParameters struct {
15495	// TargetResourceID - The ID of the target resource to perform next-hop on.
15496	TargetResourceID *string `json:"targetResourceId,omitempty"`
15497	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
15498	Direction Direction `json:"direction,omitempty"`
15499	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
15500	Protocol IPFlowProtocol `json:"protocol,omitempty"`
15501	// 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.
15502	LocalPort *string `json:"localPort,omitempty"`
15503	// 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.
15504	RemotePort *string `json:"remotePort,omitempty"`
15505	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
15506	LocalIPAddress *string `json:"localIPAddress,omitempty"`
15507	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
15508	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
15509	// 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).
15510	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
15511}
15512
15513// VerificationIPFlowResult results of IP flow verification on the target resource.
15514type VerificationIPFlowResult struct {
15515	autorest.Response `json:"-"`
15516	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
15517	Access Access `json:"access,omitempty"`
15518	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
15519	RuleName *string `json:"ruleName,omitempty"`
15520}
15521
15522// VirtualNetwork virtual Network resource.
15523type VirtualNetwork struct {
15524	autorest.Response `json:"-"`
15525	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
15526	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
15527	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
15528	Etag *string `json:"etag,omitempty"`
15529	// ID - Resource ID.
15530	ID *string `json:"id,omitempty"`
15531	// Name - READ-ONLY; Resource name.
15532	Name *string `json:"name,omitempty"`
15533	// Type - READ-ONLY; Resource type.
15534	Type *string `json:"type,omitempty"`
15535	// Location - Resource location.
15536	Location *string `json:"location,omitempty"`
15537	// Tags - Resource tags.
15538	Tags map[string]*string `json:"tags"`
15539}
15540
15541// MarshalJSON is the custom marshaler for VirtualNetwork.
15542func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
15543	objectMap := make(map[string]interface{})
15544	if vn.VirtualNetworkPropertiesFormat != nil {
15545		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
15546	}
15547	if vn.Etag != nil {
15548		objectMap["etag"] = vn.Etag
15549	}
15550	if vn.ID != nil {
15551		objectMap["id"] = vn.ID
15552	}
15553	if vn.Location != nil {
15554		objectMap["location"] = vn.Location
15555	}
15556	if vn.Tags != nil {
15557		objectMap["tags"] = vn.Tags
15558	}
15559	return json.Marshal(objectMap)
15560}
15561
15562// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
15563func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
15564	var m map[string]*json.RawMessage
15565	err := json.Unmarshal(body, &m)
15566	if err != nil {
15567		return err
15568	}
15569	for k, v := range m {
15570		switch k {
15571		case "properties":
15572			if v != nil {
15573				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
15574				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
15575				if err != nil {
15576					return err
15577				}
15578				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
15579			}
15580		case "etag":
15581			if v != nil {
15582				var etag string
15583				err = json.Unmarshal(*v, &etag)
15584				if err != nil {
15585					return err
15586				}
15587				vn.Etag = &etag
15588			}
15589		case "id":
15590			if v != nil {
15591				var ID string
15592				err = json.Unmarshal(*v, &ID)
15593				if err != nil {
15594					return err
15595				}
15596				vn.ID = &ID
15597			}
15598		case "name":
15599			if v != nil {
15600				var name string
15601				err = json.Unmarshal(*v, &name)
15602				if err != nil {
15603					return err
15604				}
15605				vn.Name = &name
15606			}
15607		case "type":
15608			if v != nil {
15609				var typeVar string
15610				err = json.Unmarshal(*v, &typeVar)
15611				if err != nil {
15612					return err
15613				}
15614				vn.Type = &typeVar
15615			}
15616		case "location":
15617			if v != nil {
15618				var location string
15619				err = json.Unmarshal(*v, &location)
15620				if err != nil {
15621					return err
15622				}
15623				vn.Location = &location
15624			}
15625		case "tags":
15626			if v != nil {
15627				var tags map[string]*string
15628				err = json.Unmarshal(*v, &tags)
15629				if err != nil {
15630					return err
15631				}
15632				vn.Tags = tags
15633			}
15634		}
15635	}
15636
15637	return nil
15638}
15639
15640// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
15641// resource.
15642type VirtualNetworkConnectionGatewayReference struct {
15643	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
15644	ID *string `json:"id,omitempty"`
15645}
15646
15647// VirtualNetworkGateway a common class for general resource information
15648type VirtualNetworkGateway struct {
15649	autorest.Response `json:"-"`
15650	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
15651	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
15652	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
15653	Etag *string `json:"etag,omitempty"`
15654	// ID - Resource ID.
15655	ID *string `json:"id,omitempty"`
15656	// Name - READ-ONLY; Resource name.
15657	Name *string `json:"name,omitempty"`
15658	// Type - READ-ONLY; Resource type.
15659	Type *string `json:"type,omitempty"`
15660	// Location - Resource location.
15661	Location *string `json:"location,omitempty"`
15662	// Tags - Resource tags.
15663	Tags map[string]*string `json:"tags"`
15664}
15665
15666// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
15667func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
15668	objectMap := make(map[string]interface{})
15669	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
15670		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
15671	}
15672	if vng.Etag != nil {
15673		objectMap["etag"] = vng.Etag
15674	}
15675	if vng.ID != nil {
15676		objectMap["id"] = vng.ID
15677	}
15678	if vng.Location != nil {
15679		objectMap["location"] = vng.Location
15680	}
15681	if vng.Tags != nil {
15682		objectMap["tags"] = vng.Tags
15683	}
15684	return json.Marshal(objectMap)
15685}
15686
15687// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
15688func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
15689	var m map[string]*json.RawMessage
15690	err := json.Unmarshal(body, &m)
15691	if err != nil {
15692		return err
15693	}
15694	for k, v := range m {
15695		switch k {
15696		case "properties":
15697			if v != nil {
15698				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
15699				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
15700				if err != nil {
15701					return err
15702				}
15703				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
15704			}
15705		case "etag":
15706			if v != nil {
15707				var etag string
15708				err = json.Unmarshal(*v, &etag)
15709				if err != nil {
15710					return err
15711				}
15712				vng.Etag = &etag
15713			}
15714		case "id":
15715			if v != nil {
15716				var ID string
15717				err = json.Unmarshal(*v, &ID)
15718				if err != nil {
15719					return err
15720				}
15721				vng.ID = &ID
15722			}
15723		case "name":
15724			if v != nil {
15725				var name string
15726				err = json.Unmarshal(*v, &name)
15727				if err != nil {
15728					return err
15729				}
15730				vng.Name = &name
15731			}
15732		case "type":
15733			if v != nil {
15734				var typeVar string
15735				err = json.Unmarshal(*v, &typeVar)
15736				if err != nil {
15737					return err
15738				}
15739				vng.Type = &typeVar
15740			}
15741		case "location":
15742			if v != nil {
15743				var location string
15744				err = json.Unmarshal(*v, &location)
15745				if err != nil {
15746					return err
15747				}
15748				vng.Location = &location
15749			}
15750		case "tags":
15751			if v != nil {
15752				var tags map[string]*string
15753				err = json.Unmarshal(*v, &tags)
15754				if err != nil {
15755					return err
15756				}
15757				vng.Tags = tags
15758			}
15759		}
15760	}
15761
15762	return nil
15763}
15764
15765// VirtualNetworkGatewayConnection a common class for general resource information
15766type VirtualNetworkGatewayConnection struct {
15767	autorest.Response `json:"-"`
15768	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
15769	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
15770	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
15771	Etag *string `json:"etag,omitempty"`
15772	// ID - Resource ID.
15773	ID *string `json:"id,omitempty"`
15774	// Name - READ-ONLY; Resource name.
15775	Name *string `json:"name,omitempty"`
15776	// Type - READ-ONLY; Resource type.
15777	Type *string `json:"type,omitempty"`
15778	// Location - Resource location.
15779	Location *string `json:"location,omitempty"`
15780	// Tags - Resource tags.
15781	Tags map[string]*string `json:"tags"`
15782}
15783
15784// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
15785func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
15786	objectMap := make(map[string]interface{})
15787	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
15788		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
15789	}
15790	if vngc.Etag != nil {
15791		objectMap["etag"] = vngc.Etag
15792	}
15793	if vngc.ID != nil {
15794		objectMap["id"] = vngc.ID
15795	}
15796	if vngc.Location != nil {
15797		objectMap["location"] = vngc.Location
15798	}
15799	if vngc.Tags != nil {
15800		objectMap["tags"] = vngc.Tags
15801	}
15802	return json.Marshal(objectMap)
15803}
15804
15805// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
15806func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
15807	var m map[string]*json.RawMessage
15808	err := json.Unmarshal(body, &m)
15809	if err != nil {
15810		return err
15811	}
15812	for k, v := range m {
15813		switch k {
15814		case "properties":
15815			if v != nil {
15816				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
15817				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
15818				if err != nil {
15819					return err
15820				}
15821				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
15822			}
15823		case "etag":
15824			if v != nil {
15825				var etag string
15826				err = json.Unmarshal(*v, &etag)
15827				if err != nil {
15828					return err
15829				}
15830				vngc.Etag = &etag
15831			}
15832		case "id":
15833			if v != nil {
15834				var ID string
15835				err = json.Unmarshal(*v, &ID)
15836				if err != nil {
15837					return err
15838				}
15839				vngc.ID = &ID
15840			}
15841		case "name":
15842			if v != nil {
15843				var name string
15844				err = json.Unmarshal(*v, &name)
15845				if err != nil {
15846					return err
15847				}
15848				vngc.Name = &name
15849			}
15850		case "type":
15851			if v != nil {
15852				var typeVar string
15853				err = json.Unmarshal(*v, &typeVar)
15854				if err != nil {
15855					return err
15856				}
15857				vngc.Type = &typeVar
15858			}
15859		case "location":
15860			if v != nil {
15861				var location string
15862				err = json.Unmarshal(*v, &location)
15863				if err != nil {
15864					return err
15865				}
15866				vngc.Location = &location
15867			}
15868		case "tags":
15869			if v != nil {
15870				var tags map[string]*string
15871				err = json.Unmarshal(*v, &tags)
15872				if err != nil {
15873					return err
15874				}
15875				vngc.Tags = tags
15876			}
15877		}
15878	}
15879
15880	return nil
15881}
15882
15883// VirtualNetworkGatewayConnectionListEntity a common class for general resource information
15884type VirtualNetworkGatewayConnectionListEntity struct {
15885	autorest.Response `json:"-"`
15886	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
15887	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
15888	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
15889	Etag *string `json:"etag,omitempty"`
15890	// ID - Resource ID.
15891	ID *string `json:"id,omitempty"`
15892	// Name - READ-ONLY; Resource name.
15893	Name *string `json:"name,omitempty"`
15894	// Type - READ-ONLY; Resource type.
15895	Type *string `json:"type,omitempty"`
15896	// Location - Resource location.
15897	Location *string `json:"location,omitempty"`
15898	// Tags - Resource tags.
15899	Tags map[string]*string `json:"tags"`
15900}
15901
15902// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
15903func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
15904	objectMap := make(map[string]interface{})
15905	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
15906		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
15907	}
15908	if vngcle.Etag != nil {
15909		objectMap["etag"] = vngcle.Etag
15910	}
15911	if vngcle.ID != nil {
15912		objectMap["id"] = vngcle.ID
15913	}
15914	if vngcle.Location != nil {
15915		objectMap["location"] = vngcle.Location
15916	}
15917	if vngcle.Tags != nil {
15918		objectMap["tags"] = vngcle.Tags
15919	}
15920	return json.Marshal(objectMap)
15921}
15922
15923// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
15924func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
15925	var m map[string]*json.RawMessage
15926	err := json.Unmarshal(body, &m)
15927	if err != nil {
15928		return err
15929	}
15930	for k, v := range m {
15931		switch k {
15932		case "properties":
15933			if v != nil {
15934				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
15935				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
15936				if err != nil {
15937					return err
15938				}
15939				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
15940			}
15941		case "etag":
15942			if v != nil {
15943				var etag string
15944				err = json.Unmarshal(*v, &etag)
15945				if err != nil {
15946					return err
15947				}
15948				vngcle.Etag = &etag
15949			}
15950		case "id":
15951			if v != nil {
15952				var ID string
15953				err = json.Unmarshal(*v, &ID)
15954				if err != nil {
15955					return err
15956				}
15957				vngcle.ID = &ID
15958			}
15959		case "name":
15960			if v != nil {
15961				var name string
15962				err = json.Unmarshal(*v, &name)
15963				if err != nil {
15964					return err
15965				}
15966				vngcle.Name = &name
15967			}
15968		case "type":
15969			if v != nil {
15970				var typeVar string
15971				err = json.Unmarshal(*v, &typeVar)
15972				if err != nil {
15973					return err
15974				}
15975				vngcle.Type = &typeVar
15976			}
15977		case "location":
15978			if v != nil {
15979				var location string
15980				err = json.Unmarshal(*v, &location)
15981				if err != nil {
15982					return err
15983				}
15984				vngcle.Location = &location
15985			}
15986		case "tags":
15987			if v != nil {
15988				var tags map[string]*string
15989				err = json.Unmarshal(*v, &tags)
15990				if err != nil {
15991					return err
15992				}
15993				vngcle.Tags = tags
15994			}
15995		}
15996	}
15997
15998	return nil
15999}
16000
16001// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties
16002type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
16003	// AuthorizationKey - The authorizationKey.
16004	AuthorizationKey *string `json:"authorizationKey,omitempty"`
16005	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
16006	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
16007	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
16008	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
16009	// LocalNetworkGateway2 - The reference to local network gateway resource.
16010	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
16011	// ConnectionType - Gateway connection type. Possible values are: 'IPsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
16012	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
16013	// RoutingWeight - The routing weight.
16014	RoutingWeight *int32 `json:"routingWeight,omitempty"`
16015	// SharedKey - The IPSec shared key.
16016	SharedKey *string `json:"sharedKey,omitempty"`
16017	// ConnectionStatus - READ-ONLY; Virtual network Gateway connection status. Possible values are 'Unknown', 'Connecting', 'Connected' and 'NotConnected'. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
16018	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
16019	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
16020	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
16021	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
16022	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
16023	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
16024	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
16025	// Peer - The reference to peerings resource.
16026	Peer *SubResource `json:"peer,omitempty"`
16027	// EnableBgp - EnableBgp flag
16028	EnableBgp *bool `json:"enableBgp,omitempty"`
16029	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
16030	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
16031	// IpsecPolicies - The IPSec Policies to be considered by this connection.
16032	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
16033	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
16034	ResourceGUID *string `json:"resourceGuid,omitempty"`
16035	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
16036	ProvisioningState *string `json:"provisioningState,omitempty"`
16037}
16038
16039// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
16040// service call
16041type VirtualNetworkGatewayConnectionListResult struct {
16042	autorest.Response `json:"-"`
16043	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
16044	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
16045	// NextLink - READ-ONLY; The URL to get the next set of results.
16046	NextLink *string `json:"nextLink,omitempty"`
16047}
16048
16049// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
16050// VirtualNetworkGatewayConnection values.
16051type VirtualNetworkGatewayConnectionListResultIterator struct {
16052	i    int
16053	page VirtualNetworkGatewayConnectionListResultPage
16054}
16055
16056// NextWithContext advances to the next value.  If there was an error making
16057// the request the iterator does not advance and the error is returned.
16058func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
16059	if tracing.IsEnabled() {
16060		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
16061		defer func() {
16062			sc := -1
16063			if iter.Response().Response.Response != nil {
16064				sc = iter.Response().Response.Response.StatusCode
16065			}
16066			tracing.EndSpan(ctx, sc, err)
16067		}()
16068	}
16069	iter.i++
16070	if iter.i < len(iter.page.Values()) {
16071		return nil
16072	}
16073	err = iter.page.NextWithContext(ctx)
16074	if err != nil {
16075		iter.i--
16076		return err
16077	}
16078	iter.i = 0
16079	return nil
16080}
16081
16082// Next advances to the next value.  If there was an error making
16083// the request the iterator does not advance and the error is returned.
16084// Deprecated: Use NextWithContext() instead.
16085func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
16086	return iter.NextWithContext(context.Background())
16087}
16088
16089// NotDone returns true if the enumeration should be started or is not yet complete.
16090func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
16091	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16092}
16093
16094// Response returns the raw server response from the last page request.
16095func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
16096	return iter.page.Response()
16097}
16098
16099// Value returns the current value or a zero-initialized value if the
16100// iterator has advanced beyond the end of the collection.
16101func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
16102	if !iter.page.NotDone() {
16103		return VirtualNetworkGatewayConnection{}
16104	}
16105	return iter.page.Values()[iter.i]
16106}
16107
16108// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
16109func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
16110	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
16111}
16112
16113// IsEmpty returns true if the ListResult contains no values.
16114func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
16115	return vngclr.Value == nil || len(*vngclr.Value) == 0
16116}
16117
16118// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
16119// It returns nil if no more results exist.
16120func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
16121	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
16122		return nil, nil
16123	}
16124	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16125		autorest.AsJSON(),
16126		autorest.AsGet(),
16127		autorest.WithBaseURL(to.String(vngclr.NextLink)))
16128}
16129
16130// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
16131type VirtualNetworkGatewayConnectionListResultPage struct {
16132	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
16133	vngclr VirtualNetworkGatewayConnectionListResult
16134}
16135
16136// NextWithContext advances to the next page of values.  If there was an error making
16137// the request the page does not advance and the error is returned.
16138func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
16139	if tracing.IsEnabled() {
16140		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
16141		defer func() {
16142			sc := -1
16143			if page.Response().Response.Response != nil {
16144				sc = page.Response().Response.Response.StatusCode
16145			}
16146			tracing.EndSpan(ctx, sc, err)
16147		}()
16148	}
16149	next, err := page.fn(ctx, page.vngclr)
16150	if err != nil {
16151		return err
16152	}
16153	page.vngclr = next
16154	return nil
16155}
16156
16157// Next advances to the next page of values.  If there was an error making
16158// the request the page does not advance and the error is returned.
16159// Deprecated: Use NextWithContext() instead.
16160func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
16161	return page.NextWithContext(context.Background())
16162}
16163
16164// NotDone returns true if the page enumeration should be started or is not yet complete.
16165func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
16166	return !page.vngclr.IsEmpty()
16167}
16168
16169// Response returns the raw server response from the last page request.
16170func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
16171	return page.vngclr
16172}
16173
16174// Values returns the slice of values for the current page or nil if there are no values.
16175func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
16176	if page.vngclr.IsEmpty() {
16177		return nil
16178	}
16179	return *page.vngclr.Value
16180}
16181
16182// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
16183func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
16184	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
16185}
16186
16187// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties
16188type VirtualNetworkGatewayConnectionPropertiesFormat struct {
16189	// AuthorizationKey - The authorizationKey.
16190	AuthorizationKey *string `json:"authorizationKey,omitempty"`
16191	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
16192	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
16193	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
16194	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
16195	// LocalNetworkGateway2 - The reference to local network gateway resource.
16196	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
16197	// ConnectionType - Gateway connection type. Possible values are: 'IPsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
16198	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
16199	// RoutingWeight - The routing weight.
16200	RoutingWeight *int32 `json:"routingWeight,omitempty"`
16201	// SharedKey - The IPSec shared key.
16202	SharedKey *string `json:"sharedKey,omitempty"`
16203	// ConnectionStatus - READ-ONLY; Virtual network Gateway connection status. Possible values are 'Unknown', 'Connecting', 'Connected' and 'NotConnected'. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
16204	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
16205	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
16206	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
16207	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
16208	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
16209	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
16210	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
16211	// Peer - The reference to peerings resource.
16212	Peer *SubResource `json:"peer,omitempty"`
16213	// EnableBgp - EnableBgp flag
16214	EnableBgp *bool `json:"enableBgp,omitempty"`
16215	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
16216	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
16217	// IpsecPolicies - The IPSec Policies to be considered by this connection.
16218	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
16219	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
16220	ResourceGUID *string `json:"resourceGuid,omitempty"`
16221	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
16222	ProvisioningState *string `json:"provisioningState,omitempty"`
16223}
16224
16225// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
16226// results of a long-running operation.
16227type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
16228	azure.Future
16229}
16230
16231// Result returns the result of the asynchronous operation.
16232// If the operation has not completed it will return an error.
16233func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
16234	var done bool
16235	done, err = future.DoneWithContext(context.Background(), client)
16236	if err != nil {
16237		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16238		return
16239	}
16240	if !done {
16241		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
16242		return
16243	}
16244	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16245	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
16246		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
16247		if err != nil {
16248			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
16249		}
16250	}
16251	return
16252}
16253
16254// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
16255// a long-running operation.
16256type VirtualNetworkGatewayConnectionsDeleteFuture struct {
16257	azure.Future
16258}
16259
16260// Result returns the result of the asynchronous operation.
16261// If the operation has not completed it will return an error.
16262func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
16263	var done bool
16264	done, err = future.DoneWithContext(context.Background(), client)
16265	if err != nil {
16266		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
16267		return
16268	}
16269	if !done {
16270		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
16271		return
16272	}
16273	ar.Response = future.Response()
16274	return
16275}
16276
16277// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
16278// results of a long-running operation.
16279type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
16280	azure.Future
16281}
16282
16283// Result returns the result of the asynchronous operation.
16284// If the operation has not completed it will return an error.
16285func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
16286	var done bool
16287	done, err = future.DoneWithContext(context.Background(), client)
16288	if err != nil {
16289		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
16290		return
16291	}
16292	if !done {
16293		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
16294		return
16295	}
16296	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16297	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
16298		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
16299		if err != nil {
16300			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
16301		}
16302	}
16303	return
16304}
16305
16306// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
16307// results of a long-running operation.
16308type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
16309	azure.Future
16310}
16311
16312// Result returns the result of the asynchronous operation.
16313// If the operation has not completed it will return an error.
16314func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
16315	var done bool
16316	done, err = future.DoneWithContext(context.Background(), client)
16317	if err != nil {
16318		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
16319		return
16320	}
16321	if !done {
16322		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
16323		return
16324	}
16325	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16326	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
16327		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
16328		if err != nil {
16329			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
16330		}
16331	}
16332	return
16333}
16334
16335// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
16336// results of a long-running operation.
16337type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
16338	azure.Future
16339}
16340
16341// Result returns the result of the asynchronous operation.
16342// If the operation has not completed it will return an error.
16343func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngcle VirtualNetworkGatewayConnectionListEntity, err error) {
16344	var done bool
16345	done, err = future.DoneWithContext(context.Background(), client)
16346	if err != nil {
16347		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
16348		return
16349	}
16350	if !done {
16351		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
16352		return
16353	}
16354	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16355	if vngcle.Response.Response, err = future.GetResult(sender); err == nil && vngcle.Response.Response.StatusCode != http.StatusNoContent {
16356		vngcle, err = client.UpdateTagsResponder(vngcle.Response.Response)
16357		if err != nil {
16358			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngcle.Response.Response, "Failure responding to request")
16359		}
16360	}
16361	return
16362}
16363
16364// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway
16365type VirtualNetworkGatewayIPConfiguration struct {
16366	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
16367	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
16368	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16369	Name *string `json:"name,omitempty"`
16370	// Etag - A unique read-only string that changes whenever the resource is updated.
16371	Etag *string `json:"etag,omitempty"`
16372	// ID - Resource ID.
16373	ID *string `json:"id,omitempty"`
16374}
16375
16376// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
16377func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
16378	objectMap := make(map[string]interface{})
16379	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
16380		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
16381	}
16382	if vngic.Name != nil {
16383		objectMap["name"] = vngic.Name
16384	}
16385	if vngic.Etag != nil {
16386		objectMap["etag"] = vngic.Etag
16387	}
16388	if vngic.ID != nil {
16389		objectMap["id"] = vngic.ID
16390	}
16391	return json.Marshal(objectMap)
16392}
16393
16394// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
16395func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
16396	var m map[string]*json.RawMessage
16397	err := json.Unmarshal(body, &m)
16398	if err != nil {
16399		return err
16400	}
16401	for k, v := range m {
16402		switch k {
16403		case "properties":
16404			if v != nil {
16405				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
16406				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
16407				if err != nil {
16408					return err
16409				}
16410				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
16411			}
16412		case "name":
16413			if v != nil {
16414				var name string
16415				err = json.Unmarshal(*v, &name)
16416				if err != nil {
16417					return err
16418				}
16419				vngic.Name = &name
16420			}
16421		case "etag":
16422			if v != nil {
16423				var etag string
16424				err = json.Unmarshal(*v, &etag)
16425				if err != nil {
16426					return err
16427				}
16428				vngic.Etag = &etag
16429			}
16430		case "id":
16431			if v != nil {
16432				var ID string
16433				err = json.Unmarshal(*v, &ID)
16434				if err != nil {
16435					return err
16436				}
16437				vngic.ID = &ID
16438			}
16439		}
16440	}
16441
16442	return nil
16443}
16444
16445// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration
16446type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
16447	// PrivateIPAllocationMethod - The private IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
16448	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
16449	// Subnet - The reference of the subnet resource.
16450	Subnet *SubResource `json:"subnet,omitempty"`
16451	// PublicIPAddress - The reference of the public IP resource.
16452	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
16453	// ProvisioningState - READ-ONLY; The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
16454	ProvisioningState *string `json:"provisioningState,omitempty"`
16455}
16456
16457// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
16458// service call
16459type VirtualNetworkGatewayListConnectionsResult struct {
16460	autorest.Response `json:"-"`
16461	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
16462	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
16463	// NextLink - READ-ONLY; The URL to get the next set of results.
16464	NextLink *string `json:"nextLink,omitempty"`
16465}
16466
16467// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
16468// VirtualNetworkGatewayConnectionListEntity values.
16469type VirtualNetworkGatewayListConnectionsResultIterator struct {
16470	i    int
16471	page VirtualNetworkGatewayListConnectionsResultPage
16472}
16473
16474// NextWithContext advances to the next value.  If there was an error making
16475// the request the iterator does not advance and the error is returned.
16476func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
16477	if tracing.IsEnabled() {
16478		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
16479		defer func() {
16480			sc := -1
16481			if iter.Response().Response.Response != nil {
16482				sc = iter.Response().Response.Response.StatusCode
16483			}
16484			tracing.EndSpan(ctx, sc, err)
16485		}()
16486	}
16487	iter.i++
16488	if iter.i < len(iter.page.Values()) {
16489		return nil
16490	}
16491	err = iter.page.NextWithContext(ctx)
16492	if err != nil {
16493		iter.i--
16494		return err
16495	}
16496	iter.i = 0
16497	return nil
16498}
16499
16500// Next advances to the next value.  If there was an error making
16501// the request the iterator does not advance and the error is returned.
16502// Deprecated: Use NextWithContext() instead.
16503func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
16504	return iter.NextWithContext(context.Background())
16505}
16506
16507// NotDone returns true if the enumeration should be started or is not yet complete.
16508func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
16509	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16510}
16511
16512// Response returns the raw server response from the last page request.
16513func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
16514	return iter.page.Response()
16515}
16516
16517// Value returns the current value or a zero-initialized value if the
16518// iterator has advanced beyond the end of the collection.
16519func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
16520	if !iter.page.NotDone() {
16521		return VirtualNetworkGatewayConnectionListEntity{}
16522	}
16523	return iter.page.Values()[iter.i]
16524}
16525
16526// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
16527func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
16528	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
16529}
16530
16531// IsEmpty returns true if the ListResult contains no values.
16532func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
16533	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
16534}
16535
16536// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
16537// It returns nil if no more results exist.
16538func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
16539	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
16540		return nil, nil
16541	}
16542	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16543		autorest.AsJSON(),
16544		autorest.AsGet(),
16545		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
16546}
16547
16548// VirtualNetworkGatewayListConnectionsResultPage contains a page of
16549// VirtualNetworkGatewayConnectionListEntity values.
16550type VirtualNetworkGatewayListConnectionsResultPage struct {
16551	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
16552	vnglcr VirtualNetworkGatewayListConnectionsResult
16553}
16554
16555// NextWithContext advances to the next page of values.  If there was an error making
16556// the request the page does not advance and the error is returned.
16557func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
16558	if tracing.IsEnabled() {
16559		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
16560		defer func() {
16561			sc := -1
16562			if page.Response().Response.Response != nil {
16563				sc = page.Response().Response.Response.StatusCode
16564			}
16565			tracing.EndSpan(ctx, sc, err)
16566		}()
16567	}
16568	next, err := page.fn(ctx, page.vnglcr)
16569	if err != nil {
16570		return err
16571	}
16572	page.vnglcr = next
16573	return nil
16574}
16575
16576// Next advances to the next page of values.  If there was an error making
16577// the request the page does not advance and the error is returned.
16578// Deprecated: Use NextWithContext() instead.
16579func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
16580	return page.NextWithContext(context.Background())
16581}
16582
16583// NotDone returns true if the page enumeration should be started or is not yet complete.
16584func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
16585	return !page.vnglcr.IsEmpty()
16586}
16587
16588// Response returns the raw server response from the last page request.
16589func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
16590	return page.vnglcr
16591}
16592
16593// Values returns the slice of values for the current page or nil if there are no values.
16594func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
16595	if page.vnglcr.IsEmpty() {
16596		return nil
16597	}
16598	return *page.vnglcr.Value
16599}
16600
16601// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
16602func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
16603	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
16604}
16605
16606// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
16607type VirtualNetworkGatewayListResult struct {
16608	autorest.Response `json:"-"`
16609	// Value - Gets a list of VirtualNetworkGateway resources that exists in a resource group.
16610	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
16611	// NextLink - READ-ONLY; The URL to get the next set of results.
16612	NextLink *string `json:"nextLink,omitempty"`
16613}
16614
16615// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
16616// values.
16617type VirtualNetworkGatewayListResultIterator struct {
16618	i    int
16619	page VirtualNetworkGatewayListResultPage
16620}
16621
16622// NextWithContext advances to the next value.  If there was an error making
16623// the request the iterator does not advance and the error is returned.
16624func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
16625	if tracing.IsEnabled() {
16626		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
16627		defer func() {
16628			sc := -1
16629			if iter.Response().Response.Response != nil {
16630				sc = iter.Response().Response.Response.StatusCode
16631			}
16632			tracing.EndSpan(ctx, sc, err)
16633		}()
16634	}
16635	iter.i++
16636	if iter.i < len(iter.page.Values()) {
16637		return nil
16638	}
16639	err = iter.page.NextWithContext(ctx)
16640	if err != nil {
16641		iter.i--
16642		return err
16643	}
16644	iter.i = 0
16645	return nil
16646}
16647
16648// Next advances to the next value.  If there was an error making
16649// the request the iterator does not advance and the error is returned.
16650// Deprecated: Use NextWithContext() instead.
16651func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
16652	return iter.NextWithContext(context.Background())
16653}
16654
16655// NotDone returns true if the enumeration should be started or is not yet complete.
16656func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
16657	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16658}
16659
16660// Response returns the raw server response from the last page request.
16661func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
16662	return iter.page.Response()
16663}
16664
16665// Value returns the current value or a zero-initialized value if the
16666// iterator has advanced beyond the end of the collection.
16667func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
16668	if !iter.page.NotDone() {
16669		return VirtualNetworkGateway{}
16670	}
16671	return iter.page.Values()[iter.i]
16672}
16673
16674// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
16675func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
16676	return VirtualNetworkGatewayListResultIterator{page: page}
16677}
16678
16679// IsEmpty returns true if the ListResult contains no values.
16680func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
16681	return vnglr.Value == nil || len(*vnglr.Value) == 0
16682}
16683
16684// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
16685// It returns nil if no more results exist.
16686func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
16687	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
16688		return nil, nil
16689	}
16690	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16691		autorest.AsJSON(),
16692		autorest.AsGet(),
16693		autorest.WithBaseURL(to.String(vnglr.NextLink)))
16694}
16695
16696// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
16697type VirtualNetworkGatewayListResultPage struct {
16698	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
16699	vnglr VirtualNetworkGatewayListResult
16700}
16701
16702// NextWithContext advances to the next page of values.  If there was an error making
16703// the request the page does not advance and the error is returned.
16704func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
16705	if tracing.IsEnabled() {
16706		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
16707		defer func() {
16708			sc := -1
16709			if page.Response().Response.Response != nil {
16710				sc = page.Response().Response.Response.StatusCode
16711			}
16712			tracing.EndSpan(ctx, sc, err)
16713		}()
16714	}
16715	next, err := page.fn(ctx, page.vnglr)
16716	if err != nil {
16717		return err
16718	}
16719	page.vnglr = next
16720	return nil
16721}
16722
16723// Next advances to the next page of values.  If there was an error making
16724// the request the page does not advance and the error is returned.
16725// Deprecated: Use NextWithContext() instead.
16726func (page *VirtualNetworkGatewayListResultPage) Next() error {
16727	return page.NextWithContext(context.Background())
16728}
16729
16730// NotDone returns true if the page enumeration should be started or is not yet complete.
16731func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
16732	return !page.vnglr.IsEmpty()
16733}
16734
16735// Response returns the raw server response from the last page request.
16736func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
16737	return page.vnglr
16738}
16739
16740// Values returns the slice of values for the current page or nil if there are no values.
16741func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
16742	if page.vnglr.IsEmpty() {
16743		return nil
16744	}
16745	return *page.vnglr.Value
16746}
16747
16748// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
16749func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
16750	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
16751}
16752
16753// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties
16754type VirtualNetworkGatewayPropertiesFormat struct {
16755	// IPConfigurations - IP configurations for virtual network gateway.
16756	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
16757	// GatewayType - The type of this virtual network gateway. Possible values are: 'Vpn' and 'ExpressRoute'. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
16758	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
16759	// VpnType - The type of this virtual network gateway. Possible values are: 'PolicyBased' and 'RouteBased'. Possible values include: 'PolicyBased', 'RouteBased'
16760	VpnType VpnType `json:"vpnType,omitempty"`
16761	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
16762	EnableBgp *bool `json:"enableBgp,omitempty"`
16763	// ActiveActive - ActiveActive flag
16764	ActiveActive *bool `json:"activeActive,omitempty"`
16765	// 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.
16766	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
16767	// Sku - The reference of the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
16768	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
16769	// VpnClientConfiguration - The reference of the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
16770	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
16771	// BgpSettings - Virtual network gateway's BGP speaker settings.
16772	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
16773	// ResourceGUID - The resource GUID property of the VirtualNetworkGateway resource.
16774	ResourceGUID *string `json:"resourceGuid,omitempty"`
16775	// ProvisioningState - READ-ONLY; The provisioning state of the VirtualNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
16776	ProvisioningState *string `json:"provisioningState,omitempty"`
16777}
16778
16779// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
16780// long-running operation.
16781type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
16782	azure.Future
16783}
16784
16785// Result returns the result of the asynchronous operation.
16786// If the operation has not completed it will return an error.
16787func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
16788	var done bool
16789	done, err = future.DoneWithContext(context.Background(), client)
16790	if err != nil {
16791		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16792		return
16793	}
16794	if !done {
16795		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
16796		return
16797	}
16798	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16799	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
16800		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
16801		if err != nil {
16802			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
16803		}
16804	}
16805	return
16806}
16807
16808// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
16809// long-running operation.
16810type VirtualNetworkGatewaysDeleteFuture struct {
16811	azure.Future
16812}
16813
16814// Result returns the result of the asynchronous operation.
16815// If the operation has not completed it will return an error.
16816func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
16817	var done bool
16818	done, err = future.DoneWithContext(context.Background(), client)
16819	if err != nil {
16820		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
16821		return
16822	}
16823	if !done {
16824		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
16825		return
16826	}
16827	ar.Response = future.Response()
16828	return
16829}
16830
16831// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
16832// results of a long-running operation.
16833type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
16834	azure.Future
16835}
16836
16837// Result returns the result of the asynchronous operation.
16838// If the operation has not completed it will return an error.
16839func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
16840	var done bool
16841	done, err = future.DoneWithContext(context.Background(), client)
16842	if err != nil {
16843		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
16844		return
16845	}
16846	if !done {
16847		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
16848		return
16849	}
16850	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16851	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
16852		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
16853		if err != nil {
16854			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
16855		}
16856	}
16857	return
16858}
16859
16860// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
16861// of a long-running operation.
16862type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
16863	azure.Future
16864}
16865
16866// Result returns the result of the asynchronous operation.
16867// If the operation has not completed it will return an error.
16868func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
16869	var done bool
16870	done, err = future.DoneWithContext(context.Background(), client)
16871	if err != nil {
16872		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
16873		return
16874	}
16875	if !done {
16876		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
16877		return
16878	}
16879	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16880	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
16881		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
16882		if err != nil {
16883			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
16884		}
16885	}
16886	return
16887}
16888
16889// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
16890// of a long-running operation.
16891type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
16892	azure.Future
16893}
16894
16895// Result returns the result of the asynchronous operation.
16896// If the operation has not completed it will return an error.
16897func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
16898	var done bool
16899	done, err = future.DoneWithContext(context.Background(), client)
16900	if err != nil {
16901		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
16902		return
16903	}
16904	if !done {
16905		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
16906		return
16907	}
16908	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16909	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
16910		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
16911		if err != nil {
16912			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
16913		}
16914	}
16915	return
16916}
16917
16918// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
16919// a long-running operation.
16920type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
16921	azure.Future
16922}
16923
16924// Result returns the result of the asynchronous operation.
16925// If the operation has not completed it will return an error.
16926func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
16927	var done bool
16928	done, err = future.DoneWithContext(context.Background(), client)
16929	if err != nil {
16930		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
16931		return
16932	}
16933	if !done {
16934		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
16935		return
16936	}
16937	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16938	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
16939		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
16940		if err != nil {
16941			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
16942		}
16943	}
16944	return
16945}
16946
16947// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
16948// a long-running operation.
16949type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
16950	azure.Future
16951}
16952
16953// Result returns the result of the asynchronous operation.
16954// If the operation has not completed it will return an error.
16955func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
16956	var done bool
16957	done, err = future.DoneWithContext(context.Background(), client)
16958	if err != nil {
16959		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
16960		return
16961	}
16962	if !done {
16963		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
16964		return
16965	}
16966	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16967	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
16968		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
16969		if err != nil {
16970			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
16971		}
16972	}
16973	return
16974}
16975
16976// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
16977// results of a long-running operation.
16978type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
16979	azure.Future
16980}
16981
16982// Result returns the result of the asynchronous operation.
16983// If the operation has not completed it will return an error.
16984func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
16985	var done bool
16986	done, err = future.DoneWithContext(context.Background(), client)
16987	if err != nil {
16988		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
16989		return
16990	}
16991	if !done {
16992		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
16993		return
16994	}
16995	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16996	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
16997		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
16998		if err != nil {
16999			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
17000		}
17001	}
17002	return
17003}
17004
17005// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
17006// results of a long-running operation.
17007type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
17008	azure.Future
17009}
17010
17011// Result returns the result of the asynchronous operation.
17012// If the operation has not completed it will return an error.
17013func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
17014	var done bool
17015	done, err = future.DoneWithContext(context.Background(), client)
17016	if err != nil {
17017		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
17018		return
17019	}
17020	if !done {
17021		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
17022		return
17023	}
17024	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17025	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
17026		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
17027		if err != nil {
17028			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
17029		}
17030	}
17031	return
17032}
17033
17034// VirtualNetworkGatewaySku virtualNetworkGatewaySku details
17035type VirtualNetworkGatewaySku struct {
17036	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3'
17037	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
17038	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3'
17039	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
17040	// Capacity - The capacity.
17041	Capacity *int32 `json:"capacity,omitempty"`
17042}
17043
17044// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
17045// long-running operation.
17046type VirtualNetworkGatewaysResetFuture struct {
17047	azure.Future
17048}
17049
17050// Result returns the result of the asynchronous operation.
17051// If the operation has not completed it will return an error.
17052func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
17053	var done bool
17054	done, err = future.DoneWithContext(context.Background(), client)
17055	if err != nil {
17056		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
17057		return
17058	}
17059	if !done {
17060		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
17061		return
17062	}
17063	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17064	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
17065		vng, err = client.ResetResponder(vng.Response.Response)
17066		if err != nil {
17067			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
17068		}
17069	}
17070	return
17071}
17072
17073// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
17074// results of a long-running operation.
17075type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
17076	azure.Future
17077}
17078
17079// Result returns the result of the asynchronous operation.
17080// If the operation has not completed it will return an error.
17081func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
17082	var done bool
17083	done, err = future.DoneWithContext(context.Background(), client)
17084	if err != nil {
17085		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
17086		return
17087	}
17088	if !done {
17089		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
17090		return
17091	}
17092	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17093	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
17094		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
17095		if err != nil {
17096			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
17097		}
17098	}
17099	return
17100}
17101
17102// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
17103// long-running operation.
17104type VirtualNetworkGatewaysUpdateTagsFuture struct {
17105	azure.Future
17106}
17107
17108// Result returns the result of the asynchronous operation.
17109// If the operation has not completed it will return an error.
17110func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
17111	var done bool
17112	done, err = future.DoneWithContext(context.Background(), client)
17113	if err != nil {
17114		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
17115		return
17116	}
17117	if !done {
17118		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
17119		return
17120	}
17121	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17122	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
17123		vng, err = client.UpdateTagsResponder(vng.Response.Response)
17124		if err != nil {
17125			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
17126		}
17127	}
17128	return
17129}
17130
17131// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
17132type VirtualNetworkListResult struct {
17133	autorest.Response `json:"-"`
17134	// Value - Gets a list of VirtualNetwork resources in a resource group.
17135	Value *[]VirtualNetwork `json:"value,omitempty"`
17136	// NextLink - The URL to get the next set of results.
17137	NextLink *string `json:"nextLink,omitempty"`
17138}
17139
17140// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
17141type VirtualNetworkListResultIterator struct {
17142	i    int
17143	page VirtualNetworkListResultPage
17144}
17145
17146// NextWithContext advances to the next value.  If there was an error making
17147// the request the iterator does not advance and the error is returned.
17148func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
17149	if tracing.IsEnabled() {
17150		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
17151		defer func() {
17152			sc := -1
17153			if iter.Response().Response.Response != nil {
17154				sc = iter.Response().Response.Response.StatusCode
17155			}
17156			tracing.EndSpan(ctx, sc, err)
17157		}()
17158	}
17159	iter.i++
17160	if iter.i < len(iter.page.Values()) {
17161		return nil
17162	}
17163	err = iter.page.NextWithContext(ctx)
17164	if err != nil {
17165		iter.i--
17166		return err
17167	}
17168	iter.i = 0
17169	return nil
17170}
17171
17172// Next advances to the next value.  If there was an error making
17173// the request the iterator does not advance and the error is returned.
17174// Deprecated: Use NextWithContext() instead.
17175func (iter *VirtualNetworkListResultIterator) Next() error {
17176	return iter.NextWithContext(context.Background())
17177}
17178
17179// NotDone returns true if the enumeration should be started or is not yet complete.
17180func (iter VirtualNetworkListResultIterator) NotDone() bool {
17181	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17182}
17183
17184// Response returns the raw server response from the last page request.
17185func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
17186	return iter.page.Response()
17187}
17188
17189// Value returns the current value or a zero-initialized value if the
17190// iterator has advanced beyond the end of the collection.
17191func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
17192	if !iter.page.NotDone() {
17193		return VirtualNetwork{}
17194	}
17195	return iter.page.Values()[iter.i]
17196}
17197
17198// Creates a new instance of the VirtualNetworkListResultIterator type.
17199func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
17200	return VirtualNetworkListResultIterator{page: page}
17201}
17202
17203// IsEmpty returns true if the ListResult contains no values.
17204func (vnlr VirtualNetworkListResult) IsEmpty() bool {
17205	return vnlr.Value == nil || len(*vnlr.Value) == 0
17206}
17207
17208// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
17209// It returns nil if no more results exist.
17210func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
17211	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
17212		return nil, nil
17213	}
17214	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17215		autorest.AsJSON(),
17216		autorest.AsGet(),
17217		autorest.WithBaseURL(to.String(vnlr.NextLink)))
17218}
17219
17220// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
17221type VirtualNetworkListResultPage struct {
17222	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
17223	vnlr VirtualNetworkListResult
17224}
17225
17226// NextWithContext advances to the next page of values.  If there was an error making
17227// the request the page does not advance and the error is returned.
17228func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
17229	if tracing.IsEnabled() {
17230		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
17231		defer func() {
17232			sc := -1
17233			if page.Response().Response.Response != nil {
17234				sc = page.Response().Response.Response.StatusCode
17235			}
17236			tracing.EndSpan(ctx, sc, err)
17237		}()
17238	}
17239	next, err := page.fn(ctx, page.vnlr)
17240	if err != nil {
17241		return err
17242	}
17243	page.vnlr = next
17244	return nil
17245}
17246
17247// Next advances to the next page of values.  If there was an error making
17248// the request the page does not advance and the error is returned.
17249// Deprecated: Use NextWithContext() instead.
17250func (page *VirtualNetworkListResultPage) Next() error {
17251	return page.NextWithContext(context.Background())
17252}
17253
17254// NotDone returns true if the page enumeration should be started or is not yet complete.
17255func (page VirtualNetworkListResultPage) NotDone() bool {
17256	return !page.vnlr.IsEmpty()
17257}
17258
17259// Response returns the raw server response from the last page request.
17260func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
17261	return page.vnlr
17262}
17263
17264// Values returns the slice of values for the current page or nil if there are no values.
17265func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
17266	if page.vnlr.IsEmpty() {
17267		return nil
17268	}
17269	return *page.vnlr.Value
17270}
17271
17272// Creates a new instance of the VirtualNetworkListResultPage type.
17273func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
17274	return VirtualNetworkListResultPage{fn: getNextPage}
17275}
17276
17277// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
17278type VirtualNetworkListUsageResult struct {
17279	autorest.Response `json:"-"`
17280	// Value - READ-ONLY; VirtualNetwork usage stats.
17281	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
17282	// NextLink - The URL to get the next set of results.
17283	NextLink *string `json:"nextLink,omitempty"`
17284}
17285
17286// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
17287// values.
17288type VirtualNetworkListUsageResultIterator struct {
17289	i    int
17290	page VirtualNetworkListUsageResultPage
17291}
17292
17293// NextWithContext advances to the next value.  If there was an error making
17294// the request the iterator does not advance and the error is returned.
17295func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
17296	if tracing.IsEnabled() {
17297		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
17298		defer func() {
17299			sc := -1
17300			if iter.Response().Response.Response != nil {
17301				sc = iter.Response().Response.Response.StatusCode
17302			}
17303			tracing.EndSpan(ctx, sc, err)
17304		}()
17305	}
17306	iter.i++
17307	if iter.i < len(iter.page.Values()) {
17308		return nil
17309	}
17310	err = iter.page.NextWithContext(ctx)
17311	if err != nil {
17312		iter.i--
17313		return err
17314	}
17315	iter.i = 0
17316	return nil
17317}
17318
17319// Next advances to the next value.  If there was an error making
17320// the request the iterator does not advance and the error is returned.
17321// Deprecated: Use NextWithContext() instead.
17322func (iter *VirtualNetworkListUsageResultIterator) Next() error {
17323	return iter.NextWithContext(context.Background())
17324}
17325
17326// NotDone returns true if the enumeration should be started or is not yet complete.
17327func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
17328	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17329}
17330
17331// Response returns the raw server response from the last page request.
17332func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
17333	return iter.page.Response()
17334}
17335
17336// Value returns the current value or a zero-initialized value if the
17337// iterator has advanced beyond the end of the collection.
17338func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
17339	if !iter.page.NotDone() {
17340		return VirtualNetworkUsage{}
17341	}
17342	return iter.page.Values()[iter.i]
17343}
17344
17345// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
17346func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
17347	return VirtualNetworkListUsageResultIterator{page: page}
17348}
17349
17350// IsEmpty returns true if the ListResult contains no values.
17351func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
17352	return vnlur.Value == nil || len(*vnlur.Value) == 0
17353}
17354
17355// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
17356// It returns nil if no more results exist.
17357func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
17358	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
17359		return nil, nil
17360	}
17361	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17362		autorest.AsJSON(),
17363		autorest.AsGet(),
17364		autorest.WithBaseURL(to.String(vnlur.NextLink)))
17365}
17366
17367// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
17368type VirtualNetworkListUsageResultPage struct {
17369	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
17370	vnlur VirtualNetworkListUsageResult
17371}
17372
17373// NextWithContext advances to the next page of values.  If there was an error making
17374// the request the page does not advance and the error is returned.
17375func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
17376	if tracing.IsEnabled() {
17377		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
17378		defer func() {
17379			sc := -1
17380			if page.Response().Response.Response != nil {
17381				sc = page.Response().Response.Response.StatusCode
17382			}
17383			tracing.EndSpan(ctx, sc, err)
17384		}()
17385	}
17386	next, err := page.fn(ctx, page.vnlur)
17387	if err != nil {
17388		return err
17389	}
17390	page.vnlur = next
17391	return nil
17392}
17393
17394// Next advances to the next page of values.  If there was an error making
17395// the request the page does not advance and the error is returned.
17396// Deprecated: Use NextWithContext() instead.
17397func (page *VirtualNetworkListUsageResultPage) Next() error {
17398	return page.NextWithContext(context.Background())
17399}
17400
17401// NotDone returns true if the page enumeration should be started or is not yet complete.
17402func (page VirtualNetworkListUsageResultPage) NotDone() bool {
17403	return !page.vnlur.IsEmpty()
17404}
17405
17406// Response returns the raw server response from the last page request.
17407func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
17408	return page.vnlur
17409}
17410
17411// Values returns the slice of values for the current page or nil if there are no values.
17412func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
17413	if page.vnlur.IsEmpty() {
17414		return nil
17415	}
17416	return *page.vnlur.Value
17417}
17418
17419// Creates a new instance of the VirtualNetworkListUsageResultPage type.
17420func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
17421	return VirtualNetworkListUsageResultPage{fn: getNextPage}
17422}
17423
17424// VirtualNetworkPeering peerings in a virtual network resource.
17425type VirtualNetworkPeering struct {
17426	autorest.Response `json:"-"`
17427	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
17428	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
17429	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17430	Name *string `json:"name,omitempty"`
17431	// Etag - A unique read-only string that changes whenever the resource is updated.
17432	Etag *string `json:"etag,omitempty"`
17433	// ID - Resource ID.
17434	ID *string `json:"id,omitempty"`
17435}
17436
17437// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
17438func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
17439	objectMap := make(map[string]interface{})
17440	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
17441		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
17442	}
17443	if vnp.Name != nil {
17444		objectMap["name"] = vnp.Name
17445	}
17446	if vnp.Etag != nil {
17447		objectMap["etag"] = vnp.Etag
17448	}
17449	if vnp.ID != nil {
17450		objectMap["id"] = vnp.ID
17451	}
17452	return json.Marshal(objectMap)
17453}
17454
17455// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
17456func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
17457	var m map[string]*json.RawMessage
17458	err := json.Unmarshal(body, &m)
17459	if err != nil {
17460		return err
17461	}
17462	for k, v := range m {
17463		switch k {
17464		case "properties":
17465			if v != nil {
17466				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
17467				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
17468				if err != nil {
17469					return err
17470				}
17471				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
17472			}
17473		case "name":
17474			if v != nil {
17475				var name string
17476				err = json.Unmarshal(*v, &name)
17477				if err != nil {
17478					return err
17479				}
17480				vnp.Name = &name
17481			}
17482		case "etag":
17483			if v != nil {
17484				var etag string
17485				err = json.Unmarshal(*v, &etag)
17486				if err != nil {
17487					return err
17488				}
17489				vnp.Etag = &etag
17490			}
17491		case "id":
17492			if v != nil {
17493				var ID string
17494				err = json.Unmarshal(*v, &ID)
17495				if err != nil {
17496					return err
17497				}
17498				vnp.ID = &ID
17499			}
17500		}
17501	}
17502
17503	return nil
17504}
17505
17506// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
17507// belong to a virtual network.
17508type VirtualNetworkPeeringListResult struct {
17509	autorest.Response `json:"-"`
17510	// Value - The peerings in a virtual network.
17511	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
17512	// NextLink - The URL to get the next set of results.
17513	NextLink *string `json:"nextLink,omitempty"`
17514}
17515
17516// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
17517// values.
17518type VirtualNetworkPeeringListResultIterator struct {
17519	i    int
17520	page VirtualNetworkPeeringListResultPage
17521}
17522
17523// NextWithContext advances to the next value.  If there was an error making
17524// the request the iterator does not advance and the error is returned.
17525func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
17526	if tracing.IsEnabled() {
17527		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
17528		defer func() {
17529			sc := -1
17530			if iter.Response().Response.Response != nil {
17531				sc = iter.Response().Response.Response.StatusCode
17532			}
17533			tracing.EndSpan(ctx, sc, err)
17534		}()
17535	}
17536	iter.i++
17537	if iter.i < len(iter.page.Values()) {
17538		return nil
17539	}
17540	err = iter.page.NextWithContext(ctx)
17541	if err != nil {
17542		iter.i--
17543		return err
17544	}
17545	iter.i = 0
17546	return nil
17547}
17548
17549// Next advances to the next value.  If there was an error making
17550// the request the iterator does not advance and the error is returned.
17551// Deprecated: Use NextWithContext() instead.
17552func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
17553	return iter.NextWithContext(context.Background())
17554}
17555
17556// NotDone returns true if the enumeration should be started or is not yet complete.
17557func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
17558	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17559}
17560
17561// Response returns the raw server response from the last page request.
17562func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
17563	return iter.page.Response()
17564}
17565
17566// Value returns the current value or a zero-initialized value if the
17567// iterator has advanced beyond the end of the collection.
17568func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
17569	if !iter.page.NotDone() {
17570		return VirtualNetworkPeering{}
17571	}
17572	return iter.page.Values()[iter.i]
17573}
17574
17575// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
17576func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
17577	return VirtualNetworkPeeringListResultIterator{page: page}
17578}
17579
17580// IsEmpty returns true if the ListResult contains no values.
17581func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
17582	return vnplr.Value == nil || len(*vnplr.Value) == 0
17583}
17584
17585// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
17586// It returns nil if no more results exist.
17587func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
17588	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
17589		return nil, nil
17590	}
17591	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17592		autorest.AsJSON(),
17593		autorest.AsGet(),
17594		autorest.WithBaseURL(to.String(vnplr.NextLink)))
17595}
17596
17597// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
17598type VirtualNetworkPeeringListResultPage struct {
17599	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
17600	vnplr VirtualNetworkPeeringListResult
17601}
17602
17603// NextWithContext advances to the next page of values.  If there was an error making
17604// the request the page does not advance and the error is returned.
17605func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
17606	if tracing.IsEnabled() {
17607		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
17608		defer func() {
17609			sc := -1
17610			if page.Response().Response.Response != nil {
17611				sc = page.Response().Response.Response.StatusCode
17612			}
17613			tracing.EndSpan(ctx, sc, err)
17614		}()
17615	}
17616	next, err := page.fn(ctx, page.vnplr)
17617	if err != nil {
17618		return err
17619	}
17620	page.vnplr = next
17621	return nil
17622}
17623
17624// Next advances to the next page of values.  If there was an error making
17625// the request the page does not advance and the error is returned.
17626// Deprecated: Use NextWithContext() instead.
17627func (page *VirtualNetworkPeeringListResultPage) Next() error {
17628	return page.NextWithContext(context.Background())
17629}
17630
17631// NotDone returns true if the page enumeration should be started or is not yet complete.
17632func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
17633	return !page.vnplr.IsEmpty()
17634}
17635
17636// Response returns the raw server response from the last page request.
17637func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
17638	return page.vnplr
17639}
17640
17641// Values returns the slice of values for the current page or nil if there are no values.
17642func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
17643	if page.vnplr.IsEmpty() {
17644		return nil
17645	}
17646	return *page.vnplr.Value
17647}
17648
17649// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
17650func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
17651	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
17652}
17653
17654// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
17655type VirtualNetworkPeeringPropertiesFormat struct {
17656	// AllowVirtualNetworkAccess - Whether the VMs in the linked virtual network space would be able to access all the VMs in local Virtual network space.
17657	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
17658	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the remote virtual network will be allowed/disallowed.
17659	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
17660	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
17661	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
17662	// 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.
17663	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
17664	// 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).
17665	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
17666	// RemoteAddressSpace - The reference of the remote virtual network address space.
17667	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
17668	// PeeringState - The status of the virtual network peering. Possible values are 'Initiated', 'Connected', and 'Disconnected'. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
17669	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
17670	// ProvisioningState - The provisioning state of the resource.
17671	ProvisioningState *string `json:"provisioningState,omitempty"`
17672}
17673
17674// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17675// long-running operation.
17676type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
17677	azure.Future
17678}
17679
17680// Result returns the result of the asynchronous operation.
17681// If the operation has not completed it will return an error.
17682func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
17683	var done bool
17684	done, err = future.DoneWithContext(context.Background(), client)
17685	if err != nil {
17686		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17687		return
17688	}
17689	if !done {
17690		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
17691		return
17692	}
17693	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17694	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
17695		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
17696		if err != nil {
17697			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
17698		}
17699	}
17700	return
17701}
17702
17703// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
17704// long-running operation.
17705type VirtualNetworkPeeringsDeleteFuture struct {
17706	azure.Future
17707}
17708
17709// Result returns the result of the asynchronous operation.
17710// If the operation has not completed it will return an error.
17711func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
17712	var done bool
17713	done, err = future.DoneWithContext(context.Background(), client)
17714	if err != nil {
17715		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
17716		return
17717	}
17718	if !done {
17719		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
17720		return
17721	}
17722	ar.Response = future.Response()
17723	return
17724}
17725
17726// VirtualNetworkPropertiesFormat properties of the virtual network.
17727type VirtualNetworkPropertiesFormat struct {
17728	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
17729	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
17730	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
17731	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
17732	// Subnets - A list of subnets in a Virtual Network.
17733	Subnets *[]Subnet `json:"subnets,omitempty"`
17734	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
17735	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
17736	// ResourceGUID - The resourceGuid property of the Virtual Network resource.
17737	ResourceGUID *string `json:"resourceGuid,omitempty"`
17738	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17739	ProvisioningState *string `json:"provisioningState,omitempty"`
17740	// 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.
17741	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
17742	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
17743	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
17744	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
17745	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
17746}
17747
17748// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17749// long-running operation.
17750type VirtualNetworksCreateOrUpdateFuture struct {
17751	azure.Future
17752}
17753
17754// Result returns the result of the asynchronous operation.
17755// If the operation has not completed it will return an error.
17756func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
17757	var done bool
17758	done, err = future.DoneWithContext(context.Background(), client)
17759	if err != nil {
17760		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17761		return
17762	}
17763	if !done {
17764		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
17765		return
17766	}
17767	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17768	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
17769		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
17770		if err != nil {
17771			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
17772		}
17773	}
17774	return
17775}
17776
17777// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
17778// operation.
17779type VirtualNetworksDeleteFuture struct {
17780	azure.Future
17781}
17782
17783// Result returns the result of the asynchronous operation.
17784// If the operation has not completed it will return an error.
17785func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
17786	var done bool
17787	done, err = future.DoneWithContext(context.Background(), client)
17788	if err != nil {
17789		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
17790		return
17791	}
17792	if !done {
17793		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
17794		return
17795	}
17796	ar.Response = future.Response()
17797	return
17798}
17799
17800// VirtualNetworksUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
17801// long-running operation.
17802type VirtualNetworksUpdateTagsFuture struct {
17803	azure.Future
17804}
17805
17806// Result returns the result of the asynchronous operation.
17807// If the operation has not completed it will return an error.
17808func (future *VirtualNetworksUpdateTagsFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
17809	var done bool
17810	done, err = future.DoneWithContext(context.Background(), client)
17811	if err != nil {
17812		err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", future.Response(), "Polling failure")
17813		return
17814	}
17815	if !done {
17816		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksUpdateTagsFuture")
17817		return
17818	}
17819	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17820	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
17821		vn, err = client.UpdateTagsResponder(vn.Response.Response)
17822		if err != nil {
17823			err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", vn.Response.Response, "Failure responding to request")
17824		}
17825	}
17826	return
17827}
17828
17829// VirtualNetworkUsage usage details for subnet.
17830type VirtualNetworkUsage struct {
17831	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
17832	CurrentValue *float64 `json:"currentValue,omitempty"`
17833	// ID - READ-ONLY; Subnet identifier.
17834	ID *string `json:"id,omitempty"`
17835	// Limit - READ-ONLY; Indicates the size of the subnet.
17836	Limit *float64 `json:"limit,omitempty"`
17837	// Name - READ-ONLY; The name containing common and localized value for usage.
17838	Name *VirtualNetworkUsageName `json:"name,omitempty"`
17839	// Unit - READ-ONLY; Usage units. Returns 'Count'
17840	Unit *string `json:"unit,omitempty"`
17841}
17842
17843// VirtualNetworkUsageName usage strings container.
17844type VirtualNetworkUsageName struct {
17845	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
17846	LocalizedValue *string `json:"localizedValue,omitempty"`
17847	// Value - READ-ONLY; Subnet size and usage string.
17848	Value *string `json:"value,omitempty"`
17849}
17850
17851// VpnClientConfiguration vpnClientConfiguration for P2S client.
17852type VpnClientConfiguration struct {
17853	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
17854	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
17855	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
17856	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
17857	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
17858	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
17859	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
17860	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
17861	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
17862	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
17863	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
17864	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
17865	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
17866	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
17867}
17868
17869// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
17870type VpnClientIPsecParameters struct {
17871	autorest.Response `json:"-"`
17872	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
17873	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
17874	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
17875	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
17876	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
17877	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
17878	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
17879	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
17880	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
17881	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
17882	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
17883	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
17884	// DhGroup - The DH Groups used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
17885	DhGroup DhGroup `json:"dhGroup,omitempty"`
17886	// 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'
17887	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
17888}
17889
17890// VpnClientParameters vpn Client Parameters for package generation
17891type VpnClientParameters struct {
17892	// ProcessorArchitecture - VPN client Processor Architecture. Possible values are: 'AMD64' and 'X86'. Possible values include: 'Amd64', 'X86'
17893	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
17894	// AuthenticationMethod - VPN client Authentication Method. Possible values are: 'EAPTLS' and 'EAPMSCHAPv2'. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
17895	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
17896	// 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.
17897	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
17898	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
17899	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
17900}
17901
17902// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
17903type VpnClientRevokedCertificate struct {
17904	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
17905	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
17906	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17907	Name *string `json:"name,omitempty"`
17908	// Etag - A unique read-only string that changes whenever the resource is updated.
17909	Etag *string `json:"etag,omitempty"`
17910	// ID - Resource ID.
17911	ID *string `json:"id,omitempty"`
17912}
17913
17914// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
17915func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
17916	objectMap := make(map[string]interface{})
17917	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
17918		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
17919	}
17920	if vcrc.Name != nil {
17921		objectMap["name"] = vcrc.Name
17922	}
17923	if vcrc.Etag != nil {
17924		objectMap["etag"] = vcrc.Etag
17925	}
17926	if vcrc.ID != nil {
17927		objectMap["id"] = vcrc.ID
17928	}
17929	return json.Marshal(objectMap)
17930}
17931
17932// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
17933func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
17934	var m map[string]*json.RawMessage
17935	err := json.Unmarshal(body, &m)
17936	if err != nil {
17937		return err
17938	}
17939	for k, v := range m {
17940		switch k {
17941		case "properties":
17942			if v != nil {
17943				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
17944				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
17945				if err != nil {
17946					return err
17947				}
17948				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
17949			}
17950		case "name":
17951			if v != nil {
17952				var name string
17953				err = json.Unmarshal(*v, &name)
17954				if err != nil {
17955					return err
17956				}
17957				vcrc.Name = &name
17958			}
17959		case "etag":
17960			if v != nil {
17961				var etag string
17962				err = json.Unmarshal(*v, &etag)
17963				if err != nil {
17964					return err
17965				}
17966				vcrc.Etag = &etag
17967			}
17968		case "id":
17969			if v != nil {
17970				var ID string
17971				err = json.Unmarshal(*v, &ID)
17972				if err != nil {
17973					return err
17974				}
17975				vcrc.ID = &ID
17976			}
17977		}
17978	}
17979
17980	return nil
17981}
17982
17983// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
17984// network gateway.
17985type VpnClientRevokedCertificatePropertiesFormat struct {
17986	// Thumbprint - The revoked VPN client certificate thumbprint.
17987	Thumbprint *string `json:"thumbprint,omitempty"`
17988	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
17989	ProvisioningState *string `json:"provisioningState,omitempty"`
17990}
17991
17992// VpnClientRootCertificate VPN client root certificate of virtual network gateway
17993type VpnClientRootCertificate struct {
17994	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
17995	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
17996	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17997	Name *string `json:"name,omitempty"`
17998	// Etag - A unique read-only string that changes whenever the resource is updated.
17999	Etag *string `json:"etag,omitempty"`
18000	// ID - Resource ID.
18001	ID *string `json:"id,omitempty"`
18002}
18003
18004// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
18005func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
18006	objectMap := make(map[string]interface{})
18007	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
18008		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
18009	}
18010	if vcrc.Name != nil {
18011		objectMap["name"] = vcrc.Name
18012	}
18013	if vcrc.Etag != nil {
18014		objectMap["etag"] = vcrc.Etag
18015	}
18016	if vcrc.ID != nil {
18017		objectMap["id"] = vcrc.ID
18018	}
18019	return json.Marshal(objectMap)
18020}
18021
18022// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
18023func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
18024	var m map[string]*json.RawMessage
18025	err := json.Unmarshal(body, &m)
18026	if err != nil {
18027		return err
18028	}
18029	for k, v := range m {
18030		switch k {
18031		case "properties":
18032			if v != nil {
18033				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
18034				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
18035				if err != nil {
18036					return err
18037				}
18038				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
18039			}
18040		case "name":
18041			if v != nil {
18042				var name string
18043				err = json.Unmarshal(*v, &name)
18044				if err != nil {
18045					return err
18046				}
18047				vcrc.Name = &name
18048			}
18049		case "etag":
18050			if v != nil {
18051				var etag string
18052				err = json.Unmarshal(*v, &etag)
18053				if err != nil {
18054					return err
18055				}
18056				vcrc.Etag = &etag
18057			}
18058		case "id":
18059			if v != nil {
18060				var ID string
18061				err = json.Unmarshal(*v, &ID)
18062				if err != nil {
18063					return err
18064				}
18065				vcrc.ID = &ID
18066			}
18067		}
18068	}
18069
18070	return nil
18071}
18072
18073// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway
18074type VpnClientRootCertificatePropertiesFormat struct {
18075	// PublicCertData - The certificate public data.
18076	PublicCertData *string `json:"publicCertData,omitempty"`
18077	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
18078	ProvisioningState *string `json:"provisioningState,omitempty"`
18079}
18080
18081// VpnDeviceScriptParameters vpn device configuration script generation parameters
18082type VpnDeviceScriptParameters struct {
18083	// Vendor - The vendor for the vpn device.
18084	Vendor *string `json:"vendor,omitempty"`
18085	// DeviceFamily - The device family for the vpn device.
18086	DeviceFamily *string `json:"deviceFamily,omitempty"`
18087	// FirmwareVersion - The firmware version for the vpn device.
18088	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
18089}
18090
18091// Watcher network watcher in a resource group.
18092type Watcher struct {
18093	autorest.Response `json:"-"`
18094	// Etag - A unique read-only string that changes whenever the resource is updated.
18095	Etag                     *string `json:"etag,omitempty"`
18096	*WatcherPropertiesFormat `json:"properties,omitempty"`
18097	// ID - Resource ID.
18098	ID *string `json:"id,omitempty"`
18099	// Name - READ-ONLY; Resource name.
18100	Name *string `json:"name,omitempty"`
18101	// Type - READ-ONLY; Resource type.
18102	Type *string `json:"type,omitempty"`
18103	// Location - Resource location.
18104	Location *string `json:"location,omitempty"`
18105	// Tags - Resource tags.
18106	Tags map[string]*string `json:"tags"`
18107}
18108
18109// MarshalJSON is the custom marshaler for Watcher.
18110func (w Watcher) MarshalJSON() ([]byte, error) {
18111	objectMap := make(map[string]interface{})
18112	if w.Etag != nil {
18113		objectMap["etag"] = w.Etag
18114	}
18115	if w.WatcherPropertiesFormat != nil {
18116		objectMap["properties"] = w.WatcherPropertiesFormat
18117	}
18118	if w.ID != nil {
18119		objectMap["id"] = w.ID
18120	}
18121	if w.Location != nil {
18122		objectMap["location"] = w.Location
18123	}
18124	if w.Tags != nil {
18125		objectMap["tags"] = w.Tags
18126	}
18127	return json.Marshal(objectMap)
18128}
18129
18130// UnmarshalJSON is the custom unmarshaler for Watcher struct.
18131func (w *Watcher) UnmarshalJSON(body []byte) error {
18132	var m map[string]*json.RawMessage
18133	err := json.Unmarshal(body, &m)
18134	if err != nil {
18135		return err
18136	}
18137	for k, v := range m {
18138		switch k {
18139		case "etag":
18140			if v != nil {
18141				var etag string
18142				err = json.Unmarshal(*v, &etag)
18143				if err != nil {
18144					return err
18145				}
18146				w.Etag = &etag
18147			}
18148		case "properties":
18149			if v != nil {
18150				var watcherPropertiesFormat WatcherPropertiesFormat
18151				err = json.Unmarshal(*v, &watcherPropertiesFormat)
18152				if err != nil {
18153					return err
18154				}
18155				w.WatcherPropertiesFormat = &watcherPropertiesFormat
18156			}
18157		case "id":
18158			if v != nil {
18159				var ID string
18160				err = json.Unmarshal(*v, &ID)
18161				if err != nil {
18162					return err
18163				}
18164				w.ID = &ID
18165			}
18166		case "name":
18167			if v != nil {
18168				var name string
18169				err = json.Unmarshal(*v, &name)
18170				if err != nil {
18171					return err
18172				}
18173				w.Name = &name
18174			}
18175		case "type":
18176			if v != nil {
18177				var typeVar string
18178				err = json.Unmarshal(*v, &typeVar)
18179				if err != nil {
18180					return err
18181				}
18182				w.Type = &typeVar
18183			}
18184		case "location":
18185			if v != nil {
18186				var location string
18187				err = json.Unmarshal(*v, &location)
18188				if err != nil {
18189					return err
18190				}
18191				w.Location = &location
18192			}
18193		case "tags":
18194			if v != nil {
18195				var tags map[string]*string
18196				err = json.Unmarshal(*v, &tags)
18197				if err != nil {
18198					return err
18199				}
18200				w.Tags = tags
18201			}
18202		}
18203	}
18204
18205	return nil
18206}
18207
18208// WatcherListResult list of network watcher resources.
18209type WatcherListResult struct {
18210	autorest.Response `json:"-"`
18211	Value             *[]Watcher `json:"value,omitempty"`
18212}
18213
18214// WatcherPropertiesFormat the network watcher properties.
18215type WatcherPropertiesFormat struct {
18216	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18217	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18218}
18219
18220// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
18221// long-running operation.
18222type WatchersCheckConnectivityFuture struct {
18223	azure.Future
18224}
18225
18226// Result returns the result of the asynchronous operation.
18227// If the operation has not completed it will return an error.
18228func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
18229	var done bool
18230	done, err = future.DoneWithContext(context.Background(), client)
18231	if err != nil {
18232		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
18233		return
18234	}
18235	if !done {
18236		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
18237		return
18238	}
18239	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18240	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
18241		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
18242		if err != nil {
18243			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
18244		}
18245	}
18246	return
18247}
18248
18249// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
18250// operation.
18251type WatchersDeleteFuture struct {
18252	azure.Future
18253}
18254
18255// Result returns the result of the asynchronous operation.
18256// If the operation has not completed it will return an error.
18257func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
18258	var done bool
18259	done, err = future.DoneWithContext(context.Background(), client)
18260	if err != nil {
18261		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
18262		return
18263	}
18264	if !done {
18265		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
18266		return
18267	}
18268	ar.Response = future.Response()
18269	return
18270}
18271
18272// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
18273// long-running operation.
18274type WatchersGetAzureReachabilityReportFuture struct {
18275	azure.Future
18276}
18277
18278// Result returns the result of the asynchronous operation.
18279// If the operation has not completed it will return an error.
18280func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
18281	var done bool
18282	done, err = future.DoneWithContext(context.Background(), client)
18283	if err != nil {
18284		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
18285		return
18286	}
18287	if !done {
18288		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
18289		return
18290	}
18291	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18292	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
18293		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
18294		if err != nil {
18295			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
18296		}
18297	}
18298	return
18299}
18300
18301// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
18302// long-running operation.
18303type WatchersGetFlowLogStatusFuture struct {
18304	azure.Future
18305}
18306
18307// Result returns the result of the asynchronous operation.
18308// If the operation has not completed it will return an error.
18309func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
18310	var done bool
18311	done, err = future.DoneWithContext(context.Background(), client)
18312	if err != nil {
18313		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
18314		return
18315	}
18316	if !done {
18317		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
18318		return
18319	}
18320	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18321	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
18322		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
18323		if err != nil {
18324			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
18325		}
18326	}
18327	return
18328}
18329
18330// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
18331// operation.
18332type WatchersGetNextHopFuture struct {
18333	azure.Future
18334}
18335
18336// Result returns the result of the asynchronous operation.
18337// If the operation has not completed it will return an error.
18338func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
18339	var done bool
18340	done, err = future.DoneWithContext(context.Background(), client)
18341	if err != nil {
18342		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
18343		return
18344	}
18345	if !done {
18346		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
18347		return
18348	}
18349	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18350	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
18351		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
18352		if err != nil {
18353			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
18354		}
18355	}
18356	return
18357}
18358
18359// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
18360// long-running operation.
18361type WatchersGetTroubleshootingFuture struct {
18362	azure.Future
18363}
18364
18365// Result returns the result of the asynchronous operation.
18366// If the operation has not completed it will return an error.
18367func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
18368	var done bool
18369	done, err = future.DoneWithContext(context.Background(), client)
18370	if err != nil {
18371		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
18372		return
18373	}
18374	if !done {
18375		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
18376		return
18377	}
18378	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18379	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
18380		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
18381		if err != nil {
18382			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
18383		}
18384	}
18385	return
18386}
18387
18388// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
18389// long-running operation.
18390type WatchersGetTroubleshootingResultFuture struct {
18391	azure.Future
18392}
18393
18394// Result returns the result of the asynchronous operation.
18395// If the operation has not completed it will return an error.
18396func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
18397	var done bool
18398	done, err = future.DoneWithContext(context.Background(), client)
18399	if err != nil {
18400		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
18401		return
18402	}
18403	if !done {
18404		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
18405		return
18406	}
18407	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18408	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
18409		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
18410		if err != nil {
18411			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
18412		}
18413	}
18414	return
18415}
18416
18417// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
18418// long-running operation.
18419type WatchersGetVMSecurityRulesFuture struct {
18420	azure.Future
18421}
18422
18423// Result returns the result of the asynchronous operation.
18424// If the operation has not completed it will return an error.
18425func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
18426	var done bool
18427	done, err = future.DoneWithContext(context.Background(), client)
18428	if err != nil {
18429		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
18430		return
18431	}
18432	if !done {
18433		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
18434		return
18435	}
18436	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18437	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
18438		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
18439		if err != nil {
18440			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
18441		}
18442	}
18443	return
18444}
18445
18446// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
18447// long-running operation.
18448type WatchersListAvailableProvidersFuture struct {
18449	azure.Future
18450}
18451
18452// Result returns the result of the asynchronous operation.
18453// If the operation has not completed it will return an error.
18454func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
18455	var done bool
18456	done, err = future.DoneWithContext(context.Background(), client)
18457	if err != nil {
18458		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
18459		return
18460	}
18461	if !done {
18462		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
18463		return
18464	}
18465	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18466	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
18467		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
18468		if err != nil {
18469			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
18470		}
18471	}
18472	return
18473}
18474
18475// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
18476// long-running operation.
18477type WatchersSetFlowLogConfigurationFuture struct {
18478	azure.Future
18479}
18480
18481// Result returns the result of the asynchronous operation.
18482// If the operation has not completed it will return an error.
18483func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
18484	var done bool
18485	done, err = future.DoneWithContext(context.Background(), client)
18486	if err != nil {
18487		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
18488		return
18489	}
18490	if !done {
18491		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
18492		return
18493	}
18494	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18495	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
18496		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
18497		if err != nil {
18498			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
18499		}
18500	}
18501	return
18502}
18503
18504// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
18505// operation.
18506type WatchersVerifyIPFlowFuture struct {
18507	azure.Future
18508}
18509
18510// Result returns the result of the asynchronous operation.
18511// If the operation has not completed it will return an error.
18512func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
18513	var done bool
18514	done, err = future.DoneWithContext(context.Background(), client)
18515	if err != nil {
18516		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
18517		return
18518	}
18519	if !done {
18520		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
18521		return
18522	}
18523	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18524	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
18525		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
18526		if err != nil {
18527			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
18528		}
18529	}
18530	return
18531}
18532